首页 > 代码库 > 采购单据审批研究

采购单据审批研究

流程

采购模块允许你使用通用的流程审批很多不同单据类型。

Oracle采购模块中的单据审批路径包括如下单据类型:

 

  • 采购申请
  • 内部申请
  • 标准采购订单
  • 计划采购订单
  • 一揽子采购协议
  • 全球采购协议
  • 一揽子采购协议发放
  • 计划发放
  • 合同采购协议
  • 全球合同采购协议

主要采购类型的审批路径被分解为以下两个工作流:

  • 采购订单审批工作流(poxwfpoa.wft)
  • 采购申请审批工作流(poxwfrqa.wft)

下面的项目类型在两个主要的工作流中都会讲到:

poxwfpoa.wft
- POAPPRV

poxwfrqa.wft
- REQAPPRV



总体上的审批路径逻辑如下:

  1. 创建并完成需要提交的单据
  2. 发起单据审批流程
  3. 如果‘所有者可以审批’被允许,单据审批将在这个层次发生
  4. 如果单据需要额外的用户审批,单据将按以下路径审批
  5. 不论审批在哪个级别发生,审批层次都会被调用
  6. 采购模块提供下面的单据审批活动:

-    保留或非保留(如果使用保留/ 预算控制)

-提交审批

-转发

     7.通过下面的一种选择或组合发出供应商通知

-打印选项(单据一旦批准会自动打印)

-传真

-电子邮件

-电子数据交换(EDI)

-可扩展标记语言

     8.提交审批来检查单据的完整性并且在一个适当的活动状态

 

 

流程简述

REQAPPRV

AME_APPROVAL_LIST_ROUTING

  • 使用AME的审批列表路径
  • 通过AME 审批列表处理单据审批路径
  • 在AME审批列表里处理审批通知和回复审批人

APPROVAL_LIST_ROUTING

  • 审批列表路径
  • 通过主审批列表处理单据审批路径
  • 在主审批列表里处理审批通知和回复审批人

APPROVAL_ROUTING_CHOOSER

  • 审批路径选择
  • 处理决定哪个路径被调用(标准工作流或AME)
  • 调用:AME_APPROVAL_LIST_ROUTING
  • 调用:APPROVAL_LIST_ROUTING

APPROVAL_REQ_SUB_PROCESS

  • 批准采购申请
  • 在IS_DOCUMENT_APPROVE被调用时处理决定路径
  • 处理部分通知和回应处理
  • 调用: DOC_STATE_CHECK_BEFORE_APP
  • 调用: DOC_SUBMISSION_CHECK_BEF_APP
  • 调用: DOC_APPROVE_SUB_PROCESS

BUILD_APPROVAL_LIST_PROCESS

  • 建立审批列表
  • 检查是否当前的审批列表已经存在
  • 处理建立默认的审批列表决定

CHECK_REQUIRE_APPROVAL_PROCESS

  • 审批路径需要吗?
  • 检查所有者是否可以审批
  • 调用: VERIFY_APPROVER_AUTH_PROCESS

DOC_APPROVE_SUB_PROCESS

  • 单据管理器审批子流程
  • 处理调用APPROVE_REQUISITION功能

DOC_STATE_CHECK

  • 单据状况检查子流程
  • 处理调用VERIFY_STATE_CHECK_APPROVE功能

DOC_STATE_CHECK_BEFORE_APP

  • 批准子流程前的单据状况检查
  • 处理一个调用VERIFY_STATE_CHECK_APPROVE 的功能

MAIN_REQAPPRV_PROCESS

  • 主要的采购申请审批
  • 处理采购申请审批的主要调用和流
  • 调用: START_OF_APPROVE_REQ
  • 调用: VERIFY_REQUISITION
  • 调用: BUILD_APPROVAL_LIST_PROCESS
  • 调用: CHECK_REQUIRES_APPROVAL_PROCESS
  • 调用: APPROVAL_ROTUING_CHOOSER
  • 调用: REJECT_REQUISITION_PROCESS
  • 调用: APPROVE_REQ_SUB_PROCESS

 

NOTIFY_APPROVER_CHOOSER

  • 通知审批人选择
  • 处理调用IS_FORWARD_ACTION_ALLOWED的功能
  • 调用:Calls: NOTIFY_APPROVER_PROCESS

NOTIFY_APPROVER_PROCESS

  • 通知审批人
  • 处理最初的发送到或来自审批人的审批通知
  • 处理通知提醒调用

