⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitmb.pas

📁 飞恒进销存(超市批发)管理系统V5.1(含源程序) 语言:Delphi 6/7 相关控件:FastReport 2.4以上, Ehlib 3.4以上 1.数据库为fhe2db_V51.da
💻 PAS
📖 第 1 页 / 共 5 页
字号:
       end else
       begin
         sStatus:=queryDetail.RecordStatus;
         UpdateBatchDetail(sStatus);
         queryDetail.Next;
       end;
     end;
     queryDetail.EnableControls;

     if sDelItemNo<>',' then
     begin

       UpdateRefTblBack(2);

       if (nTableId mod 10 <>0) and  (nTableId mod 10 <>3) then
         if nTableId=24 then
          updateOnHandBack(2,nOldOutStoreId,1)
        else
          updateOnHandBack(2,nOldStoreId,1);

       //updateOnHandBack(2,nOldStoreId,1);

       //for move onlye
       if nTableId =22 then updateOnHandBack(2,nOldOutStoreId,0);

       UpdateRefTableAmt(nTableId,nBillId);

       DeleteDetail;
     end;

     //新增或修改master table
     if bNew then
     begin
       sInvoNo:=getInvono(mytable,'NEW');
       edtInvono.Text:=sInvoNo;
       InsertMaster(sInvoNo);
     end else UpdateMaster;

     //修改该单总金额,相关订单的完成等
     if (nTableId <> 30) then
       UpdateMasterAmt(nTableId,nBillId);

     //get this new billid,refresh QueryDetail;
     if bNew then
       if OpenTable('select BillId from '+myTable+' where Invono= :invoNo',sInvoNo) then
         nBillid:=adoQuery1.fieldbyname('billid').asinteger;

     if QueryDetail.Active then QueryDetail.Close;
     queryDetail.Parameters[0].value:=nBillid;
     queryDetail.open;

     bNew:=false;
     sDelItemNo:=',';
     adoConStore.CommitTrans ;
   except
     adoConStore.RollbackTrans ;
     application.MessageBox('写入错误','错误',mb_OK+MB_ICONERROR);
   end;  //try
  end;  //dataE2
end;

procedure TmbForm.cmdUndoClick(Sender: TObject);
begin
  if application.messagebox(pchar('真的要撤消吗?'),'提示',MB_YESNO+MB_ICONQUESTION)=IDYES then
  begin
    bNew:=false;
    sDelItemNo:=',';

    SetCommandStatus(1);
    with DataE2 do
      if queryDetail.active then queryDetail.Close;
  end;
end;

procedure TmbForm.cmdBillClick(Sender: TObject);
var
  sSelTable,sTmp:string;
