Page 1 of 212

Archive for the ‘Sales Order Processing’ Category

Price Level Defaulting in SOP Entry

Recently, I was handling a support case, where the user raised an issue in the way the Price Level was defaulting in the Sales Transaction Entry window line. The issue is explained below.

I have a client whose standard pricing doesn’t seem to be working as expected, or at least as I thought it should.  They have price levels setup for their items, and they also have price levels setup for their customers.  Some customers get a special discount, and those are the ones who have price levels setup on the customer card.

So, an example would be item #1234 has several price levels, but a default price level = LEVEL 59
In addition, customer #ABCD has a Price Level assigned to their customer card of LEVEL 63

We expect the invoices (which are manually entered as Orders, then transferred to Invoice) to pull a price level of LEVEL 63.  When we manually create the order for Customer ABCD, the blank item line does default to LEVEL 63, but as soon as we type the item code #1234 in, the price level changes to LEVEL 59.

I tested this with a couple of items in the sample company, and I was not able to replicate it. So I decided to have a remote session with the user to understand what the issue was. Once I logged into the environment, I tested and noticed it happened as the user had mentioned. I disabled any customizations and still noted it happening. I then logged into the sample company on their environment to see if I was able to replicate it. However, the issue did not occur in the sample company.

image

Realizing it was either a configuration issue (or) a data issue, I started analyzing this further. Then when I opened the Price List Maintenance for the specific item, I noticed that the Price Level which was defined for the Customer (LEVEL 63) does not exist for the specific item. And the item had a default price level defined as LEVEL 59.

So what was happening on the Sales Transaction Entry line is this:

When the sales transaction is entered, the system checks if there is a price level defined at the customer level. If there is one, it defaults the price level defined in the customer master at the line item level. If there is no price level defined for the customer, the system defaults the line item price level defined from the Receivables Setup. If there is no price level defined in the Receivable Setup, the system leaves the line item price level as blank. When the item number is entered, and if the price list has been defined for the defaulted price level, the unit price is picked up from the price list. If there is no price list defined for the item for the defaulted price list, the system changes the price level on the sales transaction line to the default price level define for the item in the Price List Maintenance.

Hope this helps the community…

Until next post!

November 20, 2011 · veeyeskay · 3 Comments
Tags: , , , , , , , , , , , ,  · Posted in: Dynamics, Great Plains, Inventory, Sales Order Processing Total Views: 1,877

Add Item option in POP and SOP

There are many little options in Dynamics GP which goes unnoticed most of the time.

One such option is the Add Item option which is available under Options menu in the Sales Transaction Entry window.

image     image

So when the user enters a line item number which does not exist in the system, if this option is unchecked, the application considers it as a non-inventory item and allows the user to enter a non-inventory item. If this option is checked, the system will prompt the user to add the item to inventory before allowing the user to use the item number on the sales transaction line.

In the Sales Order Processing Setup Options, there is an option available to prevent the user from entering a non-inventoried item on a sales transaction.

If this option is checked, the Add Item menu is unchecked by default when the Sales Transaction Entry window is opened (which allows the user to enter non-inventory items). The user can check this option if he does not want to enter a non-inventory item by mistake for a specific transaction. If this option is unchecked in the Sales Order Processing Setup options, the Add Item menu is automatically checked by default when the Sales Transaction Entry window is opened and the user is not allowed to uncheck this option with the following warning message.

image

However, in the Purchase Order Processing module, there is no such setup option to prevent entering a non-inventory item in a purchase order (or) a receiving transaction. There have been issues reported by many of our clients in the past where they have posted a receiving entry and the stock has not been updated properly. Most of the situation is because they have entered the Item Number or Vendor Item Number incorrectly and the POP module automatically assumes it as a non-inventory item and processes the same without any warnings. This happens primarily because the Add Item option is not checked by default in the POP and SOP windows.

For such situations, there is also a Professional Services Tool called Default AddItem POP/SOP, which prevents the user to enter a non inventory item neither in the SOP module nor the POP module.

image

This option automatically checks the Add Item option in the POP and SOP windows, so that such issues of an invalid non-inventory item can be prevented from being entered in the transaction entry windows in POP and SOP.