NOTIFY_APPROVER_PROCESS_SIMPLE

  • 通知审批人(简化的)
  • 处理调用INSERT_ACTION_HISTORY的功能

NOTIFY_APPROVER_SIMPLE_AME

  • 通知在AME中的审批人(简化的)
  • 处理AME路径中的调用INSERT_ACTION_HISTORY的功能

NOTIFY_RETURN_REQ

  • 被采购员返回的采购申请通知
  • 处理调用GET_REQUISITION_DATA功能

REJECT_REQUISITION_PROCESS

  •  拒绝采购申请
  • 处理调用REJECT_REQUISITION

RESPONSE_APPROVE

  • 对审批活动进行反应
  • 审批人处理实际的审批回复活动
  • 调用: VERIFY_APPROVER_AUTH_APPROVE

RESPONSE_APPROVE_AME

  • 使用AME回应审批活动
  • 处理调用UPDATE_APPROVAL_RESPONSE_AME功能
  • 处理调用UPDATE_ACTION_HISTORY_APPROVE功能

RESPONSE_APPROVE_FORWARD

  • 回应审批和转发活动
  • 处理审批人实际的审批和转发回复活动
  • 调用: VERIFY_APPROVER_AUTH_APPROVE

RESPONSE_FORWARD

  • 回应转发活动
  • 处理调用UPDATE_APPR_LIST_RESP_FWD功能
  • 处理调用UPDATE_ACTION_HISTORY_FORWARD功能

RESPONSE_REJECT

  • 回应拒绝活动
  • 处理调用UPDATE_APPR_LIST_RESP_REJECT功能
  • 处理调用UPDATE_ACTION_HISTORY_REJECT功能

 RESPONSE_REJECT_AME

  • 使用AME回应审批活动
  • 处理调用UPDATE_APPROVAL_RESPONSE_AME功能
  • 处理调用UPDATE_ACTION_HISTORY_APPROVE功能

START_OF_APPROVE_REQ

  • 开始采购申请审批流程
  • 处理调用IS_AME_USED_FOR_APPROVAL功能
  • 处理调用FIND_APPROVAL_LIST功能
  • 处理调用GET_WORKFLOW_APPROVAL_MODE功能

VERIFY_APPROVER_AUTH_APP_FWD

  • 核实审批和转发的审批权限
  • 处理调用IS APPROVER THE PREPARER?功能
  • 处理调用VERIFY_APPROVER_AUTHORITY功能
  • 处理调用CAN_OWNER_APPROVE功能

VERIFY_APPROVER_AUTH_APPROVE

  • 为审批活动核实审批权限
  • 处理调用IS APPROVER THE PREPARER?功能
  • 处理调用VERIFY_APPROVER_AUTHORITY功能
  • 处理调用CAN_OWNER_APPROVE功能

 VERIFY_APPROVER_AUTH_PROCESS

  • 核实审批权限
  • 处理调用VERIFY_APPROVER_AUTHORITY功能

VERIFY_REQUISITION

  • 核实采购申请
  • 调用:DOC_STATE_CHECK

 

主要的采购申请审批

  

 

POAPPRV

APPROVE_AND_FORWARD_PO

  • 审批和转发采购订单
  • 调用:DOC_STATE_CHECK_APP_FWD
  • 调用:DOC_COMLETE_CHECK_APP_FWD
  • 在通知发送审批和转发活动前处理验证

APPROVE_PO_SUB_PROCESS

  • 审批采购订单
  • 调用:DOC_STATE_CHECK_BEFORE_APP
  • 调用:DOC_COMPLETE_CHECK_BEFORE_APP
  • 在通知和传递发送前处理验证

APPROVE_PO_SUB_PROCESS_CO

  • 审批采购订单(更改订单)
  • 调用:DOC_STATE_CHECK_BEFORE_APP_CO
  • 调用:DOC_COMP_CHECK_BEFORE_APP_CO
  • 在更改订单的通知和传递发送之前处理验证

CREATE_SR_AND_ASL

  • 创建来源规则和批准的供应商列表
  • 处理调用功能
  • 为采购订单审批处理来源规则和批准的供应商列表

DOC_COMP_CHECK_BEFORE_APP_CO

  • 在审批子流程(更改订单)单据完成检查
  • 处理调用SUBMISSION_CHECK功能
  • 在审批子流程调用前处理CO单据检查校验

