技转课程-TOP GP双档作业_第1页
技转课程-TOP GP双档作业_第2页
技转课程-TOP GP双档作业_第3页
技转课程-TOP GP双档作业_第4页
技转课程-TOP GP双档作业_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

TOPGP双档作业程序本教材以TIPTOPGP5.25版为说明标准鼎捷软件TOPGP华东事业部本章说明双文件维护标准程序。所谓双档,是指使用一个以上档案来记录某一类数据,通常在单据类数据使用最多。学习完本章后,你将可以了解以下部分:

控制流程及各个函数间之关系。使用INPUTARRAY指令来处理单身之多栏式数据。学习目标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变量的定义程序内重要变量:g_forupd_sql在updatecursor内用来组sql的string变数g_before_input_done字段控制变量﹙有使用到才加﹚g_curs_index单头目前指标g_row_count单头总笔数g_rec_b

单身总笔数l_ac单身目前指标共享及模块变量宣告#Prog.Version..:'5.25.02-11.03.23(00000)'##Patternname...:apmi252.4gl#Descriptions...:采购料件询价维护作业#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,#规格

pmx09LIKEpmx_file.pmx09,#询价单位

pmx04LIKEpmx_file.pmx04,#生效日期

pmx05LIKEpmx_file.pmx05,#失效日期

pmx03LIKEpmx_file.pmx03,#上限数量

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#单身总笔数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

#总笔数DEFINEg_jumpLIKEtype_file.num10

#查询指定的笔数DEFINEg_no_askLIKEtype_file.num5#是否开启指定笔窗口共享及模块变量宣告(3)本段应了解重点程序开始前,需将外部自变量读入cl_user、cl_setup、cl_ui_init的用途WHENEVERERRORCALLcl_err_msg_loglockcursor写法MAINMAINOPTIONS

INPUTNOWRAP#输入的方式:不打转

DEFERINTERRUPT#撷取中断键

LETg_argv1=ARG_VAL(1)

#单据编号

LETg_argv2=ARG_VAL(2)

#使用功能

LETg_argv3=ARG_VAL(3)

IF(NOTcl_user())THENEXITPROGRAMENDIFWHENEVERERRORCALLcl_err_msg_log

IF(NOTcl_setup("APM"))THENEXITPROGRAMENDIFcl_user()主要在抓取系统中与『个人设定』相关的变量值数据,如g_user,g_clas,g_grup等等。main(1)…cl_setup()主要在抓取系统中与『模块设定』相关的变量值数据,如这个模块所必需的全局变量等等。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)#转换不同数据库语法

DECLAREi252_clCURSORFROMg_forupd_sql#单头的lockcursor

OPENWINDOWi252_wWITHFORM"apm/42f/apmi252"

ATTRIBUTE(STYLE=g_win_styleCLIPPED)

CALLcl_ui_init()CLOSEWINDOWi252_w

#结束画面

CALLcl_used(g_prog,l_time,2)RETURNINGl_timeENDMAINcl_used主要在记录用户使用本作业的时间,是否记录决定于aoos010。程序开始及结束时,都要呼叫此共享程序开启窗口时,注意画面文件路径、style属性设定作业的『主要画面』(通常是第一个开启的画面),后面使用CALLcl_ui_init()不传参数其他的次要画面,就只使用CALLcl_ui_locale(“画面代码”)两者差别在读入ToolBar等环境设定……

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#结束画面

CALLcl_used(g_prog,l_time,2)RETURNINGl_timeENDMAINmain(3)单据程序都会传入两个外部参数:g_argv1:单据编号g_argv2:使用功能用来直接引导进入程序的新增或查询功能本段应了解重点利用DISPLAYARRAY交谈指令驱动各功能权限判断callcl_chk_act_auth()鼠标双按单身可直接进入指定笔数双档选单画面_menu(1)FUNCTIONi252_menu()WHILETRUE

CALLi252_bp("G")

#有单身的作业均不使用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指令相同的循环,直到按下离开按键,才会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#抓取在单身的地址数据

LETl_ac=ARR_CURR()

CALLcl_show_fld_cont()ONACTIONinsertLETg_action_choice="insert"EXITDISPLAY功能代码(ActionID)若要同时设定多个代码,双括号内以逗号隔开TRUE:设功能键为显示FALSE:设功能键为隐藏『画面组件设定作业(p_per)』中,“自由格式设定”可指定字段的comment显示。此函式会根据字段数据动态改变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()函式利用执行使用者(g_user)、所属的权限类别(g_clas)判断本作业(g_prog)是否有可执行的权利。利用g_action_choice告知要判断的权限项目。参数说明:ui.Interface.getRootNode()Base.TypeInfo.create(array变数)Base.TypeInfo.create(array变数)Base.TypeInfo.create(array变数)若此程序有一个以上的table才需要用到第三、第四个参数。_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()清单身单头总笔数:g_row_count;单头指标:g_curs_index单身资料抓取q()cs()fetch()show()b_fill()查询流程FUNCTIONi252_q()LETg_row_count=0#查询前先将单头指标跟总笔数归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变数_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=单据编号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#取合乎条件笔数

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产生合乎条件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、/在跳笔功能的地方,以变量区隔是否要开窗口

给使用者输入笔数Fetch无误后,以目前所在笔数及总笔数控制

上下笔button是否显现_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错误讯息数据维护作业(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变数,放在top.global内_fetch(4)本段应了解重点_show()显示单头数据_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()单身最大笔数: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字段顺序及数量要与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到达最大总笔数时,不再增加array资料。若欲得到的数据不在此范围内,需下更精确的数据系统参数设定作业(aoos010):最大单身笔数_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#使用上笔数据值

LETg_pmw.pmw01=g_sheet#采购询价单别

LETg_pmw.pmw06=g_ydate#收货日期

ENDIF_a(1)

#默认值及将数值类变数清成零

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'#数据有效

CALLi252_i("a")

#输入单头

IFINT_FLAGTHEN#使用者不玩了

INITIALIZEg_pmw.*TONULLLETINT_FLAG=0CALLcl_err('',9001,0)EXITWHILEENDIF_a(2)…本段应了解重点字段控制的function要加在BEFOREINPUT内,及条件字段的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,#若变数内有值则将

g_pmw.pmwgrup,g_pmw.pmwdate,g_pmw.pmwacti#数据显示于单头上

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)

#单据编号

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/下

动态开窗程序透过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依照『作业流程定义维护作业(p_flow)』的设定来传送讯息。_a(4)…本段应了解重点INPUTARRAY新增与删除的权限设定INPUTARRAY内各区块负责的项目单身的字段控制函式

单身_b

()1、当进入某一有数据列时一定会跑BEFOREROW;

离开某一列会跑AFTERROW2、单身新增时跑的段落BEFOREINPUT﹙进程序第一次才跑﹚

BEFOREROW(非按”新增”時)BEFOREINSERTBEFOREFIELD

AFTERFIELD

AFTERINSERTAFTERROWRecord内各动作的流程(1)3、单身修改时跑的段落

BEFOREINPUTBEFOREROW

BEFOREFIELDAFTERFIELD

ONROWCHANGEAFTERROW4、单身删除时跑的段落BEFOREINPUTBEFOREROW

BEFOREFIELDBEFOREDELETEAFTERROWRecord内各动作的流程(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,

#处理状态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)执行权限设定作业(p_zy):程序单身处理权限系统参数设定作业(aoos010):最大单身笔数_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.*

#锁住将被更改或取消的数据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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论