Hope this helps the community…

Until next post!

September 28, 2011 · veeyeskay · 3 Comments
Tags: , , ,  · Posted in: Dynamics, Great Plains, Professional Services Tools, Purchase Order Processing, Sales Order Processing Total Views: 3,020

Selling Options in Item Price List Maintenance

I was recently assisting a customer who was getting the following error when trying to enter a quantity in the Sales Transaction Entry window for a specific item.

image

This message is because of an Selling Option setup which is defined for the specific item and unit of measurement in the Item Price List Maintenance window.

This is yet another option in GP, which goes unnoticed by many people. When you are on the Price List Maintenance window, you can click on the Options button to open the Item Price List Options Maintenance window.

image

In the options window, we can define the selling option for the various price list records defined for the specific item.

image

There are 3 options available for this.

  • Not Available – This indicates that the specific combination of Item, Price Level, Currency and U Of M cannot be entered in the Sales Transaction Entry.
  • Whole – This indicates that the quantity for the specific combination of Item, Price Level, Currency and U Of M can ONLY be entered in whole numbers (without decimal values) in the Sales Transaction Entry.
  • Whole and Fractional – This indicates that the quantity for the specific combination of Item, Price Level, Currency and U Of M can ONLY be entered in whole numbers and fractions in the Sales Transaction Entry.

In this case, the client had an item number defined with 2 decimal places, but had the Selling option for the specific combination as Whole, because of which the system did not allow the fractional quantity entered in the sales transaction.

With this said, there are a few more options on this window, which I would prefer to explain, so that it might benefit the community.

As you can see there are 3 more fields which are listed below.

  • Round Policy – This is used to define the direction of the rounding – whether Up, Down, Nearest or None.
  • Round Option – This defines the option of how the rounding value – whether it Ends in a specific number (or) if it rounds to the nearest multiple of the round amount specified.
  • Round Amount – This defines the number that will be used to determine the last number in the price.

These options are not available for an Item which has the Price Method as Currency Amount in the Price List Maintenance. There are enabled only if the Price Method is any of the ones mentioned below.

  • % of List Price
  • % Markup – Current Cost
  • % Markup – Standard Cost
  • % Margin – Current Cost
  • % Margin – Standard Cost

The round options are used to determine the price for an item when creating the price list record for the item as explained above.

Hope this helps the community…

Until next post!

August 12, 2011 · veeyeskay · 2 Comments
Tags: , , , , , , , ,  · Posted in: Dynamics, Great Plains, Inventory, Sales Order Processing Total Views: 2,065

Support Debugging Tool Customization #5 – Unapplied Credit on SOP Blank Invoice

Another request that came in on the support forum was to add the posted and unapplied credits for a customer on the SOP Blank Invoice for reference purposes. I have decided to post a customization code using Support Debugging Tool to achieve the same so that it will benefit the community.

Version Information

Dynamics GP : 11.0.1752 (SP2)

Support Debugging Tool : 11.00.0015

Screenshots of the Configuration

Create a Runtime Execute script block with the code given below with the script ID as UACREDITONINV.

image

local currency MBS_TableHeaderCurrency;
local string MBS_CustomerNumber;
local integer MBS_Type;
local integer MBS_Control;
local string MBS_String;
 
local integer l_VKey;
 
call with name "MBS_Param_Get" in dictionary 5261, "Number", MBS_CustomerNumber;
call with name "MBS_Param_Get" in dictionary 5261, "Type", MBS_String;
MBS_Type = integer(value(MBS_String));
call with name "MBS_Param_Get" in dictionary 5261, "Control", MBS_String;
MBS_Control = integer(value(MBS_String));
MBS_TableHeaderCurrency = 0.0000;
 
{ Add your code below here }
assign l_VKey as key
	for table RM_OPEN with KEY_OPTION_ALLOW_DUPLICATES
	using 'Customer Number' of table RM_OPEN, 'RM Document Type-All' of table RM_OPEN;