DOC_COMPLETE_CHECK

  • 单据完成检查子流程
  • 处理调用SUBMISSION_CHECK功能
  • 处理单据检查校验

DOC_COMPLETE_CHECK_APP_FWD

  • 在审批&转发子流程之前单据完成检查
  • 处理调用功能
  • 在审批&转发子流程前处理单据检查校验

DOC_COMP_CHECK_BEFORE_APP

  • 在审批子流程前单据完成检查
  • 处理调用SUBMISSION_CHECK功能
  • 在审批子流程调用之前处理单据检查验证

DOC_RESERVE_PROCESS

  • 单据保留子流程
  • 处理调用功能
  • 为调用预保留账户处理保留活动

DOC_RESERVE_PROCESS_CO

  • 单据保留子流程(订单更改)
  • 处理调用RESERVE DOCUMENT功能
  • 为更改订单处理保留活动

DOC_STATE_CHECK

  • 单据状况检查子流程
  • 处理调用功能
  • 为采购订单审批处理单据状况检查

DOC_STATE_CHECK_FWD

  • 在审批&转发子流程前单据状况检查
  • 处理调用VERIFY_STATE_CHECK_APPROVE功能
  • 在调用审批&转发子流程前处理单据状况

DOC_STATE_CHECK_BEFORE_APP

  • 在审批子流程前单据状况检查
  • 处理调用VERIFY_STATE_CHECK_APPROVE功能
  • 在调用审批子流程前处理单据状况检查

DOC_STATE_CHECK_BEFORE_APP_CO

  • 在审批子流程(更改订单之前)单据状况检查
  • 处理调用VERIFY_STATE_CHECK_APPROVE功能
  • 在调用审批子流程前为CO处理单据状况检查

 

FIND_APPROVER

  • 找到审批人
  • 调用: VERIFY_APP_AUTH_FWD_NO_HIER
  • 调用: VERIFY_APP_AUTH_FWD_HIER
  • 处理调用FOWARD_TO_PROVIDED功能
  • 处理调用GET_APPROVAL_PATH_ID功能
  • 处理调用FORWARDING_MODE功能
  • 处理调用USE_POSITION_FLAG功能
  • 处理采购订单活动审批人的安全性

 

FORWARD_PO

  • 转发采购订单
  • 处理调用IS_PO_PRE-APPROVED-1功能
  • 处理调用FORWARD_PO_INPROCESS功能
  • 处理调用FORWARD_PO_PREAPPROVED-1功能
  • 处理调用GET_PO_DATA功能
  • 处理调用GET_PO_DATA-1功能
  • 处理采购订单审批转发活动

 

GET_ALL_CHANGES

  • 获得所有的单据更改
  • 调用: GET_CONTRACT_PO_CHANGES:
  • 调用: GET_BLANKET_PO_CHANGES
  • 调用: GET_PLANNED_PO_CHANGES
  • 调用: GET_STANDARD_PO_CHANGES
  • 调用: GET_REL_CHANGES

GET_BLANKET_PO_CHANGES

  • 获得所有的一揽子采购订单更改
  • 处理调用GET_HEADER_CHANGES功能
  • 处理调用GET_LINE_CHANGES功能
  • 处理调用GET_SHIPMENTS_CHANGES功能

 

GET_CONTRACT_PO_CHANGES

  • 获得所有的合同订单更改
  • 处理调用GET_HEADER_CHANGES功能
  •  

GET_PLANNED_PO_CHANGES

  • 获得所有的发放更改
  • 处理调用GET_HEADER_CHANGES功能
  • 处理调用GET_LINE_CHANGES功能
  • 处理调用GET_SHIPMENTS_CHANGES功能
  • 处理调用GET_DIST_CHANGES功能

GET_REL_CHANGES

  • 获得所有的发放更改
  • 处理调用GET_RELEASE_CHANGES功能
  • 处理调用GET_SHIPMENTS_CHANGES功能
  • 处理调用GET_DIST_CHANGES功能

GET_STANDARD_PO

  • 获得所有的标准订单更改
  • 处理调用GET_HEADER_CHANGES功能
  • 处理调用GET_LINE_CHANGES功能
  • 处理调用GET_SHIPMENT_CHANGES功能
  • 处理调用GET_DIST_CHANGES功能

 

