A client I was working with recently was using two SmartLists, one for Payables Transactions and the other from Purchase Order Transactions, to generate a listing of purchasing transactions. However, they had to do manual fiddling around in Excel to get some of the formatting correct and didn’t have all of the information they wanted. Always up for a challenge, I had a go at producing a view we could plug in using SmartList Designer which would give them the information they wanted in the format the needed.
The below is the SQL view which was produced. It includes the PO and Receipt Numbers as well as the Originating Currency (with symbol) and exchange rate; the Functional Currency was left without a symbol so it can be easily totalled in Excel. Where the transaction does not have an Originating Currency I am outputting the Functional Currency.
/*
Created by Ian Grieve of azurecurve|Ramblings of a Dynamics GP Consultant (https://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).
*/
CREATE VIEW uv_AZRCRV_PurchasingTrxList AS
SELECT
PM.VCHRNMBR AS 'Voucher Number'
,CASE WHEN PM.DOCTYPE = 1 THEN
PM401.PMTRXDSC_1
WHEN PM.DOCTYPE = 2 THEN
PM401.PMTRXDSC_2
WHEN PM.DOCTYPE = 3 THEN
PM401.PMTRXDSC_3
WHEN PM.DOCTYPE = 4 THEN
PM401.PMTRXDSC_4
WHEN PM.DOCTYPE = 5 THEN
PM401.PMTRXDSC_5
WHEN PM.DOCTYPE = 6 THEN
PM401.PMTRXDSC_6
WHEN PM.DOCTYPE = 7 THEN
PM401.PMTRXDSC_7
WHEN PM.DOCTYPE = 8 THEN
PM401.PMTRXDSC_8
ELSE
'Unknown'
END AS 'Document Type'
,PM004.DOCTYPE
,CASE WHEN PM004.DCSTATUS = 1 THEN
'Work'
WHEN PM004.DCSTATUS = 2 THEN
'Open'
WHEN PM004.DCSTATUS = 3 THEN
'History'
ELSE
'Unknown'
END AS 'Document Status'
,PM004.DCSTATUS
,PM.PORDNMBR AS 'PO Number'
,ISNULL(POP303.POPRCTNM,'') AS 'Receipt Number'
,PM.VENDORID AS 'Creditor Name'
,PM002.VENDNAME AS 'Creditor ID'
,CONVERT(VARCHAR,PM.DOCDATE,103) AS 'Document Date'
,CASE WHEN PM.DOCTYPE <= 3 THEN '' ELSE '-' END
+ ISNULL(RTRIM(MC402.CRNCYSYM),RTRIM(MC402F.CRNCYSYM))
+ CAST(CAST(ISNULL(MC.OPURAMT,PM.PRCHAMNT) AS DECIMAL(10,2)) AS VARCHAR) AS 'Originating Purchasing Amount'
,CASE WHEN PM.DOCTYPE <= 3 THEN '' ELSE '-' END
+ ISNULL(RTRIM(MC402.CRNCYSYM),RTRIM(MC402F.CRNCYSYM))
+ CAST(CAST(ISNULL(MC.ORTAXAMT,PM.TAXAMNT) AS DECIMAL(10,2)) AS VARCHAR) AS 'Originating Tax Amount'
,CASE WHEN PM.DOCTYPE <= 3 THEN '' ELSE '-' END
+ ISNULL(RTRIM(MC402.CRNCYSYM),RTRIM(MC402F.CRNCYSYM))
+ CAST(CAST(ISNULL(MC.ORDOCAMT,PM.DOCAMNT) AS DECIMAL(10,2)) AS VARCHAR) AS 'Originating Document Amount'
,CASE WHEN MC.XCHGRATE IS NULL THEN 0 ELSE MC.XCHGRATE END AS 'Exchange Rate'
,CAST(CASE WHEN PM.DOCTYPE <= 3 THEN PM.PRCHAMNT ELSE PM.PRCHAMNT * -1 END AS DECIMAL(10,2)) AS 'Functional Purchasing Amount'
,CAST(CASE WHEN PM.DOCTYPE <= 3 THEN PM.TAXAMNT ELSE PM.TAXAMNT * -1 END AS DECIMAL(10,2)) AS 'Functional Tax Amount'
,CAST(CASE WHEN PM.DOCTYPE <= 3 THEN PM.DOCAMNT ELSE PM.DOCAMNT * -1 END AS DECIMAL(10,2)) AS 'Functional Document Amount'
FROM
(
-- Transaction History
SELECT
VCHRNMBR,DOCTYPE,DOCDATE,PORDNMBR,VENDORID,PRCHAMNT,TAXAMNT,DOCAMNT
FROM
PM30200 WITH (NOLOCK)
UNION ALL
-- Transaction Open
SELECT
VCHRNMBR,DOCTYPE,DOCDATE,PORDNMBR,VENDORID,PRCHAMNT,TAXAMNT,DOCAMNT
FROM
PM20000 WITH (NOLOCK)
UNION ALL
-- Transaction Work
SELECT
VCHRNMBR,DOCTYPE,DOCDATE,PORDNMBR,VENDORID,PRCHAMNT,TAXAMNT,DOCAMNT
FROM
PM10000 WITH (NOLOCK)
UNION ALL
-- Payment Work
SELECT
VCHRNMBR,DOCTYPE,DOCDATE,'',VENDORID,0,0,CHEKTOTL
FROM
PM10300 WITH (NOLOCK)
UNION ALL
-- Manual Payment Work
SELECT
VCHRNMBR,DOCTYPE,DOCDATE,'',VENDORID,0,0,DOCAMNT
FROM
PM10400 WITH (NOLOCK)
) AS PM
INNER JOIN
PM00400 PM004 WITH (NOLOCK)
ON PM004.CNTRLNUM = PM.VCHRNMBR AND PM004.DOCTYPE = PM.DOCTYPE
INNER JOIN
PM00200 AS PM002 WITH (NOLOCK)
ON PM002.VENDORID = PM.VENDORID
LEFT JOIN
MC020103 AS MC WITH (NOLOCK)
ON MC.VCHRNMBR = PM.VCHRNMBR AND MC.DOCTYPE = PM.DOCTYPE
LEFT JOIN
POP30300 AS POP303 WITH (NOLOCK)
ON POP303.VCHRNMBR = PM.VCHRNMBR
LEFT JOIN
DYNAMICS..MC40200 AS MC402 WITH (NOLOCK)
ON MC402.CURRNIDX = MC.CURRNIDX
INNER JOIN
MC40000 AS MC400 WITH (NOLOCK)
ON MC400.FUNLCURR = MC400.FUNLCURR
INNER JOIN
DYNAMICS..MC40200 AS MC402F WITH (NOLOCK)
ON MC402F.CURRNIDX = MC400.FUNCRIDX
INNER JOIN
PM40100 AS PM401 WITH (NOLOCK)
ON PM401.UNIQKEY = PM401.UNIQKEY
ORDER BY PM.DOCDATE
GO
GRANT SELECT ON uv_AZRCRV_PurchasingTrxList TO DYNGRP
GO