SAP B1 用存储过程控制生产收货(收货数量+已完成数量不能大于计划数量)

本文介绍如何在SAP Business One 9.2环境中通过修改存储过程SBO_SP_TransactionNotification来实现对生产收货数量的有效控制,确保收货数量加上已完成数量不会超过计划数量。

软件环境:SAP business One 9.2 (PL10)

解决方案:修改后台数据库的存储过程(SBO_SP_TransactionNotification),添加控制单据操作的业务逻辑代码,代码如下:

--生产收货,收货数量加已完成数量不能大于计划数量。注:OWOR中的CmpltQty实际为输入的收货数量加上原来的完成数量

if(@object_type='59')
begin
 IF @transaction_type IN('A','U')
 begin

declare @itemcode  varchar(20)
declare @BaseRef  varchar(20)
declare @Quantity  numeric(19,6)
declare @recnum  numeric(19,6)

DECLARE YOUCURNAME CURSOR  FOR SELECT T1.BaseRef,T1.ItemCode,ISNULL(T1.Quantity,0) from OIGN T0 INNER JOIN IGN1 T1 ON T0.DocEntry = T1.DocEntry WHERE T1.DocEntry=@list_of_cols_val_tab_del
                OPEN YOUCURNAME
                fetch next from YOUCURNAME into @BaseRef,@itemcode,@Quantity
                while @@fetch_status<>-1
                    begin
                        SET @recnum = (SELECT (T1.CmpltQty-T1.PlannedQty) as recnum from OWOR T1 WHERE T1.ItemCode= @itemcode AND T1.DocNum=@BaseRef)
                        if(@recnum > 0)
                        BEGIN
                        set @error=1
                        set @error_message=N'收货数量不能大于计划数量'
                        END  
                    
                    -----您要执行的操作写在这里
                    fetch next from YOUCURNAME into @BaseRef,@itemcode,@Quantity
                    END
                
                close YOUCURNAME
                deallocate YOUCURNAME

  end
end

最后,感谢“博客园”的博主“mingxiu”的思路和源码,原文出处:https://www.cnblogs.com/sapb1/p/5435367.html

SAP S/4HANA Cloud 系统中,调整销售订单数量,特别是在采购订单已收货的情况下移除相关联的数量,涉及多个模块和流程的交互。以下是一个详细的步骤说明,涵盖了如何处理此类场景: ### 调整销售订单数量的流程 1. **查看销售订单状态** 在调整销售订单之前,首先需要确认该订单的状态是否允许修改。如果销售订单已经关联了采购订单,并且采购订单已经完成收货,则直接修改销售订单的数量可能受到系统限制。 2. **检查与采购订单的关联情况** 如果销售订单与采购订单存在关联,并且采购订单已经完成了货物的接收(即已经执行了收货操作),则不能直接减少销售订单中的数量。这是因为系统通常会将采购订单与销售订单进行严格的匹配,以确保库存和财务数据的一致性。 3. **取消采购订单的收货凭证** 为了能够调整销售订单的数量,需要先撤销与之相关的采购订单的收货凭证(Goods Receipt)。可以通过事务代码 `MIGO` 或者在 SAP Fiori 应用中找到相应的物料凭证并执行“冲销”操作。这一步完成后,采购订单的状态将恢复为未收货状态。 4. **修改销售订单数量** 在采购订单的收货凭证被撤销后,可以进入销售订单维护界面(使用事务代码 `VA02` 或 SAP Fiori 销售订单应用),根据实际需求减少或调整销售订单中的数量。保存更改后,系统会自动更新相关的计划交货日期、金额等字段。 5. **重新生成采购订单(如适用)** 如果销售订单的调整导致需要重新创建采购订单,则应在系统中删除原有的采购订单(前提是尚未发生任何财务过账),然后根据新的销售订单信息重新生成采购订单。也可以配置系统在销售订单变更时自动触发采购订单的更新。 6. **重新执行收货操作(如适用)** 如果仍然需要从供应商处获取物料,则可以在更新后的采购订单基础上重新执行收货操作。此时,系统将根据最新的订单数量生成对应的库存增加记录,并更新财务模块中的应付账款信息[^2]。 7. **财务影响处理** 若之前的收货操作已经生成了财务凭证(如借记库存商品,贷记应付账款),则冲销原始收货凭证的同时也会冲销相应的财务凭证。在重新收货后,系统将自动生成新的财务凭证,确保总账科目余额的准确性[^4]。 8. **监控订单状态** 最后,在 SAP SD 模块中持续监控销售订单的状态,确保所有后续操作(如发货、开票)都能顺利进行。可以使用订单进度报告来跟踪每个阶段的完成情况[^1]。 ### 示例:通过 MIGO 冲销收货凭证 ```abap * 进入 MIGO 事务码 * 选择 "A08 - Goods receipt for purchase order" * 输入采购订单号和项目编号 * 点击 "Document → Reversal" 执行冲销操作 ``` ### 注意事项 - 在执行上述操作前,建议对相关数据进行备份,防止误操作导致业务中断。 - 如果销售订单已经产生发票(Billing Document),则还需要考虑发票冲销的问题。 - 对于跨公司交易,需特别注意不同公司代码之间的应收应付关系,避免出现不平衡的财务数据[^3]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值