不但查詢耗時,而且要匯出 Excel 需要跑報表才可以列出清單,
讓使用者感覺操作不是那麼的流暢和便利。
可以在程式上面加上資料清單囉~~
而且調整的程式的部份不會很多,大約半小時就可以完成一支程式。
以動態料件數量明細查詢 aimq102 為例:
當在主畫面的時候匯出 Excel 可以匯出庫存明細,
在資料清單匯出 Excel 則匯出資料清單資料,且 Double Click 就會跳到主畫面。
在資料清單選擇料件時,下面的庫存明細也會跟著更新。
這樣是不是就方便許多,也不需要另外在做報表程式做明細資料的匯出。
修改程式步驟:
1. 修改畫面檔,增加新的頁籤,並指定 action ,記得 Main 也要加上 action。
2. 再來就是修改程式了,需要增加二個 Function。
q102_list_fill() 在顯示資料清單用的。
q102_bp1(p_ud) 在跳到資料清單時等待操作用的,才能停留畫面在資料清單。
如果需要能夠在資料清單做過帳、確認的動作,也是加在此 Function。
可以在主畫面查詢到第幾筆,資料清單也可以移動到那一筆。
還有匯出 Excel 依畫面在主畫面還是資料清單來匯出到 Excel。
需要修改 q102_menu()、q102_bp(p_ud)、q102_cs()、全域變數。
程式碼和修改的備註說明如下:
DATABASE ds
GLOBALS "../../config/top.global"
DEFINE tm RECORD
wc STRING,
wc2 LIKE type_file.chr1000
END RECORD,
m_ima DYNAMIC ARRAY OF RECORD
ima02 LIKE ima_file.ima02,
ima021 LIKE ima_file.ima021,
ima01 LIKE ima_file.ima01
END RECORD,
g_ima RECORD
ima01 LIKE ima_file.ima01,
ima02 LIKE ima_file.ima02,
ima021 LIKE ima_file.ima02,
ima25 LIKE ima_file.ima25,
ima05 LIKE ima_file.ima05,
ima06 LIKE ima_file.ima06,
ima08 LIKE ima_file.ima08,
ima37 LIKE ima_file.ima37,
ima27 LIKE ima_file.ima27,
ima70 LIKE ima_file.ima70,
ima15 LIKE ima_file.ima15,
ima906 LIKE ima_file.ima906,
ima907 LIKE ima_file.ima907,
unavl_stk LIKE type_file.num15_3,
avl_stk LIKE type_file.num15_3,
oeb_q LIKE type_file.num15_3,
sfa_q1 LIKE type_file.num15_3,
sfa_q2 LIKE type_file.num15_3,
sie_q LIKE type_file.num15_3,
pml_q LIKE type_file.num15_3,
pmn_q LIKE type_file.num15_3,
rvb_q2 LIKE type_file.num15_3,
rvb_q LIKE type_file.num15_3,
sfb_q1 LIKE type_file.num15_3,
sfb_q2 LIKE type_file.num15_3,
qcf_q LIKE type_file.num15_3,
atp_qty LIKE type_file.num15_3
END RECORD,
g_img DYNAMIC ARRAY OF RECORD
img02 LIKE img_file.img02,
img03 LIKE img_file.img03,
img04 LIKE img_file.img04,
img23 LIKE img_file.img23,
img10 LIKE img_file.img10,
sig05 LIKE sig_file.sig05,
img09 LIKE img_file.img09,
img38 LIKE img_file.img38
END RECORD,
g_sw LIKE type_file.chr1,
g_argv1 LIKE type_file.chr20,
g_argv2 LIKE ima_file.ima01,
g_query_flag LIKE type_file.num5,
g_wc3,g_wc4 STRING,
g_sql STRING,
g_line1,g_line2 LIKE type_file.num5,
g_refresh LIKE type_file.chr1,
g_chr LIKE type_file.chr1,
g_cmd LIKE type_file.chr1000,
l_za05 LIKE za_file.za05,
g_rec_b LIKE type_file.num5,
g_rec_b1 LIKE type_file.num5,
l_ac LIKE type_file.num5,
l_ac1 LIKE type_file.num5,
l_ac2 LIKE type_file.num5 # 新增目前頁籤的位置 flag
DEFINE p_row,p_col LIKE type_file.num5
DEFINE g_count LIKE type_file.num5
DEFINE g_cnt LIKE type_file.num10
DEFINE g_unavl_stk LIKE type_file.num15_3
DEFINE g_avl_stk LIKE type_file.num15_3
DEFINE g_msg LIKE type_file.chr1000
DEFINE g_row_count LIKE type_file.num10
DEFINE g_curs_index LIKE type_file.num10
DEFINE g_jump LIKE type_file.num10
DEFINE g_no_ask LIKE type_file.num5
DEFINE lc_qbe_sn LIKE gbm_file.gbm01
DEFINE g_plant_t LIKE type_file.chr21
DEFINE g_flag LIKE type_file.chr1
DEFINE g_curs_index_t LIKE type_file.num10
DEFINE w ui.Window # 匯出 Excel 的單身
DEFINE n om.DomNode # 匯出 Excel 的單身
DEFINE g_bp_flag LIKE type_file.chr10 # 新增目前頁籤的位置 flag
DEFINE g_ima_l DYNAMIC ARRAY OF RECORD # 資料清單的陣列
ima01_l LIKE ima_file.ima01,
ima02_l LIKE ima_file.ima02,
ima021_l LIKE ima_file.ima021,
ima08_l LIKE ima_file.ima08,
ima25_l LIKE ima_file.ima25,
ima27_l LIKE ima_file.ima27,
avl_stk_l LIKE ima_file.ima261,
unavl_stk_l LIKE ima_file.ima262
END RECORD
FUNCTION q102_cs()
DEFINE l_cnt LIKE type_file.num5
IF NOT cl_null(g_argv1) THEN
CASE WHEN g_argv1='1' LET tm.wc = "ima01 = '",g_argv2,"'"
WHEN g_argv1='2' LET tm.wc = "ima01 IN",
" (SELECT sfa03 FROM sfa_file WHERE ",
" sfa01='",g_argv2,"')"
WHEN g_argv1='3' LET tm.wc = "ima01 IN",
" (SELECT oeb04 FROM oeb_file WHERE ",
" oeb01='",g_argv2,"')"
END CASE
LET tm.wc2=' 1=1'
ELSE
CLEAR FORM
CALL g_img.clear()
CALL cl_opmsg('q')
IF g_sw = 1 THEN
INITIALIZE g_ima.* TO NULL
CALL cl_set_head_visible("","YES")
IF g_flag = 0 THEN
CONSTRUCT BY NAME tm.wc ON ima01,ima02,ima021
BEFORE CONSTRUCT
CALL cl_qbe_init()
ON IDLE g_idle_seconds
CALL cl_on_idle()
CONTINUE CONSTRUCT
ON ACTION about
CALL cl_about()
ON ACTION HELP
CALL cl_show_help()
ON ACTION controlg
CALL cl_cmdask()
ON ACTION CONTROLP
CASE
WHEN INFIELD(ima01)
CALL cl_init_qry_var()
LET g_qryparam.form = "q_ima"
LET g_qryparam.state = 'c'
CALL cl_create_qry() RETURNING g_qryparam.multiret
DISPLAY g_qryparam.multiret TO ima01
NEXT FIELD ima01
END CASE
ON ACTION qbe_select
CALL cl_qbe_list() RETURNING lc_qbe_sn
CALL cl_qbe_display_condition(lc_qbe_sn)
END CONSTRUCT
END IF
IF INT_FLAG THEN RETURN END IF
CALL q102_b_askkey()
IF INT_FLAG THEN RETURN END IF
END IF
IF g_sw = 2 THEN
OPEN WINDOW q102_w2 AT 6,3 WITH FORM "aim/42f/aimq841_2"
ATTRIBUTE (STYLE = g_win_style CLIPPED)
CALL cl_ui_locale("aimq841_2")
WHILE TRUE
CONSTRUCT BY NAME g_wc3 ON sfa01
BEFORE CONSTRUCT
CALL cl_qbe_init()
ON IDLE g_idle_seconds
CALL cl_on_idle()
CONTINUE CONSTRUCT
ON ACTION about
CALL cl_about()
ON ACTION help
CALL cl_show_help()
ON ACTION controlg
CALL cl_cmdask()
ON ACTION qbe_select
CALL cl_qbe_select()
ON ACTION qbe_save
CALL cl_qbe_save()
END CONSTRUCT
IF INT_FLAG THEN EXIT WHILE END IF
IF g_wc3<>' 1=1' THEN EXIT WHILE END IF
END WHILE
CLOSE WINDOW q102_w2
IF INT_FLAG THEN RETURN END IF
LET tm.wc = "ima01 IN (SELECT sfa03 FROM sfa_file WHERE ",g_wc3 CLIPPED,")"
END IF
IF g_sw = 3 THEN
OPEN WINDOW q102_w3 AT 6,3 WITH FORM "aim/42f/aimq841_3"
ATTRIBUTE (STYLE = g_win_style CLIPPED)
CALL cl_ui_locale("aimq841_3")
WHILE TRUE
CONSTRUCT BY NAME g_wc3 ON oeb01
BEFORE CONSTRUCT
CALL cl_qbe_init()
ON IDLE g_idle_seconds
CALL cl_on_idle()
CONTINUE CONSTRUCT
ON ACTION about
CALL cl_about()
ON ACTION HELP
CALL cl_show_help()
ON ACTION controlg
CALL cl_cmdask()
ON ACTION qbe_select
CALL cl_qbe_select()
ON ACTION qbe_save
CALL cl_qbe_save()
END CONSTRUCT
IF INT_FLAG THEN EXIT WHILE END IF
IF g_wc3<>' 1=1' THEN EXIT WHILE END IF
END WHILE
CLOSE WINDOW q102_w3
IF INT_FLAG THEN RETURN END IF
LET tm.wc = "ima01 IN (SELECT oeb04 FROM oeb_file WHERE ",g_wc3 CLIPPED,")"
END IF
IF g_sw = 4 THEN
OPEN WINDOW q102_w4 AT 6,3 WITH FORM "aim/42f/aimq841_4"
ATTRIBUTE (STYLE = g_win_style CLIPPED)
CALL cl_ui_locale("aimq841_4")
CONSTRUCT BY NAME g_wc3 ON bmb01
BEFORE CONSTRUCT
CALL cl_qbe_init()
ON IDLE g_idle_seconds
CALL cl_on_idle()
CONTINUE CONSTRUCT
ON ACTION about
CALL cl_about()
ON ACTION help
CALL cl_show_help()
ON ACTION controlg
CALL cl_cmdask()
ON ACTION CONTROLP
IF INFIELD(bmb01) THEN
CALL cl_init_qry_var()
LET g_qryparam.form = "q_ima5"
LET g_qryparam.state = "c"
CALL cl_create_qry() RETURNING g_qryparam.multiret
DISPLAY g_qryparam.multiret TO bmb01
NEXT FIELD bmb01
END IF
ON ACTION qbe_select
CALL cl_qbe_select()
ON ACTION qbe_save
CALL cl_qbe_save()
END CONSTRUCT
CLOSE WINDOW q102_w4
IF INT_FLAG THEN RETURN END IF
LET tm.wc = "ima01 IN ",
" (SELECT bmb03 FROM bmb_file ",
" WHERE ",g_wc3 CLIPPED,
" AND bmb04 <= '",g_today,"'",
" AND (bmb05 > '",g_today,"'",
" OR bmb05 IS NULL ))"
END IF
END IF
MESSAGE ' WAIT '
IF tm.wc2=' 1=1' OR tm.wc2 IS NULL THEN
LET g_sql=" SELECT UNIQUE ima02,ima021,ima01 FROM ima_file ",
" WHERE ",tm.wc CLIPPED
ELSE
LET g_sql=" SELECT UNIQUE ima02,ima021,ima01 ",
" FROM ima_file,img_file ",
" WHERE ima_file.ima01=img_file.img01 AND ",tm.wc CLIPPED," AND ",tm.wc2 CLIPPED,
" AND img10<>0"
END IF
LET g_sql = g_sql CLIPPED,cl_get_extra_cond('imauser', 'imagrup')
LET g_sql = g_sql clipped," ORDER BY ima01"
PREPARE q102_prepare FROM g_sql
DECLARE q102_cs SCROLL CURSOR WITH HOLD FOR q102_prepare
LET g_cnt=1
FOREACH q102_cs INTO m_ima[g_cnt].*
LET g_cnt=g_cnt+1 IF g_cnt>1000 THEN EXIT FOREACH END IF
END FOREACH
# 資料清單的 SQL ,盡可能和 q102_prepare 同一個
DECLARE q102_list_cur CURSOR FOR q102_prepare
IF tm.wc2=' 1=1' THEN
LET g_sql=" SELECT COUNT(*) FROM ima_file ",
" WHERE ",tm.wc CLIPPED
ELSE
LET g_sql=" SELECT COUNT(DISTINCT ima01) FROM ima_file,OUTER img_file ",
" WHERE ima_file.ima01=img_file.img01 AND ",tm.wc CLIPPED
IF NOT cl_null(tm.wc2) THEN
LET g_sql = g_sql CLIPPED,
" AND ",tm.wc2 CLIPPED,
" AND img10<>0"
END IF
END IF
PREPARE q102_pp FROM g_sql
DECLARE q102_cnt CURSOR FOR q102_pp
END FUNCTION
FUNCTION q102_menu()
# 宣告匯出 Excel 的頁籤位置
DEFINE w ui.Window
DEFINE n om.DomNode
WHILE TRUE
LET INT_FLAG=0
# 修改目前是在那一個頁籤,進行 DISPLAY 等待動作
IF cl_null(g_bp_flag) OR g_bp_flag <> 'list' THEN
CALL q102_bp("G")
ELSE
CALL q102_bp1("G")
END IF
#CALL q102_bp("G")
CASE g_action_choice
WHEN "help"
CALL cl_show_help()
WHEN "exit"
EXIT WHILE
WHEN "controlg"
CALL cl_cmdask()
WHEN "query"
LET g_sw = 1
CALL q102_q()
WHEN "query_by_w_o"
LET g_sw = 2
CALL q102_q()
WHEN "query_by_order"
LET g_sw = 3
CALL q102_q()
WHEN "query_by_bom"
LET g_sw = 4
CALL q102_q()
WHEN "period_tran"
IF cl_chk_act_auth() THEN
CALL s_aimq102_q1(g_ima.ima01,'','','1')
END IF
WHEN "latest_pur"
IF cl_chk_act_auth() THEN
CALL q102_q2()
END IF
WHEN "transfer_in_transit"
CALL q102_q5()
WHEN "approved_vender"
LET g_msg='apmi254 "',g_ima.ima01,'"'
CALL cl_cmdrun(g_msg)
WHEN "rep_sub"
LET g_msg='abmi604 "',g_ima.ima01,'"'
CALL cl_cmdrun(g_msg)
WHEN "bom_usage"
IF cl_chk_act_auth() THEN
CALL q102_q4()
END IF
WHEN "ecn"
IF cl_chk_act_auth() THEN
CALL q102_q3()
END IF
WHEN "bin_card"
LET g_msg='aimq231 "',g_ima.ima01,'"'
CALL cl_cmdrun(g_msg)
WHEN "demand_Supply"
LET g_msg='aimq841 "1" "',g_ima.ima01,'"'
CALL cl_cmdrun(g_msg)
WHEN "query_detail"
CALL q102_d('0')
WHEN "query_lot_data"
IF l_ac > 0 THEN
CALL q102_q_imgs()
END IF
WHEN "Stocks_detail"
IF cl_chk_act_auth() THEN
IF g_ima.sie_q>0 THEN
CALL q102_detail()
ELSE
CALL cl_err('','aim-050',0)
END IF
END IF
WHEN "du_detail"
LET g_cmd = "aimq410 '",g_ima.ima01,"'"
CALL cl_cmdrun(g_cmd CLIPPED)
WHEN "exporttoexcel"
IF cl_chk_act_auth() THEN
# 要匯出 Excel 的頁籤不同,各自匯出不同的明細
LET w = ui.Window.getCurrent()
IF g_bp_flag = 'main' OR cl_null(g_bp_flag) THEN
LET n = w.findNode("Table","s_img")
CALL cl_export_to_excel(n,base.TypeInfo.create(g_img),'','')
ELSE
LET n = w.findNode("Table","s_ima_l")
CALL cl_export_to_excel(n,base.TypeInfo.create(g_ima_l),'','')
END IF
#CALL cl_export_to_excel(ui.Interface.getRootNode(),base.TypeInfo.create(g_img),'','')
END IF
END CASE
END WHILE
END FUNCTION
FUNCTION q102_q()
DEFINE l_null LIKE type_file.chr1
LET g_row_count = 0
LET g_curs_index = 0
CALL cl_navigator_setting( g_curs_index, g_row_count )
CALL cl_opmsg('q')
DISPLAY ' ' TO FORMONLY.cnt
CALL q102_cs()
IF INT_FLAG THEN
LET INT_FLAG = 0
LET g_bp_flag ="main" # 頁籤改為在主畫面
RETURN
END IF
OPEN q102_cs
IF SQLCA.sqlcode THEN
CALL cl_err('',SQLCA.sqlcode,0)
ELSE
OPEN q102_cnt
FETCH q102_cnt INTO g_row_count
DISPLAY g_row_count TO cnt
IF g_flag = 1 THEN
LET g_jump = g_curs_index_t
CALL q102_fetch('/')
ELSE
CALL q102_fetch('F')
CALL q102_list_fill() # 查詢後馬上列出資料清單
LET g_bp_flag = NULL # 頁籤先清為空白
END IF
END IF
MESSAGE ''
END FUNCTION
FUNCTION q102_bp(p_ud)
DEFINE p_ud LIKE type_file.chr1
IF p_ud <> "G" THEN
RETURN
END IF
CALL SET_COUNT(g_rec_b)
LET g_action_choice = " "
CALL cl_set_act_visible("accept,cancel", FALSE)
DIALOG ATTRIBUTES(UNBUFFERED)
DISPLAY ARRAY g_img TO s_img.* ATTRIBUTE(COUNT=g_rec_b)
BEFORE DISPLAY
IF g_sma.sma115 = 'N' THEN
CALL cl_set_act_visible("du_detail",FALSE)
ELSE
CALL cl_set_act_visible("du_detail",TRUE)
END IF
CALL cl_navigator_setting( g_curs_index, g_row_count )
BEFORE ROW
LET l_ac = ARR_CURR()
CALL cl_show_fld_cont()
AFTER DISPLAY
CONTINUE DIALOG
END DISPLAY
DISPLAY ARRAY g_imgs TO s_imgs.* ATTRIBUTE(COUNT=g_rec_b1)
BEFORE DISPLAY
IF g_sma.sma115 = 'N' THEN
CALL cl_set_act_visible("du_detail",FALSE)
ELSE
CALL cl_set_act_visible("du_detail",TRUE)
END IF
CALL cl_navigator_setting( g_curs_index, g_row_count )
BEFORE ROW
LET l_ac1 = ARR_CURR()
CALL cl_show_fld_cont()
AFTER DISPLAY
CONTINUE DIALOG
END DISPLAY
ON ACTION first
CALL q102_fetch('F')
CALL cl_navigator_setting(g_curs_index, g_row_count)
IF g_rec_b != 0 THEN
CALL fgl_set_arr_curr(1)
END IF
ACCEPT DIALOG
EXIT DIALOG
ON ACTION previous
CALL q102_fetch('P')
CALL cl_navigator_setting(g_curs_index, g_row_count)
IF g_rec_b != 0 THEN
CALL fgl_set_arr_curr(1)
END IF
ACCEPT DIALOG
EXIT DIALOG
ON ACTION jump
CALL q102_fetch('/')
CALL cl_navigator_setting(g_curs_index, g_row_count)
IF g_rec_b != 0 THEN
CALL fgl_set_arr_curr(1)
END IF
ACCEPT DIALOG
EXIT DIALOG
ON ACTION next
CALL q102_fetch('N')
CALL cl_navigator_setting(g_curs_index, g_row_count)
IF g_rec_b != 0 THEN
CALL fgl_set_arr_curr(1)
END IF
ACCEPT DIALOG
EXIT DIALOG
ON ACTION last
CALL q102_fetch('L')
CALL cl_navigator_setting(g_curs_index, g_row_count)
IF g_rec_b != 0 THEN
CALL fgl_set_arr_curr(1)
END IF
ACCEPT DIALOG
EXIT DIALOG
ON ACTION help
LET g_action_choice="help"
EXIT DIALOG
ON ACTION locale
CALL cl_dynamic_locale()
CALL cl_show_fld_cont()
CALL q102_mu_ui()
ON ACTION exit
LET g_action_choice="exit"
EXIT DIALOG
ON ACTION controlg
LET g_action_choice="controlg"
EXIT DIALOG
ON ACTION query
LET g_action_choice="query"
EXIT DIALOG
ON ACTION query_by_w_o
LET g_action_choice="query_by_w_o"
EXIT DIALOG
ON ACTION query_by_order
LET g_action_choice="query_by_order"
EXIT DIALOG
ON ACTION query_by_bom
LET g_action_choice="query_by_bom"
EXIT DIALOG
ON ACTION period_tran
LET g_action_choice="period_tran"
EXIT DIALOG
ON ACTION latest_pur
LET g_action_choice="latest_pur"
EXIT DIALOG
ON ACTION transfer_in_transit
LET g_action_choice="transfer_in_transit"
EXIT DIALOG
ON ACTION approved_vender
LET g_action_choice="approved_vender"
EXIT DIALOG
ON ACTION rep_sub
LET g_action_choice="rep_sub"
EXIT DIALOG
ON ACTION bom_usage
LET g_action_choice="bom_usage"
EXIT DIALOG
ON ACTION ecn
LET g_action_choice="ecn"
EXIT DIALOG
ON ACTION bin_card
LET g_action_choice="bin_card"
EXIT DIALOG
ON ACTION demand_Supply
LET g_action_choice="demand_Supply"
EXIT DIALOG
ON ACTION Stocks_detail
LET g_action_choice="Stocks_detail"
EXIT DIALOG
ON ACTION query_detail
LET g_action_choice="query_detail"
EXIT DIALOG
ON ACTION du_detail
LET g_action_choice = 'du_detail'
EXIT DIALOG
ON ACTION query_lot_data
LET g_action_choice = 'query_lot_data'
EXIT DIALOG
ON ACTION accept
EXIT DIALOG
ON ACTION cancel
LET INT_FLAG=FALSE
LET g_action_choice="exit"
EXIT DIALOG
ON ACTION exporttoexcel
LET g_action_choice = 'exporttoexcel'
EXIT DIALOG
ON IDLE g_idle_seconds
CALL cl_on_idle()
CONTINUE DIALOG
ON ACTION about
CALL cl_about()
ON ACTION controls
CALL cl_set_head_visible("","AUTO")
# 頁籤改為在資料清單
ON ACTION item_list
LET g_bp_flag = 'list'
EXIT DIALOG
END DIALOG
CALL cl_set_act_visible("accept,cancel", TRUE)
END FUNCTION
# 增加資料清單的列表
FUNCTION q102_list_fill()
DEFINE l_ima01 LIKE ima_file.ima01
DEFINE l_i LIKE type_file.num10,
l_n1 LIKE type_file.num15_3
CALL g_ima_l.clear()
LET l_i = 1
FOREACH q102_list_cur INTO l_ima01
IF SQLCA.sqlcode THEN
CALL cl_err('foreach list_cur',SQLCA.sqlcode,1)
CONTINUE FOREACH
END IF
SELECT ima01,ima02,ima021,ima08,ima25,ima27,0,0 INTO g_ima_l[l_i].*
FROM ima_file
WHERE ima01 = l_ima01
SELECT SUM(img10) INTO g_ima_l[l_i].avl_stk_l FROM img_file,imd_file
WHERE img02 = imd01 AND imd11 = 'Y' AND img01 = l_ima01
IF cl_null(g_ima_l[l_i].avl_stk_l) THEN LET g_ima_l[l_i].avl_stk_l = 0 END IF
SELECT SUM(img10) INTO g_ima_l[l_i].unavl_stk_l FROM img_file,imd_file
WHERE img02 = imd01 AND imd11 = 'N' AND img01 = l_ima01
IF cl_null(g_ima_l[l_i].unavl_stk_l) THEN LET g_ima_l[l_i].unavl_stk_l = 0 END IF
LET l_i = l_i + 1
IF l_i > g_max_rec THEN
CALL cl_err( '', 9035, 0 )
EXIT FOREACH
END IF
END FOREACH
LET g_row_count = l_i - 1
DISPLAY ARRAY g_ima_l TO s_ima_l.* ATTRIBUTE(COUNT=g_row_count)
BEFORE DISPLAY
EXIT DISPLAY
END DISPLAY
END FUNCTION
# 增加資料清單 action 功能鍵和停留在資料清單等待動作
FUNCTION q102_bp1(p_ud)
DEFINE p_ud LIKE type_file.chr1
IF p_ud <> "G" THEN
RETURN
END IF
LET g_action_choice = " "
CALL cl_set_act_visible("accept,cancel", FALSE)
DISPLAY ARRAY g_ima_l TO s_ima_l.* ATTRIBUTE(COUNT=g_row_count,UNBUFFERED)
BEFORE DISPLAY
CALL cl_navigator_setting( g_curs_index, g_row_count )
IF g_row_count != 0 THEN
CALL fgl_set_arr_curr(g_curs_index)
END IF
CALL cl_show_fld_cont()
ON ACTION query
LET g_action_choice="query"
EXIT DISPLAY
ON ACTION first
CALL q102_fetch('F')
CALL cl_navigator_setting(g_curs_index, g_row_count)
IF g_row_count != 0 THEN
CALL fgl_set_arr_curr(g_curs_index)
END IF
ACCEPT DISPLAY
ON ACTION previous
CALL q102_fetch('P')
CALL cl_navigator_setting(g_curs_index, g_row_count)
IF g_row_count != 0 THEN
CALL fgl_set_arr_curr(g_curs_index)
END IF
ACCEPT DISPLAY
ON ACTION jump
CALL q102_fetch('/')
CALL cl_navigator_setting(g_curs_index, g_row_count)
IF g_row_count != 0 THEN
CALL fgl_set_arr_curr(g_curs_index)
END IF
ACCEPT DISPLAY
ON ACTION next
CALL q102_fetch('N')
CALL cl_navigator_setting(g_curs_index, g_row_count)
IF g_row_count != 0 THEN
CALL fgl_set_arr_curr(g_curs_index)
END IF
ACCEPT DISPLAY
ON ACTION last
CALL q102_fetch('L')
CALL cl_navigator_setting(g_curs_index, g_row_count)
IF g_row_count != 0 THEN
CALL fgl_set_arr_curr(g_curs_index)
END IF
ACCEPT DISPLAY
ON ACTION help
LET g_action_choice="help"
CALL cl_show_help()
EXIT DISPLAY
ON ACTION locale
CALL cl_dynamic_locale()
CALL cl_show_fld_cont()
EXIT DISPLAY
ON ACTION exit
LET g_action_choice="exit"
EXIT DISPLAY
ON ACTION controlg
LET g_action_choice="controlg"
EXIT DISPLAY
ON ACTION cancel
LET INT_FLAG=FALSE
LET g_action_choice="exit"
EXIT DISPLAY
ON IDLE g_idle_seconds
CALL cl_on_idle()
CONTINUE DISPLAY
ON ACTION about
CALL cl_about()
ON ACTION exporttoexcel
LET g_action_choice = 'exporttoexcel'
EXIT DISPLAY
# 頁籤改為在主畫面
ON ACTION main
LET g_bp_flag = 'main'
CALL cl_set_comp_visible("page112", FALSE)
CALL ui.interface.refresh()
CALL cl_set_comp_visible("page112", TRUE)
EXIT DISPLAY
ON ACTION accept
LET g_bp_flag = 'main'
LET l_ac = ARR_CURR()
CALL cl_show_fld_cont()
LET l_ac1 = ARR_CURR()
LET g_jump = l_ac1
LET g_no_ask = TRUE
LET g_bp_flag = NULL
CALL q102_fetch('/')
CALL cl_set_comp_visible("page112", FALSE)
CALL ui.interface.refresh()
CALL cl_set_comp_visible("page112", TRUE)
EXIT DISPLAY
BEFORE ROW # 更新庫存明細的資料
LET l_ac1 = ARR_CURR()
LET g_ima.ima01 = g_ima_l[l_ac1].ima01_l
CALL q102_b_fill()
DISPLAY ARRAY g_img TO s_img.* ATTRIBUTE(COUNT=g_row_count)
BEFORE DISPLAY
EXIT DISPLAY
END DISPLAY
AFTER DISPLAY
CONTINUE DISPLAY
ON ACTION CONTROLS
CALL cl_set_head_visible("","AUTO")
&include "qry_string.4gl"
END DISPLAY
CALL cl_set_act_visible("accept,cancel", TRUE)
END FUNCTION
要注意的是,controls 設定 folder01~folder10 才會隱藏,所以 folder 的名稱命名就要依此規則來使用。

