业务需求、需要抓出系统现有供应商+料件的最新核价情况
问题解决基本思路
1、数据库中抓取供应商+料件分组(group by )
2、针对抓出的每笔数据循环查出第一笔核价资料(时间最新,价格最大)
3、目前数据量在20W以内速度还可以接受,后续数据量在大,需要采用后台计算后写表的方式提升性能。
IMPORT os
IMPORT util
IMPORT JAVA com.fourjs.fgl.lang.FglRecord #(ver:38) add
#add-point:增加匯入項目 name="global.import"
#end add-point
SCHEMA ds
GLOBALS "../../cfg/top_global.inc"
#(ver:38) ---add start---
GLOBALS
#單身匯excel POI變數
TYPE rec_arr_type ARRAY [] OF com.fourjs.fgl.lang.FglRecord
DEFINE g_export_tag DYNAMIC ARRAY OF rec_arr_type #畫面欄位數
DEFINE g_export_tabname DYNAMIC ARRAY OF STRING #畫面名稱
END GLOBALS
#(ver:38) --- add end ---
#add-point:增加匯入變數檔 name="global.inc"
#end add-point
#單身 type 宣告
PRIVATE TYPE type_g_pmdi_d RECORD
sel LIKE type_t.chr1,
pmdi001 LIKE pmdi_t.pmdi001,
pmdi004 LIKE pmdi_t.pmdi004,
pmdi004_desc LIKE type_t.chr500,
pmdi005 LIKE pmdi_t.pmdi005,
pmdi005_desc LIKE type_t.chr500,
pmdi006 LIKE pmdi_t.pmdi006,
pmdi006_desc LIKE type_t.chr500,
pmdi007 LIKE pmdi_t.pmdi007,
pmdi008 LIKE pmdi_t.pmdi008,
pmdi009 LIKE pmdi_t.pmdi009,
pmdi009_desc LIKE type_t.chr500,
pmdi011 LIKE pmdi_t.pmdi011,
pmdi011_desc LIKE type_t.chr500,
pmdi015 LIKE pmdi_t.pmdi015,
pmdi030 LIKE pmdi_t.pmdi030,
pmdi034 LIKE pmdi_t.pmdi034,
pmdj002 LIKE pmdj_t.pmdj002,
pmdj002_desc LIKE type_t.chr500,
pmdj008 LIKE pmdj_t.pmdj008,
pmdj008_desc LIKE type_t.chr500,
pmdj009 LIKE pmdj_t.pmdj009,
pmdj010 LIKE pmdj_t.pmdj010,
pmdj011 LIKE pmdj_t.pmdj011,
pmdj012 LIKE pmdj_t.pmdj012,
pmdj016 LIKE pmdj_t.pmdj016,
pmdj016_desc LIKE type_t.chr500,
pmdj030 LIKE pmdj_t.pmdj030,
pmdjud011 LIKE pmdj_t.pmdjud011,
pmdjud012 LIKE pmdj_t.pmdjud012,
pmdk001 LIKE pmdk_t.pmdk001,
pmdk002 LIKE pmdk_t.pmdk002,
pmdkseq LIKE pmdk_t.pmdkseq,
pmdk003 LIKE pmdk_t.pmdk003
END RECORD
#add-point:自定義模組變數-標準(Module Variable) (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="global.variable"
DEFINE l_pmdidocno LIKE pmdi_t.pmdidocno
DEFINE l_pmdi RECORD #add by huzhou
pmdient LIKE pmdi_t.pmdient,
pmdisite LIKE pmdi_t.pmdisite,
pmdi004 LIKE pmdi_t.pmdi004,
pmdj002 LIKE pmdj_t.pmdj002
END RECORD
#end add-point
#模組變數(Module Variables)
DEFINE g_pmdi_d DYNAMIC ARRAY OF type_g_pmdi_d
DEFINE g_pmdi_d_t type_g_pmdi_d
DEFINE g_wc STRING #儲存 user 的查詢條件
DEFINE g_wc_t STRING #儲存 user 的查詢條件
DEFINE g_wc2 STRING
DEFINE g_wc_filter STRING
DEFINE g_wc_filter_t STRING
DEFINE g_sql STRING #組 sql 用
DEFINE g_forupd_sql STRING #SELECT ... FOR UPDATE SQL
DEFINE g_cnt LIKE type_t.num10
DEFINE l_ac LIKE type_t.num10 #目前處理的ARRAY CNT
DEFINE g_curr_diag ui.Dialog #Current Dialog
DEFINE gwin_curr ui.Window #Current Window
DEFINE gfrm_curr ui.Form #Current Form
DEFINE g_current_page LIKE type_t.num5 #目前所在頁數
DEFINE g_current_row LIKE type_t.num10 #目前所在筆數
DEFINE g_current_idx LIKE type_t.num10
DEFINE g_detail_cnt LIKE type_t.num10 #單身 總筆數(所有資料)
DEFINE g_page STRING #第幾頁
DEFINE g_ch base.Channel #外串程式用
DEFINE g_ref_fields DYNAMIC ARRAY OF VARCHAR(500) #ap_ref用陣列
DEFINE g_ref_vars DYNAMIC ARRAY OF VARCHAR(500) #ap_ref用陣列
DEFINE g_rtn_fields DYNAMIC ARRAY OF VARCHAR(500) #ap_ref用陣列
DEFINE g_error_show LIKE type_t.num5
DEFINE g_row_index LIKE type_t.num10
DEFINE g_master_idx LIKE type_t.num10
DEFINE g_detail_idx LIKE type_t.num10 #單身 所在筆數(所有資料)
DEFINE g_detail_idx2 LIKE type_t.num10
DEFINE g_hyper_url STRING #hyperlink的主要網址
DEFINE g_qbe_hidden LIKE type_t.num5 #qbe頁籤折疊
DEFINE g_tot_cnt LIKE type_t.num10 #計算總筆數
DEFINE g_num_in_page LIKE type_t.num10 #每頁筆數
DEFINE g_page_act_list STRING #分頁ACTION清單
DEFINE g_current_row_tot LIKE type_t.num10 #目前所在總筆數
DEFINE g_page_start_num LIKE type_t.num10 #目前頁面起始筆數
DEFINE g_page_end_num LIKE type_t.num10 #目前頁面結束筆數
#多table用wc
DEFINE g_wc_table STRING
DEFINE g_detail_page_action STRING
DEFINE g_pagestart LIKE type_t.num10
DEFINE g_wc_filter_table STRING
#add-point:自定義模組變數-客製(Module Variable) name="global.variable_customerization"
#end add-point
#add-point:傳入參數說明 name="global.argv"
#end add-point
{</section>}
{<section id="cpmq001.main" type="s" >}
#應用 a26 樣板自動產生(Version:7)
#+ 作業開始(主程式類型)
MAIN
#add-point:main段define(客製用) name="main.define_customerization"
#end add-point
#add-point:main段define(請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="main.define"
#end add-point
OPTIONS
INPUT NO WRAP
DEFER INTERRUPT
#設定SQL錯誤記錄方式 (模組內定義有效)
WHENEVER ERROR CALL cl_err_msg_log
#依模組進行系統初始化設定(系統設定)
CALL cl_ap_init("cpm","")
#add-point:作業初始化 name="main.init"
#end add-point
#LOCK CURSOR (identifier)
#add-point:SQL_define name="main.define_sql"
#end add-point
LET g_forupd_sql = " ",
" FROM ",
" "
#add-point:SQL_define name="main.after_define_sql"
#end add-point
LET g_forupd_sql = cl_sql_forupd(g_forupd_sql) #轉換不同資料庫語法
LET g_forupd_sql = cl_sql_add_mask(g_forupd_sql) #遮蔽特定資料
DECLARE cpmq001_cl CURSOR FROM g_forupd_sql # LOCK CURSOR
LET g_sql = " SELECT ",
" FROM t0",
" WHERE "
LET g_sql = cl_sql_add_mask(g_sql) #遮蔽特定資料
#add-point:SQL_define name="main.after_refresh_sql"
#end add-point
PREPARE cpmq001_master_referesh FROM g_sql
#add-point:main段define_sql name="main.body.define_sql"
#end add-point
LET g_forupd_sql = ""
#add-point:main段define_sql name="main.body.after_define_sql"
#end add-point
LET g_forupd_sql = cl_sql_forupd(g_forupd_sql)
LET g_forupd_sql = cl_sql_add_mask(g_forupd_sql) #遮蔽特定資料
DECLARE cpmq001_bcl CURSOR FROM g_forupd_sql
IF g_bgjob = "Y" THEN
#add-point:Service Call name="main.servicecall"
#end add-point
ELSE
#畫面開啟 (identifier)
OPEN WINDOW w_cpmq001 WITH FORM cl_ap_formpath("cpm",g_code)
#瀏覽頁簽資料初始化
CALL cl_ui_init()
#程式初始化
CALL cpmq001_init()
#進入選單 Menu (="N")
CALL cpmq001_ui_dialog()
#add-point:畫面關閉前 name="main.before_close"
#end add-point
#畫面關閉
CLOSE WINDOW w_cpmq001
END IF
CLOSE cpmq001_cl
#add-point:作業離開前 name="main.exit"
#end add-point
#離開作業
CALL cl_ap_exitprogram("0")
END MAIN
{</section>}
{<section id="cpmq001.init" type="s" >}
#+ 瀏覽頁簽資料初始化
PRIVATE FUNCTION cpmq001_init()
#add-point:init段define-客製 name="init.define_customerization"
#end add-point
#add-point:init段define-標準 (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="init.define"
#end add-point
#add-point:FUNCTION前置處理 name="init.before_function"
#end add-point
LET g_wc_filter = " 1 = 1 " #171117-00042 modify 將1=1改為空白 #171219-00006 改為" 1 = 1 "
LET g_wc_filter_t = "" #171117-00042 modify 將1=1改為空白
LET g_error_show = 1
LET g_detail_idx = 1
LET g_detail_idx2 = 1
#add-point:畫面資料初始化 name="init.init"
#end add-point
CALL cpmq001_default_search()
END FUNCTION
{</section>}
{<section id="cpmq001.default_search" type="s" >}
PRIVATE FUNCTION cpmq001_default_search()
#add-point:default_search段define-客製 name="default_search.define_customerization"
#end add-point
#add-point:default_search段define-標準 (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="default_search.define"
#end add-point
#add-point:default_search段開始前 name="default_search.before"
#end add-point
#應用 qs27 樣板自動產生(Version:3)
#+ 組承接外部參數時資料庫欄位對應條件(單身)
IF NOT cl_null(g_argv[01]) THEN
LET g_wc = g_wc, " pmdidocno = '", g_argv[01], "' AND "
END IF
IF NOT cl_null(g_wc) THEN
LET g_wc = g_wc.subString(1,g_wc.getLength()-5)
ELSE
#預設查詢條件
LET g_wc = " 1=2"
END IF
#add-point:default_search段結束前 name="default_search.after"
#end add-point
END FUNCTION
{</section>}
{<section id="cpmq001.ui_dialog" type="s" >}
#+ 選單功能實際執行處
PRIVATE FUNCTION cpmq001_ui_dialog()
#add-point:ui_dialog段define-客製 name="ui_dialog.define_customerization"
#end add-point
DEFINE li_exit LIKE type_t.num5 #判別是否為離開作業
DEFINE li_idx LIKE type_t.num10
DEFINE ls_result STRING
DEFINE ls_wc STRING
DEFINE lc_action_choice_old STRING
DEFINE ls_js STRING
DEFINE la_param RECORD
prog STRING,
actionid STRING,
background LIKE type_t.chr1,
param DYNAMIC ARRAY OF STRING
END RECORD
#(ver:38) ---add start---
DEFINE l_arr_len INTEGER
DEFINE l_arr_cnt INTEGER
DEFINE lb_get_type LIKE type_t.chr20
#(ver:38) --- add end ---
#add-point:ui_dialog段define-標準 (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="ui_dialog.define"
#end add-point
#add-point:FUNCTION前置處理 name="ui_dialog.before_function"
#end add-point
CALL cl_set_act_visible("accept,cancel", FALSE)
CALL cl_get_num_in_page() RETURNING g_num_in_page
LET li_exit = FALSE
LET gwin_curr = ui.Window.getCurrent()
LET gfrm_curr = gwin_curr.getForm()
LET g_current_idx = 1
LET g_action_choice = " "
LET lc_action_choice_old = ""
LET g_current_row_tot = 0
LET g_page_start_num = 1
LET g_page_end_num = g_num_in_page
LET g_detail_idx = 1
LET g_detail_idx2 = 1
LET l_ac = 1
#add-point:ui_dialog段before dialog name="ui_dialog.before_dialog"
LET g_wc = " 1=2"
#end add-point
CALL cpmq001_b_fill()
WHILE li_exit = FALSE
IF g_action_choice = "logistics" THEN
#清除畫面及相關資料
CLEAR FORM
CALL g_pmdi_d.clear()
LET g_wc = " 1=2"
LET g_wc2 = " 1=1"
LET g_action_choice = ""
LET g_detail_page_action = "detail_first"
LET g_pagestart = 1
LET g_current_row_tot = 0
LET g_page_start_num = 1
LET g_page_end_num = g_num_in_page
LET g_detail_idx = 1
LET g_detail_idx2 = 1
CALL cpmq001_init()
END IF
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
#add-point:input段落 name="ui_dialog.input"
#end add-point
#add-point:construct段落 name="ui_dialog.construct"
CONSTRUCT BY NAME g_wc ON pmdi004,pmdi015,pmdj002
ON ACTION controlp INFIELD pmdidocno
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_pmdidocno() #呼叫開窗
DISPLAY g_qryparam.return1 TO pmdidocno #顯示到畫面上
NEXT FIELD pmdidocno #返回原欄位
ON ACTION controlp INFIELD pmdi004
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_pmaa001_3() #呼叫開窗
DISPLAY g_qryparam.return1 TO pmdi004 #顯示到畫面上
NEXT FIELD pmdi004
END CONSTRUCT
#end add-point
DISPLAY ARRAY g_pmdi_d TO s_detail1.* ATTRIBUTE(COUNT=g_detail_cnt)
BEFORE DISPLAY
LET g_current_page = 1
BEFORE ROW
LET g_detail_idx = DIALOG.getCurrentRow("s_detail1")
LET l_ac = g_detail_idx
# CALL cpmq001_detail_action_trans() #(ver:36) mark
LET g_master_idx = l_ac
#為避免按上下筆時影響執行效能,所以做一些處理
LET lc_action_choice_old = g_action_choice
LET g_action_choice = "fetch"
CALL cpmq001_b_fill2()
CALL cpmq001_detail_action_trans() #(ver:36)
LET g_action_choice = lc_action_choice_old
#add-point:input段before row name="input.body.before_row"
#end add-point
#自訂ACTION(detail_show,page_1)
#add-point:page1自定義行為 name="ui_dialog.body.page1.action"
#end add-point
END DISPLAY
#add-point:第一頁籤程式段mark結束用 name="ui_dialog.page1.mark.end"
#end add-point
#add-point:ui_dialog段自定義display array name="ui_dialog.more_displayarray"
#end add-point
BEFORE DIALOG
CALL cl_ap_code_set_action() #171110-00013#1
LET g_curr_diag = ui.DIALOG.getCurrent()
CALL DIALOG.setSelectionMode("s_detail1", 1)
LET g_detail_idx = DIALOG.getCurrentRow("s_detail1")
CALL cpmq001_detail_action_trans()
#add-point:ui_dialog段before dialog name="ui_dialog.bef_dialog"
#end add-point
NEXT FIELD pmdi004
AFTER DIALOG
#add-point:ui_dialog段 after dialog name="ui_dialog.after_dialog"
#end add-point
ON ACTION exit
LET g_action_choice="exit"
LET INT_FLAG = FALSE
LET li_exit = TRUE
EXIT DIALOG
ON ACTION close
LET INT_FLAG=FALSE
LET li_exit = TRUE
EXIT DIALOG
ON ACTION accept
# INITIALIZE g_wc_filter TO NULL #171117-00042 mark
IF cl_null(g_wc) THEN
LET g_wc = " 1=1"
END IF
IF cl_null(g_wc2) THEN
LET g_wc2 = " 1=1"
END IF
#add-point:ON ACTION accept name="ui_dialog.accept"
#end add-point
LET g_detail_idx = 1
LET g_detail_idx2 = 1
CALL cpmq001_b_fill()
IF g_detail_cnt = 0 AND NOT INT_FLAG THEN
INITIALIZE g_errparam TO NULL
LET g_errparam.extend = ""
LET g_errparam.code = -100
LET g_errparam.popup = TRUE
CALL cl_err()
END IF
ON ACTION agendum # 待辦事項
#add-point:ON ACTION agendum name="ui_dialog.agendum"
#end add-point
CALL cl_user_overview()
ON ACTION exporttoexcel #匯出excel
LET g_action_choice="exporttoexcel"
IF cl_auth_chk_act("exporttoexcel") THEN
#(ver:38) ---start---
#因應匯出excel規則調整,需同時符合新舊做法
LET lb_get_type = cl_get_exporttoexcel_type()
#add-point:ON ACTION exporttoexcel name="ui_dialog.exporttoexcel_type_change"
#END add-point
DISPLAY "lb_get_type:",lb_get_type
CASE
WHEN lb_get_type = "poi" #使用poi樣板
CALL g_export_node.clear()
LET l_arr_len = g_pmdi_d.getLength()
LET g_export_tag[1] = rec_arr_type.create(l_arr_len)
LET g_export_tabname[1] = "s_detail1"
FOR l_arr_cnt = 1 TO l_arr_len
LET g_export_tag[1][l_arr_cnt] = g_pmdi_d[l_arr_cnt]
END FOR
#add-point:ON ACTION exporttoexcel name="menu.exporttoexcel_poi"
#END add-point
CALL cl_export_to_excel_getpage()
CALL cl_export_poi()
#add-point:ON ACTION exporttoexcel name="menu.exporttoexcel_after_poi"
#END add-point
OTHERWISE #使用原始樣板
#(ver:38) --- end ---
CALL g_export_node.clear()
LET g_export_node[1] = base.typeInfo.create(g_pmdi_d)
LET g_export_id[1] = "s_detail1"
#add-point:ON ACTION exporttoexcel name="menu.exporttoexcel"
#END add-point
CALL cl_export_to_excel_getpage()
CALL cl_export_to_excel()
#add-point:ON ACTION exporttoexcel name="menu.exporttoexcel_after" #(ver:35)
#END add-point
END CASE #(ver:38) add
END IF
ON ACTION datarefresh # 重新整理
CALL cpmq001_b_fill()
ON ACTION qbehidden #qbe頁籤折疊
IF g_qbe_hidden THEN
CALL gfrm_curr.setElementHidden("qbe",0)
CALL gfrm_curr.setElementImage("qbehidden","16/mainhidden.png")
LET g_qbe_hidden = 0 #visible
ELSE
CALL gfrm_curr.setElementHidden("qbe",1)
CALL gfrm_curr.setElementImage("qbehidden","16/worksheethidden.png")
LET g_qbe_hidden = 1 #hidden
END IF
ON ACTION detail_first #page first
LET g_action_choice = "detail_first"
LET g_detail_page_action = "detail_first"
CALL cpmq001_b_fill()
ON ACTION detail_previous #page previous
LET g_action_choice = "detail_previous"
LET g_detail_page_action = "detail_previous"
CALL cpmq001_b_fill()
ON ACTION detail_next #page next
LET g_action_choice = "detail_next"
LET g_detail_page_action = "detail_next"
CALL cpmq001_b_fill()
ON ACTION detail_last #page last
LET g_action_choice = "detail_last"
LET g_detail_page_action = "detail_last"
CALL cpmq001_b_fill()
#應用 qs19 樣板自動產生(Version:3)
#有關於sel欄位選取的action段落
#選擇全部
ON ACTION selall
CALL DIALOG.setSelectionRange("s_detail1", 1, -1, 1)
FOR li_idx = 1 TO g_pmdi_d.getLength()
LET g_pmdi_d[li_idx].sel = "Y"
END FOR
#add-point:ui_dialog段on action selall name="ui_dialog.onaction_selall"
#end add-point
#取消全部
ON ACTION selnone
CALL DIALOG.setSelectionRange("s_detail1", 1, -1, 0)
FOR li_idx = 1 TO g_pmdi_d.getLength()
LET g_pmdi_d[li_idx].sel = "N"
END FOR
#add-point:ui_dialog段on action selnone name="ui_dialog.onaction_selnone"
#end add-point
#勾選所選資料
ON ACTION sel
FOR li_idx = 1 TO g_pmdi_d.getLength()
IF DIALOG.isRowSelected("s_detail1", li_idx) THEN
LET g_pmdi_d[li_idx].sel = "Y"
END IF
END FOR
#add-point:ui_dialog段on action sel name="ui_dialog.onaction_sel"
#end add-point
#取消所選資料
ON ACTION unsel
FOR li_idx = 1 TO g_pmdi_d.getLength()
IF DIALOG.isRowSelected("s_detail1", li_idx) THEN
LET g_pmdi_d[li_idx].sel = "N"
END IF
END FOR
#add-point:ui_dialog段on action unsel name="ui_dialog.onaction_unsel"
#end add-point
#應用 qs16 樣板自動產生(Version:3)
ON ACTION filter
LET g_action_choice="filter"
CALL cpmq001_filter()
#add-point:ON ACTION filter name="menu.filter"
#END add-point
EXIT DIALOG
#應用 a43 樣板自動產生(Version:4)
ON ACTION insert
LET g_action_choice="insert"
IF cl_auth_chk_act("insert") THEN
#add-point:ON ACTION insert name="menu.insert"
#END add-point
END IF
#應用 a43 樣板自動產生(Version:4)
ON ACTION modify_deatil
LET g_action_choice="modify_deatil"
IF cl_auth_chk_act("modify_deatil") THEN
#add-point:ON ACTION modify_deatil name="menu.modify_deatil"
#END add-point
END IF
#應用 a43 樣板自動產生(Version:4)
ON ACTION output
LET g_action_choice="output"
IF cl_auth_chk_act("output") THEN
#add-point:ON ACTION output name="menu.output"
#END add-point
END IF
#應用 a43 樣板自動產生(Version:4)
ON ACTION quickprint
LET g_action_choice="quickprint"
IF cl_auth_chk_act("quickprint") THEN
#add-point:ON ACTION quickprint name="menu.quickprint"
#END add-point
END IF
#應用 a43 樣板自動產生(Version:4)
ON ACTION query
LET g_action_choice="query"
IF cl_auth_chk_act("query") THEN
#add-point:ON ACTION query name="menu.query"
#END add-point
END IF
#應用 a43 樣板自動產生(Version:4)
ON ACTION datainfo
LET g_action_choice="datainfo"
IF cl_auth_chk_act("datainfo") THEN
#add-point:ON ACTION datainfo name="menu.datainfo"
#END add-point
END IF
#主選單用ACTION
&include "main_menu_exit_dialog.4gl"
&include "relating_action.4gl"
#交談指令共用ACTION
&include "common_action.4gl"
#add-point:查詢方案相關ACTION設定前 name="ui_dialog.set_qbe_action_before"
#end add-point
ON ACTION qbeclear # 條件清除
CLEAR FORM
#add-point:條件清除後 name="ui_dialog.qbeclear"
#end add-point
#add-point:查詢方案相關ACTION設定後 name="ui_dialog.set_qbe_action_after"
#end add-point
END DIALOG
END WHILE
END FUNCTION
{</section>}
{<section id="cpmq001.b_fill" type="s" >}
#+ 單身陣列填充
PRIVATE FUNCTION cpmq001_b_fill()
#add-point:b_fill段define-客製 name="b_fill.define_customerization"
#end add-point
DEFINE ls_wc STRING
DEFINE l_pid LIKE type_t.chr50
DEFINE ls_sql_rank STRING
#add-point:b_fill段define-標準 (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="b_fill.define"
DEFINE l_cnt LIKE type_t.num10 #add by zhouge
#end add-point
#add-point:b_fill段sql_before name="b_fill.sql_before"
#end add-point
#171117-00042 ---mark start---
# IF cl_null(g_wc_filter) THEN
# LET g_wc_filter = " 1=1"
# END IF
#171117-00042 --- mark end ---
IF cl_null(g_wc) THEN
LET g_wc = " 1=1"
END IF
IF cl_null(g_wc2) THEN
LET g_wc2 = " 1=1"
END IF
# LET ls_wc = g_wc, " AND ", g_wc2, " AND ", g_wc_filter, cl_sql_auth_filter() #(ver:34) add cl_sql_auth_filter() #171117-00042 mark
LET ls_wc = g_wc, " AND ", g_wc2, " ",cl_sql_auth_filter() #(ver:34) add cl_sql_auth_filter() #171117-00042 modify
CALL g_pmdi_d.clear()
#(ver:36) ---modify start---
#單身陣列清除
#(ver:36) --- modify end ---
#add-point:陣列清空 name="b_fill.array_clear"
#end add-point
LET g_cnt = l_ac
IF g_cnt = 0 THEN
LET g_cnt = 1
END IF
LET l_ac = 1
# b_fill段sql組成及FOREACH撰寫
#應用 qs04 樣板自動產生(Version:9)
#+ b_fill段資料取得(包含sql組成及FOREACH段撰寫)
LET ls_sql_rank = "SELECT UNIQUE '',pmdi001,pmdi004,'',pmdi005,'',pmdi006,'',pmdi007,pmdi008,pmdi009,
'',pmdi011,'',pmdi015,pmdi030,pmdi034,'','','','','','','','','','','','','','','','','' ,DENSE_RANK() OVER( ORDER BY pmdi_t.pmdidocno) AS RANK FROM pmdi_t",
"",
" WHERE pmdient= ? AND 1=1 AND ", ls_wc
LET ls_sql_rank = ls_sql_rank, cl_sql_add_filter("pmdi_t"),
" ORDER BY pmdi_t.pmdidocno"
#add-point:b_fill段rank_sql_after name="b_fill.rank_sql_after"
LET l_cnt = 1
#end add-point
LET g_sql = "SELECT COUNT(1) FROM (",ls_sql_rank,")"
PREPARE b_fill_cnt_pre FROM g_sql #總筆數
EXECUTE b_fill_cnt_pre USING g_enterprise INTO g_tot_cnt
FREE b_fill_cnt_pre
#add-point:b_fill段rank_sql_after_count name="b_fill.rank_sql_after_count"
#end add-point
CASE g_detail_page_action
WHEN "detail_first"
LET g_pagestart = 1
WHEN "detail_previous"
LET g_pagestart = g_pagestart - g_num_in_page
IF g_pagestart < 1 THEN
LET g_pagestart = 1
END IF
WHEN "detail_next"
LET g_pagestart = g_pagestart + g_num_in_page
IF g_pagestart > g_tot_cnt THEN
LET g_pagestart = g_tot_cnt - (g_tot_cnt mod g_num_in_page) + 1
WHILE g_pagestart > g_tot_cnt
LET g_pagestart = g_pagestart - g_num_in_page
END WHILE
END IF
WHEN "detail_last"
LET g_pagestart = g_tot_cnt - (g_tot_cnt mod g_num_in_page) + 1
WHILE g_pagestart > g_tot_cnt
LET g_pagestart = g_pagestart - g_num_in_page
END WHILE
OTHERWISE
LET g_pagestart = 1
END CASE
LET g_sql = "SELECT '',pmdi001,pmdi004,'',pmdi005,'',pmdi006,'',pmdi007,pmdi008,pmdi009,'',pmdi011,
'',pmdi015,pmdi030,pmdi034,'','','','','','','','','','','','','','','','',''",
" FROM (",ls_sql_rank,")",
" WHERE RANK >= ",g_pagestart,
" AND RANK < ",g_pagestart + g_num_in_page
#add-point:b_fill段sql_after name="b_fill.sql_after"
CALL cpmq001_create_tmp()
LET g_sql = " SELECT 'N',pmdi001, pmdi004,pmaal004, pmdi005, '', pmdi006, '', pmdi007, pmdi008, pmdi009, '', pmdi011,
'',pmdi015,pmdi030,pmdi034,pmdj002,imaal003,pmdj008,'',pmdj009,pmdj010,pmdj011,pmdj012,pmdj016,
'',pmdj030,pmdjud011,pmdjud012,'','','',''
FROM pmdi_t
LEFT join pmdj_t on pmdient = pmdjent and pmdisite = pmdjsite and pmdidocno = pmdjdocno
left join imaal_t on imaalent=pmdjent and imaal001=pmdj002 and imaal002='zh_CN'
left join pmaal_t on pmaal001=pmdi004 and pmaalent=pmdient
WHERE pmdient = ?
AND pmdistus = 'Y'
AND pmdisite = ?
AND pmdi004= ?
AND pmdj002 = ?
AND ROWNUM = 1
ORDER BY pmdi015 DESC, pmdj011 DESC "
PREPARE cpmq001_pb FROM g_sql
DISPLAY g_sql
LET g_sql = " INSERT INTO cpmq001_tmp ",
" SELECT pmdient,pmdisite,pmdi004,pmdj002 FROM pmdi_t ",
" LEFT JOIN pmdj_t ON pmdient=pmdjent AND pmdisite=pmdjsite AND pmdidocno=pmdjdocno ",
" WHERE pmdient= ? AND pmdisite= ? and ",ls_wc,
" GROUP BY pmdient,pmdisite,pmdi004,pmdj002 "
PREPARE cpmq001_pr FROM g_sql
EXECUTE cpmq001_pr USING g_enterprise,g_site
IF SQLCA.sqlcode THEN
INITIALIZE g_errparam TO NULL
LET g_errparam.code = SQLCA.sqlcode
LET g_errparam.extend = "EXECUTE cpmq001_tmp"
LET g_errparam.popup = TRUE
CALL cl_err()
END IF
DECLARE b_fill_curs CURSOR FOR SELECT pmdient,pmdisite,pmdi004,pmdj002 FROM cpmq001_tmp
FOREACH b_fill_curs INTO l_pmdi.pmdient,l_pmdi.pmdisite,l_pmdi.pmdi004,l_pmdi.pmdj002
IF SQLCA.sqlcode THEN
INITIALIZE g_errparam TO NULL
LET g_errparam.extend = "FOREACH:"
LET g_errparam.code = SQLCA.sqlcode
LET g_errparam.popup = TRUE
CALL cl_err()
EXIT FOREACH
END IF
EXECUTE cpmq001_pb USING l_pmdi.pmdient,l_pmdi.pmdisite,l_pmdi.pmdi004,l_pmdi.pmdj002 INTO
g_pmdi_d[l_ac].sel,g_pmdi_d[l_ac].pmdi001,g_pmdi_d[l_ac].pmdi004,g_pmdi_d[l_ac].pmdi004_desc,
g_pmdi_d[l_ac].pmdi005,g_pmdi_d[l_ac].pmdi005_desc,g_pmdi_d[l_ac].pmdi006,g_pmdi_d[l_ac].pmdi006_desc,
g_pmdi_d[l_ac].pmdi007,g_pmdi_d[l_ac].pmdi008,g_pmdi_d[l_ac].pmdi009,g_pmdi_d[l_ac].pmdi009_desc,
g_pmdi_d[l_ac].pmdi011,g_pmdi_d[l_ac].pmdi011_desc,g_pmdi_d[l_ac].pmdi015,g_pmdi_d[l_ac].pmdi030,
g_pmdi_d[l_ac].pmdi034,g_pmdi_d[l_ac].pmdj002,g_pmdi_d[l_ac].pmdj002_desc,g_pmdi_d[l_ac].pmdj008,
g_pmdi_d[l_ac].pmdj008_desc,g_pmdi_d[l_ac].pmdj009,g_pmdi_d[l_ac].pmdj010,g_pmdi_d[l_ac].pmdj011,
g_pmdi_d[l_ac].pmdj012,g_pmdi_d[l_ac].pmdj016,g_pmdi_d[l_ac].pmdj016_desc,g_pmdi_d[l_ac].pmdj030,
g_pmdi_d[l_ac].pmdjud011,g_pmdi_d[l_ac].pmdjud012,g_pmdi_d[l_ac].pmdk001,g_pmdi_d[l_ac].pmdk002,
g_pmdi_d[l_ac].pmdkseq,g_pmdi_d[l_ac].pmdk003
#end add-point
CALL cpmq001_detail_show("'1'")
CALL cpmq001_pmdi_t_mask()
IF l_ac > g_max_rec THEN
IF g_error_show = 1 THEN
INITIALIZE g_errparam TO NULL
LET g_errparam.extend = ""
LET g_errparam.code = 9035
LET g_errparam.popup = TRUE
CALL cl_err()
END IF
EXIT FOREACH
END IF
LET l_ac = l_ac + 1
END FOREACH
#應用 qs05 樣板自動產生(Version:4)
#+ b_fill段其他table資料取得(包含sql組成及資料填充)
#add-point:b_fill段資料填充(其他單身) name="b_fill.others.fill"
#end add-point
CALL g_pmdi_d.deleteElement(g_pmdi_d.getLength())
#add-point:陣列長度調整 name="b_fill.array_deleteElement"
#end add-point
LET g_error_show = 0
LET g_detail_cnt = g_pmdi_d.getLength()
LET l_ac = g_cnt
LET g_cnt = 0
#應用 qs06 樣板自動產生(Version:3)
#+ b_fill段CURSOR釋放
CLOSE b_fill_curs
FREE cpmq001_pb
#調整單身index指標,避免翻頁後指到空白筆數
CALL cpmq001_detail_index_setting()
#重新計算單身筆數並呈現
# CALL cpmq001_detail_action_trans() #(ver:36) mark
LET l_ac = 1
IF g_pmdi_d.getLength() > 0 THEN
CALL cpmq001_b_fill2()
END IF
CALL cpmq001_detail_action_trans() #(ver:36)
CALL cpmq001_filter_show('pmdi001','b_pmdi001')
CALL cpmq001_filter_show('pmdi004','b_pmdi004')
CALL cpmq001_filter_show('pmdi005','b_pmdi005')
CALL cpmq001_filter_show('pmdi006','b_pmdi006')
CALL cpmq001_filter_show('pmdi007','b_pmdi007')
CALL cpmq001_filter_show('pmdi008','b_pmdi008')
CALL cpmq001_filter_show('pmdi009','b_pmdi009')
CALL cpmq001_filter_show('pmdi011','b_pmdi011')
CALL cpmq001_filter_show('pmdi015','b_pmdi015')
CALL cpmq001_filter_show('pmdi030','b_pmdi030')
CALL cpmq001_filter_show('pmdi034','b_pmdi034')
CALL cpmq001_filter_show('pmdj002','b_pmdj002')
CALL cpmq001_filter_show('pmdj008','b_pmdj008')
CALL cpmq001_filter_show('pmdj009','b_pmdj009')
CALL cpmq001_filter_show('pmdj010','b_pmdj010')
CALL cpmq001_filter_show('pmdj011','b_pmdj011')
CALL cpmq001_filter_show('pmdj012','b_pmdj012')
CALL cpmq001_filter_show('pmdj016','b_pmdj016')
CALL cpmq001_filter_show('pmdj030','b_pmdj030')
CALL cpmq001_filter_show('pmdjud011','b_pmdjud011')
CALL cpmq001_filter_show('pmdjud012','b_pmdjud012')
CALL cpmq001_filter_show('pmdk001','b_pmdk001')
CALL cpmq001_filter_show('pmdk002','b_pmdk002')
CALL cpmq001_filter_show('pmdkseq','b_pmdkseq')
CALL cpmq001_filter_show('pmdk003','b_pmdk003')
END FUNCTION
{</section>}
{<section id="cpmq001.b_fill2" type="s" >}
#+ 單身陣列填充2
PRIVATE FUNCTION cpmq001_b_fill2()
#add-point:b_fill2段define-客製 name="b_fill2.define_customerization"
#end add-point
DEFINE li_ac LIKE type_t.num10
#add-point:b_fill2段define-標準 (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="b_fill2.define"
#end add-point
#add-point:FUNCTION前置處理 name="b_fill2.before_function"
#end add-point
LET li_ac = l_ac
#單身組成
#應用 qs07 樣板自動產生(Version:8)
#+ b_fill2段table資料取得(包含sql組成及資料填充)
#add-point:陣列清空 name="b_fill2.array_clear"
#end add-point
#add-point:陣列長度調整 name="b_fill2.array_deleteElement"
#end add-point
#(ver:8) ---mark start---
# DISPLAY li_ac TO FORMONLY.cnt
# LET g_detail_idx2 = 1
# DISPLAY g_detail_idx2 TO FORMONLY.idx
#(ver:8) --- mark end ---
#add-point:單身填充後 name="b_fill2.after_fill"
#end add-point
LET l_ac = li_ac
END FUNCTION
{</section>}
{<section id="cpmq001.detail_show" type="s" >}
#+ 顯示相關資料
PRIVATE FUNCTION cpmq001_detail_show(ps_page)
#add-point:show段define-客製 name="detail_show.define_customerization"
#end add-point
DEFINE ps_page STRING
DEFINE ls_sql STRING
#add-point:show段define-標準 (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="detail_show.define"
#end add-point
#add-point:detail_show段之前 name="detail_show.before"
#end add-point
#讀入ref值
IF ps_page.getIndexOf("'1'",1) > 0 THEN
#帶出公用欄位reference值page1
#add-point:show段單身reference name="detail_show.body.reference"
END IF
#add-point:detail_show段之後 name="detail_show.after"
#end add-point
END FUNCTION
{</section>}
{<section id="cpmq001.filter" type="s" >}
#應用 qs13 樣板自動產生(Version:9)
#+ filter段相關程式段
#+ filter過濾功能
PRIVATE FUNCTION cpmq001_filter()
#add-point:filter段define-客製 name="filter.define_customerization"
#end add-point
DEFINE ls_result STRING
#add-point:filter段define-標準 (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="filter.define"
#end add-point
#add-point:FUNCTION前置處理 name="filter.before_function"
#end add-point
LET INT_FLAG = 0
LET g_qryparam.state = 'c'
LET g_detail_idx = 1
LET g_detail_idx2 = 1
LET g_wc_filter_t = g_wc_filter.trim() #171117-00042 modify
LET g_wc_t = g_wc
CALL gfrm_curr.setFieldHidden("formonly.sel", TRUE)
CALL gfrm_curr.setFieldHidden("formonly.b_statepic", TRUE)
LET g_wc = cl_replace_str(g_wc, g_wc_filter_t, '') #171117-00042 modify
#使用DIALOG包住 單頭CONSTRUCT及單身CONSTRUCT
#應用 qs08 樣板自動產生(Version:5)
#+ filter段DIALOG段的組成
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
#單頭
CONSTRUCT g_wc_filter ON pmdi001,pmdi004,pmdi005,pmdi006,pmdi007,pmdi008,pmdi009,pmdi011,pmdi015,
pmdi030,pmdi034,pmdj002,pmdj008,pmdj009,pmdj010,pmdj011,pmdj012,pmdj016,pmdj030,pmdjud011,
pmdjud012,pmdk001,pmdk002,pmdkseq,pmdk003
FROM s_detail1[1].b_pmdi001,s_detail1[1].b_pmdi004,s_detail1[1].b_pmdi005,
s_detail1[1].b_pmdi006,s_detail1[1].b_pmdi007,s_detail1[1].b_pmdi008,s_detail1[1].b_pmdi009,
s_detail1[1].b_pmdi011,s_detail1[1].b_pmdi015,s_detail1[1].b_pmdi030,s_detail1[1].b_pmdi034,
s_detail1[1].b_pmdj002,s_detail1[1].b_pmdj008,s_detail1[1].b_pmdj009,s_detail1[1].b_pmdj010,
s_detail1[1].b_pmdj011,s_detail1[1].b_pmdj012,s_detail1[1].b_pmdj016,s_detail1[1].b_pmdj030,
s_detail1[1].b_pmdjud011,s_detail1[1].b_pmdjud012,s_detail1[1].b_pmdk001,
s_detail1[1].b_pmdk002,s_detail1[1].b_pmdkseq,s_detail1[1].b_pmdk003
BEFORE CONSTRUCT
DISPLAY cpmq001_filter_parser('pmdi001') TO s_detail1[1].b_pmdi001
DISPLAY cpmq001_filter_parser('pmdi004') TO s_detail1[1].b_pmdi004
DISPLAY cpmq001_filter_parser('pmdi005') TO s_detail1[1].b_pmdi005
DISPLAY cpmq001_filter_parser('pmdi006') TO s_detail1[1].b_pmdi006
DISPLAY cpmq001_filter_parser('pmdi007') TO s_detail1[1].b_pmdi007
DISPLAY cpmq001_filter_parser('pmdi008') TO s_detail1[1].b_pmdi008
DISPLAY cpmq001_filter_parser('pmdi009') TO s_detail1[1].b_pmdi009
DISPLAY cpmq001_filter_parser('pmdi011') TO s_detail1[1].b_pmdi011
DISPLAY cpmq001_filter_parser('pmdi015') TO s_detail1[1].b_pmdi015
DISPLAY cpmq001_filter_parser('pmdi030') TO s_detail1[1].b_pmdi030
DISPLAY cpmq001_filter_parser('pmdi034') TO s_detail1[1].b_pmdi034
DISPLAY cpmq001_filter_parser('pmdj002') TO s_detail1[1].b_pmdj002
DISPLAY cpmq001_filter_parser('pmdj008') TO s_detail1[1].b_pmdj008
DISPLAY cpmq001_filter_parser('pmdj009') TO s_detail1[1].b_pmdj009
DISPLAY cpmq001_filter_parser('pmdj010') TO s_detail1[1].b_pmdj010
DISPLAY cpmq001_filter_parser('pmdj011') TO s_detail1[1].b_pmdj011
DISPLAY cpmq001_filter_parser('pmdj012') TO s_detail1[1].b_pmdj012
DISPLAY cpmq001_filter_parser('pmdj016') TO s_detail1[1].b_pmdj016
DISPLAY cpmq001_filter_parser('pmdj030') TO s_detail1[1].b_pmdj030
DISPLAY cpmq001_filter_parser('pmdjud011') TO s_detail1[1].b_pmdjud011
DISPLAY cpmq001_filter_parser('pmdjud012') TO s_detail1[1].b_pmdjud012
DISPLAY cpmq001_filter_parser('pmdk001') TO s_detail1[1].b_pmdk001
DISPLAY cpmq001_filter_parser('pmdk002') TO s_detail1[1].b_pmdk002
DISPLAY cpmq001_filter_parser('pmdkseq') TO s_detail1[1].b_pmdkseq
DISPLAY cpmq001_filter_parser('pmdk003') TO s_detail1[1].b_pmdk003
#單身公用欄位開窗相關處理
#單身一般欄位開窗相關處理
#----<<sel>>----
#----<<b_pmdi001>>----
#Ctrlp:construct.c.filter.page1.b_pmdi001
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdi001
#add-point:ON ACTION controlp INFIELD b_pmdi001 name="construct.c.filter.page1.b_pmdi001"
#END add-point
#----<<b_pmdi004>>----
#Ctrlp:construct.c.page1.b_pmdi004
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdi004
#add-point:ON ACTION controlp INFIELD b_pmdi004 name="construct.c.filter.page1.b_pmdi004"
#應用 a08 樣板自動產生(Version:3)
#開窗c段
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_pmaa001_3() #呼叫開窗
DISPLAY g_qryparam.return1 TO b_pmdi004 #顯示到畫面上
NEXT FIELD b_pmdi004 #返回原欄位
#END add-point
#----<<b_pmdi004_desc>>----
#----<<b_pmdi005>>----
#Ctrlp:construct.c.page1.b_pmdi005
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdi005
#add-point:ON ACTION controlp INFIELD b_pmdi005 name="construct.c.filter.page1.b_pmdi005"
#應用 a08 樣板自動產生(Version:3)
#開窗c段
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_ooaj002_1() #呼叫開窗
DISPLAY g_qryparam.return1 TO b_pmdi005 #顯示到畫面上
NEXT FIELD b_pmdi005 #返回原欄位
#END add-point
#----<<b_pmdi005_desc>>----
#----<<b_pmdi006>>----
#Ctrlp:construct.c.page1.b_pmdi006
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdi006
#add-point:ON ACTION controlp INFIELD b_pmdi006 name="construct.c.filter.page1.b_pmdi006"
#應用 a08 樣板自動產生(Version:3)
#開窗c段
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_oodb002_2() #呼叫開窗
DISPLAY g_qryparam.return1 TO b_pmdi006 #顯示到畫面上
NEXT FIELD b_pmdi006 #返回原欄位
#END add-point
#----<<b_pmdi006_desc>>----
#----<<b_pmdi007>>----
#Ctrlp:construct.c.filter.page1.b_pmdi007
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdi007
#add-point:ON ACTION controlp INFIELD b_pmdi007 name="construct.c.filter.page1.b_pmdi007"
#END add-point
#----<<b_pmdi008>>----
#Ctrlp:construct.c.filter.page1.b_pmdi008
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdi008
#add-point:ON ACTION controlp INFIELD b_pmdi008 name="construct.c.filter.page1.b_pmdi008"
#END add-point
#----<<b_pmdi009>>----
#Ctrlp:construct.c.page1.b_pmdi009
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdi009
#add-point:ON ACTION controlp INFIELD b_pmdi009 name="construct.c.filter.page1.b_pmdi009"
#應用 a08 樣板自動產生(Version:3)
#開窗c段
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_pmad002_2() #呼叫開窗
DISPLAY g_qryparam.return1 TO b_pmdi009 #顯示到畫面上
NEXT FIELD b_pmdi009 #返回原欄位
#END add-point
#----<<b_pmdi009_desc>>----
#----<<b_pmdi011>>----
#Ctrlp:construct.c.page1.b_pmdi011
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdi011
#add-point:ON ACTION controlp INFIELD b_pmdi011 name="construct.c.filter.page1.b_pmdi011"
#應用 a08 樣板自動產生(Version:3)
#開窗c段
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_oocq002() #呼叫開窗
DISPLAY g_qryparam.return1 TO b_pmdi011 #顯示到畫面上
NEXT FIELD b_pmdi011 #返回原欄位
#END add-point
#----<<b_pmdi011_desc>>----
#----<<b_pmdi015>>----
#Ctrlp:construct.c.filter.page1.b_pmdi015
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdi015
#add-point:ON ACTION controlp INFIELD b_pmdi015 name="construct.c.filter.page1.b_pmdi015"
#END add-point
#----<<b_pmdi030>>----
#Ctrlp:construct.c.filter.page1.b_pmdi030
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdi030
#add-point:ON ACTION controlp INFIELD b_pmdi030 name="construct.c.filter.page1.b_pmdi030"
#END add-point
#----<<b_pmdi034>>----
#Ctrlp:construct.c.filter.page1.b_pmdi034
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdi034
#add-point:ON ACTION controlp INFIELD b_pmdi034 name="construct.c.filter.page1.b_pmdi034"
#END add-point
#----<<b_pmdj002>>----
#Ctrlp:construct.c.page1.b_pmdj002
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdj002
#add-point:ON ACTION controlp INFIELD b_pmdj002 name="construct.c.filter.page1.b_pmdj002"
#應用 a08 樣板自動產生(Version:3)
#開窗c段
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_imaa001() #呼叫開窗
DISPLAY g_qryparam.return1 TO b_pmdj002 #顯示到畫面上
NEXT FIELD b_pmdj002 #返回原欄位
#END add-point
#----<<b_pmdj002_desc>>----
#----<<b_pmdj008>>----
#Ctrlp:construct.c.page1.b_pmdj008
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdj008
#add-point:ON ACTION controlp INFIELD b_pmdj008 name="construct.c.filter.page1.b_pmdj008"
#應用 a08 樣板自動產生(Version:3)
#開窗c段
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_ooca001_1() #呼叫開窗
DISPLAY g_qryparam.return1 TO b_pmdj008 #顯示到畫面上
NEXT FIELD b_pmdj008 #返回原欄位
#END add-point
#----<<b_pmdj008_desc>>----
#----<<b_pmdj009>>----
#Ctrlp:construct.c.filter.page1.b_pmdj009
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdj009
#add-point:ON ACTION controlp INFIELD b_pmdj009 name="construct.c.filter.page1.b_pmdj009"
#END add-point
#----<<b_pmdj010>>----
#Ctrlp:construct.c.filter.page1.b_pmdj010
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdj010
#add-point:ON ACTION controlp INFIELD b_pmdj010 name="construct.c.filter.page1.b_pmdj010"
#END add-point
#----<<b_pmdj011>>----
#Ctrlp:construct.c.filter.page1.b_pmdj011
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdj011
#add-point:ON ACTION controlp INFIELD b_pmdj011 name="construct.c.filter.page1.b_pmdj011"
#END add-point
#----<<b_pmdj012>>----
#Ctrlp:construct.c.filter.page1.b_pmdj012
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdj012
#add-point:ON ACTION controlp INFIELD b_pmdj012 name="construct.c.filter.page1.b_pmdj012"
#END add-point
#----<<b_pmdj016>>----
#Ctrlp:construct.c.page1.b_pmdj016
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdj016
#add-point:ON ACTION controlp INFIELD b_pmdj016 name="construct.c.filter.page1.b_pmdj016"
#應用 a08 樣板自動產生(Version:3)
#開窗c段
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_oodb002_2() #呼叫開窗
DISPLAY g_qryparam.return1 TO b_pmdj016 #顯示到畫面上
NEXT FIELD b_pmdj016 #返回原欄位
#END add-point
#----<<b_pmdj016_desc>>----
#----<<b_pmdj030>>----
#Ctrlp:construct.c.filter.page1.b_pmdj030
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdj030
#add-point:ON ACTION controlp INFIELD b_pmdj030 name="construct.c.filter.page1.b_pmdj030"
#END add-point
#----<<b_pmdjud011>>----
#Ctrlp:construct.c.filter.page1.b_pmdjud011
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdjud011
#add-point:ON ACTION controlp INFIELD b_pmdjud011 name="construct.c.filter.page1.b_pmdjud011"
#END add-point
#----<<b_pmdjud012>>----
#Ctrlp:construct.c.filter.page1.b_pmdjud012
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdjud012
#add-point:ON ACTION controlp INFIELD b_pmdjud012 name="construct.c.filter.page1.b_pmdjud012"
#END add-point
#----<<b_pmdk001>>----
#Ctrlp:construct.c.filter.page1.b_pmdk001
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdk001
#add-point:ON ACTION controlp INFIELD b_pmdk001 name="construct.c.filter.page1.b_pmdk001"
#END add-point
#----<<b_pmdk002>>----
#Ctrlp:construct.c.filter.page1.b_pmdk002
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdk002
#add-point:ON ACTION controlp INFIELD b_pmdk002 name="construct.c.filter.page1.b_pmdk002"
#END add-point
#----<<b_pmdkseq>>----
#Ctrlp:construct.c.filter.page1.b_pmdkseq
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdkseq
#add-point:ON ACTION controlp INFIELD b_pmdkseq name="construct.c.filter.page1.b_pmdkseq"
#END add-point
#----<<b_pmdk003>>----
#Ctrlp:construct.c.filter.page1.b_pmdk003
#應用 a03 樣板自動產生(Version:3)
ON ACTION controlp INFIELD b_pmdk003
#add-point:ON ACTION controlp INFIELD b_pmdk003 name="construct.c.filter.page1.b_pmdk003"
#END add-point
END CONSTRUCT
#add-point:filter段add_cs name="filter.add_cs"
#end add-point
BEFORE DIALOG
#add-point:filter段b_dialog name="filter.b_dialog"
#end add-point
ON ACTION accept
ACCEPT DIALOG
ON ACTION cancel
LET INT_FLAG = 1
EXIT DIALOG
#交談指令共用ACTION
&include "common_action.4gl"
CONTINUE DIALOG
END DIALOG
#add-point:離開DIALOG後相關處理 name="filter.after_dialog"
#end add-point
#171117-00042 ---modify start---
IF NOT INT_FLAG THEN
# LET g_wc_filter = g_wc_filter, " "
LET g_wc_filter = " AND ", g_wc_filter, " "
LET g_wc = g_wc , g_wc_filter
ELSE
LET g_wc_filter = g_wc_filter_t
LET g_wc = g_wc_t
END IF
#171117-00042 --- modify end ---
CALL cpmq001_filter_show('pmdi001','b_pmdi001')
CALL cpmq001_filter_show('pmdi004','b_pmdi004')
CALL cpmq001_filter_show('pmdi005','b_pmdi005')
CALL cpmq001_filter_show('pmdi006','b_pmdi006')
CALL cpmq001_filter_show('pmdi007','b_pmdi007')
CALL cpmq001_filter_show('pmdi008','b_pmdi008')
CALL cpmq001_filter_show('pmdi009','b_pmdi009')
CALL cpmq001_filter_show('pmdi011','b_pmdi011')
CALL cpmq001_filter_show('pmdi015','b_pmdi015')
CALL cpmq001_filter_show('pmdi030','b_pmdi030')
CALL cpmq001_filter_show('pmdi034','b_pmdi034')
CALL cpmq001_filter_show('pmdj002','b_pmdj002')
CALL cpmq001_filter_show('pmdj008','b_pmdj008')
CALL cpmq001_filter_show('pmdj009','b_pmdj009')
CALL cpmq001_filter_show('pmdj010','b_pmdj010')
CALL cpmq001_filter_show('pmdj011','b_pmdj011')
CALL cpmq001_filter_show('pmdj012','b_pmdj012')
CALL cpmq001_filter_show('pmdj016','b_pmdj016')
CALL cpmq001_filter_show('pmdj030','b_pmdj030')
CALL cpmq001_filter_show('pmdjud011','b_pmdjud011')
CALL cpmq001_filter_show('pmdjud012','b_pmdjud012')
CALL cpmq001_filter_show('pmdk001','b_pmdk001')
CALL cpmq001_filter_show('pmdk002','b_pmdk002')
CALL cpmq001_filter_show('pmdkseq','b_pmdkseq')
CALL cpmq001_filter_show('pmdk003','b_pmdk003')
CALL cpmq001_b_fill()
CALL gfrm_curr.setFieldHidden("formonly.sel", FALSE)
CALL gfrm_curr.setFieldHidden("formonly.b_statepic", FALSE)
END FUNCTION
{</section>}
{<section id="cpmq001.filter_parser" type="s" >}
#應用 qs14 樣板自動產生(Version:6)
#+ filter pasara段
#+ filter欄位解析
PRIVATE FUNCTION cpmq001_filter_parser(ps_field)
#add-point:filter段define-客製 name="filter_parser.define_customerization"
#end add-point
{<Local define>}
DEFINE ps_field STRING
DEFINE ls_tmp STRING
DEFINE li_tmp LIKE type_t.num5
DEFINE li_tmp2 LIKE type_t.num5
DEFINE ls_var STRING
{</Local define>}
#add-point:filter段define-標準 (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="filter_parser.define"
#end add-point
#add-point:FUNCTION前置處理 name="filter_parser.before_function"
#end add-point
#一般條件解析
LET ls_tmp = ps_field, "='"
LET li_tmp = g_wc_filter.getIndexOf(ls_tmp,1)
IF li_tmp > 0 THEN
LET li_tmp = ls_tmp.getLength() + li_tmp
LET li_tmp2 = g_wc_filter.getIndexOf("'",li_tmp + 1) - 1
LET ls_var = g_wc_filter.subString(li_tmp,li_tmp2)
END IF
#模糊條件解析
LET ls_tmp = ps_field, " like '"
LET li_tmp = g_wc_filter.getIndexOf(ls_tmp,1)
IF li_tmp > 0 THEN
LET li_tmp = ls_tmp.getLength() + li_tmp
LET li_tmp2 = g_wc_filter.getIndexOf("'",li_tmp + 1) - 1
LET ls_var = g_wc_filter.subString(li_tmp,li_tmp2)
LET ls_var = cl_replace_str(ls_var,'%','*')
END IF
RETURN ls_var
END FUNCTION
{</section>}
{<section id="cpmq001.filter_show" type="s" >}
#應用 qs15 樣板自動產生(Version:6)
#+ filter標題欄位顯示搜尋條件
PRIVATE FUNCTION cpmq001_filter_show(ps_field,ps_object)
#add-point:filter_show段define-客製 name="filter_show.define_customerization"
#end add-point
DEFINE ps_field STRING
DEFINE ps_object STRING
DEFINE lnode_item om.DomNode
DEFINE ls_title STRING
DEFINE ls_name STRING
DEFINE ls_condition STRING
#add-point:filter_show段define-標準 (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="filter_show.define"
#end add-point
#add-point:FUNCTION前置處理 name="filter_show.before_function"
#end add-point
LET ls_name = "formonly.", ps_object
LET lnode_item = gfrm_curr.findNode("TableColumn", ls_name)
LET ls_title = lnode_item.getAttribute("text")
IF ls_title.getIndexOf('※',1) > 0 THEN
LET ls_title = ls_title.subString(1,ls_title.getIndexOf('※',1)-1)
END IF
#顯示資料組合
LET ls_condition = cpmq001_filter_parser(ps_field)
IF NOT cl_null(ls_condition) THEN
LET ls_title = ls_title, '※', ls_condition, '※'
END IF
#將資料顯示回去
CALL lnode_item.setAttribute("text",ls_title)
END FUNCTION
{</section>}
{<section id="cpmq001.detail_action_trans" type="s" >}
#+ 單身分頁筆數顯示及action圖片顯示切換功能
PRIVATE FUNCTION cpmq001_detail_action_trans()
#add-point:detail_action_trans段define-客製 name="detail_action_trans.define_customerization"
#end add-point
#add-point:detail_action_trans段define-標準 (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="detail_action_trans.define"
#end add-point
#add-point:FUNCTION前置處理 name="detail_action_trans.before_function"
#end add-point
#因應單身切頁功能,筆數計算方式調整
#(ver:33) ---start---
IF g_pagestart = 0 THEN
LET g_pagestart = 1
END IF
#(ver:36) --- end ---
LET g_current_row_tot = g_pagestart + g_detail_idx - 1
#(ver:36) ---modify start---
IF g_tot_cnt > 0 THEN
DISPLAY g_current_row_tot TO FORMONLY.h_index
DISPLAY g_tot_cnt TO FORMONLY.h_count
ELSE
IF g_pmdi_d.getLength() > 0 THEN
DISPLAY g_current_row_tot TO FORMONLY.h_index
DISPLAY g_pmdi_d.getLength() TO FORMONLY.h_count
ELSE
DISPLAY '' TO FORMONLY.h_index
DISPLAY '' TO FORMONLY.h_count
END IF
END IF
#(ver:36) --- modify end ---
#顯示單身頁面的起始與結束筆數
LET g_page_start_num = g_pagestart
LET g_page_end_num = g_pagestart + g_num_in_page - 1
DISPLAY g_page_start_num TO FORMONLY.p_start
DISPLAY g_page_end_num TO FORMONLY.p_end
#目前不支援跳頁功能
LET g_page_act_list = "detail_first,detail_previous,'',detail_next,detail_last"
CALL cl_navigator_detail_page_setting(g_page_act_list,g_current_row_tot,g_pagestart,g_num_in_page,g_tot_cnt)
END FUNCTION
{</section>}
{<section id="cpmq001.detail_index_setting" type="s" >}
#+ 單身切頁後,index重新調整,避免翻頁後指到空白筆數
PRIVATE FUNCTION cpmq001_detail_index_setting()
#add-point:detail_index_setting段define-客製 name="detail_index_setting.define_customerization"
#end add-point
DEFINE li_redirect BOOLEAN
DEFINE ldig_curr ui.Dialog
#add-point:detail_index_setting段define-標準 (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="detail_index_setting.define"
#end add-point
#add-point:FUNCTION前置處理 name="detail_index_setting.before_function"
#end add-point
IF g_curr_diag IS NOT NULL THEN
CASE
WHEN g_curr_diag.getCurrentRow("s_detail1") <= "0"
LET g_detail_idx = 1
IF g_pmdi_d.getLength() > 0 THEN
LET li_redirect = TRUE
END IF
WHEN g_curr_diag.getCurrentRow("s_detail1") > g_pmdi_d.getLength() AND g_pmdi_d.getLength() > 0
LET g_detail_idx = g_pmdi_d.getLength()
LET li_redirect = TRUE
WHEN g_curr_diag.getCurrentRow("s_detail1") != g_detail_idx
IF g_detail_idx > g_pmdi_d.getLength() THEN
LET g_detail_idx = g_pmdi_d.getLength()
END IF
LET li_redirect = TRUE
END CASE
END IF
IF li_redirect THEN
LET ldig_curr = ui.Dialog.getCurrent()
CALL ldig_curr.setCurrentRow("s_detail1", g_detail_idx)
END IF
END FUNCTION
{</section>}
{<section id="cpmq001.mask_functions" type="s" >}
&include "erp/cpm/cpmq001_mask.4gl"
{</section>}
{<section id="cpmq001.other_function" readonly="Y" type="s" >}
################################################################################
# Descriptions...: 描述说明
# Memo...........:
# Usage..........: CALL s_aooi150_ins (传入参数)
# RETURNING 回传参数
# Input parameter: 传入参数变量1 传入参数变量说明1
# : 传入参数变量2 传入参数变量说明2
# Return code....: 回传参数变量1 回传参数变量说明1
# : 回传参数变量2 回传参数变量说明2
# Date & Author..: 日期 By 作者
# Modify.........:
################################################################################
PRIVATE FUNCTION cpmq001_create_tmp()
WHENEVER ERROR CONTINUE
#单位转换的临时表
DROP TABLE cpmq001_tmp;
CREATE TEMP TABLE cpmq001_tmp (
pmdient LIKE pmdi_t.pmdient,
pmdisite LIKE pmdi_t.pmdisite,
pmdi004 LIKE pmdi_t.pmdi004,
pmdj002 LIKE pmdj_t.pmdj002
)
END FUNCTION
{</section>}
网友评论