begin
  if cmdAdd.Enabled then
  begin
    ShowMessage('单据不在编辑状态,不能修改!     ');
    exit;
  end;

  case nTableId of
    1: begin sSelTable:='I_ORDER';   sTmp:='VendorId';end;
    2: begin sSelTable:='I_INSTORE'; sTmp:='VendorId';end;
    3: begin sSelTable:='I_INSTORE'; sTmp:='VendorId';end;
    11:begin sSelTable:='O_ORDER';   sTmp:='ClientId';end;
    12:begin sSelTable:='O_OUTSTORE';sTmp:='ClientId';end;
    13:begin sSelTable:='O_OUTSTORE';sTmp:='ClientId';end;
  end;

  if nTableId mod 10 <> 3 then
  begin
    stmp:='select * from '+ sSelTable+ ' where '+sTmp+'= :vendorId ';
    //退现款可以为已付单
    if nOutStoreid =1 then
      sTmp:=sTmp+' and isSent=1'
    else
      sTmp:=sTmp+' and isSent=0';
    dlgSelBill.Newsql:=stmp;
    dlgSelBill.nparams1:=nCusid; end
  else  begin
    dlgSelIOBill.Newsql:='select *,(BillAmt-TakeAmt-RtnAmt) as LeftAmt from '+ sSelTable+ ' where '+sTmp+'= :vendorId and (BillAmt-TakeAmt-RtnAmt) >0 ';
    dlgSelIOBill.nparams1:=nCusid;
  end;


  if nTableId mod 10 <> 3 then
  if dlgSelBill.showmodal=mrok then
  with dataE2 do
  begin
    oBillId:=dlgSelBill.billid;
    oInvoNo:=dlgSelBill.InvoNo;
    oIsChecked:=True;
    sTmp:='select o.*,g.code,g.name,g.perqty,g.units,';
    if nTableId <> 12 then
      sTmp:=sTmp+'g.inprice,g.inprice2 from '
    else  //出仓退货,进价为出仓时的进价
      sTmp:=sTmp+'o.cost as Inprice from ';

    sTmp:=sTmp+sSelTable+'D o,goods g where o.BillId = :Billid and o.goodsid=g.goodsid ';

    adoQuery1.close;
    adoQuery1.sql.clear;
    //'select o.*,g.code,g.name,g.units,g.inprice from '+sSelTable+'D o,goods g where o.BillId = :Billid and o.goodsid=g.goodsid ')
    adoQuery1.sql.add(sTmp);

    adoQuery1.parameters[0].value:=oBillid;
    adoQuery1.open;

    while not adoquery1.eof do
    begin
      queryDetail.append;
      queryDetail.fieldbyname('GoodsId').asinteger:=adoQuery1.fieldbyname('GoodsId').asinteger;
      queryDetail.fieldbyname('code').asstring:=adoQuery1.fieldbyname('code').asstring;
      queryDetail.fieldbyname('name').asstring:=adoQuery1.fieldbyname('Name').asstring;
      queryDetail.fieldbyname('PerQty').AsVariant:=adoQuery1.fieldbyname('PerQty').AsVariant;
      if nTableId mod 10 =1 then  // - exeqty
        queryDetail.fieldbyname('qty').asfloat:=adoQuery1.fieldbyname('qty').asfloat-adoQuery1.fieldbyname('exeQty').asfloat
      else  //- rtnQty
        queryDetail.fieldbyname('qty').asfloat:=adoQuery1.fieldbyname('qty').asfloat-adoQuery1.fieldbyname('RtnQty').asfloat;
      queryDetail.fieldbyname('Price').ascurrency:=adoQuery1.fieldbyname('Price').ascurrency;
      queryDetail.fieldbyname('units').asstring:=adoQuery1.fieldbyname('units').asstring;
      queryDetail.fieldbyname('disc').AsBoolean:=adoQuery1.fieldbyname('disc').AsBoolean;//2005-05-24
      queryDetail.fieldbyname('xBillid').asinteger:=adoQuery1.fieldbyname('Billid').asinteger;
      queryDetail.fieldbyname('xItemNo').asinteger:=adoQuery1.fieldbyname('ItemNo').asinteger;
      queryDetail.fieldbyname('Memo1').asstring:=oInvoNo;
      if (nTableid = 11) or (nTableid=18) then
      begin
        if not adoQuery1.fieldbyname('disc').AsBoolean then
          queryDetail.fieldbyname('cost').ascurrency:=adoQuery1.fieldbyname('inprice').ascurrency
        else queryDetail.fieldbyname('cost').ascurrency:=adoQuery1.fieldbyname('inprice2').ascurrency;
      end;
      if nTableId = 12 then
        queryDetail.fieldbyname('cost').ascurrency:=adoQuery1.fieldbyname('inprice').ascurrency;

      adoQuery1.next;
    end;
    adoQuery1.close;
    //无此语句时,删除最后一行无反映,标志是文件尾
    queryDetail.First ;
  end;  //<>3

  if nTableId mod 10 = 3 then  //收付款
  if dlgSelIOBill.showmodal=mrok then
  with dataE2 do
  begin
    QueryDlg.First;
    while not QueryDlg.eof do
    begin
      if queryDlg.fieldbyname('isSent').AsBoolean then
      begin
        queryDetail.append;
        queryDetail.fieldbyname('InvoNo').asstring:=QueryDlg.fieldbyname('InvoNo').asstring;
        queryDetail.fieldbyname('BillDate').asdatetime:=QueryDlg.fieldbyname('Billdate').asdatetime;
        queryDetail.fieldbyname('Amount').ascurrency:=0;//QueryDlg.fieldbyname('Amount').ascurrency;
        queryDetail.fieldbyname('Billamt').ascurrency:=QueryDlg.fieldbyname('Billamt').ascurrency;
        queryDetail.fieldbyname('TakeAmt').ascurrency:=QueryDlg.fieldbyname('Takeamt').ascurrency;
        queryDetail.fieldbyname('RtnAmt').ascurrency:=QueryDlg.fieldbyname('RtnAmt').ascurrency;
        queryDetail.fieldbyname('xBillid').asinteger:=QueryDlg.fieldbyname('Billid').asinteger;
        queryDetail.fieldbyname('Memo1').asstring:=oInvoNo;
        //queryDetail.fieldbyname('leftAmt').ascurrency:=QueryDlg.fieldbyname('leftAmt').ascurrency;
      end;
      QueryDlg.next;
    end;
    QueryDlg.CancelUpdates;
    QueryDlg.close;
    //无此语句时,删除最后一行无反映,标志是文件尾
    queryDetail.First ;
  end;
