Friday, November 6, 2009

Database Maintenance Utility

After you load GP 10 you will notice a little extra item has loaded. That extra item is called the Database Mantenance Utility. I've been asked many times of late as to what it does and why we should care. Here goes. When the databases are created by GP several other objects are created as well. Views, Triggers, Stored Procedures and functions. Sometimes these objects become corrupted or messed up in some other way and need to be reloaded. The Database Maintenance Utility is the tool for the job. Before running this utility please be sure to back up your database. Also script out any customizations you have made to any of these objects, because they will need to be reapplied.

As an aside, you want to script any changes made to table keys and indexes because you will most likely need to re-run those modifications after any table update.

That's all for now, I'm heading to the Tech Conference Friday.

Hope to see you there!

Using the Adjust Costs inventory Utility Warning!

Adjust Costs.

It looks like a simple enough tool and it does exactly what you tell it to do. However, read on, what it does may not be exactly what you want it to do. Here's what it does. Say you have a purchase receipt that went through the system at $1465. Several of the items were sold but now the inventory is obsolete and the powers that be task you to write it off. They still want the items in inventory in case they can sell them later, but the carrying value should be zero. No Prob! you say. You open up the adjust cost screen and take each of the receipts that have not been completely sod and adjust the cost to zero. A bunch of reports print, you check that your stock status shows zero and you think you are done.

Not so fast. When you make a cost adjustment to a receipt in the Adjust Cost window you are telling the system that the entire receipt had a bad cost, not just the items left over. Dynamics GP will go back and attempt to adjust the cost on the posted sales from this receipt to the new cost (in our case $0). You may not want that. If all you are trying to do is write the current inventory down to zero cost, make Inventory Transaction Entries. First, a negative entry which will pull the correct cost. This will give you your 'write off' journal entry. Next do an increase adjustment at $0.00 cost. Now you have written off exactly the inventory you want and the carrying value is zero.

You can go home fulfilled from a good writeoff :)

UPDATE! I read a post on the GP Forum the other day that was posted by fellow MVP Mahmoud M. AlSaadi  where he provided an excellent explanation of how the Adjust Cost Utility worked. I've modified the post only slightly, but this is what it told us.
The Inventory Adjust Cost Utility primarily does the following;
· Update the (UNITCOST) field  in IV10200 | Inventory Purchase Receipts Work. (The old Unit Cost will be reserved under ADJUNITCOST field ) 
· Since the purchase receipt within the IV10200 is linked to the Inventory Purchase Receipts Detail, these cost layers will be updated accordingly.
· A new Cost Adjustment Record is written to the HITB | Historical Inventory Trial Balance either to decrease or increase the cost.
· A Corresponding Journal Entry to adjust the Purchase Receipt Cost in General Ledger is created. That Journal Entry is linked to the cost adjustment record in the HITB
· No changes at all to the IV30300 | Transaction Amounts History
In summary, if you have received and invoiced the items, but the cost is not correct and needs to be adjusted, the best way is to correct this is to use the "Adjust Cost Utility". If the cost had been corrected through the Enter/Match invoice transaction, then the cost adjustment record and all of the corrections mentioned above would have been applied. However, if the invoice cost was not corrected at the time of invoicing, the Adjust Cost Utility is your answer for fixing it.

Until Next Post

Leslie

Friday, September 25, 2009

Dexterity Training in Orlando Oct 5 - 9, 2009

Come to Florida for Dexterity Training!

This class is only held once per year, so please don't miss it if you are interested in learning Dexterity.

If you want to sign up please call Roxanna at 407-677-0370 or ralvarez@ibgnet.com.

This is a hands-on programming class using Microsoft Dexterity. This class will take you from creating the initial development environment to delivering a fully integrated .cnk file.

This week-long Class will include several programming projects such as:
  • Creating a data-entry window project
  • Using the debugging tools
  • Creating a lookup window project
  • Understanding multi-user record locking
  • Creating a transaction entry project
  • Using Dexterity Utilities
  • Creating an integrating application project using object triggers
  • Creating integrating reports with Report Writer
For more information look here:
http://www.ibgnet.com/images/pdfs/Dexterity_I_Synopsis.pdf

To sign up for the class look here:
http://www.ibgnet.com/IBG-Training-GP.html

Wednesday, July 1, 2009

Copy Fields for Jocelyn

Here's what the Calculated Fields section looks like for the Direct Deposit Earnings Statement:
This to answer Jocelyn's question on Copying calculated fields.

