楼主: huihuang1

[原创] PO采购订单为何自动审批

[复制链接]
论坛徽章:
4
授权会员
日期:2006-09-06 10:51:352009日食纪念
日期:2009-07-22 09:30:002011新春纪念徽章
日期:2011-02-18 11:43:352013年新春福章
日期:2013-02-25 14:51:24
21#
发表于 2010-9-16 14:30 | 只看该作者
嗯 。。。。。。。。。。。。。。。。

使用道具 举报

回复
论坛徽章:
27
欧洲冠军杯纪念徽章
日期:2013-06-03 15:44:58生肖徽章:牛
日期:2012-09-10 11:51:412010新春纪念徽章
日期:2012-09-11 09:27:482011新春纪念徽章
日期:2012-09-10 16:44:142012新春纪念徽章
日期:2012-01-04 11:55:422013年新春福章
日期:2013-02-25 14:51:24ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22茶鸡蛋
日期:2013-03-22 17:17:02奥运会纪念徽章:拳击
日期:2012-10-19 15:17:36奥运会纪念徽章:射击
日期:2012-10-19 15:17:36
22#
发表于 2011-3-21 11:27 | 只看该作者
一样在等待答案,莫非真的要修改工作流?要是修改工作流的话,希望能把方法共享下,谢谢~~~

使用道具 举报

回复
论坛徽章:
2
咸鸭蛋
日期:2012-11-29 15:57:332013年新春福章
日期:2013-02-25 14:51:24
23#
发表于 2011-3-21 15:09 | 只看该作者
想通过设置完成的最好死心,这个东西我研究了好一阵子,最后看了代码才明白靠设置不可能完成

再审批逻辑就是下面的这个过程,注释部分是我改的,改了后的逻辑变成:
1 数量减少,或者单价减少 造成的总金额减少 无法自审批
2 取消PO行造成总PO金额减少,无法自审批

标准功能,上面两个必走自审批,和单据类型里的PO属性的设置完全没关系。

======================================================

PO_CHORD_WF6.standard_po_reapproval

PROCEDURE standard_po_reapproval(itemtype IN VARCHAR2,
                                   itemkey  IN VARCHAR2,
                                   actid    IN NUMBER,
                                   FUNCMODE IN VARCHAR2,
                                   RESULT   OUT NOCOPY VARCHAR2)
IS
        x_header_control         t_header_control_type;
        x_lines_control         t_lines_control_type;
        x_shipments_control         t_shipments_control_type;
        x_dist_control                 t_dist_control_type;
        x_tolerance_control        t_tolerance_control_type;
        x_result                VARCHAR2(1);
        l_retroactive_change     VARCHAR2(1) := 'N'; --  RETROACTIVE FPI
        l_autoapprove_retro     VARCHAR2(1) := 'N'; --  RETROACTIVE FPI
  v_header_id number; --Added by Water,21-Dec-2009
  v_cancel_flag varchar2(1); --Added by Water,21-Dec-2009