end;

procedure TmbForm.edtStoreButtonClick(Sender: TObject);
begin
  if not cmdSave.Enabled then exit;

  dlgselPayType.Newsql:='select storeid as id,name from store ';
  dlgSelpaytype.Top :=self.top+(sender as TComboBox).Top +81;//toolbar1.height+edtInstore.Height+20 ;
  dlgSelpaytype.Left :=self.Left+(sender as TComboBox).left+4 ;
  if dlgselPayType.showmodal=mrok then
  with dataE2 do
  begin
    (sender as TComboBox).Text :=dlgselPayType.xName;
    nStoreId:=dlgSelPaytype.xid;
  end;
end;

procedure TmbForm.edtEmpButtonClick(Sender: TObject);
begin
  if not cmdSave.Enabled then exit;
  
  dlgselPayType.Newsql:='select EmployId as id,name from employ ';
  dlgSelpaytype.Top :=self.top+(sender as TComboBox).Top +81;//toolbar1.height+edtInstore.Height+20 ;
  dlgSelpaytype.Left :=self.Left+(sender as TComboBox).left+4 ;
  if dlgselPayType.showmodal=mrok then
  with dataE2 do
  begin
    (sender as TComboBox).Text :=dlgselPayType.xName;
    nEmployId:=dlgSelPaytype.xid;
  end;
end;

procedure TmbForm.FormCreate(Sender: TObject);
begin
  nTableId:=dataE2.gTableId;
  myTable:=dataE2.aTblName[nTableId];

  if dataE2.bInputTip and (nTableid mod 10 <>3 )then
  begin
    dbGoods.visible:=true;
    dbGoods.width:=160;
    width:=width+160;
    height:=height+100;
    //dbGoods1.rowcount:=18;
    end
  else  begin
    dbGoods.visible:=false;
    dbGoods.width:=0;
    width:=638;
    height:=447;
  end;

end;

procedure TmbForm.edtNameButtonClick(Sender: TObject);
var
  sSql,sParm1,sParm2:string;
