读书人

求解析delphi里头的业务代码

发布时间: 2013-07-11 15:38:46 作者: rapoo

求解析delphi里面的业务代码

unit AsnImport1;
uses PubGrid1, PubDb1, PubComm1, PubExcel1;
{$R *.dfm}
{ TAsnImport }

procedure TAsnImport.Import;
var s1,s2,s3,s4,sql:String;
E_App,E_Wb,E_Sheet:Variant;
i1,i2,i3,i4:integer;
begin

if pubexcel.OpenExcel.Execute then
Begin
s1:=pubexcel.OpenExcel.FileName;
if s1<>'' then
Begin
self.Text_Clear;
// sql:= 'Select distinct cast(null as nvarchar2(50)) as ID, cast(null as nvarchar2(50)) as SKU,'+
// ' cast(null as nvarchar2(50)) as SKU1, cast(null as NUMBER) as Qty, cast(null as nvarchar2(50)) as LOC,'+
// ' cast(''0'' as nvarchar2(2)) as CheckSku, cast(''0'' as nvarchar2(2)) as CheckAltSku, cast(''0'' as nvarchar2(2)) as CheckLoc from tttuser ';
sql := ' SELECT ''0'' AS ID , A.SKU AS SKU,A.DESCR AS SKU1,B.QTYEXPECTED AS QTY, '
+' B.TOLOC AS LOC ,A.DESCR AS udf5,A.DESCR AS DepotCount, ''0'' AS CheckSku,''0'' AS CheckAltSku, ''0'' AS CheckLoc'
+' FROM SKU A,receiptdetail B WHERE A.SKU = B.SKU AND 1 = 0 AND A.SKU =''A'' ';
pubdb.DOpenGrid(Grid1,SQL);
self.TextSetValue('TYPE','正常');
//Grid1.DataSource.DataSet.Delete;
try
E_App := GetActiveOleObject('Excel.Application');
except
E_App := CreateOleObject('Excel.Application');
end;
E_Wb:=E_App.workbooks.open(s1);
E_Sheet:=E_Wb.sheets[1];
E_App.Visible:=True;

s2:=E_Sheet.cells[4,2];
self.TextSetValue('EXTERNKEY',s2);



s2:=E_Sheet.cells[5,2];
self.TextSetValue('VENDOR',s2);

i1:=9;
s2:=E_Sheet.cells[i1,1];

