首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

求解析delphi里头的业务代码

2013-07-11 
求解析delphi里面的业务代码unit AsnImport1uses PubGrid1, PubDb1, PubComm1, PubExcel1{$R *.dfm}{ TA

求解析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
[解决办法]
业务真的不清楚哦 看起来好像也很复杂

热点排行