一段出库单冲减现存量的存储过程源码

存储过程

 

 

CREATE proc spSF_OutWarehouseCheck(

                    @vOutWarehouseNo varchar(255), --出库单号

                    @vAuditor varchar(255),        --审核人名称

                    @UseDbTRAN bit=0               --启动数据库事务(默认不启动为0)

) AS

begin

  Set noCount on                          --兼容ADO 原生 COM对象

  declare @dtAuditDate DateTime           --审核日期

 

  declare @OldvSingleID varchar(255)      --源表ID

  declare @vSingleID int                  --单表流水号

  declare @vOrganizationCode varchar(255) --分支机构代码

  declare @vWarehouseCode varchar(255)    --仓库编码

  declare @vInvCode varchar(255)          --商品编码

  declare @vColorCode varchar(255)        --花色编码

  declare @nSurplusNumber varchar(255)    --结存数量

  declare @bInsert varchar(255)           --写入新数据

  declare @Direction varchar(255)         --方向

 

  declare @isError bit                    --是否有错误

  declare @ErrorInfo varchar(1024)        --错误信息

  declare @CanNegative bit                --允许负出库

 

--  外部参数

--  declare @UseDbTRAN bit                  --使用数据库事务

--  declare @vOutWarehouseNo varchar(255)   --出库单号

--  declare @vAuditor varchar(255)          --审核人

 

  set @CanNegative = 1                    --0不允许,1允许

  set @isError = 0                        --默认无错误

  set @ErrorInfo = ''                     --错误信息

  set @dtAuditDate = GetDate()            --审核日期

 

--  调试开关

--  set @vOutWarehouseNo = 'XSCK0012004000000001'

--  set @vAuditor = 'S.F.'

