技轉(zhuǎn)課程-TOP GP雙檔作業(yè)_第1頁
技轉(zhuǎn)課程-TOP GP雙檔作業(yè)_第2頁
技轉(zhuǎn)課程-TOP GP雙檔作業(yè)_第3頁
技轉(zhuǎn)課程-TOP GP雙檔作業(yè)_第4頁
技轉(zhuǎn)課程-TOP GP雙檔作業(yè)_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論