BEGIN

        IF (g_po_wf_debug = 'Y') THEN
           PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                   '*** In Procedure: standard_po_reapproval ***');
        END IF;

        IF funcmode <> 'RUN' THEN
                result := 'COMPLETE';
                return;
        END IF;

        /* RETROACTIVE FPI START.
         * Get the value of the attribute CO_H_RETROACTIVE_APPROVAL if
         * this approval is initiated due to the retroactive change in
         * the release. If this value is N, then we send the document
         * through Change Order Workflow.
        */
        l_retroactive_change := PO_WF_UTIL_PKG.GetItemAttrText
                                        (itemtype => itemtype,
                                         itemkey  => itemkey,
                                         aname    => 'CO_R_RETRO_CHANGE');

        If (l_retroactive_change = 'Y') then

                 l_autoapprove_retro := PO_WF_UTIL_PKG.GetItemAttrText
                                        (itemtype => itemtype,
                                         itemkey  => itemkey,
                                         aname    => 'CO_H_RETROACTIVE_AUTOAPPROVAL');


                if (l_autoapprove_retro = 'Y') then

                        IF (g_po_wf_debug = 'Y') THEN
                           PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                           '$$$$$$$ Document requires full approval =  N $$$$$$');
                        END IF;

                        RESULT := 'N';

                        return;
                end if; /*l_autoapprove_retro = 'Y' */

        end if; /* l_retroactive_change = 'Y' */

        /* RETROACTIVE FPI END */
                po_chord_wf1.get_wf_header_control(itemtype, itemkey, x_header_control);
                po_chord_wf2.get_wf_lines_control(itemtype, itemkey, x_lines_control);
                po_chord_wf3.get_wf_shipments_control(itemtype, itemkey, x_shipments_control);
                po_chord_wf4.get_wf_dist_control(itemtype, itemkey, x_dist_control);
                po_chord_wf6.get_default_tolerance(itemtype, itemkey, x_tolerance_control);

                /***************************************************************
                 * Check if the modifications to the document header requires
                 * full reapproval.
                 *
                 *         Legends:
                 *
                 *         'Y' means modified
                 *         'N' means not modified
                 *         Numbers are in Percentage
                 *
                 ***************************************************************/

                IF         x_header_control.agent_id                        ='Y'
                  OR        x_header_control.vendor_contact_id                ='Y'
                  OR        x_header_control.confirming_order_flag                ='Y'
                  OR        x_header_control.ship_to_location_id                ='Y'
                  OR        x_header_control.bill_to_location_id                ='Y'
                  OR        x_header_control.terms_id                        ='Y'
                  OR        x_header_control.ship_via_lookup_code                ='Y'
                  OR        x_header_control.fob_lookup_code                ='Y'
                  OR        x_header_control.freight_terms_lookup_code        ='Y'
                  OR        x_header_control.note_to_vendor                        ='Y'
                  OR        x_header_control.acceptance_required_flag         ='Y'
                  OR        x_header_control.acceptance_due_date                ='Y'
                  --OR        (x_header_control.po_total_change > nvl(x_tolerance_control.h_po_total_t,0))
      or x_header_control.po_total_change != 0 --Changed by Water,24-Aug-2009

                THEN
                        IF (g_po_wf_debug = 'Y') THEN
                           PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                                   '########## header_require_reapproval result: Y');
                        END IF;
                        x_result:='Y';
                ELSE
                        IF (g_po_wf_debug = 'Y') THEN
                           PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                                   '########## header_require_reapproval result: N');
                        END IF;
                        x_result:='N';
                END IF;

        IF x_result <> 'Y' THEN
         IF          x_lines_control.line_num                ='Y'
          OR        x_lines_control.item_id                        ='Y'
          OR        x_lines_control.item_revision                ='Y'
          OR        x_lines_control.item_description        ='Y'
          OR        x_lines_control.category_id                ='Y'
          OR        x_lines_control.unit_meas_lookup_code        ='Y'
          OR        x_lines_control.from_header_id                ='Y'
          OR        x_lines_control.from_line_id                ='Y'
          OR        x_lines_control.hazard_class_id                ='Y'
          OR        x_lines_control.contract_num                ='Y'
          OR        x_lines_control.vendor_product_num         ='Y'
          OR        x_lines_control.un_number_id                 ='Y'
          OR        x_lines_control.price_type_lookup_code         ='Y'
          OR        x_lines_control.note_to_vendor                ='Y'
          --OR        (x_lines_control.quantity_change > nvl(x_tolerance_control.l_quantity_t,0))
          --OR        (x_lines_control.unit_price_change > nvl(x_tolerance_control.l_unit_price_t,0))
    --Changed by Water,24-Aug-2009
    or x_lines_control.quantity_change != 0
    or x_lines_control.unit_price_change != 0
         THEN
                IF (g_po_wf_debug = 'Y') THEN
                   PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                           '########## lines_require_reapproval result: Y');
                END IF;
                x_result:='Y';
         ELSE
                IF (g_po_wf_debug = 'Y') THEN
                   PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                           '########## lines_require_reapproval result: N');
                END IF;
                x_result:='N';
         END IF;
        END IF;

        IF x_result <> 'Y' THEN
         IF         x_shipments_control.shipment_num                ='Y'
          OR        x_shipments_control.ship_to_location_id                ='Y'
          OR        x_shipments_control.promised_date                ='Y'
          OR        x_shipments_control.need_by_date                ='Y'
          OR        x_shipments_control.last_accept_date                ='Y'
          /*OR        (x_shipments_control.quantity_change >
                 nvl(x_tolerance_control.s_quantity_t,0))*/
    OR x_shipments_control.quantity_change != 0 --Water
         THEN
                IF (g_po_wf_debug = 'Y') THEN
                   PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                           '########## shipments_require_reapproval result: Y');
                END IF;
                x_result:='Y';
         ELSE
                IF (g_po_wf_debug = 'Y') THEN
                   PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                           '########## shipments_require_reapproval result: N');
                END IF;
                x_result:='N';
         END IF;
        END IF;