--  set @UseDbTRAN = 0

 

  if not Exists(Select * from OutWareHouse where (vOutWarehouseNo = @vOutWarehouseNo) and (isNull(vAuditor,'') = ''))

  begin

    Set @isError = 1

    Set @ErrorInfo = '单据不存在或者已审核!'

  end

 

  if @isError=0

  begin

 

    -- 获取现存量表流水号

    -- 1. 获取现存量编号

    -- 2. 写入临时记录到现存量表

    -- 3. 删除刚刚写入的临时记录

    -- 4. 编号递增

   

    -- 开始事务

    if @UseDbTRAN=1 BEGIN TRANSACTION

    declare cur cursor for

        select

          c.vSingleID as 现存量编号,

            b.vOrganizationCode as 分支机构代码,

            b.vWarehouseCode as 仓库编码,

            a.vInvCode as 商品编码,

            a.vColorCode as 花色编码,

            a.nOutNumber as 出库数量,

            IsNull(Convert(varchar(255),c.nSurplusNumber),'现存量无') as 结存数量,

            (Case when b.bRBFlag=1 then '+' else '-' end) as 方向

        from     OutWarehouses as a left join OutWarehouse as b on a.vOutWarehouseNo=b.vOutWarehouseNo

                                    left join CurrentStock as c on (b.vOrganizationCode=c.vOrganizationCode) and (b.vWarehouseCode=c.vWarehouseCode) and (a.vInvCode=c.vInvCode) and (a.vColorCode=c.vColorCode)

        where (b.vOutWarehouseNo = @vOutWarehouseNo) And (isNull(b.vAuditor,'') = '')

   

    Open Cur Fetch Next From Cur

      Into @OldvSingleID,

           @vOrganizationCode,

           @vWarehouseCode,

           @vInvCode,

           @vColorCode,

           @nSurplusNumber,

           @bInsert,

           @Direction

   

    -- 插入临时记录,锁定现存量表

    Select @vSingleID=Convert(decimal(38),isNull(Max(Convert(decimal(38),

        Case when vSingleID>0 and Convert(varChar(38),Convert(decimal(38),vSingleID))=Convert(varChar(38),vSingleID) then vSingleID end)),0)+1)

        from CurrentStock where ISNUMERIC(vSingleID)=1 and CharIndex('.',vSingleID)<=0 and CharIndex('e',LOWER(vSingleID))<=0

    Insert Into CurrentStock

    (vSingleID,vOrganizationCode,vWarehouseCode,vInvCode,vColorCode,nSurplusNumber)

    values(@vSingleID,@vOrganizationCode,@vWarehouseCode,@vInvCode,@vColorCode,@nSurplusNumber)

    Delete From CurrentStock where vSingleID=@vSingleID

   

    while (@@FETCH_STATUS = 0) And (@isError=0)

    begin

      -- 检查现存量表是否存在

      if @bInsert='现存量无'

      begin

        if @CanNegative = 1  --允许负出库

        begin

          -- 保存新ID到变量,作为更改现存量的查询条件

          Set @OldvSingleID = @vSingleID

          -- 1.写入新记录到现存量表

          Insert Into CurrentStock(

            vSingleID,vOrganizationCode,vWarehouseCode,vInvCode,vColorCode,nSurplusNumber)

                  values(

                    @vSingleID,

                    @vOrganizationCode,

                    @vWarehouseCode,

                    @vInvCode,

                    @vColorCode,

                    0

                  )

        end

        else

        begin                -- 不允许负出库

          -- 1.跳出处理

          -- 2.回滚

          -- 3.报告负出库的信息

          set @isError = 1

          set @ErrorInfo = '商品未入库,不允许负出库'

        end

      end

      else  -- 有现存量,检查是否会产生负库存

      if @bInsert<>''

      begin

        -- 检查是否为数值

        if ISNUMERIC(@bInsert)=0

        begin

          -- 不为数值

          -- 跳出

          set @isError = 1

          set @ErrorInfo = '现存量异常:不为数值'

        end

        -- 如果不允许负库存(@CanNegative=0)并且是减现存量则检查是否会产生负库存

        if (@Direction='-') and (@CanNegative=0)

          if (Convert(float,@bInsert)-@nSurplusNumber)<0

          begin

            -- 负库存了,跳出

            set @isError = 1

            set @ErrorInfo = '出库数大于现存量,不允许负出库'

          end

      end

   

      -- 检查方向,来至红蓝字

      if @Direction='+'

        Update CurrentStock Set nSurplusNumber=nSurplusNumber + @nSurplusNumber Where vSingleID=@OldvSingleID

      else

        Update CurrentStock Set nSurplusNumber=nSurplusNumber - @nSurplusNumber Where vSingleID=@OldvSingleID

   

      --Print @OldvSingleID

   

      if @isError=0

        Fetch Next From Cur

          Into @OldvSingleID,

               @vOrganizationCode,

               @vWarehouseCode,

               @vInvCode,

               @vColorCode,

               @nSurplusNumber,

               @bInsert,

               @Direction

      Set @vSingleID = @vSingleID + 1

    End

                            

    CLOSE Cur

    DEALLOCATE Cur

   

    if @isError=0  --没有错误

    begin

      Update

        OutWarehouse

      Set vAuditor = @vAuditor,

          dtAuditDate = @dtAuditDate

      Where vOutWarehouseNo = @vOutWarehouseNo

      set @ErrorInfo = '审核成功'

      --提交事务

      if @UseDbTRAN=1 COMMIT

    end          --产生了错误,无法审核

    else

    begin

      --回滚事务

      if @UseDbTRAN=1 ROLLBACK

    end

 

  

  end  -- 查找单据是否存在

 

  --显示执行信息

  Select  @vOrganizationCode as 机构编码,

          @vWarehouseCode as 仓库编码,

          @vInvCode as 商品编码,

          @vColorCode as 花色编码,

          @nSurplusNumber as 出库数量,

          @bInsert as 现存量,

          @Direction as 方向,

          @isError as 冲减失败,

          @ErrorInfo as 错误信息

end

 

 

GO

 

 

 

时间: 2024-10-03 05:53:51

一段出库单冲减现存量的存储过程源码的相关文章

删除一张出库单,删除明细的代码放在主表的DAO还是主表的service中。

问题描述 表设计:两张表,一张是主表,一张是明细表JAVA类:MainDAO,DetailDAO分别是主表和明细对应的DAO类MainService,DetailService分别是service类.现在要删除这张出库单,那么一般是如下:1.先删除明细表中的数据(在DetailDAO中delete方法实现)2.再删除主表的数据(在MainDAO的delete方法中实现)问题:DetailDAO的delete方法是在MainDAO中调用还是在MainService中调用??问题补充:感觉用一个se

不依赖Flash和任何JS库实现文本复制与剪切附源码下载_javascript技巧

