Feeds:
Posts
Comments

Microsoft recently announced that the Dynamics products service packs will now be supported for 24 months after a new service pack is released. Previously service packs were supported for 12 months after a new service pack release. The new policy with key dates is outlined on Microsoft’s Longer Support Timelines for Key Microsoft Dynamics® Service Packs page.

What this means to Dynamics GP customers is that they now have more time to test new service packs before implementing them, while Microsoft still ‘officially’ supports the service pack they are on. Of course, there may still be many times when the answer to a support issue is, ‘you need to upgrade to the latest service pack’, but ultimately, this is a good thing for customers. Something else I like is that this brings support for the Dynamics family of products in line with support for the rest of Microsoft products. 

One important note is that this has no impact on the overall lifecycle policy for Dynamics products. So no matter when the last service pack for a product comes out, mainstream support for the entire version will end 5 years after the product was released. For more details on support end dates, take a look at my blog post with support end dates for GP 6.0 through 10.0.

I haven’t had much time to blog lately as we have added functionality to our GP Reports Viewer product that allows seamless replacement of SOP reports in Dynamics GP and the amount of interest has been overwhelming. 

However, I just needed to create a new SmartList to show current inventory quantities on hand with their costs and I wanted to share the view I used. Please bear in mind, this was only tested with our data and only FIFO Perpetual inventory items, so this may not work for all situations. And the average unit cost is simply the total cost divided by the quantity on hand.

For other GP SQL views, please take a look at my GP Reports page.

~~~~~

CREATE VIEW view_On_Hand_Inventory
AS

/********************************************************************
view_On_Hand_Inventory
Created on June 18, 2009 by Victoria Yudin - Flexible Solutions, Inc.
For updates see http://victoriayudin.com/gp-reports/
Inventory on hand quantities by site
Only tested with FIFO Perpetual inventory valuation method
I - IV00101 - Item Master
T - IV10200 - Purchase Receipts
Updated on June 24, 2009 to add Item Class
********************************************************************/


SELECT T.ITEMNMBR Item,
       I.ITEMDESC Description,
I.ITMCLSCD Item_Class,
       T.TRXLOCTN Site_ID,
       sum(T.QTYRECVD-T.QTYSOLD) Quantity,
       sum(T.UNITCOST*(T.QTYRECVD-T.QTYSOLD)) Total_Cost,
       sum(T.UNITCOST*(T.QTYRECVD-T.QTYSOLD))
          /sum(T.QTYRECVD-T.QTYSOLD) Avg_Unit_Cost


FROM IV10200 T
INNER JOIN
     IV00101 I
     ON I.ITEMNMBR = T.ITEMNMBR


WHERE T.QTYRECVD <> T.QTYSOLD
GROUP BY T.ITEMNMBR, T.TRXLOCTN, I.ITEMDESC, I.ITMCLSCD


/** the following will grant permissions to this view to DYNGRP,
leave this section off if you do not want to grant permissions **/
GO
GRANT SELECT ON view_On_Hand_Inventory TO DYNGRP

~~~~~

Disclaimer: I tested this on limited data, if you find an issue or have a suggestion for improvement, please let me know and I will post the update here for everyone.

The May 2009 Flexible Solutions GP Reports Newsletter brings us a tip for dynamically changing decimal places in Crystal Reports. This can be really useful for creating Sales Order Processing (SOP) reports for Dynamics GP, where GP stores the number of decimal places for each line item in the SOP10200 and SOP30300 tables.

Here are the steps to have Crystal dynamically determine how many decimal places to use for the quantity fields:

  1. Right click on the report field and choose Formal Field
  2. Go to the Number tab and click Customize
  3. Click on the Formula button next to Decimals:decimals02
  4. Enter the formula that determines how many decimal places to use – the result of the formula will be the number of decimal places the report will use

In the Dynamics GP SOP example, for SOP quantities the formula should be:

{SOP10200.DECPLQTY}-1

If you want do use a formula for the currency amounts, use the following:

{SOP10200.DECPLCUR}-1

And check out the latest demo video for GP Reports Viewer showing how easy it is to replace Dynamics GP’s SOP reports with Crystal Reports!

 

 

Here is a handy list for determining what version and service pack of Crystal Reports you are running:

Crystal Reports

2008

XI R2

XI R1

RTM

12.0.0.549

11.5.0.313

11.0.0.895

SP 0

12.0.0.683

 

 

SP 1

12.1.0.892

11.5.3.417

 

SP 2

 

11.5.8.826

 

SP 3

 

11.5.9.1076

11.0.0.2269

SP 4

 

11.5.10.1263

11.0.0.2495

SP 5

 

11.5.11.1470

 

I think this is the first time I have seen a product with Service Pack 0. :-) For some reason, this is pretty difficult information to find and I cannot seem to locate any information for older versions of Crystal Reports. If anyone would like to share, I will add it to the table.

