2014年5月28日 星期三

[ Oracle ERP ] PO - Oracle Standard Procedure - Amount

很多時候, Oracle 文件有提供資料, 但總是要自己看完再寫sql, 雖然前輩或是從網路上可以找到不少參考的SQL, 但我仍然盡量按照Oracle 的FORM 呈現的方式, 去找他們是用function 或是用其他方法取得相關數據, 套用Oracle 原始的方式,除非原本有bug 否則不太可能會出錯, 也許驗證資料幾百筆都對, 但可能因為公司別或是因為幣別匯率等等的原因, 導致一個月後或是幾天後發現問題。遇到問題再來找原因,我寧願把時間拿來剝洋蔥,自己找答案

本次時間:4 小時

從Oracle Standard PO 找到 Amount 以及 Matched Amount 的計算

FORM call Library - POXPOVP2.PLL – HEADERS_FOLDER_C. post_query



Matched Amount
select nvl(sum(nvl(apid.amount, 0)), 0) 
   into x_mamount
      from ap_invoice_distributions apid
            , po_distributions pod
      where pod.po_distribution_id = apid.po_distribution_id
      and pod.po_header_id = poh_id

      and pod.po_release_id = por_id;

Amount à po_inq_sv.GET_PO_TOTAL('STANDARD', 143807, NULL)

FUNCTION get_po_total (x_type_lookup_code  IN  VARCHAR2,
                   x_po_header_id        IN  NUMBER,
                   x_po_release_id     IN  NUMBER)

Db object: [ package]

po_inq_sv.get_post_query_info (
                        x_cancelled_by,
                        NULL,
                        to_number(name_in('headers_folder.agent_id')),
--                      name_in('headers_folder.type_lookup_code'),
                x_type_lookup_code,
                        to_number(name_in('headers_folder.po_header_id')),
                        to_number(name_in('headers_folder.po_release_id')),
                        NULL,
                        NULL,
                        x_agent_name,
                        x_closed_by_name,
                        x_cancelled_by_name,
                        x_base_currency,
                        x_amount);