/* Bug 1081717: kagarwal
** Added the Check for change in Charge Account for Distributions
** x_dist_control.code_combination_id = 'Y'
*/
/* Bug 2747157: kagarwal
** Added the Check for change in Gl Date for Distributions
** x_dist_control.gl_encumbered_date = 'Y' .
*/

        IF x_result <> 'Y' THEN
         IF         x_dist_control.distribution_num                ='Y'
          OR        x_dist_control.deliver_to_person_id        ='Y'
          OR    x_dist_control.code_combination_id = 'Y'
          OR    x_dist_control.gl_encumbered_date = 'Y'
          /*OR        (x_dist_control.quantity_ordered_change        >
                 nvl(x_tolerance_control.d_quantity_ordered_t,0))*/
     OR        x_dist_control.quantity_ordered_change != 0 --Water
         THEN
                IF (g_po_wf_debug = 'Y') THEN
                   PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                           '########## dist_require_reapproval result: Y');
                END IF;
                x_result:='Y';
         ELSE
                IF (g_po_wf_debug = 'Y') THEN
                   PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                           '########## dist_require_reapproval result: N');
                END IF;
                x_result:='N';
         END IF;
        END IF;
  
   --<CONTERMS FPJ START>
   IF x_result <> 'Y' THEN
       -- Check if contract terms were changed
       x_result := PO_CONTERMS_WF_PVT.contract_terms_changed(
                                      itemtype => itemtype,
                                      itemkey  => itemkey);
   END IF;
   --<CONTERMS FPJ END>
   
   --Added by Water,21-Dec-2009,for cancel po
   if x_result = 'Y' then
    v_header_id := wf_engine.GetItemAttrNumber(itemtype,itemkey,'DOCUMENT_ID');
    begin
      select a.cancel_flag into v_cancel_flag from po_headers_all a
        where a.po_header_id = v_header_id;
      if NVL(v_cancel_flag,'N') = 'Y' then
        x_result := 'N';
      end if;
    exception
      when others then
        NULL;
    end;
  end if;
  --End Water,for cancel po
  
        IF x_result = 'Y' THEN
                IF (g_po_wf_debug = 'Y') THEN
                   PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                   '$$$$$$$ Document requires full approval =  Y $$$$$$');
                END IF;
                RESULT := 'Y';
        ELSE
                IF (g_po_wf_debug = 'Y') THEN
                   PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                   '$$$$$$$ Document requires full approval =  N $$$$$$');
                END IF;
                RESULT := 'N';
        END IF;

        IF (g_po_wf_debug = 'Y') THEN
           PO_WF_DEBUG_PKG.INSERT_DEBUG(ITEMTYPE, ITEMKEY,
                   '*** Finish: standard_po_reapproval ***');
        END IF;

        return;

EXCEPTION

WHEN OTHERS THEN
  wf_core.context('POAPPRV', 'po_chord_wf6.stanard_po_reapproval', 'others');
  RAISE;

END;

[ 本帖最后由 Oracle安装工 于 2011-3-21 15:16 编辑 ]

使用道具 举报

回复
论坛徽章:
27
欧洲冠军杯纪念徽章
日期:2013-06-03 15:44:58生肖徽章:牛
日期:2012-09-10 11:51:412010新春纪念徽章
日期:2012-09-11 09:27:482011新春纪念徽章
日期:2012-09-10 16:44:142012新春纪念徽章
日期:2012-01-04 11:55:422013年新春福章
日期:2013-02-25 14:51:24ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22茶鸡蛋
日期:2013-03-22 17:17:02奥运会纪念徽章:拳击
日期:2012-10-19 15:17:36奥运会纪念徽章:射击
日期:2012-10-19 15:17:36
24#
发表于 2011-3-22 10:08 | 只看该作者

回复 #23 Oracle安装工 的帖子

谢谢了,大兄弟!你真是个好淫,我在测试系统试试先~~~~

使用道具 举报

回复
论坛徽章:
3
2011新春纪念徽章
日期:2011-02-18 11:42:48ITPUB十周年纪念徽章
日期:2011-11-01 16:25:512013年新春福章
日期:2013-02-25 14:51:24
25#
发表于 2011-3-22 11:12 | 只看该作者
這個問題的最好解決方法就是建立採購單人員不准許有審批權限,只要在採購單文件型態定義那裡不勾選“擁有者可核准”就可以了,我剛才又測試了幾遍,不管是改數量,改單價,採購單都會自動改版本,改了版本就會自動要求重新核核准,就需要過審批程序。

使用道具 举报

回复
论坛徽章:
2
咸鸭蛋
日期:2012-11-29 15:57:332013年新春福章
日期:2013-02-25 14:51:24
26#
发表于 2011-3-22 14:20 | 只看该作者
原帖由 20292 于 2011-3-22 11:12 发表
這個問題的最好解決方法就是建立採購單人員不准許有審批權限,只要在採購單文件型態定義那裡不勾選“擁有者可核准”就可以了,我剛才又測試了幾遍,不管是改數量,改單價,採購單都會自動改版本,改了版本就會自動要求重新核核准,就需要過審批程序。