MAIN_POAPPRV_PROCESS

  • 采购订单审批流程
  • 调用: VERIFY_PO
  • 调用: FIND_APPROVER
  • 调用: RETURN_PO
  • 调用: FORWARD_PO
  • 调用: VERIFIY_APPROVER_AUTH_PROC
  • 调用: NOTIFY_APPROVER_PROCESS-1
  • 调用: APPROVE_AND_FORWARD_PO
  • 调用: REJECT_PO_PROCESS
  • 调用: RESERVE_BEFORE_APPROVE-1
  • 调用: RAISE_CHANGE_EVENT3
  • 调用: APPROVE_PO_SUB_PROCESS
  • 调用: RAISE_CHANGE_EVENT2
  • 调用: RAISE_SEND_PO_EVENT
  • 调用: CREATE_SR_AND_ASL
  • 处理调用CAN_OWNER_APPROVE功能
  • 处理调用IS_FORWARD_TO_USER_NAME_VALID功能
  • 处理调用IS APPROVER ALSO THE PREPARER功能
  • 处理调用IS_PO_PRE_APPROVED功能
  • 处理调用FORWARD_TO_PROVIDED功能
  • 处理调用SET_PO_STAT_TO_PREAPPROVED功能
  • 处理调用DOES_USER_WANT_SR_ASL_CREATED功能

NOTIFY_APPROVER_PROCESS

  • 通知审批人
  • 调用:NOTIFY_APPROVER_SUBPROCESS
  • 处理调用功能PO_NEW_COMMUNICATION
  • 处理调用功能GET_APP_NOTIFICATION_ATTRIBUTE
  • 处理调用功能IS_FORWARD_TO_VALID
  • 处理建立和发送通知活动给审批人

NOTIFY_APPROVER_SUBPROCESS

  •  通知审批人子流程
  • 处理调用功能PO_NEW_COMMUNICATION
  • 为建立和发送通知活动给审批人处理子流程

 

 

主要的采购订单审批



出错诊断:

跟踪

 

以下步骤可用来跟踪在审批流程用使用的SQL语句

1.在采购模块中启用追踪

-从系统管理员职责进入应用

 -选择配置文件=> 系统

 -选择应用选择框

 -输入采购作为应用的值

  -用下面的语句更新设置配置选项‘初始化SQL语句 – 定制’:
