起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 144|回复: 9

单据保存时出现的错误**

[复制链接]
发表于 2008-5-15 16:14:50 | 显示全部楼层 |阅读模式
在库存管理中做出入库单据,进行保存的时候出现的情况:
   原来我们保存的时候没有检查物料的库存。进行保存没有任何问题。
  现在我们加上了检查物料的库存,就是在保存前查询物料的库存数量是否满足。这样后容易出现如下的提示:
   我查询库存用的Select语句。麻烦帮我分析下原因。谢谢。

1.gif

45.82 KB, 下载次数: 101

回复

使用道具 举报

 楼主| 发表于 2008-5-15 16:16:28 | 显示全部楼层
我们的版本是 2800 数据库是 Oracle10g.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-15 16:17:41 | 显示全部楼层
保存代码如下;

if not TINFO_LBJDB(InfoBroker.Info).CheckOut_KC_Input(FOperstatus) then exit;  //检查库存是否满足条件
  
with DS.Connection.Transaction do
    begin
      lTransactionHandle := Start(False);    //启动事务 Start
      try
        DS.ApplyUpdates;
        DetailDS.ApplyUpdates;
        if not TINFO_LBJDB(InfoBroker.Info).updateStockKC_SAVE(FOperstatus) then raise exception.Create('更新库存信息失败');
        Commit(lTransactionHandle);   //  提交事务
      except
        Rollback(lTransactionHandle);  //回滚事务
        raise;
      end;

    end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-15 16:20:03 | 显示全部楼层
检查库存的过程代码: CheckOut_KC_Input
   

DataSetSC_DETAIL_DS.DisableControls;
  try
    DataSetSC_DETAIL_DS.First ;
    while not DataSetSC_DETAIL_DS.Eof do
    begin
      if WSL.TWSL.IsKC_UpZero then   //检查库存
      begin
        kcDS.Data:=WSL.TWSL.GetSingleStockOutQty(
                     DataSetSC_MAIN_DS.Connection,
                     bill_id,
                     DataSetSC_DETAIL_DS.FieldByName('material_id').asString,
                     DataSetSC_MAIN_DS.FieldByName('src_store_id').AsString,
                     DataSetSC_DETAIL_DS.FieldByName('provider_id').asString);

        if kcDS.IsEmpty   then raise exception.Create('内部错误:获得物料库存信息失败!');
        if kcDS.RecordCount<>1 then raise exception.Create('内部错误:物料库存信息不唯一!');

        if  kcDS.FieldByName('curstock').AsFloat <DataSetSC_DETAIL_DS.FieldByName('qty').AsFloat then
        begin
          jsDialogs.ShowError('库存数量不足! 当前物料号: '+DataSetSC_DETAIL_DS.FieldByName('CODE').asString+' 当前可用库存:'+SysUtils.FloatToStr(kcDS.FieldByName('curstock').AsFloat ),'系统提示');
          exit;
        end;
        if DataSetSC_DETAIL_DS.FieldByName('src_stock_id').AsString<>kcDS.FieldByName('id').AsString then
        begin
          DataSetSC_DETAIL_DS.Edit;
          DataSetSC_DETAIL_DS.FieldByName('src_stock_id').AsString :=kcDS.FieldByName('id').AsString ;
          DataSetSC_DETAIL_DS.Post ;
        end;
DataSetSC_DETAIL_DS.Next ;
    end;
    ReSult:=true;
  finally
    DataSetSC_DETAIL_DS.EnableControls;
    kcDS.Free;
  end;
回复 支持 反对

使用道具 举报

发表于 2008-5-15 17:13:57 | 显示全部楼层
注释掉这句还报错吗?

if not TINFO_LBJDB(InfoBroker.Info).CheckOut_KC_Input(FOperstatus) then exit;  //检查库存是否满足条件
回复 支持 反对

使用道具 举报

发表于 2008-5-15 17:51:35 | 显示全部楼层
感觉这个 GetSingleStockOutQty和updateStockKC_SAVE使用了同样的数据链接了。
不要用GetSingleStockOutQty,自己用一个单独的数据集做查询用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-21 16:40:52 | 显示全部楼层
注释掉就没有那个问题了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-21 16:42:57 | 显示全部楼层
但是 调用GetSingleStockOutQty 时候并没有开始事务啊。
回复 支持 反对

使用道具 举报

发表于 2008-5-21 17:02:30 | 显示全部楼层
不要用GetSingleStockOutQty,自己用一个单独的数据集做查询用。可能那个函数和这个有关联。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-27 11:21:47 | 显示全部楼层
这个函数是我自己写的。除了数据库连接是同一个外,没有其他特别的地方。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-13 22:31 , Processed in 0.044807 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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