效果图如下: 我们在网页上放置一个复制按钮,主要用来方便用户复制链接之类的复杂文本,以往的做法是,通过JS依靠Flash,甚至借助jQuery庞大的js库来实现文本复制到剪贴板的.今天我要给大家介绍的是一款极现代的,不需要flash,不依赖任何其他js库的非常小的插件,它叫clipboard.js. 查看演示 下载源码 HTML 首先加载本地clipboard.js文件. 复制代码 代码如下: <script src="clipboard.min.js"></scri

基于jquery css3实现点击动画弹出表单源码特效_jquery

下图给大家展示了使用jquery css实现的点击动画弹出表单源码,有上传表单.删除表单.发送评论表单,都是通过鼠标点击图标按钮动画弹出的表单源码特效. 效果图展示如下: 在线预览    源码下载 html代码: <div class="buttonCollection"> <div class="qutton" id="qutton_upload"> <div class="qutton_dialog&q

jQuery复制表单元素附源码分享效果演示_jquery

我们在提交表单时,有时会遇到需要重复添加多个相同表单元素,如订单信息中需要添加多个不同型号的产品.表单数据中新增字段信息等.这个时候我们可以在表单中直接放置一个"新增一项"或"复制"按钮,通过点击按钮即可实现复制表单元素. 查看演示 下载源码 HTML 本文我们通过实例介绍一款简单的基于jQuery的元素复制插件,通过调用该插件轻松实现元素复制功能. 首先载入jQuery库文件和元素复制插件duplicateElement.min.js. <script sr

如何写SQL实现:在数据表中增加一列,该列的值是出库数的累加 (按制单日期升序累加)

问题描述 如何写SQL实现:在数据表中增加一列,该列的值是出库数的累加 (按制单日期升序累加) 如上图,在数据表中增加一列[累计出库数],累计出库数的值等于出库数的累加数(按制单日期升序累加),如何写SQL实现 解决方案 Oracle有现成的lead,lag函数 其他数据库看下面我的博客 sqlserver http://blog.csdn.net/danielinbiti/article/details/45308867 mysqlhttp://blog.csdn.net/danielinbi

银狐库存管家销售出库图文教程

  销售出库 1).进入应用桌面,如下图所示,点击[销售出库]图标 2).首先填写完出库相关的信息:出库类型,所在仓库,出库日期,客户名称,经办人,备注等;接下来选择要出库的产品,如下图所示,只需要在表格的"产品名称"列中输入产品的关键字,系统就能够智能的下拉显示所匹配的产品,选中要插入的产品. 3).输入商品各规格对应的数量,以及销售单价 4).同样的方法,继续添加完其他的出库产品,点击[确定]提交 5).自动审核与手工审核 如果在[系统设置]中启用了自动审核(默认是启用),在添加入

急求出库单打印程序!!

问题描述 急需一套出库单打印程序,要求如下:1.实现基本人员维护.权限管理2.实现对入库物品信息的录入,增添,修改,查询.删除功能,对于普通人员只允许录入.修改.删除,管理员有权限查看并提出修改意见.3.实现对入库单填写程序的规范化管理(即管理员可以审核填表的合理化程度,并提供反馈意见)4.用户可以及时查看反馈信息,修改不合格项目5.实现对表格的套打功能,打印机本人可以提供(ps:所需表格本人已经绘制完毕)空余时间赚点零花钱的好项目!!有意向的请与我联系:QQ:8114091,单位要得急,如果有

网商今日集体结束“打烊期”:积压订单集中出库

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   今日集体结束打烊期 积压订单集中出库 网商节后第一周再迎物流考验 在长达10天的春节打烊期结束后,大多数网商将于今日迎来龙年首个工作日.而积压了10天的订单在节后第一天就开始考验网商和物流的承受能力. "不打烊"商家凤毛麟角 即使春节期间消费者会有集中消费需求,但坚持客服在线.物流发货的商家仍是少数.即使是独占1/3市场份额的国内独立B2C老

解析php入库和出库

数据放入数据库和取出来显示在页面需要注意什么 入库时 $str=addslashes($str); $sql="insert into `tab` (`content`) values('$str')"; 出库时 $str=stripslashes($str); 显示时 $str=htmlspecialchars(nl2br($str)) ; <?//--标题,名字等字段入库处理(去首尾空格)functiontrans_string_trim($str){ $str=trim($