while s2<>'' do
Begin
s3:=E_Sheet.cells[i1,6];
if ((s3<>'') and (s3<>'0')) then
Begin
Grid1.DataSource.DataSet.Append;
Grid1.DataSource.DataSet.FieldByName('ID').Value:=s2;
s2:=E_Sheet.cells[i1,2];
Grid1.DataSource.DataSet.FieldByName('SKU').Value:=s2;
s2:=E_Sheet.cells[i1,3];
Grid1.DataSource.DataSet.FieldByName('SKU1').Value:=s2;
Grid1.DataSource.DataSet.FieldByName('QTY').Value:=strtoint(s3);
s2:=E_Sheet.cells[i1,8];
if s2='' then s2:='STAGE';
Grid1.DataSource.DataSet.FieldByName('LOC').Value:=s2;
s2:=E_Sheet.cells[i1,9];
if trim(s2)='' then s2:=pubdb.DGetValue('Select UDF5 from altsku where sku='''+Grid1.DataSource.DataSet.FieldByName('SKU').AsString+
''' and vendor='''+TextGetValue('VENDOR')+''' ','');
Grid1.DataSource.DataSet.FieldByName('UDF5').Value:=trim(s2);

i2:=0;
i3:=0;
try
i2:=strtoint(Grid1.DataSource.DataSet.FieldByName('QTY').AsString);
i3:=strtoint(Grid1.DataSource.DataSet.FieldByName('udf5').AsString);
if ((i2<=0) or (i3<=0)) then
Grid1.DataSource.DataSet.FieldByName('DepotCount').Value:='0'


else
Begin
i4:=i2 div i3;
if i2 mod i3<>0 then i4:=i4+1;
Grid1.DataSource.DataSet.FieldByName('DepotCount').Value:=inttostr(i4);
End;
except
Grid1.DataSource.DataSet.FieldByName('DepotCount').Value:='0';
end;

s4:=pubdb.DGetValue('Select Count(*) From Sku Where Sku='''+Grid1.DataSource.DataSet.FieldByName('SKU').AsString+'''','0');
if s4='0' then
Grid1.DataSource.DataSet.FieldByName('CheckSKU').Value:=false
else
Grid1.DataSource.DataSet.FieldByName('CheckSKU').Value:=True;

s4:=pubdb.DGetValue('Select Count(*) From Loc Where Loc='''+Grid1.DataSource.DataSet.FieldByName('Loc').AsString+'''','0');
if s4='0' then
Grid1.DataSource.DataSet.FieldByName('CheckLOC').Value:=false
else
Grid1.DataSource.DataSet.FieldByName('CheckLOC').Value:=True;

s4:=pubdb.DGetValue('Select Count(*) From AltSku Where Sku='''+Grid1.DataSource.DataSet.FieldByName('SKU').AsString+
''' and Vendor='''+TextGetValue('VENDOR')+'''','0');
if s4='0' then
Grid1.DataSource.DataSet.FieldByName('CheckAltSKU').Value:=false
else
Grid1.DataSource.DataSet.FieldByName('CheckAltSKU').Value:=True;



Grid1.DataSource.DataSet.Post;
End;
i1:=i1+1;
s2:=E_Sheet.cells[i1,1];
End;

End;
end;
end;

procedure TAsnImport.Init(vParam: String);
var sql:String;
AddFields:Array of TAddField;
FieldListSets:Array of TFieldListSet;
begin
inherited;
//
AddButton('查找文件','导入');
AddButton('导入','保存');
self.AddText(true,'KEY','ASN单号',true,1,10,12);
self.AddText(true,'EXTERNKEY','外部单号',true,1,34,12);
Self.AddText(true,'VENDOR','供应商',true,1,56,6);
self.AddText(true,'TYPE','单据类型',TRUE,1,72,10);
self.TextSetValue('TYPE','正常');

pubgrid.InitGridClientData(Grid1,false,false,false,true);
setlength(AddFields,0);
setlength(FieldListSets,3);
FieldListSets[0] := TFieldListSet.Create( 'CheckSku','B', '','');
FieldListSets[1] := TFieldListSet.Create( 'CheckAltSku','B', '','');
FieldListSets[2] := TFieldListSet.Create( 'CheckLoc','B', '','');
sql := ' SELECT '' '' AS ID , A.SKU AS SKU,A.DESCR AS SKU1,B.QTYEXPECTED AS QTY, '
+' B.TOLOC AS LOC ,A.DESCR AS udf5,A.DESCR AS DepotCount, ''0'' AS CheckSku,''0'' AS CheckAltSku, ''0'' AS CheckLoc'
+' FROM SKU A,receiptdetail B WHERE A.SKU= B.SKU ';
pubgrid.InitGridField(Grid1,
SQL + ' AND 1 = 0 ',
'序号,物料,物料名称,订货数,库位,每托 数量,托盘量,检验 物料,检验 物料+供应商,检验 库位',
'4,20,20,6,6,6,6,6,12,6','',
AddFields,
FieldListSets);
Grid1.datasource.dataset.BeforePost:=self.Grid1BeforePost;
end;

function TAsnImport.InitFileDesc: String;
var i1:integer;
//sql:String;
g_ReceiptKey,g_LpnDetail,g_AutoLpnNO:int64;
a1:TAdoQuery;
Begin
result:='';
if XtReceipt[0].Error='' then


Begin

a1:=pubdb.DGetQuery('select Count(1) As RecordCount from receipt where externreceiptkey='''
+ XtReceipt[0].externalReceiptKey + '''',true);
if not a1.Eof then
if a1.FieldByName('RecordCount').AsInteger<>0 then
XtReceipt[0].Error:=XtReceipt[0].externalReceiptKey+'在系统中已存在,不能重复导入';
a1.Close;


g_ReceiptKey:=0; g_LpnDetail:=0; g_AutoLpnNO:=0;
if XtReceipt[0].Error='' then
Begin
g_ReceiptKey:=strtoint(PUBDB.DGetNewID('WMWHSE1','RECEIPT'));
if g_ReceiptKey=-1 then XtReceipt[0].Error:='系统取Key错误-RECEIPT';
End;
if XtReceipt[0].Error='' then
Begin
g_LpnDetail:=strtoint(PUBDB.DGetNewID('WMWHSE1','LPNDETAIL'));
if g_LpnDetail=-1 then XtReceipt[0].Error:='系统取Key错误-LPNDETAIL';
End;
XtReceipt[0].receiptKey:=ToChar(g_ReceiptKey,10);

for i1:=0 to length(XtReceiptDetail)-1 do
Begin
if XtReceipt[0].Error='' then
Begin
XtReceiptDetail[i1].receiptKey:=ToChar(g_ReceiptKey,10);

XtReceiptDetail[i1].toid:=PUBDB.DGetNewID('WMWHSE1','WHLPN'); // ToChar(g_AutoLpnNO,10);
g_AutoLpnNO:=g_AutoLpnNO+1;
//XtReceiptDetail[i1].toid:=ToChar(g_ReceiptKey,10);//g_AutoLpnNO
//临时关闭 XtReceiptDetail[i1].lottable06:=ToChar(g_ReceiptKey,10);
End;
End; { }
if XtReceipt[0].Error='' then
Begin
for i1:=0 to length(XtLpnDetail)-1 do
Begin
XtLpnDetail[i1].receiptkey:=ToChar(g_ReceiptKey,10);
End;
End;
End;
end;

function TAsnImport.Run(const vName, vValue: String): String;
begin
if vName='查找文件' then
Begin
Import;
End;
if vName='导入' then


Begin
if TextGetValue('KEY')<>'' then
Begin
ShowMessage('文档已保存,或已偿试保存出错,请重新选择文档!');
Exit;
End;
if Grid1.DataSource.DataSet.RecordCount=0 then
Begin
ShowMessage('未发现记录,不能保存!');
Exit;
End;
if TextGetValue('EXTERNKEY')='' then
Begin
ShowMessage('未发现外部单号,不能保存!');
Exit;
End;
if TextGetValue('VENDOR')='' then
Begin
ShowMessage('未发现供应商,不能保存!');
Exit;
End;
Grid1.DataSource.DataSet.First;
//ShowMessage(inttostr(Grid1.DataSource.DataSet.RecordCount));
while not Grid1.DataSource.DataSet.Eof do
Begin
//ShowMessage(Grid1.DataSource.DataSet.FieldByName('CheckSku').AsString);
if Grid1.DataSource.DataSet.FieldByName('CheckSku').AsString <>'-' then
Begin
ShowMessage('当前记录物料未通过检验,不能保存!');
Exit;
End;
//if Grid1.DataSource.DataSet.FieldByName('CheckAltSku').AsBoolean = False then
if Grid1.DataSource.DataSet.FieldByName('CheckSku').AsString <>'-' then
Begin
ShowMessage('当前记录物料+供应商未通过检验,不能保存!');
Exit;
End;
//if Grid1.DataSource.DataSet.FieldByName('CheckLoc').AsBoolean = False then
if Grid1.DataSource.DataSet.FieldByName('CheckSku').AsString <>'-' then
Begin
ShowMessage('当前记录库位未通过检验,不能保存!');
Exit;
End;
Grid1.DataSource.DataSet.Next;
End;
Save;


End;
end;
end.

Delphi
[解决办法]
业务真的不清楚哦 看起来好像也很复杂

读书人网 >.NET

热点推荐