Wednesday, January 8, 2014

Form W-2 Common Errors - Codes for Retirement Plans

This information comes straight from our friends at the IRS, it describes common mistakes made on Forms W-2. I have run into many of these as our clients begin to prepare their annual filings.

If you find that you are missing any of these items, be sure to modify the payroll card rather than just editing the W-2. If you need to change the W-2 (and W-3), you can re-create the year-end wage file.

If you have already loaded the 2014 tax tables, change the FICA table to reflect the 2013 amounts before re-creating the files. Change them back when you are done. Listed below are the rates for 2013 and 2014
Code Year Rate Limit
EFICM 2013 1.45% no limit
EFICS 2013 6.2% $113,700
FICAM 2013 1.45% up to $200,000
FICAM 2013 2.35% over $200,000
FICAS 2013 6.2% $113,700
       
EFICM 2014 1.45% no limit
EFICS 2014 6.2% $117,000
FICAM 2014 1.45% up to $200,000
FICAM 2014 2.35% over $200,000
FICAS 2014 6.2% $117,000

Depending on how many you have to change, you could also edit the Year-end wage files.  Those files are:

Physical Name Technical Name
UPR10100

UPR_Year_End_WORK_HDR

UPR10101

UPR_Year_End_WORK_Wage

UPR10103

UPR_Year_End_WORK_Pension

UPR10104

UPR_Year_End_WORK_Special

UPR10105

UPR_Year_End_WORK_State

UPR10106

UPR_Year_End_WORK_Local

UPR10107

UPR_Year_End_WORK_Other

Here are the IRS rules:

You must ensure that the information on Form W-2, Wage and Tax Statement, and Form W-3, Transmittal of Wage & Tax Statements, you issue to your employees contains correct retirement plan information because:

  • employees need accurate information to determine the correct deductions and credits on their tax return, and
  • IRS agents use the information from these forms to determine whether employers are complying with income and employment tax reporting requirements.

Common mistakes
During Form 5500 examinations and EPCU projects, IRS agents found employers using incorrect codes in Box 12 of Form W-2, for example:

  • code D for 401(k) elective deferrals incorrectly included 403(b), 457, or non-qualified amounts.
  • code E for 403(b) contributions but did not have a 403(b) plan.
  • code H to incorrectly report health benefits; code H is for elective deferrals to a 501(c)(18)(D) tax-exempt organization plan. (In fact, a recent Employee Plan Compliance Unit project found that only 6 % of employers who used this code actually contributed to a 501(c)(18) plan.)
  • code S for a SIMPLE 401(k); the correct code for a SIMPLE 401(k) is code D.

Common codes used for Box 12

Letter code:
Used for:
Description:

D
401(k) contributions
Elective deferrals to a 401(k) cash or deferred arrangement, including SIMPLE 401(k)s

E
403(b) contributions
Elective deferrals made under a 403(b) salary reduction agreement

F
408(k)(6) contributions
Elective deferrals made under a SARSEP

G
457(b) contributions
Elective and nonelective deferrals made to a 457(b) deferred compensation plan

H
501(c)(18)(D) contributions
Elective deferrals to a Section 501(c)(18)(D) tax-exempt organization plan (Included in the "Wages, Tips, Comp." amount in Box 1)

S
408(p) SIMPLE contributions
Deferrals made under a SIMPLE IRA plan

AA
Roth contributions
Designated Roth contributions under a 401(k) plan

BB
Roth contributions
Designated Roth contributions under a 403(b) plan

EE
Roth contributions
Designated Roth contributions under a governmental 457(b) plan (a tax-exempt organization’s 457(b) can’t have a designated Roth account)

See the Instructions for Forms W-2 and W-3 for a complete list of codes.

Form W-2, Box 13
The “Retirement plan” indicator in Box 13 shows whether an employee is an active participant in your company’s plan. If this box is checked, it lets the recipient know that depending on their filing status and modified adjusted gross income, they may not be entitled to a full deduction for their traditional IRA contributions. You should check the retirement plan box if an employee was an “active participant” for any part of the year in:

  • a qualified pension, profit-sharing, or stock-bonus plan under Internal Revenue Code Section 401(a) (including a 401(k) plan).
  • an annuity plan under IRC Section 403(a).
  • an annuity contract or custodial account under IRC Section 403(b).
  • a simplified employee pension (SEP) under IRC Section 408(k).
  • a SIMPLE retirement account under IRC Section 408(p).
  • a trust described in IRC Section 501(c)(18).
  • a plan for federal, state, or local government employees or by an agency or instrumentality thereof (other than a 457(b) plan).

Active participant
Generally, an employee is an active participant if covered by a:

  • defined contribution plan (for example, a 401(k) plan) for any tax year and is credited with any contributions or forfeitures, or
  • defined benefit plan for any tax year that the employee is eligible to participate.

Don’t check the retirement plan box if your company only has non-qualified or 457(b) plans.

Form W-3, Box b
Form W-3, Box b has checkboxes to specify the type of employer filing the form. You should check the appropriate box if you are a:

  • non-governmental tax-exempt 501(c) organization;
  • state or local government or instrumentality;
  • state or local government or instrumentality and have received a determination letter from the IRS indicating that you are also a 501(c)(3) tax-exempt organization; or
  • federal government entity or instrumentality.

Otherwise, you should check the “None apply” box. Only check one box.

Page Last Reviewed or Updated: 22-Nov-2013

Until next post!

Leslie Vail

Thursday, December 19, 2013

When things go wrong - 'Object reference not set to an instance of an object'

This must be one of my most hated error messages. Usually, I see it in Integration Manager, but this time it has shown up in Management Reporter.

Jake Friedl recently  posted a list of things to check when you receive this error. Thank you Jake! This is a great list:

  1. Check for missing ISO codes.
  2. Start GP and log into any company as 'sa'.
  3. Go to Microsoft Dynamics GP -> Tools -> Setup -> System -> Currency.
  4. You will need to select every single currency from the Currency ID lookup.
  5. Once selected, confirm a code is entered in the ISO Code field.
  6. Check for missing functional currencies.
  7. You will need to log into every single company in GP to check the following.
  8. Go to Microsoft Dynamics GP -> Tools -> Setup -> Financial -> Multicurrency.
  9. Confirm a currency is selected in the Functional Currency field.
  10. Check for a blank Budget ID.
  11. Start SQL Management Studio and log in as a SQL sysadmin.
  12. Run the following query against each GP company database: select * from gl00200
  13. If you find a blank value in the BUDGETID column, back up the GP database and clear the value with: delete gl00200 where BUDGETID= ''
  14. After going through the above, you will need to re-create the data mart integration if you are using the data mart provider:
  15. Close all instances of MR and back up the MR database.
  16. Start the Configuration Console and click on the integration under ERP Integrations.
  17. Click the Disable Integration button and wait a moment for that to take effect.
  18. Click the Remove link in the top-right.
  19. Stop the MR services at the top level of the Configuration Console and then delete the DDM database from SQL.
  20. In the Configuration Console, start the MR services and then click File -> Configure and deploy a new DDM integration.
  21. Enable the integration and wait for the initial load to complete.

Until next post!

Leslie

Thursday, October 3, 2013

Dexterity training in Dallas – Live or Live on-line

It must be in the air! Come to Dallas, or join us On-Line.
I’m doing another Dexterity Fundamentals class in Dallas, TX, December 9th-13th, 2013. This time we are offering it both on-site in Dallas and Live on-line!

At last, you can go to a fun-filled Dexterity training class without leaving the comfort of your own home or office!man with head set

For more information, or to sign up, call
ConexusSG at 469-828-3274 or email training@ConexusSG.com

What will you Learn?

The Dexterity Fundamentals class teaches you everything you need to know to get started developing integrating applications.  During this class, you will learn the Dexterity components and Dynamics GP programming standards. You will complete many hands-on projects including the following:

 

·         How to set up the development environment

·         Create a Maintenance and Lookup window adhering to the Dynamics GP user interface guidelines

·         Create an Item Entry and Item lookup window using techniques that can fast-track your development

·         Use integrated Debugging tools to resolve errors

·         Learn about multiuser processing and how optimistic locking works

·         Create an integrating application that interacts with existing Dynamics GP components

·         Create record notes, browse buttons, shrink/expand buttons, zooms and expansion buttons

·         Create menus to navigate to your application

·         Create and launch reports using Report Writer

·         Work with multiple tables, set ranges and create virtual keys

·         Add items ‘On the Fly’ and create ‘Find’ buttons

·         Call existing Dynamics GP functions

·         Modify a Dynamics GP window thereby creating an Alternate window

·         Use object triggers and techniques for cross-dictionary integration

·         Create SQL tables from Dexterity

·         Package your application and create a .cnk file

·         Learn how to update your application to a new release.

·         Other topics and procedures

How should You prepare?

Review the Quick Start manual that is included in the Dexterity documentation. You can access this manual from the Help menu of Dexterity: Help | Online Manuals | Quick Start

SNAGHTML454f195

Alternatively, after you install Dexterity, look for the QStart.pdf file in the following folder:

. . .\Microsoft Dexterity\Dex 12.0\Manuals

What do you need?

Each student must provide their own computer with the following software installed:

  • Dynamics GP 2013
  • Dexterity 2013
  • Dynamics GP 2013 SDK  - located on the GP 2013 DVD: \Tools\SDK\Dynamics GP\SDK.exe

Until next post!

Leslie


Tuesday, September 24, 2013

SQL datetime formatting function–convert to string

Illustration-Of-A-3d-Ivory-White-Man-Construction-Worker-Carrying-A-Wrench
I found this looking for something else on the Internet, but I thought it would be a great item for your toolbox. The function was originally written for 2005, but it has worked on everything I’ve tried.
Enjoy!
Many thanks to Anubhav Goyal , who provided this information to the SQL community on June 11, 2009  - You rock Anubhav! http://anubhavg.wordpress.com/2009/06/11/how-to-format-datetime-date-in-sql-server-2005/
/*-------------------------------------------------------------------------------------------*/
--SQL Server date formatting function --convert datetime to string
/*--------------------------------------------------------------------------------------------*/

--SQL datetime functions
--SQL Server date formats
--T-SQL convert dates
--Formatting dates sql server

CREATE FUNCTION dbo.fnFormatDate (@Datetime DATETIME, @FormatMask VARCHAR(32))
RETURNS VARCHAR(32)
AS
BEGIN
    DECLARE @StringDate VARCHAR(32)
    SET @StringDate = @FormatMask
    IF (CHARINDEX ('YYYY',@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, 'YYYY',
                         DATENAME(YY, @Datetime))
    IF (CHARINDEX ('YY',@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, 'YY',
                         RIGHT(DATENAME(YY, @Datetime),2))
    IF (CHARINDEX ('Month',@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, 'Month',
                         DATENAME(MM, @Datetime))
    IF (CHARINDEX ('MON',@StringDate COLLATE SQL_Latin1_General_CP1_CS_AS)>0)
       SET @StringDate = REPLACE(@StringDate, 'MON',
                         LEFT(UPPER(DATENAME(MM, @Datetime)),3))
    IF (CHARINDEX ('Mon',@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, 'Mon',
                                     LEFT(DATENAME(MM, @Datetime),3))
    IF (CHARINDEX ('MM',@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, 'MM',
                  RIGHT('0'+CONVERT(VARCHAR,DATEPART(MM, @Datetime)),2))
    IF (CHARINDEX ('M',@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, 'M',
                         CONVERT(VARCHAR,DATEPART(MM, @Datetime)))
    IF (CHARINDEX ('DD',@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, 'DD',
                         RIGHT('0'+DATENAME(DD, @Datetime),2))
    IF (CHARINDEX ('D',@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, 'D',
                                     DATENAME(DD, @Datetime))  
RETURN @StringDate
END
GO

--Microsoft SQL Server date format function test
--MSSQL formatting dates

SELECT dbo.fnFormatDate (getdate(), 'MM/DD/YYYY')           --01/03/2012
SELECT dbo.fnFormatDate (getdate(), 'DD/MM/YYYY')           --03/01/2012
SELECT dbo.fnFormatDate (getdate(), 'M/DD/YYYY')            --1/03/2012
SELECT dbo.fnFormatDate (getdate(), 'M/D/YYYY')             --1/3/2012
SELECT dbo.fnFormatDate (getdate(), 'M/D/YY')               --1/3/12
SELECT dbo.fnFormatDate (getdate(), 'MM/DD/YY')             --01/03/12
SELECT dbo.fnFormatDate (getdate(), 'MON DD, YYYY')         --JAN 03, 2012
SELECT dbo.fnFormatDate (getdate(), 'Mon DD, YYYY')         --Jan 03, 2012
SELECT dbo.fnFormatDate (getdate(), 'Month DD, YYYY')       --January 03, 2012
SELECT dbo.fnFormatDate (getdate(), 'YYYY/MM/DD')           --2012/01/03
SELECT dbo.fnFormatDate (getdate(), 'YYYYMMDD')             --20120103
SELECT dbo.fnFormatDate (getdate(), 'YYYY-MM-DD')           --2012-01-03

--CURRENT_TIMESTAMP returns current system date and time in standard internal format
SELECT dbo.fnFormatDate (CURRENT_TIMESTAMP,'YY.MM.DD')      --12.01.03
GO

Saturday, September 21, 2013

Linking a Sales Tax Detail to a Vendor

Follow this method and you can create PM Transactions to the taxing authorities to remit sales tax, no re-keying required.

Recently I responded to a post on the GP Community Forum from a user wanting to tie a vendor to the sales tax details so that he could automatically create a payables document similar to what is done when you pay something with a credit card.

I thought that was a really good idea and set out to find a way to do it. You need Integration Manager to accomplish it, but it’s easy to set up.

Prerequisites:

Tax Details

You must assign a general ledger account to each Tax Detail you use to calculate tax. The GL account must be unique per tax authority payee.  For example, if I pay the city of Dallas for one tax detail, and pay the county tax assessor for another, you must have two different accounts. This is needed because you are going to assign a vendor to the GL account assigned to the Tax Detail. Each account will represent a single tax collector.

You do not need a unique account for each Tax Detail, just a unique account for each vendor.

Account Maintenance

For each liability account to a Tax Detail, record the Vendor ID in one of the User Defined fields on the Account Maintenance window. I used UserDefined1 in my example.

The Join

You are going to create a SQL statement that matches the account on the Tax Details card with the Account on the Account Maintenance screen. You are also going to match UserDefined1 with the Vendor Master. This will marry a vendor to each tax detail. Now, include whatever tables are needed to retrieve the sales tax amount in whatever period you are working with and use the Integration Manager (or eConnect, etc) to create a payables transaction for the resulting amount.

I used the SQL statement below to retrieve the sales tax detail amount on historical SOP Invoices. I hard coded the date range to select documents with an invoice date between the first day of the previous month and the last day of the previous month, you wouldn’t want to do that. I just put it in here to show how it is done. Voided documents were excluded:

/* This query returns the sales tax amount on historical SOP Invoices with an invoice
   date between the first day of the previous month and the last date of the
   previous month. Voided documents are excluded.
  
   It uses the following tables:
  
   SOP30200    Sales Transaction History
   SOP10105    Sales Taxes Work and History
   GL00100    Account Master
   GL00105    Account Index Master
   PM00200    Vendor Master
   TX00201    Sales/Purchases Tax Master  
*/

SELECT    
  CASE SOP30200.SOPTYPE
     WHEN 1 THEN 'Quote'
     WHEN 2 THEN 'Order'
     WHEN 3 THEN 'Fulfillment Order'
     WHEN 4 THEN 'Invoice'
     WHEN 5 THEN 'Return'
  END AS Doc_Type
, SOP10105.SOPNUMBE AS SOP_Number
, SOP30200.DOCDATE AS Invoice_Date
, SOP30200.CUSTNMBR AS Customer_ID
, SOP30200.CUSTNAME AS Customer_Name
, GL00100.USERDEF1 AS User_Defined1
, PM00200.VENDNAME AS Vendor_Name
, GL00105.ACTNUMST AS GL_Account_Number
, SOP10105.TAXDTLID AS Tax_Detail_ID
, SOP10105.STAXAMNT AS Sales_Tax_Amt
, SOP10105.FRTTXAMT AS Tax_on_Freight
, SOP10105.MSCTXAMT AS Tax_on_Misc
, DATEADD (m,-1, DATEADD(d,1-DATEPART(d,GETDATE()),GETDATE())) as FirstDayPrevMo
, DATEADD (d,-DATEPART(d,GETDATE()),GETDATE()) as LastDayPrevMo

FROM

SOP10105 INNER JOIN
        SOP30200 ON SOP10105.SOPTYPE = SOP30200.SOPTYPE
    AND SOP10105.SOPNUMBE = SOP30200.SOPNUMBE
      INNER JOIN GL00100 ON SOP10105.ACTINDX = GL00100.ACTINDX INNER JOIN
                     TX00201 ON SOP10105.TAXDTLID = TX00201.TAXDTLID INNER JOIN
                     PM00200 ON GL00100.USERDEF1 = PM00200.VENDORID INNER JOIN
                     GL00105 ON GL00100.ACTINDX = GL00105.ACTINDX
WHERE    

(SOP30200.SOPTYPE in (3,4)) and  VOIDSTTS = 0 
GO
 
Until next post!

Leslie