begin
  if not cmdSave.Enabled then exit;
  case nTableId of
  0..9:   begin
       sSql:='select top 200 vendorId as id,vendorNo as Code,ShortName as name from vendor ';
       sParm1 :='where vendorNo like :vendorNo';
       sParm2 :='where shortname like :shortname';
       dlgSelVC.NewOrderSql:=' Order by vendorNo';
       dlgSelVC.tvType.Visible:=True; end;
  10..17: begin
       sSql:='select top 200 ClientId as id,ClientNo as Code,ShortName as name from client ';
       sParm1 :='where ClientNo like :ClientNo';
       sParm2 :='where shortname like :shortname';
       dlgSelVC.NewOrderSql:=' Order by ClientNo';
       dlgSelVC.tvType.Visible:=True; end;
  18: begin
       sSql:='select top 200 ClientId as id,checkno as Code,Shortname as name,cusfileid from vCusfile ';
       sParm1 :='where checkNo like :checkno';
       sParm2 :='where shortname like :shortname';
       dlgSelVC.NewOrderSql:=' Order by checkno';
       dlgSelVC.tvType.Visible:=False; end;
  24..30: begin
       sSql:='select top 200 GoodsId as id,Code,name from goods ';
       sParm1 :='where code like :Code';
       sParm2 :='where name like :name';
       dlgSelVC.NewOrderSql:=' Order by code';
       dlgSelVC.tvType.Visible:=False; end;
  end;
  
  if nTableId=26 then
  begin
    if sInOut='进仓类' then
    begin
      sSql:='select top 200 vendorId as id,vendorNo as Code,ShortName as name from vendor ';
      sParm1 :='where vendorNo like :vendorNo';
      sParm2 :='where shortname like :shortname';
      dlgSelVC.NewOrderSql:=' Order by vendorNo';
      dlgSelVC.tvType.Visible:=True; end
    else if sInOut='出仓类' then begin
      sSql:='select top 200 ClientId as id,ClientNo as Code,ShortName as name from client ';
      sParm1 :='where ClientNo like :ClientNo';
      sParm2 :='where shortname like :shortname';
      dlgSelVC.NewOrderSql:=' Order by ClientNo';
      dlgSelVC.tvType.Visible:=True; end;
  end;

  dlgSelVC.Newsql:=sSql;
  dlgSelVC.sParams1 :=sParm1;
  dlgSelVC.sParams2 :=sParm2;
  dlgSelVC.Top :=self.top+(sender as TComboBox).Top +81;//toolbar1.height+edtInstore.Height+20 ;
  dlgSelVC.Left :=self.Left+(sender as TComboBox).left+4 ;
  if edtName.Text<>'' then
    GetCode
  else
    dlgSelVC.edtSch.text:='';
  if dlgSelVC.showmodal=mrok then
  with dataE2 do
  begin
    (sender as TComboBox).Text :=dlgSelVC.xName;
    if oIsChecked and (nCusId<>dlgSelVC.xid) then
    begin
      queryDetail.Close;
      queryDetail.Open;
    end;
    nCusId:=dlgSelVC.xid;
    if nTableId = 18 then
      nCusFileId :=dlgSelVC.xId1;
      
    DBGrid1.SelectedIndex:=0;
    DBGrid1.SetFocus;
  end;
end;

procedure TmbForm.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var
  seekvalue,seekvalue1,sType,scode1,s:string;
  nTimes,nkey,i:integer;
  sLocateOptions:TLocateOptions;
begin
  if dataE2.bTwoUnit then  //是否用双单位
  begin
    if (key <> chr(9)) then
    begin
      if (DBGrid1.SelectedField.FieldName =DBComboBoxEh1.DataField) then
      begin
        SendMessage(DBComboBoxEh1.Handle,WM_Char,word(Key),0);
      end;
    end;
  end;
  if  dbGoods.Visible then
  with DataE2 do
  if (dbGrid1.selectedindex = 0) and ( (key>chr(30)) or (key=chr(8)) )then
  begin
     if key>chr(30) then
       sCodeBuff:=sCodeBuff+key
     else
       sCodeBuff:=copy(sCodeBuff,1,length(sCodebuff)-1);

       seekvalue:=sCodeBuff;
     nTimes:=length(seekvalue);

  bTips:=true;

  //空中回到主分类
  if nTimes=0 then
    if (dbGoods.DataSource<>dataE2.dsType) or DataE2.tblType.filtered  then
    begin
      with dataE2.tblType do
      begin
        filter:='';
        filtered:=false;
        first;
      end;
      dbGoods.DataSource:=dataE2.dsType;
      dbGoods.refresh;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -