起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 217|回复: 1

奇怪问题**

[复制链接]
发表于 2007-4-7 08:41:27 | 显示全部楼层 |阅读模式
为了能够在处理两个字段值不一样时,则将相差值做为一张新的调整单来保存,程序写好了,也可以执行,但有时会执行,有时就不执行了,致使我的数据不对。我真的不知道什么原因了,请帮我看看吧,谢谢!代码好下:
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;
回复

使用道具 举报

发表于 2007-4-7 10:03:46 | 显示全部楼层
看代码好像没有啥问题,你可以设置端点跟踪一下,因为你里面有判断,应该是时机不对,所以就没有执行
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-19 02:36 , Processed in 0.042640 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表