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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

软件环境: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系统中采购订单收货时与订购数量相关的处理方法及配置指南 在SAP系统中,采购订单(Purchase Order, PO)的收货处理是一个关键环节,它直接影响到库存管理和财务核算。当涉及采购订单收货时,系统提供了多种方式来处理订购数量和实际收货数量之间的差异。以下内容详细描述了相关处理方法及配置指南。 #### 1. 采购订单收货的基本流程 在SAP系统中,采购订单的收货可以通过事务代码`MIGO`完成。此事务代码支持多种收货场景,并允许用户根据实际业务需求调整收货数量。如果实际收货数量与订购数量不一致,系统会记录差异并触发后续处理逻辑[^3]。 #### 2. 配置允许的收货差异 为了处理订购数量与实际收货数量之间的差异,SAP提供了“过冲收货”(Overdelivery Tolerance)和“欠收货”(Underdelivery Tolerance)的配置选项。这些配置可以在物料主数据或采购视图中进行设置: - **过冲收货**:允许实际收货数量超过订购数量的最大百分比或固定值。 - **欠收货**:允许实际收货数量低于订购数量的最大百分比或固定值。 配置路径为: `SAP Menu -> Logistics -> Materials Management -> Purchasing -> Material/Service Master -> Change` 在此界面中,可以定义具体的容忍限度值[^4]。 #### 3. 收货数量的处理逻辑 当实际收货数量超出或少于订购数量时,SAP系统会根据以下规则处理: - 如果实际收货数量在容忍范围内,则系统自动接受该数量并更新库存。 - 如果实际收货数量超出容忍范围,系统将阻止收货操作,并要求用户手动确认或调整数量[^5]。 #### 4. 特殊场景的处理 对于某些特殊场景,例如部分收货或多次收货SAP系统也提供了相应的处理机制: - **部分收货**:允许用户在一次或多次操作中完成订购数量收货。每次收货后,系统会更新剩余待收货数量。 - **超额收货**:当实际收货数量超出订购数量时,系统会根据过冲容忍度决定是否接受超额部分。 #### 5. 配置示例 以下是一个简单的配置示例,展示如何在SAP系统中启用过冲和欠收货容忍度: ```abap CALL TRANSACTION 'OPP1' USING itab MODE 'E' MESSAGES INTO msg_tab. ``` 上述代码片段展示了如何通过ABAP编程调用事务代码`OPP1`,以实现对物料主数据中容忍度的批量配置[^6]。 ### 注意事项 - 在配置容忍度时,需确保其符合企业的业务政策和合同条款。 - 如果企业不允许任何数量差异,则应将容忍度设置为0%。 - 系统管理员需定期检查和维护相关配置,以避免因配置错误导致的业务中断。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值