range clear table RM_OPEN;
set 'Customer Number' of table RM_OPEN to MBS_CustomerNumber;
set 'RM Document Type-All' of table RM_OPEN to 7;
range start table RM_OPEN by number l_VKey;
set 'Customer Number' of table RM_OPEN to MBS_CustomerNumber;
set 'RM Document Type-All' of table RM_OPEN to 9;
range end table RM_OPEN by number l_VKey;
clear table RM_OPEN;
set 'Current Trx Amount' of table RM_OPEN to 1;
sum range table RM_OPEN;
{ Add your code above here }
 
set MBS_TableHeaderCurrency to 'Current Trx Amount' of table RM_OPEN;

call with name "MBS_Param_Set" in dictionary 5261,
	"TableHeaderCurrency", str(MBS_TableHeaderCurrency);

Then create a calculated for the Unapplied Credit which calls the custom Report Writer function for which we have created the script block above.

Calculated Field Name : Unapplied Credit

Result Type : Currency

Expression Type : Calculated

2011-08-09_142801

The formula for this calculated field is as shown below.

FUNCTION_SCRIPT(  rw_TableHeaderCurrency  5261  “UACREDITONINV”  SOP_LINE_WORK.Customer Number  0  1  )

Once the calculated field is created, we can add it in the appropriate line item space in the SOP Blank Invoice report to get the desired results.

2011-08-09_142631

You can download the configuration xml file here.

Reference

Take a look at the article below which summarizes the usage of Support Debugging Tool with some real life examples. Great compilation by David! http://blogs.msdn.com/b/developingfordynamicsgp/archive/2011/08/05/using-the-support-debugging-tool-with-real-life-examples.aspx

Hope this helps the community…

Until next post!

August 9, 2011 · veeyeskay · 2 Comments
Posted in: Customizations, Dynamics, Great Plains, Sales Order Processing, Support Debugging Tool Total Views: 1,300

Support Debugging Tool Customization #4 – U Of M Long Description on SOP Invoice

A recent support request was to add the U Of M Long Description on the SOP Blank Invoice Report. The situation explained was that the U Of M was just an abbreviation and the client was using the U Of M long Description to capture a meaningful description in the Unit Of Measure Schedule Setup window as shown below.

image

I have decided to post a customization code using Support Debugging Tool to achieve the same so that it will benefit the community.

Version Information

Dynamics GP : 11.0.1752 (SP2)

Support Debugging Tool : 11.00.0015

Screenshots of the Configuration

Create a Runtime Execute script block with the code given below with the script ID as UOMLONGDESC.

image

local string MBS_TableLineString;
local string MBS_Number;
local integer MBS_Type;
local currency MBS_SequenceOne;
local currency MBS_SequenceTwo;
local integer MBS_Control;
local string MBS_String;
 
local 'Item Number' l_ItemNumber;
local 'U Of M Schedule' l_UoMSchedule;
local 'U Of M' l_UoM;
local 'QTY In Base U Of M' l_QtyInBaseUoM;

local integer l_VirtualKey;
 
{Turn off the warning for literal strings}
pragma(disable warning LiteralStringUsed);
 
call with name "MBS_Param_Get" in dictionary 5261, "Number", MBS_Number;
call with name "MBS_Param_Get" in dictionary 5261, "Type", MBS_String;
set MBS_Type to integer(value(MBS_String));
call with name "MBS_Param_Get" in dictionary 5261, "SequenceOne", MBS_String;
set MBS_SequenceOne to currency(value(MBS_String));
call with name "MBS_Param_Get" in dictionary 5261, "SequenceTwo", MBS_String;
set MBS_SequenceTwo to currency(value(MBS_String));
call with name "MBS_Param_Get" in dictionary 5261, "Control", MBS_String;
set MBS_Control to integer(value(MBS_String));
set MBS_TableLineString to "";
 
