oracle po:默认申请分组,PR自动创建PO采购订单:强制按照PR行进行分组

有时候,需要实现强制按照PR行来自动创建PO。

举个例子:假设2张PR,同一个物料,同一个需求日期等等的,在合并采购订单的时候,希望是2个PO行。

按照标准功能的处理逻辑,如果是同一个物料+需求日期(配置PO_NEED_BY_GROUPING=’Y’),在PR自动创建PO的时候,会自动合并为一行。然后发运行是2行。

如何实现?

实现的逻辑也不难,最近通过研究自动创建的包:PO_INTERFACE_S.create_documents

发现在PR自动创建PO的时候,如果po_requisition_lines_all.SUPPLIER_REF_NUMBER给的值不一样,则在自动创建的时候,PO会自动分组。这样子就可以比较简单地实现了让PO拆行的效果。

下面的代码注意这里:

AND ((pli.supplier_ref_number IS NULL AND l_supplier_ref_number IS NULL)

OR (pli.supplier_ref_number = l_supplier_ref_number))

SELECT MIN(pli.line_num) INTO x_po_line_num FROM po_lines_interface pli ,po_requisition_lines_all prl ,po_line_types_b PLT -- WHERE pli.interface_header_id = x_interface_header_id AND pli.line_num IS NOT NULL AND prl.requisition_line_id <> x_requisition_line_id AND prl.requisition_line_id = pli.requisition_line_id AND pli.line_type_id = x_line_type_id -- Any new Service line types should -- cause the SELECT to fail (i.e. should not be matched). -- AND PLI.line_type_id = PLT.line_type_id AND PLT.order_type_lookup_code NOT IN ('RATE', 'FIXED PRICE') -- -- AND NVL(pli.ITEM_ID, -1) = NVL(x_item_id, -1) AND NVL(pli.ITEM_DESCRIPTION, 'null') = NVL(x_item_description, 'null') AND ((pli.ITEM_REVISION IS NULL AND x_item_revision IS NULL) OR pli.ITEM_REVISION = x_item_revision) AND pli.UNIT_OF_MEASURE = x_unit_meas_lookup_code -- -- replace x_preferred_grade to l_line_grade and -- removed secondary unit comparison. AND ((pli.PREFERRED_GRADE IS NULL AND l_line_grade IS NULL) OR (pli.PREFERRED_GRADE = l_line_grade)) -- -- FPI GA start AND ((pli.from_header_id IS NULL AND x_source_doc_id IS NULL) OR (pli.from_header_id = x_source_doc_id)) AND ((pli.from_line_id IS NULL AND x_source_doc_line_id IS NULL) OR (pli.from_line_id = x_source_doc_line_id)) AND (NVL(l_needby_prf, 'Y') = 'N' -- Bug 3201308 OR ((pli.need_by_date IS NULL AND x_need_by_date IS NULL) OR (TO_CHAR( pli.need_by_date - (TO_NUMBER( SUBSTR ( TO_CHAR (pli.need_by_date ,'DD-MM-YYYY HH24:MI:SS') ,18 ,2)) / 86400) ,'DD-MM-YYYY HH24:MI:SS') = TO_CHAR( x_need_by_date - (TO_NUMBER( SUBSTR ( TO_CHAR (x_need_by_date ,'DD-MM-YYYY HH24:MI:SS') ,18 ,2)) / 86400) ,'DD-MM-YYYY HH24:MI:SS')))) AND (NVL(l_shipto_prf, 'Y') = 'N' -- Bug 3201308 OR EXISTS (SELECT 'x' FROM HR_LOCATIONS HRL WHERE PRL.deliver_to_location_id = HRL.location_id AND NVL(HRL.ship_to_location_id, HRL.location_id) = x_ship_to_location_id UNION ALL SELECT 'x' FROM HZ_LOCATIONS HZ WHERE PRL.deliver_to_location_id = HZ.location_id AND HZ.location_id = x_ship_to_location_id)) AND (NVL(l_shipto_prf, 'Y') = 'N' -- Bug 3201308 OR ((pli.ship_to_organization_id IS NULL AND x_destination_org_id IS NULL) OR (pli.ship_to_organization_id = x_destination_org_id))) -- FPI GA end -- CONSIGNED FPI start AND ((pli.consigned_flag IS NULL AND x_consigned_flag IS NULL) OR (pli.consigned_flag = x_consigned_flag)) -- CONSIGNED FPI End AND (pli.TRANSACTION_REASON_CODE IS NULL OR pli.TRANSACTION_REASON_CODE = NVL(x_transaction_reason_code, pli.TRANSACTION_REASON_CODE)) AND NVL(pli.oke_contract_header_id, -1) = NVL(x_oke_contract_header_id, -1) AND NVL(pli.oke_contract_version_id, -1) = NVL(x_oke_contract_version_id, -1) AND NVL(pli.vendor_product_num, -1) = NVL(x_vendor_product_num, -1) AND NVL(pli.bid_number, -1) = NVL(x_bid_number, -1) AND NVL(pli.bid_line_number, -1) = NVL(x_bid_line_number, -1) AND NVL(pli.orig_from_req_flag, 'Y') <> 'N' -- AND ((pli.contract_id IS NULL AND l_contract_id IS NULL) OR (pli.contract_id = l_contract_id)) -- -- AND ((pli.supplier_ref_number IS NULL AND l_supplier_ref_number IS NULL) OR (pli.supplier_ref_number = l_supplier_ref_number)) -- ;

