版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
TOPGP雙檔作業(yè)程序本教材以TIPTOPGP5.25版為說明標準鼎捷軟件TOPGP華東事業(yè)部本章說明雙文件維護標準程序。所謂雙檔,是指使用一個以上檔案來記錄某一類數(shù)據(jù),通常在單據(jù)類數(shù)據(jù)使用最多。學習完本章后,你將可以了解以下部分:
控制流程及各個函數(shù)間之關系。使用INPUTARRAY指令來處理單身之多欄式數(shù)據(jù)。學習目標show()show()功能列menuMAINa()i()b()u()q()b()N/Pcopy()r()x()out()show()cs()fetch()u()show()show()i()fetch()bp()show()b_fill()delh()上下筆刪除無效復制報表b()查詢新增更改單身雙檔流程圖采購料件詢價單頭檔pmw_file采購料件詢價單身檔pmx_file程序畫面本段應了解重點GLOBALS“../../config/top.global”Array變量的定義程序內(nèi)重要變量:g_forupd_sql在updatecursor內(nèi)用來組sql的string變數(shù)g_before_input_done字段控制變量﹙有使用到才加﹚g_curs_index單頭目前指標g_row_count單頭總筆數(shù)g_rec_b
單身總筆數(shù)l_ac單身目前指標共享及模塊變量宣告#Prog.Version..:'5.25.02-11.03.23(00000)'##Patternname...:apmi252.4gl#Descriptions...:采購料件詢價維護作業(yè)#Date&Author..:91/09/05ByWu#Note:本程序為教育訓練使用雙文件標準程序DATABASEdsGLOBALS"../../config/top.global"共享及模塊變量宣告(1)GLOBALS"../../../tiptop/config/top.global"DEFINEg_pmwRECORDLIKEpmw_file.*,#簽核等級(單頭)g_pmw_tRECORDLIKEpmw_file.*,#簽核等級(單頭,舊值備份)g_pmw_oRECORDLIKEpmw_file.*,#簽核等級(單頭,舊值備份)g_pmw01_tLIKEpmw_file.pmw01,#簽核等級(單頭,舊值備份)
g_pmxDYNAMICARRAYOFRECORD#程序變量(ProgramVariables)pmx02LIKEpmx_file.pmx02,#項次
pmx08LIKEpmx_file.pmx08,#料件編號
pmx081LIKEpmx_file.pmx081,#品名
pmx082LIKEpmx_file.pmx082,#規(guī)格
pmx09LIKEpmx_file.pmx09,#詢價單位
pmx04LIKEpmx_file.pmx04,#生效日期
pmx05LIKEpmx_file.pmx05,#失效日期
pmx03LIKEpmx_file.pmx03,#上限數(shù)量
pmx06LIKEpmx_file.pmx06,#采購價格
pmx06tLIKEpmx_file.pmx06t,#含稅單價pmx07LIKEpmx_file.pmx07#折扣比率
ENDRECORD,
g_pmx_tRECORD#程序變量(舊值)共享及模塊變量宣告(2)…DEFINEg_wcSTRING#單頭SELECT的where條件DEFINEg_wc2STRING#單身SELECT的where條件DEFINEg_sqlSTRING#CURSOR用的SQL暫存字符串DEFINEg_rec_bLIKEtype_file.num5#單身總筆數(shù)DEFINEl_acLIKEtype_file.num5
#目前處理的ARRAYCNTDEFINEg_forupd_sqlSTRING#用于LockCursor定義DEFINEg_before_input_doneLIKEtype_file.num5#用于BeforeInput段DEFINEg_chrLIKEtype_file.chr1DEFINEg_cntLIKEtype_file.num10DEFINEg_iLIKEtype_file.num5
#count/indexforanypurposeDEFINEg_msgLIKEze_file.ze03DEFINEg_curs_indexLIKEtype_file.num10DEFINEg_row_countLIKEtype_file.num10
#總筆數(shù)DEFINEg_jumpLIKEtype_file.num10
#查詢指定的筆數(shù)DEFINEg_no_askLIKEtype_file.num5#是否開啟指定筆窗口共享及模塊變量宣告(3)本段應了解重點程序開始前,需將外部自變量讀入cl_user、cl_setup、cl_ui_init的用途W(wǎng)HENEVERERRORCALLcl_err_msg_loglockcursor寫法MAINMAINOPTIONS
INPUTNOWRAP#輸入的方式:不打轉(zhuǎn)
DEFERINTERRUPT#擷取中斷鍵
LETg_argv1=ARG_VAL(1)
#單據(jù)編號
LETg_argv2=ARG_VAL(2)
#使用功能
LETg_argv3=ARG_VAL(3)
IF(NOTcl_user())THENEXITPROGRAMENDIFWHENEVERERRORCALLcl_err_msg_log
IF(NOTcl_setup("APM"))THENEXITPROGRAMENDIFcl_user()主要在抓取系統(tǒng)中與『個人設定』相關的變量值數(shù)據(jù),如g_user,g_clas,g_grup等等。main(1)…cl_setup()主要在抓取系統(tǒng)中與『模塊設定』相關的變量值數(shù)據(jù),如這個模塊所必需的全局變量等等。main(2)
CALLcl_used(g_prog,l_time,1)RETURNINGg_timeLETg_forupd_sql="SELECT*FROMpmw_fileWHEREROWID=?FORUPDATE“LETg_forupd_sql=cl_forupd_sql(g_forupd_sql)#轉(zhuǎn)換不同數(shù)據(jù)庫語法
DECLAREi252_clCURSORFROMg_forupd_sql#單頭的lockcursor
OPENWINDOWi252_wWITHFORM"apm/42f/apmi252"
ATTRIBUTE(STYLE=g_win_styleCLIPPED)
CALLcl_ui_init()CLOSEWINDOWi252_w
#結(jié)束畫面
CALLcl_used(g_prog,l_time,2)RETURNINGl_timeENDMAINcl_used主要在記錄用戶使用本作業(yè)的時間,是否記錄決定于aoos010。程序開始及結(jié)束時,都要呼叫此共享程序開啟窗口時,注意畫面文件路徑、style屬性設定作業(yè)的『主要畫面』(通常是第一個開啟的畫面),后面使用CALLcl_ui_init()不傳參數(shù)其他的次要畫面,就只使用CALLcl_ui_locale(“畫面代碼”)兩者差別在讀入ToolBar等環(huán)境設定……
IFNOTcl_null(g_argv1)THEN
CASEg_argv2WHEN"query"LETg_action_choice="query"IFcl_chk_act_auth()THENCALLi252_q()ENDIFWHEN"insert"LETg_action_choice="insert"IFcl_chk_act_auth()THENCALLi252_a()ENDIFOTHERWISECALLi252_q()ENDCASEENDIFCALLi252_menu()CLOSEWINDOWi252_w#結(jié)束畫面
CALLcl_used(g_prog,l_time,2)RETURNINGl_timeENDMAINmain(3)單據(jù)程序都會傳入兩個外部參數(shù):g_argv1:單據(jù)編號g_argv2:使用功能用來直接引導進入程序的新增或查詢功能本段應了解重點利用DISPLAYARRAY交談指令驅(qū)動各功能權限判斷callcl_chk_act_auth()鼠標雙按單身可直接進入指定筆數(shù)雙檔選單畫面_menu(1)FUNCTIONi252_menu()WHILETRUE
CALLi252_bp("G")
#有單身的作業(yè)均不使用MENU指令
#改采DISPLAYARRAY替代MENUCASEg_action_choiceWHEN"insert"#于_bp()選擇后以g_action_choiceIFcl_chk_act_auth()THEN#將選擇項目名稱帶回
CALLi252_a()ENDIFWHEN"query"IFcl_chk_act_auth()THENCALLi252_q()ENDIF利用WHILE達到與MENU指令相同的循環(huán),直到按下離開按鍵,才會EXITWHILE…FUNCTIONi252_bp(p_ud)DEFINEp_udCHAR(1)LETg_action_choice=""CALLcl_set_act_visible("accept,cancel",FALSE)
DISPLAYARRAYg_pmxTOs_pmx.*ATTRIBUTE(COUNT=g_rec_b,UNBUFFERED)BEFOREDISPLAY#重新判別跳筆按鍵是否可用
CALLcl_navigator_setting(g_curs_index,g_row_count)BEFOREROW#抓取在單身的地址數(shù)據(jù)
LETl_ac=ARR_CURR()
CALLcl_show_fld_cont()ONACTIONinsertLETg_action_choice="insert"EXITDISPLAY功能代碼(ActionID)若要同時設定多個代碼,雙括號內(nèi)以逗號隔開TRUE:設功能鍵為顯示FALSE:設功能鍵為隱藏『畫面組件設定作業(yè)(p_per)』中,“自由格式設定”可指定字段的comment顯示。此函式會根據(jù)字段數(shù)據(jù)動態(tài)改變comment。_bp(1)ONACTIONfirstCALLi252_fetch('F')
CALLcl_navigator_setting(g_curs_index,g_row_count)CALLfgl_set_arr_curr(1)ACCEPTDISPLAYONACTIONpreviousCALLi252_fetch('P')CALLcl_navigator_setting(g_curs_index,g_row_count)CALLfgl_set_arr_curr(1)ACCEPTDISPLAYONACTIONjumpCALLi252_fetch('/')CALLcl_navigator_setting(g_curs_index,g_row_count)CALLfgl_set_arr_curr(1)ACCEPTDISPLAYAFTERDISPLAYCONTINUEDISPLAY_bp(2)ONACTIONdetailLETg_action_choice="detail"LETl_ac=1EXITDISPLAYONACTIONacceptLETg_action_choice="detail"LETl_ac=ARR_CURR()EXITDISPLAYONACTIONcancelLETINT_FLAG=FALSELETg_action_choice="exit"EXITDISPLAY
ONACTIONexporttoexcelLETg_action_choice='exporttoexcel'EXITDISPLAYONACTIONcancel當指令為DISPLAYARRAY時,此action預設為右上方x按鍵_bp(3)ONACTIONcontrolgLETg_action_choice="controlg"EXITDISPLAYONACTIONhelpLETg_action_choice="help"EXITDISPLAY
ONACTIONaboutCALLcl_about()ONIDLEg_idle_secondsCALLcl_on_idle()CONTINUEDISPLAYONACTION
CALLcl_set_head_visible("","AUTO")ENDDISPLAYCALLcl_set_act_visible("accept,cancel",TRUE)ENDFUNCTION_bp(4)FUNCTIONi252_menu()WHILETRUE
CALLi252_bp("G")CASEg_action_choice#于_bp()選擇后以g_action_choice將選擇項目名稱帶回WHEN"insert"IFcl_chk_act_auth()
THENCALLi252_a()ENDIFWHEN"exporttoexcel"IFcl_chk_act_auth()THENCALLcl_export_to_excel(ui.Interface.getRootNode(),base.TypeInfo.create(g_pmx),'','')ENDIFENDCASEENDWHILEENDFUNCTION呼叫cl_chk_act_auth()函式利用執(zhí)行使用者(g_user)、所屬的權限類別(g_clas)判斷本作業(yè)(g_prog)是否有可執(zhí)行的權利。利用g_action_choice告知要判斷的權限項目。參數(shù)說明:ui.Interface.getRootNode()Base.TypeInfo.create(array變數(shù))Base.TypeInfo.create(array變數(shù))Base.TypeInfo.create(array變數(shù))若此程序有一個以上的table才需要用到第三、第四個參數(shù)。_menu(2)…show()show()menuMAINa()i()b()u()q()b()N/Pcopy()r()x()out()show()cs()fetch()u()show()show()i()fetch()bp()show()b_fill()delh()b()雙檔流程圖本段應了解重點清空畫面上資料。CLEARFORM清單頭;.clear()清單身單頭總筆數(shù):g_row_count;單頭指標:g_curs_index單身資料抓取q()cs()fetch()show()b_fill()查詢流程FUNCTIONi252_q()LETg_row_count=0#查詢前先將單頭指標跟總筆數(shù)歸0LETg_curs_index=0
CALLcl_navigator_setting(g_curs_index,g_row_count)MESSAGE""CALLcl_opmsg('q')CLEARFORM#清除單頭
CALLg_pmx.clear()#清除單身
DISPLAY''TOFORMONLY.cntCALLi252_cs()IFINT_FLAGTHENLETINT_FLAG=0INITIALIZEg_pmw.*TONULLRETURNENDIF_q(1)本段應了解重點單頭單身利用CONSTRUCT指令分別做出條件式單頭Count使用g_row_count為程序global變數(shù)_cs或_curs_cs(1)FUNCTIONi252_cs()CLEARFORM#清除畫面
CALLg_pmx.clear()
IFNOTcl_null(g_argv1)
LETg_wc="pmw01='",g_argv1,"'"
ELSE
CALLcl_set_head_visible("","YES")
CONSTRUCTBYNAMEg_wc
ONpmw01,pmw06,pmw03,pmw04,pmw05,pmw051,pmwuser,pmwgrup,pmwmodu,pmwdate,pmwacti
BEFORECONSTRUCT#預設查詢條件
CALLcl_qbe_init()
ONACTIONqbe_select
CALLcl_qbe_list()RETURNINGlc_qbe_sn
CALLcl_qbe_display_condition(lc_qbe_sn)條件查詢時,與單檔架構不同。雙檔查詢將單頭與單身分開輸入條件,當一開始選擇完條件,畫面顯示出來后,進入單身會將此條件清空,所以將條件列表與條件顯示兩個功能拆開呼叫,等下進入單身時,必須再次顯示單身條件。無法確認目前單頭是否被使用者隱藏,
所以在有需要輸入單頭的各交談指令,皆要將單頭顯示在畫面上。配合一開始的
LET
g_argv1=單據(jù)編號LET
g_argv2=指定功能(query:查詢)ENDCONSTRUCT
IFINT_FLAGTHENRETURNENDIFLETg_wc=g_wcCLIPPED,“ANDpmw07=‘”,g_pmw07”’”LETg_wc=g_wcCLIPPED,cl_get_extra_cond(‘pmwuser’,‘pmwgrup’)IFNOTcl_null(g_argv1)THEN
LETg_wc2=‘1=1’ELSECONSTRUCTg_wc2ONpmx02,pmx08,pmx09,pmx04,#屏幕上取單身條件
pmx05,pmx03,pmx06,pmx06t,pmx07,pmx082FROMs_pmx[1].pmx02,s_pmx[1].pmx08,s_pmx[1].pmx09,s_pmx[1].pmx04,s_pmx[1].pmx05,s_pmx[1].pmx03,s_pmx[1].pmx06,s_pmx[1].pmx06t,s_pmx[1].pmx07,s_pmx[1].pmx082_cs(2)BEFORECONSTRUCT
CALLcl_qbe_display_condition(lc_qbe_sn)ONACTIONqbe_saveCALLcl_qbe_save()ENDCONSTRUCTIFINT_FLAGTHENRETURNENDIFENDIFIFg_wc2="1=1"THEN#若單身未輸入條件
LETg_sql="SELECTpmw01FROMpmw_file","WHERE",g_wcCLIPPED,"ORDERBYpmw01"ELSE#若單身有輸入條件
LETg_sql="SELECTUNIQUEpmw_file.pmw01","FROMpmw_file,pmx_file","WHEREpmw01=pmx01","AND",g_wcCLIPPED,"AND",g_wc2CLIPPED,"ORDERBYpmw01"ENDIF再次將選擇的單身條件顯示于畫面上。_cs(3)…PREPAREi252_prepareFROMg_sqlDECLAREi252_cs#SCROLLCURSORSCROLLCURSORWITHHOLDFORi252_prepareIFg_wc2="1=1"THEN#取合乎條件筆數(shù)
LETg_sql="SELECTCOUNT(*)FROMpmw_fileWHERE",g_wcCLIPPEDELSELETg_sql="SELECTCOUNT(DISTINCTpmw01)",
"FROMpmw_file,pmx_file",
"WHEREpmx01=pmw01","AND",g_wcCLIPPED,"AND",g_wc2CLIPPEDENDIFPREPAREi252_precountFROMg_sqlDECLAREi252_countCURSORFORi252_precountENDFUNCTION_cs(4)
CALLi252_cs()IFINT_FLAGTHENLETINT_FLAG=0INITIALIZEg_pmw.*TONULLRETURNENDIFOPENi252_cs#從DB產(chǎn)生合乎條件TEMP(0-30秒)IFSQLCA.sqlcodeTHENCALLcl_err('',SQLCA.sqlcode,0)INITIALIZEg_pmw.*TONULLELSEOPENi252_countFETCHi252_countINTOg_row_countDISPLAYg_row_countTOFORMONLY.cntCALLi252_fetch('F')#讀出TEMP第一筆并顯示
ENDIFENDFUNCTION_q(2)本段應了解重點傳入N、P、F、L、/在跳筆功能的地方,以變量區(qū)隔是否要開窗口
給使用者輸入筆數(shù)Fetch無誤后,以目前所在筆數(shù)及總筆數(shù)控制
上下筆button是否顯現(xiàn)_fetch()FUNCTIONi252_fetch(p_flag)DEFINEp_flagLIKEtype_file.chr1#處理方式
CASEp_flagWHEN'N'FETCHNEXTi252_csINTOg_pmw_rowid,g_pmw.pmw01WHEN'P'FETCHPREVIOUSi252_csINTOg_pmw_rowid,g_pmw.pmw01WHEN'F'FETCHFIRSTi252_csINTOg_pmw_rowid,g_pmw.pmw01WHEN'L'FETCHLASTi252_csINTOg_pmw_rowid,g_pmw.pmw01_fetch(1)WHEN'/'IF(NOTg_no_ask)THEN#指定筆開窗選擇CALLcl_getmsg('fetch',g_lang)RETURNINGg_msgLETINT_FLAG=0PROMPTg_msgCLIPPED,':'FORg_jumpONACTIONaboutCALLcl_about()ONACTIONhelpCALLcl_show_help()ONACTIONcontrolgCALLcl_cmdask()ONIDLEg_idle_secondsCALLcl_on_idle()ENDPROMPTIFINT_FLAGTHENLETINT_FLAG=0EXITCASEENDIFENDIF錯誤訊息數(shù)據(jù)維護作業(yè)(p_ze)_fetch(2)FETCHABSOLUTEg_jumpi252_csINTOg_pmw.pmw01LETg_no_ask=FALSEENDCASEIFSQLCA.sqlcodeTHENCALLcl_err(g_pmw.pmw01,SQLCA.sqlcode,0)RETURNELSECASEp_flagWHEN'F'LETg_curs_index=1WHEN'P'LETg_curs_index=g_curs_index-1WHEN'N'LETg_curs_index=g_curs_index+1WHEN'L'LETg_curs_index=g_row_countWHEN'/'LETg_curs_index=g_jumpENDCASE
CALLcl_navigator_setting(g_curs_index,g_row_count)DISPLAYg_curs_indexTOFORMONLY.idxENDIF_fetch(3)
SELECT*INTOg_pmw.*FROMpmw_fileWHERE=g_pmw.pmw01IFSQLCA.sqlcodeTHEN
CALLcl_err3("sel","pmw_file","","",SQLCA.sqlcode,"","",1)
INITIALIZEg_pmw.*TONULL
RETURNENDIFLETg_data_owner=g_pmw.pmwuserLETg_data_group
=g_pmw.pmwgrupLETg_data_plant=g_pmw.pmwplantCALLi252_show()ENDFUNCTIONg_data_owner、g_data_group、g_data_plant為global變數(shù),放在top.global內(nèi)_fetch(4)本段應了解重點_show()顯示單頭數(shù)據(jù)_show()FUNCTIONi252_show()LETg_pmw_t.*=g_pmw.*#保存單頭舊值
LETg_pmw_o.*=g_pmw.*#保存單頭舊值
DISPLAYBYNAMEg_pmw.pmworiu,g_pmw.pmworig,g_pmw.pmw01,g_pmw.pmw06,g_pmw.pmw04,g_pmw.pmwuser,g_pmw.pmwgrup,g_pmw.pmwmodu,g_pmw.pmwdate,g_pmw.pmwacti,g_pmw.pmw05,g_pmw.pmw051
CALLi252_pmw01('d')CALLi252_pmw04('d')CALLi252_pmw05('d')CALLi252_b_fill(g_wc2)#單身
CALLcl_show_fld_cont()ENDFUNCTION_show(1)本段應了解重點_b_fill()抓取字段的順序要與array順序相同單身清除用g_xxx.clear()單身最大筆數(shù):g_max_rec將最后一行空白行刪除g_rec_b正確性_b_fill()FUNCTIONi252_b_fill(p_wc2)DEFINEp_wc2STRING
LETg_sql="
SELECTpmx02,pmx12,'',pmx08,pmx081,pmx082,pmx10,'',pmx13,pmx09,'
','
'pmx04,pmx05,pmx03,","pmx06,pmx06t,pmx07FROMpmx_file","WHEREpmx01='",g_pmw.pmw01,"'"IFNOTcl_null(p_wc2)THENLETg_sql=g_sqlCLIPPED,"AND",p_wc2CLIPPEDENDIF
LETg_sql=g_sqlCLIPPED,"ORDERBYpmx08,pmx02,pmx04"DISPLAYg_sqlPREPAREi252_pbFROMg_sqlDECLAREpmx_csCURSORFORi252_pbCALLg_pmx.clear()LETg_cnt=1字段順序及數(shù)量要與array定義一致(也就是與畫面檔一致)_b_fill(1)FOREACHpmx_csINTOg_pmx[g_cnt].*IFSQLCA.sqlcodeTHENCALLcl_err('foreach:',SQLCA.sqlcode,1)EXITFOREACHENDIFLETg_cnt=g_cnt+1IFg_cnt>g_max_recTHENCALLcl_err('',9035,0)EXITFOREACHENDIFENDFOREACH
CALLg_pmx.deleteElement(g_cnt)LETg_rec_b=g_cnt-1DISPLAYg_rec_bTOFORMONLY.cn2LETg_cnt=0ENDFUNCTION到達最大總筆數(shù)時,不再增加array資料。若欲得到的數(shù)據(jù)不在此范圍內(nèi),需下更精確的數(shù)據(jù)系統(tǒng)參數(shù)設定作業(yè)(aoos010):最大單身筆數(shù)_b_fill(2)show()show()menuMAINa()i()b()u()q()b()N/Pcopy()r()x()out()show()cs()fetch()u()show()show()i()fetch()bp()show()b_fill()delh()b()雙檔流程圖a()i()b()本段應了解重點新增前將資料清空;設定默認值新增流程_a()FUNCTIONi252_a()MESSAGE""CLEARFORMCALLg_pmx.clear()LETg_wc=NULLLETg_wc2=NULLIFs_shut(0)THENRETURNENDIFINITIALIZEg_pmw.*LIKEpmw_file.*#DEFAULT設定
LETg_pmw01_t=NULLIFg_ydateISNULLTHENLETg_pmw.pmw01=NULLLETg_pmw.pmw06=g_todayELSE#使用上筆數(shù)據(jù)值
LETg_pmw.pmw01=g_sheet#采購詢價單別
LETg_pmw.pmw06=g_ydate#收貨日期
ENDIF_a(1)
#默認值及將數(shù)值類變數(shù)清成零
LETg_pmw_t.*=g_pmw.*LETg_pmw_o.*=g_pmw.*CALLcl_opmsg('a')WHILETRUELETg_pmw.pmwuser=g_userLETg_pmw.pmwgrup=g_grupLETg_pmw.pmwdate=g_todayLETg_pmw.pmwacti='Y'#數(shù)據(jù)有效
CALLi252_i("a")
#輸入單頭
IFINT_FLAGTHEN#使用者不玩了
INITIALIZEg_pmw.*TONULLLETINT_FLAG=0CALLcl_err('',9001,0)EXITWHILEENDIF_a(2)…本段應了解重點字段控制的function要加在BEFOREINPUT內(nèi),及條件字段的BEFOREFIELD跟AFTERFIELD各AFTERFIELD加上,字段非空白才檢查字段
正確性
_i
()FUNCTIONi252_i(p_cmd)DEFINEl_pmc05LIKEpmc_file.pmc05,l_pmc30LIKEpmc_file.pmc30,l_nLIKEtype_file.num5,
p_cmdLIKEtype_file.chr1#a:輸入u:更改
IFs_shut(0)THENRETURNENDIFDISPLAYBYNAMEg_pmw.pmwuser,g_pmw.pmwmodu,#若變數(shù)內(nèi)有值則將
g_pmw.pmwgrup,g_pmw.pmwdate,g_pmw.pmwacti#數(shù)據(jù)顯示于單頭上
CALLcl_set_head_visible("","YES")
INPUTBYNAMEg_pmw.pmw01,g_pmw.pmw06,g_pmw.pmw03,g_pmw.pmw04,g_pmw.pmw05,g_pmw.pmw051WITHOUTDEFAULTSBEFOREINPUTLETg_before_input_done=FALSECALLi252_set_entry(p_cmd)CALLi252_set_no_entry(p_cmd)LETg_before_input_done=TRUE單頭的字段控制函式_i(1)AFTERFIELDpmw01IFNOTcl_null(g_pmw.pmw01)THEN
CALLs_check_no("apm",g_pmw.pmw01,g_pmw01_t,"6","pmw_file","pmw01","")
RETURNINGli_result,g_pmw.pmw01
DISPLAYBYNAMEg_pmw.pmw01
IF(NOTli_result)THENLETg_pmw.pmw01=g_pmw_o.pmw01NEXTFIELDpmw01ENDIFDISPLAYg_smy.smydescTOsmydesc#顯示單別名稱
ENDIFAAA-000001單別流水號_i(2)ONACTIONcontrolpCASE
WHENINFIELD(pmw01)
#單據(jù)編號
LETg_t1=s_get_doc_no(g_pmw.pmw01)
CALLq_smy(FALSE,FALSE,g_t1,'APM','6')RETURNINGg_t1
LETg_pmw.pmw01[1,3]=g_t1
DISPLAYBYNAMEg_pmw.pmw01
CALLi252_pmw01('d')
NEXTFIELDpmw01
WHENINFIELD(pmw03)#廠商編號
CALLcl_init_qry_var()
LETg_qryparam.form="q_pmc2"
LETg_qryparam.default1=g_pmw.pmw03
CALLcl_create_qry()RETURNINGg_pmw.pmw03
DISPLAYBYNAMEg_pmw.pmw03
CALLi252_pmw03('d')
NEXTFIELDpmw03_i(3)HardCode開窗程序放在$QRY/4gl/下
動態(tài)開窗程序透過p_qry建立「是否多選」同等于g_qryparam.state的定義TRUE為“c”;FALSE為“i”「進入開窗程序是否可再查詢」同等于g_qryparam.construct的定義TRUE為“Y”;FALSE為“N”
CALLi252_i("a")
#輸入單頭
IFINT_FLAGTHEN#使用者不玩了
INITIALIZEg_pmw.*TONULLLETINT_FLAG=0CALLcl_err('',9001,0)EXITWHILEENDIFIFcl_null(g_pmw.pmw01)THEN#KEY不可空白
CONTINUEWHILEENDIF
BEGINWORK
CALLs_auto_assign_no("apm",g_pmw.pmw01,g_pmw.pmw06,"",
"pmw_file","pmw01","","","")RETURNINGli_result,g_pmw.pmw01
IF(NOTli_result)THENCONTINUEWHILEENDIF
DISPLAYBYNAMEg_pmw.pmw01_a(3)
INSERTINTOpmw_fileVALUES(g_pmw.*)LETg_ydate=g_pmw.pmw06
CALLs_get_doc_no(g_pmw.pmw01)RETURNINGg_sheetIFSQLCA.sqlcodeTHEN
ROLLBACKWORK
CALLcl_err3("ins","pmw_file",g_pmw.pmw01,"",SQLCA.sqlcode,"","",1)CONTINUEWHILEELSECOMMITWORK
CALLcl_flow_notify(g_pmw.pmw01,'I')
ENDIF
CALLi252_b()
EXITWHILEENDWHILEENDFUNCTION依照『作業(yè)流程定義維護作業(yè)(p_flow)』的設定來傳送訊息。_a(4)…本段應了解重點INPUTARRAY新增與刪除的權限設定INPUTARRAY內(nèi)各區(qū)塊負責的項目單身的字段控制函式
單身_b
()1、當進入某一有數(shù)據(jù)列時一定會跑BEFOREROW;
離開某一列會跑AFTERROW2、單身新增時跑的段落BEFOREINPUT﹙進程序第一次才跑﹚
BEFOREROW(非按”新增”時)BEFOREINSERTBEFOREFIELD
AFTERFIELD
AFTERINSERTAFTERROWRecord內(nèi)各動作的流程(1)3、單身修改時跑的段落
BEFOREINPUTBEFOREROW
BEFOREFIELDAFTERFIELD
ONROWCHANGEAFTERROW4、單身刪除時跑的段落BEFOREINPUTBEFOREROW
BEFOREFIELDBEFOREDELETEAFTERROWRecord內(nèi)各動作的流程(2)FUNCTIONi252_b()DEFINEl_ac_t
LIKEtype_file.num5,
#未取消的ARRAYCNTl_nLIKEtype_file.num5,
#檢查重復用l_cntLIKEtype_file.num5,
#檢查重復用l_lock_swLIKEtype_file.chr1,
#單身鎖住否p_cmdLIKEtype_file.chr1,
#處理狀態(tài)l_miscLIKEgef_file.gef01,
l_allow_insert
LIKEtype_file.num5,
#可新增否l_allow_deleteLIKEtype_file.num5
#可刪除否LETg_action_choice="“IFs_shut(0)THEN
RETURN
ENDIFIFcl_null
(g_pmw.pmw01)THEN
CALLcl_err("",-400,1)
RETURNENDIF_b(1)…SELECT*INTOg_pmw.*FROMpmw_fileWHEREpmw01=g_pmw.pmw01IFg_pmw.pmwacti='N'THEN
#檢查資料是否為無效
CALLcl_err(g_pmw.pmw01,'mfg1000',0)
RETURNENDIFCALLcl_opmsg('b')LETg_forupd_sql="SELECTpmx02,pmx12,pmx08,pmx081,pmx082,pmx09,,'
','
',
pmx04,","pmx05,pmx03,pmx06,pmx06t,pmx07FROMpmx_file",
"WHEREpmx01=?ANDpmx02=?",
"ANDpmx11=
'",g_pmx11,"'FORUPDATE"LETg_forupd_sql=cl_forupd_sql(g_forupd_sql)DECLAREi252_bclCURSORFROMg_forupd_sql
#單身資料LOCKCURSORLETl_allow_insert=cl_detail_input_auth("insert")
#單身新增權限設定LETl_allow_delete=cl_detail_input_auth("delete")#單身刪除權限設定INPUTARRAYg_pmxWITHOUTDEFAULTSFROMs_pmx.*ATTRIBUTE(COUNT=g_rec_b,
MAXCOUNT=g_max_rec,
UNBUFFERED,
DELETEROW=l_allow_delete,
#是否允許刪除INSERTROW=l_allow_insert,
#是否允許新增(INSERT)APPENDROW=l_allow_insert)#是否允許新增(APPEND)執(zhí)行權限設定作業(yè)(p_zy):程序單身處理權限系統(tǒng)參數(shù)設定作業(yè)(aoos010):最大單身筆數(shù)_b(2)BEFOREINPUTIFg_rec_b!=0THEN
CALLfgl_set_arr_curr(l_ac)ENDIFBEFOREROWLETp_cmd=''LETl_ac=ARR_CURR()LETl_lock_sw='N'#DEFAULTLETl_n=ARR_COUNT()BEGINWORKOPENi252_clUSINGg_pmw.pmw01IFSTATUSTHEN
CALLcl_err("OPENi252_cl:",STATUS,1)
CLOSEi252_cl
ROLLBACKWORK
RETURNENDIF針對單頭部份先做lock_b(3)FETCHi252_clINTOg_pmw.*
#鎖住將被更改或取消的數(shù)據(jù)IFSQLCA.sqlcodeTHEN
CALLcl_err(g_pmw.pmw01,SQLCA.sqlcode,0)
#資料被他人LOCK
CLOSEi252_cl
ROLLBACKWORK
RETURNENDIFIFg_rec_b>=l_acTHENLETp_cmd='u'LETg_pmx_t.*=g_pmx[l_ac].*#BACKUPLETg_pmx_o.*=g_pmx[l_ac].*#BACKUPOPENi252_bclUSINGg_pmw.pmw01,g_pmx_t.pmx02IFSTATUSTHENCALLcl_err("OPENi252_bcl:",STATUS,1)LETl_lock_sw=“Y”ELSEFETCHi252_bclINTOg_pmx[l_ac].*IFSQLCA.sqlcodeTHENlock單頭部份lock單身部份_b(4)INPUTARRAY_b(5)
CALLcl_err(g_pmx_t.pmx02,SQLCA.sqlcode,1)
LETl_lock_sw="Y"
ENDIF
ENDIFCALLi252_set_entry_b(p_cmd)CALLi252_set_no_entry_b(p_cmd)ENDIFBEFOREFIELDpmx08
CALLi252_set_entry_b(p_cmd)AFTERFIELDpmx08#料件編號
CALLi252_set_no_entry_b(p_cmd)lock單身部份BEFOREFIELDA_set_entry()設定B字段ENTRYAFTERFIELDA_set_no_entry()設定B字段NOENTRYBEFOREROW_set_entry()_set_no_entry()設定B字段ENTRY及NOENTRYBEFOREINSERT_set_entry()_set_no_entry()設定B字段ENTRY及NOENTRY
ONROWCHANGEIFINT_FLAGTHEN
CALLcl_err('',9001,0)
LETINT_FLAG=0
LETg_pmx[l_ac].*=g_pmx_t.*
CLOSEi252_bcl
ROLLBACKWORK
EXITINPUTENDIFIFl_lock_sw='Y'THEN
CALLcl_err(g_pmx[l_ac].pmx02,-263,1)
LETg_pmx[l_ac].*=g_pmx_t.*ELSEIFcl_null(g_pmx[l_ac].pmx10)THENLETg_pmx[l_ac].pmx10=““ENDIF_b(6)
UPDATEpmx_fileSETpmx02=g_pmx[l_ac].pmx02,
pmx03=g_pmx[l_ac].pmx03,
pmx04=g_pmx[l_ac].pmx04,
pmx081=g_pmx[l_ac].pmx081,
pmx082=g_pmx[l_ac].pmx082
WHEREpmx01=g_pmw.pmw01
ANDpmx02=g_pmx_t.pmx02
IFSQLCA.sqlcodeORSQLCA.sqlerrd[3]=0THEN
CALLcl_err3("upd","pmx_file",g_pmw.pmw01,g_pmx_t.pmx02,SQLCA.sqlcode,"","",1)
LETg_pmx[l_ac].*=g_pmx_t.*
ELSE
MESSAGE'UPDATEO.K'
COMMITWORK
ENDIFENDIF_b(7)…AFTERROWLETl_ac=ARR_CURR()LETl_ac_t=l_acIFINT_FLAGTHEN
CALLcl_err('',9001,0)
LETINT_FLAG=0
IFp_cmd='u'THEN
LETg_pmx[l_ac].*=g_pmx_t.*
ENDIF
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025農(nóng)村土地轉(zhuǎn)讓合同書范本模板
- 2025年倉儲租賃合同變更約定書
- 2025二手房房買賣合同
- 2025年不動產(chǎn)贈與合同范文(2篇)
- 2025年絲口柱塞閥買賣合同范文(2篇)
- 2025中介介紹承包合同書范本
- 2025采購合同評審表
- 2025個人抵押反擔保合同
- 木材銷售合同
- 手機訂購合同
- 我的家鄉(xiāng)瓊海
- (2025)專業(yè)技術人員繼續(xù)教育公需課題庫(附含答案)
- 《互聯(lián)網(wǎng)現(xiàn)狀和發(fā)展》課件
- 【MOOC】計算機組成原理-電子科技大學 中國大學慕課MOOC答案
- 2024年部編版八年級語文上冊電子課本(高清版)
- 2024年上海健康醫(yī)學院單招職業(yè)適應性測試題庫及答案解析
- 2024年湖北省武漢市中考語文適應性試卷
- 2024-2025學年廣東省大灣區(qū)40校高二上學期聯(lián)考英語試題(含解析)
- 非新生兒破傷風診療規(guī)范(2024年版)解讀
- 2024-2030年電炒鍋項目融資商業(yè)計劃書
- EDIFIER漫步者S880使用說明書
評論
0/150
提交評論