{ Add your code below here }
release table SOP_LINE_WORK;
clear table SOP_LINE_WORK;
set 'SOP Number' of table SOP_LINE_WORK to MBS_Number;
set 'SOP Type' of table SOP_LINE_WORK to MBS_Type;
set 'Component Sequence' of table SOP_LINE_WORK to MBS_SequenceTwo;
set 'Line Item Sequence' of table SOP_LINE_WORK to MBS_SequenceOne;
get table SOP_LINE_WORK by number 1;
if err() = OKAY then
	set l_ItemNumber to 'Item Number' of table SOP_LINE_WORK;
	set l_UoM to 'U Of M' of table SOP_LINE_WORK;
	set l_QtyInBaseUoM to 'QTY In Base U Of M' of table SOP_LINE_WORK;
	release table IV_Item_MSTR;
	clear table IV_Item_MSTR;
	set 'Item Number' of table IV_Item_MSTR to l_ItemNumber;
	get table IV_Item_MSTR by number 1;
	if err() = OKAY then
		set l_UoMSchedule to 'U Of M Schedule' of table IV_Item_MSTR;
		assign l_VirtualKey as key for table IV_UofM_SETP_DTL with KEY_OPTION_ALLOW_DUPLICATES using 'U Of M Schedule' of table IV_UofM_SETP_DTL,
			'U Of M' of table IV_UofM_SETP_DTL, 'QTY In Base U Of M' of table IV_UofM_SETP_DTL;
		release table IV_UofM_SETP_DTL;
		clear table IV_UofM_SETP_DTL;
		set 'U Of M Schedule' of table IV_UofM_SETP_DTL to l_UoMSchedule;
		set 'U Of M' of table IV_UofM_SETP_DTL to l_UoM;
		set 'QTY In Base U Of M' of table IV_UofM_SETP_DTL to l_QtyInBaseUoM;
		get table IV_UofM_SETP_DTL by number l_VirtualKey;
		if err() = OKAY then
			set MBS_TableLineString to 'U Of M Long Description' of table IV_UofM_SETP_DTL;
		end if;
	end if;
end if;
{ Add your code above here }
 
call with name "MBS_Param_Set" in dictionary 5261, "TableLineString", MBS_TableLineString;
 
{Turn off the warning for literal strings}
pragma(enable warning LiteralStringUsed);

Then modify the SOP Blank Invoice Report and create the following Calculated Fields.

Calculated Field Name : Component Sequence

2011-08-07_222021

Calculated Field Name : Line Item Sequence

2011-08-07_222035

And then finally create a calculated for the U Of M Long Description which calls the custom Report Writer function for which we have created the script block above.

Calculated Field Name : U Of M Long Description

2011-08-07_222111

The formula for this calculated field is as shown below.

FUNCTION_SCRIPT(  rw_TableLineString  5261  “UOMLONGDESC”  SOP_LINE_WORK.SOP Number  SOP_LINE_WORK.SOP Type  (C) Line Item Sequence  (C) Component Sequence  1  )

where (C) Line Item Sequence is the calculated field which we have created for the Line Item Sequence and (C) Component Sequence is the calculated field which we have created for the Component Sequence field.

Note: The reason why we create calculated for these two fields is because these two parameters of the custom rw_TableLineString function are of the type currency and the line item sequence fields are long integers, which is not accepted by the above function.

Once the calculated field is created, we can add it in the appropriate line item space in the SOP Blank Invoice report to get the desired results.

Reference

Take a look at the article below which summarizes the usage of Support Debugging Tool with some real life examples. Great compilation by David! http://blogs.msdn.com/b/developingfordynamicsgp/archive/2011/08/05/using-the-support-debugging-tool-with-real-life-examples.aspx

Hope this helps the community…

Until next post!

August 8, 2011 · veeyeskay · 4 Comments
Tags: , , , , , , , , ,  · Posted in: Customizations, Dynamics, Great Plains, Inventory, Sales Order Processing, Support Debugging Tool Total Views: 1,315

Nice Features for Auditing Information in GP

Hi all

I read the recent article posted by Vaidy titled Sales Quote Line Item Cancellation, where he explains the use of the Qty Canceled field and how it helps the companies to track the actual quote and details of the canceled item, rather than deleting the line item completely.

As a follow-up article for that, I have decided to post some of the features which we can turn on in GP, which will allow the users to prevent deletion of information from GP for tracking, audit and analysis purposes.