当前,前提是这个栏位po_requisition_lines_all.SUPPLIER_REF_NUMBER您的系统没使用。

Trm上查询了这个栏位的作用:

0818b9ca8b590ca3270a3433284dd417.png

就是:供应商的参考编号

而且在申请界面上也没发现维护这个值的栏位。所以猜测应该是一个参考的值的栏位。借用它来实现分组的效果应该问题不大。

大不了在新增之后,如果是属于客户化分组用的,再用触发器什么的将它清掉即可。

接着说一下具体如何实现:

1 首先,功能要考虑扩展性,所以,添加一个Profile的配置是必须的:

XYG_ALP_REQ_LINE_GROUPING

XYG-客户化应用

XXX:使用默认自动创建PO依据申请行分组

使用默认自动创建PO依据申请行分组

SQL=”select lookup_code, meaning \”Grouping\”

into :profile_option_value, :visible_option_value

from fnd_lookups

where lookup_type = ‘YES_NO’”

Column=”\”Grouping\”(*)”

0818b9ca8b590ca3270a3433284dd417.png

2 接着,在申请行添加一个触发器:

CREATE OR REPLACE TRIGGER XYG_ALP_REQ_LINES_TRG01 /****************************************************************************** NAME: XYG_ALP_REQ_LINES_TRG01 PURPOSE: 主要是利用supplier_ref_number栏位强制拆分采购订单行用 REVISIONS: Ver Date Author Description --------- ---------- --------------- ------------------------------------ 1.0 2017/03/08 Sam.T 1. Created this Trigger. ******************************************************************************/ BEFORE INSERT ON PO.po_requisition_lines_all REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW --- BEGIN IF NVL(fnd_profile.VALUE('XYG_ALP_REQ_LINE_GROUPING'),'N')='Y' THEN :NEW.supplier_ref_number:=CASE WHEN :NEW.supplier_ref_number IS NOT NULL THEN :NEW.supplier_ref_number||'->'||:NEW.REQUISITION_LINE_ID ELSE :NEW.REQUISITION_LINE_ID END;

END IF;

END XYG_ALP_REQ_LINES_TRG01;

测试:

基本上就可以达到效果:

0818b9ca8b590ca3270a3433284dd417.png

后台看数据:

0818b9ca8b590ca3270a3433284dd417.png

—大功告成!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cserialport 循环发送信号_C++信号处理

免费C语言教程&#xff1a;阿里云大学——开发者课堂(点击文章最下方“了解更多”)信号是由操作系统传给进程的中断&#xff0c;会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上&#xff0c;可以通过按 CtrlC 产生中断。有些信号不能被程序捕获&#xff0c;但…

不要在foreach循环里进行元素的remove/add操作。remove元素请使用iteratot方式,如果并发操作,需要对Iterator对象加锁

不要在foreach循环里进行元素的remove/add操作。remove元素请使用iteratot方式&#xff0c;如果并发操作&#xff0c;需要对Iterator对象加锁

Win7和Win10操作系统优劣对比,看完你就懂了!

一直以来&#xff0c;针对微软的Windows系统讨论最热烈的莫过于win7和win10系统了&#xff0c;两者究竟谁好谁坏&#xff1f;小编今天就带大家从几个不同的角度分析两者的优缺点&#xff0c;如有不对&#xff0c;欢迎大家指正&#xff01;一、win 7系统的几大特点&#xff1a;1…

dhcp 续约review报文_Linux的私房菜 DHCP

译DHCP服务DHCP的全称是动态主机配置协议&#xff0c;用来自动给客户机分配TCP/IP信息的网络协议。Dynamic Host Configuration Protocol&#xff0c;前身是BOOTP协议&#xff0c;是一个局域网的网络协议&#xff0c;使用UDP协议工作&#xff0c;统一使用两个IANA分配的端口&am…

硬件编程:硬件开发中常用的几种通信接口总结

在嵌入式系统中&#xff0c;板上通信接口是指用于将各种集成电路与其他外围设备交互连接的通信通路或总线。以下内容为常用板上通信接口&#xff1a;包括I2C、SPI、UART、1-Wire&#xff1a;I2C总线I2C总线是一种同步、双向、半双工的两线式串行接口总线。这里&#xff0c;半双…

