Report Script: Create a Packing List in report script
Introduction
This tutorial shows how to add a text which displays packing that is based on largest UOM to smallest UOM with report scripting.
Product
AutoCount Accounting 1.8 / 1.9
Download Report Template (AutoCount Accounting 2.0)
Get Field that is not in report. |
Report Script
Show the packing from any UOM
- At main window, go to Sales | Delivery Order
- On the main menu, click Report | Design Detail Listing Report
- Select "Picking List - Delivery Order" report template
- Insert a Calculated Field
- While the view is at Designer,
- Right click 1 Main Data: Delivery Order Master (aka. Master table)
- and Add Calculated Field
- Set the property of newly added Calculated Field
- Locate & Select the newly added calculated field
- In Property Grid, rename (Name) to calcPacking
- Create new event of GetValue to calcPacking
- Click [+] to expand Scripts
- Click the box on the right of "Get a Value"
- Then click the arrow button, and click (New)
- Report Designer will switch to Scripts editor,
- and calcPacking_GetValue event is created.
- Add directive using System.Data; at the top of Scripts, if has not added.
- Insert scripts into calcPacking_GetValue
- Add function of GetSmallestQty
- Add function of GetUOMFromItem
- Add function of FormatCurrentUomResult
- Add a new Label onto Detail band of Detail Report
which the DataMember is "AR Invoice Master.AR Invoice Detail" Bind the calcProjDesc to this new label Drag calcProjDesc from AR Invoice Detail (table) in Field List onto the designer Click Preview tab to see the result
private void calcPacking_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e)
{
DataTable tblUOM = GetUOMFromItem(GetCurrentColumnValue("ItemCode"));
if (tblUOM == null)
return;
decimal smallestQty = GetSmallestQty(GetCurrentColumnValue("Qty"), GetCurrentColumnValue("Rate"));
decimal uomRate;
string result = "";
foreach (DataRow row in tblUOM.Rows)
{
if (smallestQty < 1)
break;
uomRate = BCE.Data.Convert.ToDecimal(row["Rate"]);
result = FormatCurrentUomResult(result,
uomRate > 0 ? Math.Floor(smallestQty / uomRate) : 0,
row["UOM"].ToString());
//Calculate the remaining Smallest Qty for next UOM
smallestQty = smallestQty % uomRate;
}
e.Value = result;
}
private decimal GetSmallestQty(object oQty, object oRate)
{
return BCE.Data.Convert.ToDecimal(oQty) * BCE.Data.Convert.ToDecimal(oRate);
}
private DataTable GetUOMFromItem(object oItemCode)
{
if (oItemCode == null)
return null;
return __report.DBSetting.GetDataTable(
"SELECT UOM, Rate FROM ItemUOM WHERE ItemCode=? ORDER BY Rate DESC", false, oItemCode.ToString());
}
private string FormatCurrentUomResult(string result, decimal qty, string uom)
{
//Format the display text of qty and uom
string formatQtyUom = string.Format("{0} {1}", qty, uom);
return string.IsNullOrEmpty(result) ? formatQtyUom
: string.Format("{0} X {1}", result, formatQtyUom);
}
Go to top
|
Resources For AutoCount Software Developers
|