General Ledger

In the General Ledger Setup window, there is an option to prevent Deletion of Saved Transactions.

image

Unchecking this box, prevents the user from deleting a saved journal entry. Once the user saves a journal entry, the Delete button gets disabled when you try to access the saved journal entry, thereby allowing the user to delete the journal entry. Further, the Delete button on the Batch window also gets deleted for that specific batch. The only way to have the journal entry removed from the un-posted status would be to Void the journal entry in that batch.

image

Of course this voiding option is at the transaction level and if there is a batch of many transactions which need to be voided, it could be strenuous to void them manually. In such cases, we can still make use of a macro to void the journal entries in that batch.

Sales Order Processing

Just like the GL module, we have a setup to prevent deletion of the sales documents created within SOP. In the Sales Document Setup for Quote, Order, Invoices, Returns & Fulfillment Orders, there is an option to prevent deletion of documents.

image

So in a scenario when a customer requested a quote and later did not want to proceed with the order, we can Void the quote, to maintain audit, instead of deleting the saved quote. In this case, we have an additional control where we can provide deleting a quote with a specific authorization password. So in case there was a genuine mistake in preparing a quote (like a duplicate quote), we can make use of this password controlled deletion, by authorized people.

Purchase Order Processing

In case of Purchase Order processing, once a purchase order is created and saved it can be voided anytime before it is actually printed. However, there is no setup in Purchase Order Processing to force the users to void. It has to be manually controlled by the users. 

image 

However, once the purchase order is printed, it cannot be deleted and the system removes the option for Delete and Void from the Actions menu as shown below.

image

In such cases, we can choose the option Edit PO Status, which opens the Edit Purchase Orders window, where we can edit the status of the Purchase Order (or) the Purchase Order line.

image  image

Hope this article helps the community…

Until next post!

June 26, 2011 · veeyeskay · One Comment
Tags: , , , , ,  · Posted in: Dynamics, General Ledger, Great Plains, Purchase Order Processing, Sales Order Processing Total Views: 1,398

SQL Query – Sales Accounts Due Report

Hi all

In this article I have posted the SQL query for generating the Accounts Due report in the sales module.

SELECT  B.CUSTNMBR ,
        B.CUSTNAME ,
        A.DOCNUMBR ,
        C.DOCDESCR AS DOCTYPE ,
        C.DOCABREV AS DOCTYPEABB ,
        A.DOCDATE ,
        A.DUEDATE ,
        A.ORTRXAMT ,
        CASE WHEN A.RMDTYPAL <= 6 THEN A.WROFAMNT + A.DISTKNAM
             ELSE 0
        END AS WRITEOFFS ,
        CASE WHEN B.BALNCTYP = 0
                  AND A.RMDTYPAL <> 6 THEN A.ORTRXAMT - A.CURTRXAM
             ELSE 0
        END AS APPLIEDAMOUNT ,
        CASE WHEN A.RMDTYPAL >= 7 THEN CASE WHEN A.RMDTYPAL = 6 THEN 0
                                            ELSE A.CURTRXAM * -1
                                       END
             ELSE CASE WHEN A.RMDTYPAL = 6 THEN 0
                       ELSE A.CURTRXAM
                  END
        END AS AMOUNTREMAINING ,
        CASE WHEN A.RMDTYPAL <= 6
                  AND A.CURTRXAM <> 0
                  AND DATEDIFF(dd, A.DUEDATE, GETDATE()) > 0
             THEN DATEDIFF(dd, A.DUEDATE, GETDATE())
             ELSE 0
        END AS DAYSPASTDUE
FROM    dbo.RM20101 A
        INNER JOIN dbo.RM00101 B ON A.CUSTNMBR = B.CUSTNMBR
        INNER JOIN dbo.RM40401 C ON A.RMDTYPAL = C.RMDTYPAL

Hope this script is useful for all. Until next post…

November 6, 2010 · veeyeskay · 3 Comments
Tags: ,  · Posted in: Dynamics, Great Plains, Sales Order Processing, SQL Server 2005, SQL Server 2008 Total Views: 1,474