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