|
为了能够在处理两个字段值不一样时,则将相差值做为一张新的调整单来保存,程序写好了,也可以执行,但有时会执行,有时就不执行了,致使我的数据不对。我真的不知道什么原因了,请帮我看看吧,谢谢!代码好下:
procedure TFPXXGL.ToolButton3Click(Sender: TObject);
begin
if dsbmaster.DataSet.FieldByName('fexamine').AsInteger=0 then
begin
dsblkdetail.DataSet.Open;
dsbbalmaster.DataSet.open;
dsbbaldetail.DataSet.open;
dsbmaster.DataSet.edit;
dsbmaster.DataSet.FieldByName('fexamine').AsInteger:=1;
dsbmaster.DataSet.FieldByName('FDATE').AsDateTime:=syssrv.SysService.time;
dsbmaster.DataSet.Post;
dsbbalmaster.DataSet.append;
dsbbalmaster.DataSet.FieldByName('FSUPID').AsString :=dsbmaster.DataSet.FieldByName('FSUPID').AsString;
dsbbalmaster.DataSet.FieldByName('FPLANNO').AsString :=dsbmaster.DataSet.FieldByName('fbillno').AsString;
dsbbalmaster.DataSet.Post;
dsbdetail.DataSet.First;
while not dsbdetail.DataSet.Eof do
begin
if dsblkdetail.DataSet.Locate('fguid',dsbdetail.DataSet.FieldByName('freguid').AsString,[]) then
begin
dsblkdetail.DataSet.edit;
dsblkdetail.DataSet.FieldByName('FINVOICEQTY').AsFloat:=dsblkdetail.DataSet.FieldByName('FINVOICEQTY').AsFloat+dsbdetail.DataSet.FieldByName('FSTOCKQTY').AsFloat;
dsblkdetail.DataSet.Post;
end;
//金额调整单
if dsbdetail.DataSet.FieldByName('FINVOICEMONEY').AsFloat<>dsbdetail.DataSet.FieldByName('FSTOCKMONEY').AsFloat then
begin
dsbbaldetail.DataSet.append;
dsbbaldetail.DataSet.FieldByName('fbillno').AsString:=dsbbalmaster.DataSet.FieldByName('fbillno').AsString;
dsbbaldetail.DataSet.FieldByName('fnumber').AsString:=dsbdetail.DataSet.FieldByName('fnumber').AsString;
dsbbaldetail.DataSet.FieldByName('fname').AsString:=dsbdetail.DataSet.FieldByName('fname').AsString;
dsbbaldetail.DataSet.FieldByName('fmodal').AsString:=dsbdetail.DataSet.FieldByName('fmodal').AsString;
dsbbaldetail.DataSet.FieldByName('funit').AsString:=dsbdetail.DataSet.FieldByName('funit').AsString;
dsbbaldetail.DataSet.FieldByName('fmoney').AsFloat:=dsbdetail.DataSet.FieldByName('FINVOICEMONEY').AsFloat-dsbdetail.DataSet.FieldByName('FSTOCKMONEY').AsFloat;
dsbbaldetail.DataSet.FieldByName('freguid').AsString:=dsbdetail.DataSet.FieldByName('fguid').AsString;
dsbbaldetail.DataSet.post;
end;
dsbdetail.DataSet.next;
end;
dsbbalmaster.DataSet.ApplyUpdates;
dsbbaldetail.DataSet.ApplyUpdates;
dsbmaster.DataSet.ApplyUpdates;
dsblkdetail.DataSet.ApplyUpdates;
jsdialogs.ShowMsg('单据复审成功!','提示');
dsbmasterafterscroll(nil);
end;
end;
procedure TFPXXGL.ToolButton4Click(Sender: TObject);
begin
if dsbmaster.DataSet.FieldByName('fexamine').AsInteger=1 then
begin
dsbbalmaster.DataSet.Open;
dsbbaldetail.DataSet.open;
dsblkdetail.DataSet.Open;
if dsbbalmaster.DataSet.Locate('FPLANNO',dsbmaster.DataSet.FieldByName('fbillno').AsString,[]) then
begin
dsbbalmaster.DataSet.Delete;
end;
dsbdetail.DataSet.First;
while not dsbdetail.DataSet.Eof do
begin
if dsblkdetail.DataSet.Locate('fguid',dsbdetail.DataSet.FieldByName('freguid').AsString,[]) then
begin
dsblkdetail.DataSet.edit;
dsblkdetail.DataSet.FieldByName('FINVOICEQTY').AsFloat:=dsblkdetail.DataSet.FieldByName('FINVOICEQTY').AsFloat-dsbdetail.DataSet.FieldByName('FSTOCKQTY').AsFloat;
dsblkdetail.DataSet.Post;
end;
if dsbbaldetail.DataSet.Locate('freguid',dsbdetail.DataSet.FieldByName('fguid').AsString,[]) then
begin
dsbbaldetail.DataSet.Delete;
end;
dsbdetail.DataSet.next;
end;
dsbmaster.DataSet.edit;
dsbmaster.DataSet.FieldByName('fexamine').AsInteger:=0;
dsbmaster.DataSet.Post;
dsbbalmaster.DataSet.ApplyUpdates;
dsbbaldetail.DataSet.ApplyUpdates;
dsbmaster.DataSet.ApplyUpdates;
dsblkdetail.DataSet.ApplyUpdates;
jsdialogs.ShowMsg('单据反复审成功!','提示');
dsbmasterafterscroll(nil);
end;
end; |
|