交易通知,用于验证与基础采购订单金额相关的应付账款金额

2020-09-06 06:53发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我编写了一个存储过程,该过程可以验证AP发票中的金额是否与其采购订单相差0.05或5%。 如果发票金额超出给定的差异,则应阻止过帐。 我尝试多次调整代码以给出适当的响应未成功,但是我肯定在表链接,JOINS或条件中缺少某些内容。 以下是我所拥有的:

如果@transaction_type ='A'和@Object_type ='18'


 开始


 如果存在(从[OPCH]内部联接中选择[OPCH] .DocEntry [OPCH] .DocEntry = [POR1] .TrgetEntry


 [OPCH] .DocTotal <(SELECT SUM([POR1] .LineTotal)-(SUM([POR1] .LineTotal)* 0.05)来自[POR1],在[POR1] .TrgetEntry = [OPCH] .DocEntry AND [OPCH]  .DocEntry = @list_of_cols_val_tab_del)或[OPCH] .DocTotal>(SELECT SUM([POR1] .LineTotal)+(SUM([POR1] .LineTotal)* 0.05)FROM [POR1]在[POR1] .TrgetEntry = [OPCH]  .DocEntry AND [OPCH] .DocEntry = @list_of_cols_val_tab_del)和[OPCH] .DocEntry = @list_of_cols_val_tab_del)


 开始




 SELECT @Error = 18,@error_message ='不允许过帐...发票值超出定义的差异'


 结束
 结束
 

任何建议将不胜感激。

-麦克唐纳

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我编写了一个存储过程,该过程可以验证AP发票中的金额是否与其采购订单相差0.05或5%。 如果发票金额超出给定的差异,则应阻止过帐。 我尝试多次调整代码以给出适当的响应未成功,但是我肯定在表链接,JOINS或条件中缺少某些内容。 以下是我所拥有的:

如果@transaction_type ='A'和@Object_type ='18'


 开始


 如果存在(从[OPCH]内部联接中选择[OPCH] .DocEntry [OPCH] .DocEntry = [POR1] .TrgetEntry


 [OPCH] .DocTotal <(SELECT SUM([POR1] .LineTotal)-(SUM([POR1] .LineTotal)* 0.05)来自[POR1],在[POR1] .TrgetEntry = [OPCH] .DocEntry AND [OPCH]  .DocEntry = @list_of_cols_val_tab_del)或[OPCH] .DocTotal>(SELECT SUM([POR1] .LineTotal)+(SUM([POR1] .LineTotal)* 0.05)FROM [POR1]在[POR1] .TrgetEntry = [OPCH]  .DocEntry AND [OPCH] .DocEntry = @list_of_cols_val_tab_del)和[OPCH] .DocEntry = @list_of_cols_val_tab_del)


 开始




 SELECT @Error = 18,@error_message ='不允许过帐...发票值超出定义的差异'


 结束
 结束
 

任何建议将不胜感激。

-麦克唐纳

付费偷看设置
发送
4条回答
me_for_i
1楼 · 2020-09-06 07:20.采纳回答

你好

您应该知道,在事务处理过程中始终要处理当前文档。您具有当前文档字段。 您可以使用此信息来访问旧文档。

您可以在过程中定义变量。 例如,在这种情况下,您可以这样做:

如果@transaction_type ='A'和@Object_type ='18'
 开始
 DECLARE @BaseEntry INT =(从OPCH的DocEntry中选择BaseEntry = @list_of_cols_val_tab_del);
 DECLARE @UpperLimit FLOAT =(从DocEntry中的SELECT DocTotal +(DocTotal * 0.05)= @BaseEntry);
 DECLARE @LowerLimit FLOAT =(从DocEntry中的SELECT DocTotal-(DocTotal * 0.05)= @BaseEntry);

 如果存在(从OPCH中的DocEntry中选择DocEntry = @list_of_cols_val_tab_del和DocTotal在@LowerLimit和@UpperLimit之间)
 开始
 SELECT @Error = 18,@error_message ='不允许过帐...发票值超出定义的差异'
 结束
 结束
 
spaceman01
2楼-- · 2020-09-06 07:44

由于我们的SAPB1设置未使用OPCH表而不是PCH1的BaseEntry,并且如果金额超出方差,我想阻止过帐,因此我对您的代码做了一些小修改以给出 我正在寻找的结果。

如果@transaction_type ='A'和@Object_type ='18'
 开始
 声明@BaseEntry INT =(从PCH1中选择TOP 1个BaseEntry,其中DocEntry = @list_of_cols_val_tab_del并且BaseEntry不为空);
 DECLARE @UpperLimit FLOAT =(从DocEntry中的SELECT DocTotal +(DocTotal * 0.05)= @BaseEntry);
 DECLARE @LowerLimit FLOAT =(从DocEntry中的SELECT DocTotal-(DocTotal * 0.05)= @BaseEntry);

 如果存在(从OPCH中选择DocEntry,而DocEntry = @list_of_cols_val_tab_del和DocTotal不在@LowerLimit和@UpperLimit之间)
 开始
 SELECT @Error = 18,@error_message ='不允许过帐...发票值超出定义的差异'
 结束
 结束
 

非常感谢您的帮助。

CPLASF-自律
3楼-- · 2020-09-06 07:43

嗨,

如果您始终从PO到AP发票进行处理,则可以在上面的存储过程中使用下面的查询,

SELECT T2。[DocEntry]来自OPOR T0内连接POR1 T1在T0上。[DocEntry] = T1。[DocEntry]左连接T2上的PCH1 T2。[BaseEntry] = T1。[DocEntry]和T2。[ BaseLine] = T1。[LineNum] T2上的内联接选项T3。[DocEntry] = T3。[DocEntry] W2。[BaseType] = 22

问候,

Nagarajan

CJones
4楼-- · 2020-09-06 07:25

感谢您的指导,我现在了解了这两个营销文档之间的链接。

一周热门 更多>