Here is a script that I have found useful on numerous occasions – it returns the lines items for all SOP (Sales Order Processing) transactions, both posted and unposted. This view will work with either SmartList Builder or Crystal Reports. For more scripts like this, take a look at my GP Reports page.

~~~~~ 

CREATE VIEW view_SOP_Line_Items
AS

/*******************************************************************
view_SOP_Line_Items
Created on May 17, 2009 by Victoria Yudin - Flexible Solutions, Inc.
For updates see http://victoriayudin.com/gp-reports/
All line items for posted and unposted SOP transactions
Returns Functional amounts only
Fields that can have different values on the document header and
	line item are both returned prefaced by 'header' or 'line'
OH - Open Header - SOP10100
OL - Open Line - SOP10200
HH - History Header - SOP30200
HL - History Line - SOP30300
*******************************************************************/

SELECT	OH.SOPNUMBE SOP_Number, OH.SOPTYPE SOP_Type,
	OH.DOCDATE Document_Date, OH.GLPOSTDT GL_Posting_Date,
	OH.ORDRDATE Order_Date, OH.DUEDATE Due_Date,
	OH.MSTRNUMB Master_Number,
	CASE OH.PSTGSTUS
                  WHEN 0 THEN 'Unposted'
                  WHEN 2 THEN 'Posted'
                  ELSE 'Error'
                  END Posting_Status,
	OH.CUSTNMBR Customer_ID, OH.CUSTNAME Customer_Name,
	OH.CSTPONBR Customer_PO, OH.BACHNUMB Batch_Number,
	OH.LOCNCODE Header_Site_ID, OL.LOCNCODE Line_Site_ID,
	CASE OH.VOIDSTTS
                  WHEN 0 THEN 'Not Voided'
                  WHEN 1 THEN 'Voided'
                  ELSE ''
                  END Void_Status,
	OH.SLPRSNID Header_Salesperson, OL.SLPRSNID Line_Salesperson,
	OH.SALSTERR Header_Territory, OL.SALSTERR Line_Territory,
	OH.PYMTRMID Payment_Terms_ID,
	OH.SHIPMTHD Header_Shipping_Method,
	OL.SHIPMTHD Line_Shipping_Method,
	OH.PRBTADCD Bill_To_Address_ID,
	OH.PRSTADCD Header_Ship_To_Address_ID,
	OH.ShipToName Header_Ship_To_Name,
	OH.ADDRESS1 Header_Address_1, OH.ADDRESS2 Header_Address_2,
	OH.ADDRESS3 Header_Address_3, OH.CITY Header_City,
	OH.[STATE] Header_State, OH.ZIPCODE Header_Zip_Code,
	OH.COUNTRY Header_Country,
	OL.PRSTADCD Line_Ship_To_Address_ID,
	OL.ShipToName Line_Ship_To_Name,
	OL.ADDRESS1 Line_Address_1, OL.ADDRESS2 Line_Address_2,
	OL.ADDRESS3 Line_Address_3, OL.CITY Line_City,
	OL.[STATE] Line_State, OL.ZIPCODE Line_Zip_Code,
	OL.COUNTRY Line_Country, OH.DOCAMNT Total_Document_Amount,
	OH.MRKDNAMT Total_Markdown_Amount,
	OH.SUBTOTAL Document_Subtotal, OH.FRTAMNT Freight_Amount,
	OH.MISCAMNT Misc_Amount, OH.TAXAMNT Tax_Amount,
	OH.CURNCYID Currency_ID, OH.ReqShipDate Header_ReqShipDate,
	OL.ReqShipDate Line_ReqShipDate, OH.USER2ENT User_to_Enter,
	OH.COMMNTID Header_Comment_ID,
	OL.COMMNTID Line_Comment_ID,
	OL.LNITMSEQ Line_Item_Sequence,
	OL.CMPNTSEQ Component_Sequence,
	CASE OL.NONINVEN
                  WHEN 0 THEN 'Inventory'
                  WHEN 1 THEN 'Non-Inventory'
                  ELSE ''
                  END Item_Type,
	OL.ITEMNMBR Item_Number, OL.ITEMDESC Item_Description,
	OL.QUANTITY Quantity, OL.UOFM U_of_M,
	OL.QTYBSUOM Qty_in_Base_U_of_M,
	OL.QTYREMAI Qty_Remaining, OL.UNITPRCE Unit_Price,
	OL.XTNDPRCE Extended_Price,
	CASE OL.MRKDNTYP
                  WHEN 0 THEN 'Percentage'
                  WHEN 1 THEN 'Amount'
                  ELSE ''
                  END Markdown_Type,
	OL.MRKDNAMT Markdown_Amount,
	OL.MRKDNPCT/100 Markdown_Percentage,
	OL.TRDISAMT Trade_Discount_Amount,
	OL.UNITCOST Unit_Cost, OL.EXTDCOST Extended_Cost