CalculatedFields
{
CalculatedField "SickAvail"
{
EvaluateAfter ""
Expression " ( 'UPR_WORK_Check'.'Sick Time Available' - 'UPR_WORK_Check'.'Sick Time Hours' ) * 0.01000 "
ResultType "Currency"
}
CalculatedField "VacAvail"
{
EvaluateAfter "SickAvail"
Expression " ( 'UPR_WORK_Check'.'Vacation Available' - 'UPR_WORK_Check'.'Vacation Hours' ) * 0.01000 "
ResultType "Currency"
}
CalculatedField "Sick Time Total"
{
EvaluateAfter ""
Expression " ( 'UPR_WORK_Check'.'Sick Time Available' - 'UPR_WORK_Check'.'Sick Time Hours' ) * 0.01000 "
ResultType "Currency"
}
CalculatedField "Vacation Time Total"
{
EvaluateAfter "Sick Time Total"
Expression " ( 'UPR_WORK_Check'.'Vacation Available' - 'UPR_WORK_Check'.'Vacation Hours' ) * 0.01000 "
ResultType "Currency"
}

Copy Calculated Fields in Report Writer

Yes you can! The secret is in the editing of the .package file.

Let's imagine you want to use the rw_SelectAddrLine user-defined function to create the address block in the SOP Blank Invoice Form. KB (862653) entitled "Description of the rw_SelectAddrLine Report Writer function" will show you that 9 calculated fields could be required if you want to use all of the available fields in the address block. If you like going through that drill, the process definitely works.

I prefer the copy and paste method. What you need to do is create a couple of the calculated fields as directed in the article and then export the modified report to a .package file. Open the package file using the text editor of your choice and then copy and past until you have what you need. For the SOP Blank Invoice Form here is the text you can past into the calculated field portion of your report.

The calculated fields below skip the 'Name' field (the first variable)
CalculatedField "Ship To Address Line 1" { EvaluateAfter "" Expression "'rw_SelectAddrLine'( 1 \"\" 'SOP_HDR_WORK'.'Contact Person''SOP_HDR_WORK'.'Address 1''SOP_HDR_WORK'.'Address 2''SOP_HDR_WORK'.'Address 3''SOP_HDR_WORK'.'City''SOP_HDR_WORK'.'State''SOP_HDR_WORK'.'Zip Code''SOP_HDR_WORK'.'Country' ) " ResultType "String" } CalculatedField "Ship To Address Line 2" { EvaluateAfter "" Expression "'rw_SelectAddrLine'( 2 \"\" 'SOP_HDR_WORK'.'Contact Person''SOP_HDR_WORK'.'Address 1''SOP_HDR_WORK'.'Address 2''SOP_HDR_WORK'.'Address 3''SOP_HDR_WORK'.'City''SOP_HDR_WORK'.'State''SOP_HDR_WORK'.'Zip Code''SOP_HDR_WORK'.'Country' ) " ResultType "String" } CalculatedField "Ship To Address Line 3" { EvaluateAfter "" Expression "'rw_SelectAddrLine'( 3 \"\" 'SOP_HDR_WORK'.'Contact Person''SOP_HDR_WORK'.'Address 1''SOP_HDR_WORK'.'Address 2''SOP_HDR_WORK'.'Address 3''SOP_HDR_WORK'.'City''SOP_HDR_WORK'.'State''SOP_HDR_WORK'.'Zip Code''SOP_HDR_WORK'.'Country' ) " ResultType "String" } CalculatedField "Ship To Address Line 4" { EvaluateAfter "" Expression "'rw_SelectAddrLine'( 4 \"\" 'SOP_HDR_WORK'.'Contact Person''SOP_HDR_WORK'.'Address 1''SOP_HDR_WORK'.'Address 2''SOP_HDR_WORK'.'Address 3''SOP_HDR_WORK'.'City''SOP_HDR_WORK'.'State''SOP_HDR_WORK'.'Zip Code''SOP_HDR_WORK'.'Country' ) " ResultType "String" } CalculatedField "Ship To Address Line 5" { EvaluateAfter "" Expression "'rw_SelectAddrLine'( 5 \"\" 'SOP_HDR_WORK'.'Contact Person''SOP_HDR_WORK'.'Address 1''SOP_HDR_WORK'.'Address 2''SOP_HDR_WORK'.'Address 3''SOP_HDR_WORK'.'City''SOP_HDR_WORK'.'State''SOP_HDR_WORK'.'Zip Code''SOP_HDR_WORK'.'Country' ) " ResultType "String" } CalculatedField "Ship To Address Line 6" { EvaluateAfter "" Expression "'rw_SelectAddrLine'( 6 \"\" 'SOP_HDR_WORK'.'Contact Person''SOP_HDR_WORK'.'Address 1''SOP_HDR_WORK'.'Address 2''SOP_HDR_WORK'.'Address 3''SOP_HDR_WORK'.'City''SOP_HDR_WORK'.'State''SOP_HDR_WORK'.'Zip Code''SOP_HDR_WORK'.'Country' ) " ResultType "String" } CalculatedField "Ship To Address Line 7" { EvaluateAfter "" Expression "'rw_SelectAddrLine'( 7 \"\" 'SOP_HDR_WORK'.'Contact Person''SOP_HDR_WORK'.'Address 1''SOP_HDR_WORK'.'Address 2''SOP_HDR_WORK'.'Address 3''SOP_HDR_WORK'.'City''SOP_HDR_WORK'.'State''SOP_HDR_WORK'.'Zip Code''SOP_HDR_WORK'.'Country' ) " ResultType "String" } CalculatedField "Ship To Address Line 8" { EvaluateAfter "" Expression "'rw_SelectAddrLine'( 8 \"\" 'SOP_HDR_WORK'.'Contact Person''SOP_HDR_WORK'.'Address 1''SOP_HDR_WORK'.'Address 2''SOP_HDR_WORK'.'Address 3''SOP_HDR_WORK'.'City''SOP_HDR_WORK'.'State''SOP_HDR_WORK'.'Zip Code''SOP_HDR_WORK'.'Country' ) " ResultType "String" } CalculatedField "Ship To Address Line 9" { EvaluateAfter "" Expression "'rw_SelectAddrLine'( 9 \"\" 'SOP_HDR_WORK'.'Contact Person''SOP_HDR_WORK'.'Address 1''SOP_HDR_WORK'.'Address 2''SOP_HDR_WORK'.'Address 3''SOP_HDR_WORK'.'City''SOP_HDR_WORK'.'State''SOP_HDR_WORK'.'Zip Code''SOP_HDR_WORK'.'Country' ) " ResultType "String" }