交易通知以验证发票价值不超过采购订单价值

2020-09-24 10:26发布

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

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


嗨!

我一直在处理"交易通知",以便在值大于基本单据值时阻止发票过帐。 即使按行项目过帐,发票值也不应超过基本单据余额(DocTotal和PaidToDate之间的差额)。 这是出于控制财务的目的,因为目前我们的批准是在采购订单级别。 我有下面编写的代码,但在一定程度上可以正常工作,但似乎缺少了一些东西。 它适用于某些发票,但不适用于从采购订单行过帐发票的情况。 即使发票和PO值或余额匹配,该过程仍将执行并给出错误并防止过帐。

请协助解决此问题。 我可能会缺少一些东西。 如有任何疑问,请询问。 预先感谢。

-麦克唐纳

 -----如果单据值大于基本单据值和/或余额(则DocTotal和PaidToDate之间存在差异),则冻结A/P发票的过帐




 如果@transaction_type IN('A')和@object_type ='18'
 开始
 如果存在(选择T0.DocEntry
 从OPCH T0
 内连接PCH1 T1开启T1.DocEntry = T0.DocEntry
 T2.DocEntry = T1.BaseEntry上的内部联接OPOR T2
 按T0.DocEntry,T2.DocTotal,T2.DocTotal,T2.PaidToDate分组
 拥有((SUM(T1.LineTotal))>(T2.DocTotal-T2.PaidToDate))和T0.DocEntry = @list_of_cols_val_tab_del)
 开始
 SELECT @Error = 18,@ error_message ='发票值大于基本单据值和/或余额'
 结束
 结束




 -----
 

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

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


嗨!

我一直在处理"交易通知",以便在值大于基本单据值时阻止发票过帐。 即使按行项目过帐,发票值也不应超过基本单据余额(DocTotal和PaidToDate之间的差额)。 这是出于控制财务的目的,因为目前我们的批准是在采购订单级别。 我有下面编写的代码,但在一定程度上可以正常工作,但似乎缺少了一些东西。 它适用于某些发票,但不适用于从采购订单行过帐发票的情况。 即使发票和PO值或余额匹配,该过程仍将执行并给出错误并防止过帐。

请协助解决此问题。 我可能会缺少一些东西。 如有任何疑问,请询问。 预先感谢。

-麦克唐纳

 -----如果单据值大于基本单据值和/或余额(则DocTotal和PaidToDate之间存在差异),则冻结A/P发票的过帐




 如果@transaction_type IN('A')和@object_type ='18'
 开始
 如果存在(选择T0.DocEntry
 从OPCH T0
 内连接PCH1 T1开启T1.DocEntry = T0.DocEntry
 T2.DocEntry = T1.BaseEntry上的内部联接OPOR T2
 按T0.DocEntry,T2.DocTotal,T2.DocTotal,T2.PaidToDate分组
 拥有((SUM(T1.LineTotal))>(T2.DocTotal-T2.PaidToDate))和T0.DocEntry = @list_of_cols_val_tab_del)
 开始
 SELECT @Error = 18,@ error_message ='发票值大于基本单据值和/或余额'
 结束
 结束




 -----
 
付费偷看设置
发送
5条回答
代楠1984
1楼-- · 2020-09-24 11:18

麦当劳嗨,

尝试此查询,希望它能起作用。

如果@transaction_type IN('A')和@object_type ='18'则开始(如果从OPCH T0内联接PCH1 T1到T1.DocEntry = T0.DocEntry内联接OPOR T2在T2.DocEntry上选择T0.DocEntry = T1.BaseEntry内部联接POR1 T3在T3.DocEntry上= T2.DocEntry(T1.LineTotal)>(T3.LineTotal)或(T1.Price)>(T3.Price)和T0.DocEntry = @list_of_cols_val_tab_del)开始选择 @Error = 18,@ error_message ='发票值大于基本单据值和/或余额'END END

使用Krgds

湿婆

渐行渐远_HoldOn
2楼-- · 2020-09-24 11:26

嗨麦克唐纳,

您能告诉我测试中涉及的步骤吗? 我将调整代码,然后再次发送。

使用Krgds

湿婆

落灬小鱼
3楼-- · 2020-09-24 11:30

嗨,

尝试一下,

 IF @ transaction_type IN('A')AND @ object_type ='18'BEGINIFEXISTS(SELECT T0.DocEntry
 从OPCH T0
 INNERJOIN PCH1 T1在T1.DocEntry = T0.DocEntry
 T2.DocEntry = T1.BaseEntry上的INNERJOIN OPOR T2

 其中T1。[BaseType] = 22
 GROUPBY T0.DocEntry,T2.DocTotal,T2.DocTotal,T2.PaidToDate
 HAVING((SUM(T1.LineTotal))>(T2.DocTotal-T2.PaidToDate))AND T0.DocEntry = @ list_of_cols_val_tab_del)

 BEGINSELECT @ Error = 18,
 @error_message ='发票值大于基本单据值和/或余额'
 结束
 结束



 
黑丝骑士
4楼-- · 2020-09-24 11:05
嗨,您能显示流程的图像以及在交易中所做的更改吗?
樱桃小丸子0093
5楼-- · 2020-09-24 11:31

嗨,

条件" T0.DocEntry = @list_of_cols_val_tab_del"应始终是where子句的一部分,而不必具有。

最好

Mathias

一周热门 更多>