2014年8月28日 星期四

[ Oracle ERP ] Show Barcode in View Output

1) Oracle Report using Barcode -
     http://tomkuo139.blogspot.tw/2009/02/oracle-report-barcode.html
     http://hi.baidu.com/eebevkrtwgbgxzd/item/1e8145c68d1b9a57bcef6924
     缺點: 必須下載安裝
     優點: 生成的Barcode 是圖檔

2) 利用外部程式產生資料 iReport 架設一台Server 將資料寫入再丟參數

3) Client Server 只要在Report 上設定字型即可產生, 但遇到ERP上, 掛載沒有字型一樣無法產生Barcode

4) 我個人最喜歡的解決方法

產生HTML 報表, 在字型上套用 Barcode 字型
優點: 只需要User電腦安裝Barcode字型即可, 不需要架設Server 或安裝其他開發工具
實際拿出掃描器可以描條碼

HTML 語法

<font style="font-family: ChinaDragon_39_BarCode; font-size: 40px;">*1234567*</font>



2014年8月27日 星期三

[ Oracle ERP FORM ] 客製FORM 顯示會計科目節段 show Accounting Flexfield in FORM

因為Oracle ERP 這領域太少人願意分享資源, 知識, 與技術
也看到有少部份的人在努力, 我也在他們的Blog 上面得到許多, 
我也僅能以自己測試寫出來的東西, 一點一滴的累積起來與分享, 
希望能讓有心學習的人, 得到一點點的幫助

--=============================================================================
-- Propose: Show Accounting Flexfield in Custom-Form
--=============================================================================
-- Reference Form: Inventory \ Setup \ Organizations \ Subinvetories
-- Form Name: INVSDSUB.fmb
--=============================================================================
-- Program Units (1) :  flexfield_defn
-- Program Units (2) : INVSDSUB_PKG.When_New_Form_Instance
--                Form-Level - Trigger - WHEN-NEW-FORM-INSTANCE
                   INVSDSUB_PKG.When_New_Form_Instance;
--=============================================================================

摸擬操作





Program Unit




Setting Item




Using Custom Form

Save Accounting ID



2014年8月26日 星期二

[ Oracle ERP FORM ] 於FORM 顯示日曆 Calendar


呈現結果:於ERP 的FORM上面可以從視窗中點選Calendar 


Step 1: Property Palette

1) Data Type :必須為 Datetime
2) Format Mask :若不設定則自動抓取預設格式
3) List of Values:ENABLED_LIST_LAMP
4) Validate form List :No



Step 2: Add KEY-LISTVAL Trigger 

Trigger 內容: calendar.show;



2014年7月9日 星期三

執行 Concurrent 後, 於客製的Form 的Output

Item Type: Push Button
Item Trigger: WHEN-BUTTON-PRESSED

1) Libraries : FNDCONC
2) Program Unit: editor_pkg.report(req_id number, save_output_flag varchar2);
            

可以從IE內的瀏覽器的網址,看得出來是呼叫的結果, 直接呈現HTML的Output



DECLARE
  ln_num             NUMBER;
  lb_submit          BOOLEAN;
   
  V_ERROR            VARCHAR2(30);
  V_RECEIPT_SEQ      NUMBER := 0;
   
  -- get concurrent status
  lb_wait                    BOOLEAN;
  ls_phase                   VARCHAR2(15);
  ls_status                  VARCHAR2(15);
  ls_dev_phase               VARCHAR2(80);
  ls_dev_status              VARCHAR2(80);
  ls_messge                  VARCHAR2(255);
BEGIN

  ln_num := FND_REQUEST.SUBMIT_REQUEST
           ( 'PO','YLPOM001_BATCH', '', '',FALSE,
               '', --1
           '',  --2
           '',  --3
           '',  --4
           '',  --5
           '',  --6
           '',  --7
           '',  --8
           '',  --9
           '',  --10
           '',  --11
           '',  --12
           '',  --13
           '',  --14
           'Y',  --15
           '',  --16
           CHR(0),  -- 從FORM叫REQUEST , 最後一個參數要放CHR(0)
           '','','',
           '','','','','','','','','','',
           '','','','','','','','','','',
           '','','','','','','','','','',
           '','','','','','','','','','',
           '','','','','','','','','','',
           '','','','','','','','','','',
           '','','','','','','','','','',
           '','','','','','','','','','');
  IF ln_num = 0 THEN
     FND_MESSAGE.RETRIEVE;
     FND_MESSAGE.ERROR;
  ELSE
    lb_submit := APP_FORM.QUIETCOMMIT;
                                
    FND_MESSAGE.DEBUG(' >> 預覽報表 << '|| CHR(10)|| 
                     'Request ID:' || TO_CHAR(ln_num));
                                
--2:每2秒檢查一次Request,10800:表示總共等10800秒,共180分鐘,超過180分鐘上一個Request若還未成功,則會出現Error

    lb_wait := Fnd_Concurrent.wait_for_request
          (ln_num
           ,2,10800,ls_phase,ls_status,ls_dev_phase,ls_dev_status,ls_messge);
             
    IF SUBSTR(UPPER(ls_dev_phase),1,8) = 'COMPLETE' 
       AND 
       SUBSTR(UPPER(ls_dev_status),1,6) = 'NORMAL' THEN
       ------------------------------------------------------------------------
                 -- Libraries: FNDCONC
                 -- procedure report(req_id number, save_output_flag varchar2);
       ------------------------------------------------------------------------
       editor_pkg.report(ln_num, 'Y');
     END IF;
              
 END IF;

END;

2014年6月12日 星期四

Oracle ERP - Attribute 不夠用 + ValueSet 條件讀取畫面欄位


確認 Block.Field 的名稱, 為ValueSet 的Where 條件

原本的Attribute 不夠用, 借Global Attribute 來使用


建立ValueSet , Where 條件為畫面值


設定結果




2014年6月9日 星期一

ORACLE FORM - OUTPUT HTML REPORT - STANDARD TOOL


Oracle Developer 6i - on Client Server

只要是游標停留的位置, 就可以產生網頁報表
且此為STANDARD FORM



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);