FROM	SOP10100 OH
	INNER JOIN SOP10200 OL
	ON OH.SOPTYPE = OL.SOPTYPE
	AND OH.SOPNUMBE = OL.SOPNUMBE

UNION ALL

SELECT	HH.SOPNUMBE SOP_Number, HH.SOPTYPE SOP_Type,
	HH.DOCDATE Document_Date, HH.GLPOSTDT GL_Posting_Date,
	HH.ORDRDATE Order_Date, HH.DUEDATE Due_Date,
	HH.MSTRNUMB Master_Number,
	CASE HH.PSTGSTUS
                  WHEN 0 THEN 'Unposted'
                  WHEN 2 THEN 'Posted'
                  ELSE 'Error'
                  END Posting_Status,
	HH.CUSTNMBR Customer_ID, HH.CUSTNAME Customer_Name,
	HH.CSTPONBR Customer_PO, HH.BACHNUMB Batch_Number,
	HH.LOCNCODE Header_Site_ID, HL.LOCNCODE Line_Site_ID,
	CASE HH.VOIDSTTS
                  WHEN 0 THEN 'Not Voided'
                  WHEN 1 THEN 'Voided'
                  ELSE ''
                  END Void_Status,
	HH.SLPRSNID Header_Salesperson, HL.SLPRSNID Line_Salesperson,
	HH.SALSTERR Header_Territory, HL.SALSTERR Line_Territory,
	HH.PYMTRMID Payment_Terms_ID,
	HH.SHIPMTHD Header_Shipping_Method,
	HL.SHIPMTHD Line_Shipping_Method,
	HH.PRBTADCD Bill_To_Address_ID,
	HH.PRSTADCD Header_Ship_To_Address_ID,
	HH.ShipToName Header_Ship_To_Name,
	HH.ADDRESS1 Header_Address_1, HH.ADDRESS2 Header_Address_2,
	HH.ADDRESS3 Header_Address_3, HH.CITY Header_City,
	HH.[STATE] Header_State, HH.ZIPCODE Header_Zip_Code,
	HH.COUNTRY Header_Country,
	HL.PRSTADCD Line_Ship_To_Address_ID,
	HL.ShipToName Line_Ship_To_Name,
	HL.ADDRESS1 Line_Address_1, HL.ADDRESS2 Line_Address_2,
	HL.ADDRESS3 Line_Address_3, HL.CITY Line_City,
	HL.[STATE] Line_State, HL.ZIPCODE Line_Zip_Code,
	HL.COUNTRY Line_Country,
	HH.DOCAMNT Total_Document_Amount,
	HH.MRKDNAMT Total_Markdown_Amount,
	HH.SUBTOTAL Document_Subtotal,
	HH.FRTAMNT Freight_Amount, HH.MISCAMNT Misc_Amount,
	HH.TAXAMNT Tax_Amount, HH.CURNCYID Currency_ID,
	HH.ReqShipDate Header_ReqShipDate,
	HL.ReqShipDate Line_ReqShipDate,
	HH.USER2ENT User_to_Enter,
	HH.COMMNTID Header_Comment_ID,
	HL.COMMNTID Line_Comment_ID,
	HL.LNITMSEQ Line_Item_Sequence,
	HL.CMPNTSEQ Component_Sequence,
	CASE HL.NONINVEN
                  WHEN 0 THEN 'Inventory'
                  WHEN 1 THEN 'Non-Inventory'
                  ELSE ''
                  END Item_Type,
	HL.ITEMNMBR Item_Number, HL.ITEMDESC Item_Description,
	HL.QUANTITY Quantity, HL.UOFM U_of_M,
	HL.QTYBSUOM Qty_in_Base_U_of_M,
	HL.QTYREMAI Qty_Remaining, HL.UNITPRCE Unit_Price,
	HL.XTNDPRCE Extended_Price,
	CASE HL.MRKDNTYP
                  WHEN 0 THEN 'Percentage'
                  WHEN 1 THEN 'Amount'
                  ELSE ''
                  END Markdown_Type,
	HL.MRKDNAMT Markdown_Amount,
	HL.MRKDNPCT/100 Markdown_Percentage,
	HL.TRDISAMT Trade_Discount_Amount,
	HL.UNITCOST Unit_Cost, HL.EXTDCOST Extended_Cost

FROM	SOP30200 HH
	INNER JOIN SOP30300 HL
	ON HH.SOPTYPE = HL.SOPTYPE
	AND HH.SOPNUMBE = HL.SOPNUMBE

/** the following will grant permissions to this view to DYNGRP,
leave this section off if you do not want to grant permissions **/
GO
GRANT SELECT ON view_SOP_Line_Items TO DYNGRP

~~~~~

Disclaimer: I tested this on limited data, if you find an issue or have a suggestion for improvement, please let me know and I will post the update here for everyone.

Older Posts »