📄 unitmb.pas
字号:
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 + -