SQL Scripts for Microsoft Dynamics GP: Insert Extended Pricing Price Sheet UofM Work

Microsoft Dynamics GPThis script is part of the SQL Scripts for Microsoft Dynamics GP where I will be posted the scripts I wrote against Microsoft Dynamics GP over the 19 years before I stopped working with Dynamics GP.

This script inserts data into the Extended Pricing Price Sheet UofM Work (IV10402) table and does verification for errors before inserting the data.

/*
Created by Ian Grieve of azurecurve | Ramblings of an IT Professional (http://www.azurecurve.co.uk) This code is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0 Int). */
/* Created by Ian Grieve of ISC Software (https://www.isc-software.com/). */ /* CREATE TEMP ERROR TABLE */ CREATE TABLE #Errors ( Error VARCHAR(1000) ,ROW_ID INT IDENTITY ) GO /* CREATE TEMP TABLE FOR IV10401 DATA */ CREATE TABLE #IV10401_IMPORT ( PRCSHID char(15) ,SEQNUMBR int ,EPITMTYP char(1) ,ITEMNMBR char(31) ,BRKPTPRC tinyint ,ACTIVE tinyint ,BASEUOFM char(9) ,PRODTCOD char(1) ,PROMOTYP smallint ,PROMOLVL smallint ) GO /* BULK INSERT */ BULK INSERT #IV10401_IMPORT FROM 'c:\temp\IV10401.txt' WITH (FIELDTERMINATOR = '\t' ,ROWTERMINATOR = '\n' ,FIRSTROW = 2 ) GO /* VALIDATE DATA */ --validate price sheet header INSERT INTO #Errors (Error) --VALUES ( SELECT 'Price Sheet does not exist: ' + CAST(['Import'].PRCSHID AS VARCHAR(100)) FROM #IV10401_IMPORT AS ['Import'] LEFT JOIN SOP10110 AS ['Extended Pricing Price Sheet Header'] --Extended Pricing Price Sheet Header (SOP10110) ON ['Extended Pricing Price Sheet Header'].PRCSHID = ['Import'].PRCSHID WHERE ['Extended Pricing Price Sheet Header'].PRCSHID IS NULL ) GO --validate price sheet rows INSERT INTO #Errors (Error) --VALUES ( SELECT 'Item ' + CAST(['Import'].ITEMNMBR AS VARCHAR(100)) + ' already exists on the price sheet: ' + CAST(['Import'].PRCSHID AS VARCHAR(100)) FROM #IV10401_IMPORT AS ['Import'] LEFT JOIN IV10401 AS ['Extended Pricing Price Sheet Work'] --Extended Pricing Price Sheet Work (IV10401) ON ['Extended Pricing Price Sheet Work'].PRCSHID = ['Import'].PRCSHID AND ['Extended Pricing Price Sheet Work'].ITEMNMBR = ['Import'].ITEMNMBR WHERE ['Extended Pricing Price Sheet Work'].ITEMNMBR IS NOT NULL ) GO --validate items INSERT INTO #Errors (Error) --VALUES ( SELECT 'Item does not exist: ' + CAST(['Import'].ITEMNMBR AS VARCHAR(100)) FROM #IV10401_IMPORT AS ['Import'] LEFT JOIN IV00101 AS ['Item Master'] --Item Master (IV00101) ON ['Item Master'].ITEMNMBR = ['Import'].ITEMNMBR WHERE ['Item Master'].ITEMNMBR IS NULL ) GO -- validate unit of measure INSERT INTO #Errors (Error) --VALUES ( SELECT 'Unit of Measure does not exist: ' + CAST(['Import'].BASEUOFM AS VARCHAR(100)) FROM #IV10401_IMPORT AS ['Import'] LEFT JOIN IV40202 AS ['Inventory U of M Schedule Detail Setup'] --Inventory U of M Schedule Detail Setup (IV40202) ON ['Inventory U of M Schedule Detail Setup'].UOFM = ['Import'].BASEUOFM WHERE ['Inventory U of M Schedule Detail Setup'].UOFM IS NULL ) GO /* INSERT NEW DATA IF NO ERRORS */ --insert price sheet header IF (SELECT COUNT(*) FROM #Errors) = 0 -- Insert if no Email Details INSERT INTO IV10401 --Extended Pricing Price Sheet Work (IV10401) ( PRCSHID ,SEQNUMBR ,EPITMTYP ,ITEMNMBR ,BRKPTPRC ,ACTIVE ,BASEUOFM ,PRODTCOD ,PROMOTYP ,PROMOLVL ) --VALUES ( SELECT DISTINCT PRCSHID ,SEQNUMBR ,EPITMTYP ,ITEMNMBR ,BRKPTPRC ,ACTIVE ,BASEUOFM ,PRODTCOD ,PROMOTYP ,PROMOLVL FROM #IV10401_IMPORT AS ['Import'] WHERE ( SELECT COUNT(['Extended Pricing Price Sheet Header'].PRCSHID) FROM IV10401 AS ['Extended Pricing Price Sheet Header'] --Extended Pricing Price Sheet Work (IV10401) WHERE ['Extended Pricing Price Sheet Header'].PRCSHID = ['Import'].PRCSHID AND ['Extended Pricing Price Sheet Header'].ITEMNMBR = ['Import'].ITEMNMBR ) = 0 ) GO /* OUTPUT ERRORS */ IF (SELECT COUNT(*) FROM #Errors) > 0 SELECT Error FROM #Errors ORDER BY ROW_ID GO /* DROP TEMP TABLES */ DROP TABLE #IV10401_IMPORT GO DROP TABLE #Errors GO

Click to show/hide the SQL Scripts for Microsoft Dynamics GP Series Index

Excel Snippets: Get First and Last Dates of UK Tax Year

Microsoft ExcelIt doesn’t come up very often as I do a lot of work using SQL Server rather than Microsoft Excel, but every so often I do need to do some date manipulation in Excel.

In the previous article of the Excel Snippets series, I showed how to get the first and last dates of the calendar year. One of the peculiarities of the UK, is that our tax year always starts on the 6th of April.

The formula to accurately get the start of the tax year is more involved than getting the sart of a calendar year, but we can break it down to make it easier to understand.

To start with we get the year of the supplied date using the YEAR function:

=YEAR( TODAY() )

Then we check if the supplied date is before the 5th April of that year:

=TODAY() <= DATE( YEAR( TODAY() ), 4, 5 )

The date function is supplied three parameters: year, month and day, which in the above example is the output of the YEAR function, 4 and 5 for the 5th April.

This will return TRUE if it is and FALSE if it isn’t, which will effectively return 1 or 0; in the formula we subtract this from the result of the YEAR function which will give us the correct year:

=YEAR( TODAY() ) - ( TODAY() <= DATE( YEAR( TODAY() ), 4, 5 ) )

We can then wrap this in another DATE function which supplies 4 and 6 for the month and day to output the first day of the tax year:

=DATE( YEAR( TODAY() ) - ( TODAY() <= DATE( YEAR( TODAY() ), 4, 5 ) ), 4, 6 )

To get the last day of the UK tax year, we just need to copy the above formula, add a +1 to the output of the first YEAR function and change the day parameter in the outer most DATE function to 5[/:

=DATE( YEAR( TODAY() ) + 1 - ( TODAY() <= DATE( YEAR( TODAY() ), 4, 5 ) ), 4, 5 )

Updated 13/06/2023: After my error was pointed out, I’ve done some investigating and updated the post above; the formula here now is one posted by Brad Scott in response to a question on a Microsoft Community question.