集合初始化时,指定集合初始值大小

集合初始化时&#xff0c;指定集合初始值大小

hadoop常用linux命令,# Hadoop学习笔记(二)——Linux常用命令

ifconfigLinux ifconfig命令用于显示或设置网络设备。ifconfig可设置网络设备的状态&#xff0c;或是显示目前的设置。ifconfig.png语法ifconfig [网络设备][down up -allmulti -arp -promisc][add][del][][io_addr][irq][media][mem_start][metric][mtu][netmask][tunnel][-br…

数据库:计算地球上两个坐标点之间里程

今天给大家分享计算地球上两个坐标点之间里程不同数据库版本的脚本。1、SQLServer脚本–-计算地球上两个坐标点&#xff08;经度&#xff0c;纬度&#xff09;之间距离sql函数 CREATE FUNCTION [dbo].[fnGetDistance](LatBegin REAL , LngBegin REAL, LatEnd REAL, LngEnd REA…

使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历

使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历

【Qt开发】Qt Creator在Windows上的调试器安装与配置

Qt Creator在Windows上的调试器安装与配置 如果安装Qt时使用的是Visual Studio的预编译版&#xff0c;那么很有可能就会缺少调试器&#xff08;Debugger&#xff09;&#xff0c;而使用MSVC的Qt对应的原生调试器是CDB&#xff08;对应MinGW的Qt使用GDB调试器&#xff09;。本文…

linux rsync 带密码,Linux配置ssh无密码验证,rsync

1.我先声明主机pangzhiminglinux 192.168.200.129CentOS2 192.168.200.130方法大概是这样&#xff1a;如果想从pangzhiminglinux的普通用户无验证登录到CentOS2的普通用户(单方向的)&#xff0c;那么就要在两个主机都建立一个相同名字&#xff0c;相同密码的普通…

Java:Lombok插件用法笔记

1、Lombok是什么东东&#xff1f;官方介绍Lombok项目是一个Java库&#xff0c;它可以自动嵌入你的编辑器和构建工具中&#xff0c;从而减少你的代码量。永远不要再写另一个getter或equals方法&#xff0c;它带有一个注释的你的类有一个功能全面的生成器&#xff0c;自动化你的日…

bzoj2058: [Usaco2010 Nov]Cow Photographs(逆序对)

题目大意&#xff1a;给出n个数的序列&#xff0c;每次可以交换相邻的两个数&#xff0c;问把序列变成编号i在编号i1左边&#xff0c;编号1在编号n右边(一个环)最少需要多少步。如&#xff1a;35421最少交换两次变为34512。 一开始看到这题&#xff0c;只会O(n)&#xff0c;后来…

sap实施和开发哪个前景_2021年了!还不知道 SAP顾问的职业前景?

一、先说什么是SAP。百度词条的解释&#xff1a;SAP有两个意思一为“System Applications and Products”的简称&#xff0c;是SAP公司的产品——企业管理解决方案的软件名称。也代指SAP公司。二为SAP开发的ERP&#xff08;Enterprise-wide Resource Planning&#xff09;软件名…

Linux找最大最小值的命令,Linux中awk命令正确的求最大值、最小值、平均值、总和...

test.txt文件内容&#xff1a;911352142118求最大值&#xff1a;awk BEGIN {max 0} {if ($10 > max0) max$1} END {print "Max", max} test.txtMax 118求最小值&#xff1a;awk BEGIN {min 65536} {if ($10 < min0) min$1} END {print "Min", min}…

​分布式数据库技术基础:数据分布介绍

1、数据分布的定义数据分布是指在分布式环境中通过合理分布数据&#xff0c;提高数据操作自然并行度&#xff0c;以达到最优的执行效率的目的。在构建分布式数据库系统运行环境时&#xff0c;必须考虑数据如何分布在系统的各个场地上。数据分布主要关注的问题是在分布式数据中&…

uname命令 linux,Linux uname命令详解

Linux uname命令用于显示系统信息。uname可显示电脑以及操作系统的相关信息。语法参数&#xff1a;uname [参数]参数&#xff1a;-a或--all&#xff1a;显示全部的信息&#xff1b;-m或--machine&#xff1a;显示电脑类型&#xff1b;-n或-nodename&#xff1a;显示在网络上的主…

分布式数据库技术基础:数据分片介绍

1、数据分片定义数据分片也成为数据分割&#xff0c;是分布式数据库的特征之一。一般在一个分布式数据库中&#xff0c;全局数据库是由各个局部数据库逻辑组合而成的&#xff0c;反之各个局部数据库是由全局数据库的某种分割逻辑而得的。数据分片得到的各部分元组成为该关系的逻…