BEGIN FND_CTL.FND_SESS_CTL(‘‘,‘‘, ‘‘, ‘TRUE‘,‘‘,‘ALTER SESSION SET TRACEFILE_IDENTIFIER=‘||‘‘‘‘||‘<Provide a unique identifier, like SR#>‘ ||‘‘‘‘||‘ EVENTS =‘||‘‘‘‘||‘ 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12 ‘||‘‘‘‘); END;

提示:SQL语句应该在用户层针对定制的配置使用。确保语句作为一个完整的没有任何回车符的行,密切注意在行的文本内提供有效的标识符。

2针对被设定的配置选项,立刻切换到采购职责,重复想得到追踪信息的问题。这样做的目标是只抓取与看到的问题相关的数据库指令。

3.通过下面的步骤定位新生成的追踪文件:

使用以下SQL语句定位DUMP的地点:

select name, value from v$parameter where name like ‘user_dump_dest‘;

返回的路径是追踪文件在数据库服务器上位置

在这个目录内前一个语句所选择的标识符上查找

4.找到的跟踪文件可以有Tkprof格式,和RAW格式的跟踪文件
tkprof <文件名>.trc <文件名>.out explain=<找到的 用户名/密码>
5.在应用层关掉前面设置的配置,停止追踪。这可以阻止生成额外的追踪文件。

 

日志

调试日志

为进行深入的分析,Debug logging 可在文档管理器级别启用来显示在处理过程中所作的活动。可以按以下步骤进行:

1.在应用层设置以下配置文件选项

  • 设置 "PO: Set Debug Workflow ON" to "Yes"
  • 设置 "PO: Set Debug Concurrent ON " to "Yes"

2.设置Document Manager processes的数值为1

3.通过删除表po_wf_debug的内容来清空DEBUG 表

4.重启Document Manager process.

5.重现问题

6.查询表po_wf_debug 以找到生成的日志行

7.改回配置选项的设定

8.重启Document Approval Manager来更新设置的改变

数据与查询

以下查询可用来验证部分审批流程中的数据。

采购订单状态:

select segment1 po#, revision_num r#, 
substr(type_lookup_code,1,4) type, authorization_status auth_status,   
closed_code, wf_item_type, wf_item_key, org_id  
from po_headers_all   
where segment1 = ‘&PO_NUMBER‘ 
 

采购申请状态:

select segment1 req#,authorization_status auth_status,  
closed_code, wf_item_type, wf_item_key, org_id 
from   po_requisition_headers_all  
where segment1 = ‘&REQ_NUM‘ 

发放状态:

select po.segment1 po#, rel.release_num rel#, po.revision_num po_r#,  
po.authorization_status po_status, po.closed_code close_po, 
po.wf_item_type po_type, po.wf_item_key po_key, po.org_id org,  
rel.wf_item_type rel_type, rel.wf_item_key rel_key,  
rel.po_release_id rel_id, rel.authorization_status rel_status, rel.hold_flag hold 
from po_headers_all po, po_releases_all rel 
where po.po_header_id = rel.po_header_id 
  and po.segment1 = ‘&PO_NUM‘ 
  and rel.release_num = ‘REL_NUM‘ 
order by 1,2


采购订单活动历史:

select poah.sequence_num seq#, poah.action_date, poah.action_code, 
poah.employee_id emp_id, fnd.user_name, substr(poah.object_type_code,1,3) type, poah.object_sub_type_code sub_type, 
poah.object_revision_num rev, pohead.org_id 
from po_action_history poah, fnd_user fnd, po_headers_all pohead 
where poah.object_id = pohead.po_header_id 
and pohead.segment1 = ‘&PO_NUMBER‘ 
and pohead.org_id = ‘&ORG_ID‘ 
and   substr(poah.object_type_code,1,3) = ‘PO‘ 
and   poah.employee_id = fnd.employee_id 
and   fnd.session_number != 0 
order by 2,1


采购申请活动历史:

select poah.sequence_num seq#, poah.action_date, poah.action_code, 
poah.employee_id emp_id, fnd.user_name, substr (poah.object_type_code,1,3) type, poah.object_sub_type_code sub_type, 
poah.object_revision_num rev, pohead.org_id, poah.note 
from po_action_history poah, fnd_user fnd, po_requisition_headers_all pohead 
where poah.object_id = pohead.requisition_header_id 
and pohead.segment1 = ‘&REQ_NUMBER‘ 
and substr(poah.object_type_code,1,3) = ‘REQ‘ 
and pohead.org_id = ‘&ORG_ID‘ 
and poah.employee_id = fnd.employee_id 
and fnd.session_number != 0 
order by 9,2,1


与用户名关联的职位:

SELECT pos.name  position_name, pa.position_id,fnd.user_name 
FROM PER_ALL_ASSIGNMENTS_F pa, per_positions pos,per_jobs job, fnd_user fnd 
WHERE pa.POSITION_ID =  pos.POSITION_ID 
and pa.job_ID = job.job_id 
and sysdate between pa.EFFECTIVE_START_DATE 
and pa.EFFECTIVE_END_DATE 
and pa.primary_flag = ‘Y‘ 
and pa.assignment_type = ‘E‘ 
and pa.person_id = fnd.employee_id 
and pa.PERSON_ID = (select employee_id 
                    from fnd_user 
                    where user_name = ‘&user_name‘

 

代码文件

以下代码文件可用来比较在有问题的环境文件版本与那些在后来的可能修复问题的补丁版本。这些文件也可用来在METALINK上按文件名查找相应的补丁。

 

TypeFilenameDescription
Workflowpoxwfrqa.wft采购申请审批工作流文件
Workflowpoxwfpoa.wft采购订单审批工作流文件
Workflowpoxwfatc.wftCREATEPO 工作流文件
PackagePOXWPA1B.plsPO_REQAPPROVAL_INIT1 - 基本的采购申请审批
PackagePOXWPA2B.plsPO_POAPPROVAL_INIT1 - 基本的采购订单审批
PackagePOXWPA3B.plsPO_REQAPPROVAL_FINDAPPRV1 -为采购申请找到审批人
PackagePOXWPA4B.plsPO_REQAPPROVAL_ACTION - 采购申请审批活动与历史
PackagePOXWPA5B.plsPO_REQAPPROVAL_LAUNCH - 开始采购申请审批流程
PackagePOXWPA9B.plsPO_APPROVAL_ACTION -采购订单审批活动与历史

更多的内容可以参考oracle官方说明:https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=2237097423346821&id=1593055.1&displayIndex=5&_afrWindowMode=0&_adf.ctrl-state=189i723xec_306

采购单据审批研究