hi 張Sir
回覆刪除可以將畫面檔給我參考嗎?因為我是初學者,對部分比較不熟悉,不知可否?感謝
leo
在 4fd 畫面檔,增加 Folder 的物件把單頭的所有欄位都移到 Page1 裡面,
刪除然後在 Page1 的 action 加上 main,然後 Page2 的 action 加上 list ,
在 Page2 再加上 Table 物件,要顯示的欄位加上去然後設定一下名稱不要重複就可以了。
hi 張Sir
回覆刪除為什麼我新增一個page的動作,然後在action有依照你的增加名稱,然後按儲存卻不會出現
aimq102 : Successful,請問這是為什麼
可以了,原來是新增的page裡面需要有元件,否則無法編譯成功
回覆刪除hi 張sir
回覆刪除請問你的sig_file是甚麼,我們的沒有這個資料表
sig_file 備置庫存資料明細表,應該是 5.2 版以上才有的樣子。
刪除那就是我可以mark掉沒錯吧!
刪除還有我再執行時出現如下的錯誤,請問這個是甚麼問題
FORMS statement error number 1138.
The function 'main' has not been defined in any module in the program.
hi 張先生
回覆刪除我已經可以執行可以我在查詢的時候卻沒出現任何東西,只有在main上面有顯示,但是list上面卻沒有任何東西,請問這個是甚麼問題
leo
list 沒有顯示大部份的情況,
刪除畫面的欄位和 4gl 欄位數目、變數名稱沒有對應到,需要依序完全對應。
試試看~
作者已經移除這則留言。
回覆刪除作者已經移除這則留言。
刪除HI 張先生
回覆刪除我依照你的程式範例內,你在g_ima_l內建了八個table ima01_l
然後我在4fd內也建了
name:ima01_1
data: FORM_ONLY
dataType:VARCHAR
這樣還是不行,是不是我哪邊錯了
debug 看看 q102_list_fill() 是否執行有 errcode
刪除hi 張sir
回覆刪除沒有出現錯誤,再跑FOREACH 102_list_cur INTO l_ima01
的l_ima01=null,下一行select ima時候
都是g_ima_l[l_i].*是null
也就是說在select沒有任何資料
看起來 FOREACH 有在跑,但是應該是在
刪除SELECT ima01,ima02,ima021,ima08,ima25,ima27,0,0 INTO g_ima_l[l_i].* FROM ima_file
的問題,
要看你定義的 g_ima_l.* 是不是宣告 8 個變數。
hi 張sir
回覆刪除我宣告的是
DEFINE g_ima_l DYNAMIC ARRAY OF RECORD # 資料清單的陣列
ima01_l LIKE ima_file.ima01,
ima02_l LIKE ima_file.ima02,
ima021_l LIKE ima_file.ima021,
ima08_l LIKE ima_file.ima08,
ima25_l LIKE ima_file.ima25,
ima27_l LIKE ima_file.ima27,
avl_stk_l LIKE ima_file.ima261,
unavl_stk_l LIKE ima_file.ima262
END RECORD
hi 張sir,照您的方式調整程式及畫面後。執行程式,按下資料清單頁面,程式就掛了(整個畫面關閉),請問會是哪裡出問題了?在煩請指導,謝謝。
回覆刪除