完全误导人啊!!!

我刚在系统里测试了一遍,为了准确,我在一个未做任何客户化的系统里做的测试。单据类型里,责任人可审批的勾去掉。然后修改一个已经审批了的PO,把数量改小,OK,PO的版本从0变成了1,状态从批准变成了需要重新审批。楼上的你以为这样就OK了吗?很显然你没有再往下走。你点审批后再看,PO自动获得审批!

ORACLE说的非常清楚,PO的版本如果发生了变更,就必需走一遍重新审批的流程,也就是PO审批的工作流要走一遍,但走一遍工作流绝对不意味着必需要审批人审批,注意自审批本来就是PO审批工作流中的一个分支。

为什么我说最好死了通过设置来达到目的的念头呢?因为PO审批工作流被我扒了个底朝天,我们的实际需求逼得我不得不和它玩命我想躲都躲不过去,按照我的一贯风格只要能不改能凑合用的我绝对不会去改。PO再审批的逻辑就是standard_po_reapproval这个过程,任何一个做开发的仔细看一遍代码就明白,一个取profile值的地方都没有,也就意味着配置彻底没戏。

使用道具 举报

回复
论坛徽章:
3
2011新春纪念徽章
日期:2011-02-18 11:42:48ITPUB十周年纪念徽章
日期:2011-11-01 16:25:512013年新春福章
日期:2013-02-25 14:51:24
27#
发表于 2011-3-22 15:41 | 只看该作者
原帖由 Oracle安装工 于 2011-3-22 14:20 发表


完全误导人啊!!!

我刚在系统里测试了一遍,为了准确,我在一个未做任何客户化的系统里做的测试。单据类型里,责任人可审批的勾去掉。然后修改一个已经审批了的PO,把数量改小,OK,PO的版本从0变成了1,状态从批准变成了需要重新审批。楼上的你以为这样就OK了吗?很显然你没有再往下走。你点审批后再看,PO自动获得审批!

ORACLE说的非常清楚,PO的版本如果发生了变更,就必需走一遍重新审批的流程,也就是PO审批的工作流要走一遍,但走一遍工作流绝对不意味着必需要审批人审批,注意自审批本来就是PO审批工作流中的一个分支。

为什么我说最好死了通过设置来达到目的的念头呢?因为PO审批工作流被我扒了个底朝天,我们的实际需求逼得我不得不和它玩命我想躲都躲不过去,按照我的一贯风格只要能不改能凑合用的我绝对不会去改。PO再审批的逻辑就是standard_po_reapproval这个过程,任何一个做开发的仔细看一遍代码就明白,一个取profile值的地方都没有,也就意味着配置彻底没戏。


安裝工:那怪了,看來還是你哪個地方設置有區別,我測試是改小數後或改小單價後,版本改成了1,狀態從已核准變成了需要重新核准,之後再點擊核准,並沒有自動獲得審批,而是到我審批流的第一位領導那裡,沒有誤導人啊,你再查查設置看。

使用道具 举报

回复
论坛徽章:
2
咸鸭蛋
日期:2012-11-29 15:57:332013年新春福章
日期:2013-02-25 14:51:24
28#
发表于 2011-3-22 16:09 | 只看该作者
很奇怪,我又做了一遍,我的自审批了。我的系统是11.5.10.2

大家有空也都来测试一下啊

单据类型按下图设置

Snap2.jpg (73.38 KB, 下载次数: 21)

Snap2.jpg

使用道具 举报

回复
论坛徽章:
3
2011新春纪念徽章
日期:2011-02-18 11:42:48ITPUB十周年纪念徽章
日期:2011-11-01 16:25:512013年新春福章
日期:2013-02-25 14:51:24
29#
发表于 2011-3-22 16:37 | 只看该作者
對比一下看試試。

005.GIF (24.98 KB, 下载次数: 18)

005.GIF

使用道具 举报

回复
论坛徽章:
2
咸鸭蛋
日期:2012-11-29 15:57:332013年新春福章
日期:2013-02-25 14:51:24
30#
发表于 2011-3-22 16:49 | 只看该作者
我们这两个设置差不多,不同之处对这个问题没有影响

另外20292我估计你也很难确保你的系统在PO审批上面做过哪些客户化

我这边的EBS系统从实施阶段到现在所有的PO变更都出自我一个人,我对改了哪些比较清楚。刚才测试的时候,我特定找了个系统,用备份的包还原了,可以确保和原版的系统一致

为谨慎起见,还是呼唤其他人有空一起测试一下,一起彻底的搞清楚这个知识点

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表