Introduction
Updates
Last Customisation Update : 06 Nov 2015
Criterias
Maintain Stock Group
[Stock | Maintain Stock Group...]
Stock group will be used as the Product Grade to categorise the stock items list.
Maintain Stock Item
[Stock | Maintain Stock Item...]
1. Stock Master Data.
Types Field Name Data Types Length Usage STD Code String 30 Product Code, eg. EA 6035 (NA) STD Description String 200 Product Name STD 2nd Description String 200 Aluminium size to be display in sales tax invoice, eg. 38.10 x 1.80 thk STD Base UOM String 10 stock unit of measurement, usually either enter as PCS or KG or Roll DIY Linear Weight (Kg/M) Float Size :10
SubSize: 4Linear Weight (Kg/M) value
Sales Documents Entry
1. Sales documents entry are:-
- Quotation
- Sales Order
- Delivery Order
- Invoice
- Debit Note
- Credit Note
2. Insert and update the following DIY fields & Script into above mentions sales documents in Tools | DIY | SQL Control Center...
a) DIY Fields
Type Field Name Data Types Length DIY-F GSM Float Size: 10
SubSize: 2DIY-F Width Float Size: 10
SubSize: 2DIY-F Length Float Size: 10
SubSize: 2DIY-F PKT Float Size: 10
SubSize: 2DIY-F Weight_MT Float Size: 10
SubSize: 4DIY-F Weight_KG Float Size: 10
SubSize: 4DIY-F TotWeight_MT Float Size: 10
SubSize: 4DIY-F TotWeight_KG Float Size: 10
SubSize: 4
2. Formula:
Weight KG = ((GSM x Width x Length)/3100)/PKT Weight MT = Weight KG/1000
Both formula results are rounding up to 4 decimals.
3. Under Tools | DIY | SQL Control Center...Browse to Stock | Stock Item and insert the event "OnBeforeSave" with the DIY Script below:
Var M : TDataSource;
begin
M := TDataSource(Self.FindComponent('dsAccess'));
M.DataSet.Edit;
M.DataSet.FindField('UDF_Weight_KG').Value := SimpleRoundToEx((((M.DataSet.FindField('UDF_GSM').AsFloat*
M.DataSet.FindField('UDF_Width').AsFloat*
M.DataSet.FindField('UDF_Length').AsFloat)/3100)/M.DataSet.FindField('UDF_PKT').AsFloat),-4);
M.DataSet.FindField('UDF_Weight_MT').Value := SimpleRoundToEx((M.DataSet.FindField('UDF_Weight_KG').AsFloat/1000),-4);
end.
b. DIY Script:
var
FComServer : Variant;
function ComServer: Variant;
begin
if FComServer = Null then begin
FComServer := CreateOleObject('SQLAcc.BizApp');
end;
Result := FComServer;
end;
var
lBizObj,S,S2 : Variant;
lSQL : String;
lCdsDataList : TClientDataSet;
D : TDataSource;
begin
FComServer := null;
lCdsDataList := TClientDataSet.Create(nil);
D := TDataSource(Self.FindComponent('dsDocDetail'));
try
lSQL := 'Code='+ QuotedStr(D.DataSet.FindField('ItemCode').AsString);
lBizObj := ComServer.BizObjects.Find('ST_ITEM');
lCdsDataList.XMLData := lBizObj.Select('UDF_GSM, UDF_Width, UDF_Length, UDF_PKT, UDF_Weight_KG, UDF_Weight_MT',lSQL,'','SX',',','');
if SameText(EditingField, 'ItemCode') or
SameText(EditingField, 'Qty') then begin
D.DataSet.edit;
D.DataSet.FindField('UDF_GSM').Value := lCdsDataList.FindField('UDF_GSM').Value;
D.DataSet.FindField('UDF_Width').Value := lCdsDataList.FindField('UDF_Width').Value;
D.DataSet.FindField('UDF_Length').Value := lCdsDataList.FindField('UDF_Length').Value;
D.DataSet.FindField('UDF_PKT').Value := lCdsDataList.FindField('UDF_PKT').Value;
D.DataSet.FindField('UDF_Weight_KG').Value := lCdsDataList.FindField('UDF_Weight_KG').Value;
D.DataSet.FindField('UDF_Weight_MT').Value := lCdsDataList.FindField('UDF_Weight_MT').Value;
D.DataSet.FindField('UDF_TotWeight_KG').value := D.DataSet.FindField('UDF_Weight_KG').AsFloat*D.DataSet.FindField('Qty').Value;
D.DataSet.FindField('UDF_TotWeight_MT').value := D.DataSet.FindField('UDF_Weight_MT').AsFloat*D.DataSet.FindField('Qty').Value;
end;
finally
lBizObj := null;
FComServer := null;
lCdsDataList.Free;
end;
end.
See also
- Others Customisation