$PBExportHeader$uo_mtrl_pf.sru forward global type uo_mtrl_pf from nonvisualobject end type end forward global type uo_mtrl_pf from nonvisualobject end type global uo_mtrl_pf uo_mtrl_pf type variables Long deep_count = 0 Long il_printid Int ii_ifautop //uo_option_bom_affirm int uo_option_check_mtrl_pf,uo_option_packpro2_pf_pack2_useifover //int sys_option_produce_dec //string sys_option_change_status,sys_option_change_woodcode,sys_option_change_pcode end variables forward prototypes public function integer uof_audit (long arg_mtrlid, string arg_pfcode, integer arg_flag, ref string arg_msg, boolean arg_ifcommit) public function integer uof_delpflist (long arg_mtrlid, string arg_pfcode, boolean arg_ifcommit, ref string arg_msg) public function integer uof_setdi (long arg_mtrlid, string arg_pfcode, integer arg_di, boolean arg_ifcommit, ref string arg_msg) public function integer uof_setdft (long arg_mtrlid, string arg_pfcode, integer arg_dft, boolean arg_ifcommit, ref string arg_msg) public function integer f_clearprdpfmx (long arg_mtrlid, string arg_dpfcode, ref string arg_msg, boolean arg_ifcommit) public function integer uof_del (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, string arg_sonpfcode, long arg_wrkgrpid, string arg_msg, boolean arg_ifcommit) public function integer uof_audit_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg) public function integer uof_caudit_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg) public function integer f_cmpprdpf (long arg_mtrlid, long arg_cmpmtrlid, string arg_dpfcode, string arg_pfcode, decimal arg_groupqty, decimal arg_qty, long arg_grade, ref string arg_msg, boolean arg_ifcommit) public function integer uof_affirm (long arg_mtrlid, string arg_pfcode, integer arg_flag, ref string arg_msg, boolean arg_ifcommit) public function integer uof_affirm_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg) public function integer uof_caffirm_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg) public function integer uof_del_dymx (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_dymx (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, long arg_printid, long arg_dymtrlid, decimal arg_sonscale, decimal arg_sonloss, decimal arg_scllloss, string arg_dscrp, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg, boolean arg_ifcommit) public function integer uof_addpflist (long arg_mtrlid, string arg_pfcode, string arg_dscrp, integer arg_ifdi, integer arg_ifdft, integer arg_pftype, boolean arg_ifcommit, ref string arg_msg) public function integer uof_pzpf (long arg_mtrlid, string arg_pfcode, integer arg_ifpzpf, boolean arg_ifcommit, ref string arg_msg) public function integer uof_add_pf (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, decimal arg_sonscale, decimal arg_sonloss, decimal arg_sondecloss, string arg_dscrp, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, long arg_printid, string arg_pfgroupmode, string arg_promode, string arg_sonpfcode, integer arg_ifover, integer arg_mtrlkind, string arg_pfklmode, decimal arg_pfgroupqty, long arg_dipztype, decimal arg_scllloss, integer arg_dytype, decimal arg_advancetime, decimal arg_sclldecloss, decimal arg_baseqty, decimal arg_buyarg, string arg_sonlossstr, integer arg_scllqtytype, ref string arg_msg, boolean arg_ifcommit) public function integer uof_set_inuse (long arg_mtrlid, string arg_pfcode, integer arg_inuse, boolean arg_ifcommit, ref string arg_msg) public function integer uof_mod_pfcode (long arg_mtrlid, string arg_pfcode, string arg_pfcode_new, string arg_dscrp, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer uof_audit (long arg_mtrlid, string arg_pfcode, integer arg_flag, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_affirmflag DateTime null_dt Long count s_pfmx ls_s_pfmx[] Long ll_i Long cnt Int li_ifpackpro //IF uo_option_bom_affirm = -1000 THEN // rslt = 0 // arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!' // GOTO ext //END IF IF uo_option_check_mtrl_pf = -1000 THEN rslt = 0 arg_msg = '选项:[196]物料清单保存时检查下级清单是否已审核,读取初始默认值失败,操作取消!' GOTO ext END IF SetNull(null_dt) SELECT flag,affirmflag INTO :li_flag,:li_affirmflag FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid And pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询审核标记失败,'+sqlca.SQLErrText GOTO ext END IF IF arg_flag = 1 THEN // IF uo_option_bom_affirm = 1 And li_affirmflag = 0 THEN // rslt = 0 // arg_msg = 'BOM资料没有确认,不能审核' // GOTO ext // END IF IF li_flag = 1 THEN rslt = 0 arg_msg = 'BOM资料已经审核,不能再审' GOTO ext END IF SELECT ifpackpro Into :li_ifpackpro From u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料资料是否包件产品失败,'+sqlca.SQLErrText GOTO ext END IF IF li_ifpackpro = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_PrdPF,u_mtrldef,u_mtrl_pf WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) AND ( u_mtrl_pf.ifdi = 0 ) AND ( u_mtrl_pf.ifdft = 1 ) AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) AND ( u_PrdPF.mtrlid = :arg_mtrlid ) AND ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid ) And ( u_mtrldef.ifpack = 2 ); IF sqlca.SQLCode <> 0 THEN arg_msg = '查询通用包件产品下级是否存在个性包件失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '通用包件产品下级有个性包件,操作取消,请检查物料清单' rslt = 0 GOTO ext END IF END IF IF li_ifpackpro = 2 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_PrdPF,u_mtrldef,u_mtrl_pf WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) AND ( u_mtrl_pf.ifdi = 0 ) AND ( u_mtrl_pf.ifdft = 1 ) AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) AND ( u_PrdPF.mtrlid = :arg_mtrlid ) AND ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid ) And ( u_mtrldef.ifpack = 2 ); IF sqlca.SQLCode <> 0 THEN arg_msg = '查询个性包件产品下级是否存在个性包件失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '个性包件产品下级没有个性包件,操作取消,请检查物料清单' rslt = 0 GOTO ext END IF IF uo_option_packpro2_pf_pack2_useifover = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_PrdPF,u_mtrldef,u_mtrl_pf WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) AND ( u_mtrl_pf.ifdi = 0 ) AND ( u_mtrl_pf.ifdft = 1 ) AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) AND ( u_PrdPF.mtrlid = :arg_mtrlid ) AND ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid ) AND ( u_PrdPF.ifover = 0 ) And ( u_mtrldef.ifpack = 2 ); IF sqlca.SQLCode <> 0 THEN arg_msg = '查询个性包件产品下级个性包件清单明细是否有未设<按配置拆装>属性失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '个性包件产品下级个性包件清单明细有未设<按配置拆装>属性,操作取消,请检查物料清单' rslt = 0 GOTO ext END IF END IF END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_PrdPF,u_mtrldef,u_mtrl_pf WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) AND ( u_mtrl_pf.ifdi = 0 ) AND ( u_mtrl_pf.ifdft = 1 ) AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) AND ( u_PrdPF.mtrlid = :arg_mtrlid ) AND ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid ) And ( u_PrdPF.ifover = 1 ) And ( u_PrdPF.dipztype = -1 ); IF sqlca.SQLCode <> 0 THEN arg_msg = '查询产品下级清单明细是否有未设<配置拆装类型>属性失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '产品下级清单明细有未设<配置拆装类型>属性,操作取消,请检查物料清单' rslt = 0 GOTO ext END IF ELSE IF li_flag = 0 THEN rslt = 0 arg_msg = 'BOM资料未审核,不能撤审' GOTO ext END IF END IF IF arg_flag = 1 And uo_option_check_mtrl_pf = 1 THEN DECLARE pf_cur CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.sonpfcode FROM u_PrdPF WHERE ( u_PrdPF.mtrlid = :arg_mtrlid ) AND ( u_PrdPF.pfcode = :arg_pfcode ); OPEN pf_cur; count = 1 FETCH pf_cur Into :ls_s_pfmx[count].sonmtrlid,:ls_s_pfmx[count].sonpfcode; DO WHILE sqlca.SQLCode = 0 count++ FETCH pf_cur Into :ls_s_pfmx[count].sonmtrlid,:ls_s_pfmx[count].sonpfcode; LOOP count = count - 1 CLOSE pf_cur; FOR ll_i = 1 To count SELECT flag,affirmflag INTO :li_flag,:li_affirmflag FROM u_mtrl_pf WHERE mtrlid = :ls_s_pfmx[ll_i].SonMtrlid And pfcode = :ls_s_pfmx[ll_i].sonpfcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询审核标记失败' GOTO ext END IF // IF uo_option_bom_affirm = 1 And li_affirmflag = 0 THEN // rslt = 0 // arg_msg = '下级物料物料清单资料没有确认,不能审核' // GOTO ext // END IF IF li_flag = 0 THEN rslt = 0 arg_msg = '下级物料物料清单资料没有审核,不能审核本物料清单' GOTO ext END IF NEXT END IF IF arg_flag = 1 THEN // IF uo_option_bom_affirm = 1 THEN UPDATE u_mtrl_pf SET flag = 1, Auditdate = getdate(), Auditemp = :publ_operator WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode And flag = 0; // ELSE // UPDATE u_mtrl_pf // SET flag = 1, // Auditdate = getdate(), // Auditemp = :publ_operator, // affirmflag = 1, // affirmemp = :publ_operator, // affirmdate = getdate() // WHERE mtrlid = :arg_mtrlid // AND pfcode = :arg_pfcode // And flag = 0; // END IF ELSE // IF uo_option_bom_affirm = 1 THEN UPDATE u_mtrl_pf SET flag = 0, Auditdate = :null_dt, Auditemp = '' WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode And flag = 1; // ELSE // UPDATE u_mtrl_pf // SET flag = 0, // Auditdate = :null_dt, // Auditemp = '', // affirmflag = 0, // affirmemp = '', // affirmdate = :null_dt // WHERE mtrlid = :arg_mtrlid // AND pfcode = :arg_pfcode // And flag = 1; // END IF END IF IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新标记失败,~n'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_delpflist (long arg_mtrlid, string arg_pfcode, boolean arg_ifcommit, ref string arg_msg);int rslt =1 int li_ifdi,li_ifdft,li_flag long cnt = 0 select ifdi,ifdft,flag into :li_ifdi,:li_ifdft,:li_flag from u_mtrl_pf where mtrlid = :arg_mtrlid and pfcode = :arg_pfcode; if sqlca.sqlcode <> 0 then arg_msg = '查询物料清单失败,'+sqlca.sqlerrtext rslt = 0 goto ext end if if li_flag = 1 then arg_msg = '物料清单已经审核,不能删除' rslt = 0 goto ext end if if li_ifdft = 1 then arg_msg = '物料清单为默认清单,不能删除' rslt = 0 goto ext end if select count(*) into :cnt from u_PrdPF where mtrlid = :arg_mtrlid and pfcode = :arg_pfcode; if sqlca.sqlcode <> 0 then arg_msg = '查询物料清单明细失败,'+sqlca.sqlerrtext rslt = 0 goto ext end if if cnt > 0 then arg_msg = '该物料清单已有物料明细,不能删除' rslt = 0 goto ext end if delete from u_mtrl_pf where mtrlid = :arg_mtrlid and pfcode = :arg_pfcode; if sqlca.sqlcode <> 0 then arg_msg = '删除物料清单失败,'+sqlca.sqlerrtext rslt = 0 goto ext end if ext: if rslt = 0 then rollback; elseif rslt = 1 and arg_ifcommit then commit; end if return rslt end function public function integer uof_setdi (long arg_mtrlid, string arg_pfcode, integer arg_di, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Int li_ifdi,li_ifdft Long cnt = 0 SELECT ifdi,ifdft INTO :li_ifdi,:li_ifdft FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料清单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_ifdft = 1 THEN arg_msg = '该清单已设为默认结构,不能设拆装或取消设置拆装' rslt = 0 GOTO ext END IF IF li_ifdi = 2 THEN SELECT count(*) INTO :cnt FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid AND pfcode <> :arg_pfcode AND ifdi = 2; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料包件清单数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '物料清单只能设置一个包件清单' rslt = 0 GOTO ext END IF END IF UPDATE u_mtrl_pf SET ifdi = :arg_di WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新物料清单组装标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_setdft (long arg_mtrlid, string arg_pfcode, integer arg_dft, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Int li_ifdft,li_di Long cnt = 0 SELECT ifdft,ifdi INTO :li_ifdft,:li_di FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料清单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF if li_di = 1 then arg_msg = '该清单已设为拆装结构,不能设默认或取消设置默认' rslt = 0 goto ext end if IF li_ifdft = 1 THEN IF arg_dft = 1 THEN arg_msg = '物料清单已设置为默认,不能再设置' rslt = 0 GOTO ext END IF ELSE IF arg_dft = 0 THEN arg_msg = '物料清单未设置为默认,不能取消设置' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid AND pfcode <> :arg_pfcode AND ifdft = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料默认清单数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '物料清单只能设置一个默认清单' rslt = 0 GOTO ext END IF END IF UPDATE u_mtrl_pf SET ifdft = :arg_dft WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新物料清单默认标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer f_clearprdpfmx (long arg_mtrlid, string arg_dpfcode, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 DELETE FROM u_prdpf_mx WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_dpfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除用料列表失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_del (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, string arg_sonpfcode, long arg_wrkgrpid, string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flagtype // 检查BOM状态 1-是否已审,0-未审,2-是否已确认,3-未确认 //IF uo_option_bom_affirm = -1000 THEN // rslt = 0 // arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!' // GOTO ext //END IF //IF uo_option_bom_affirm = 1 THEN li_flagtype = 2 //ELSE // li_flagtype = 1 //END IF IF f_check_pf_flag(arg_mtrlid,arg_pfcode,li_flagtype,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF DELETE FROM u_PrdPF WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode AND pfgroup = :arg_pfgroup AND SonMtrlid = :arg_SonMtrlid AND sonpfcode = :arg_sonpfcode AND wrkgrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除失败,~n'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_audit_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg);Int rslt = 1 Int li_flag Long ll_i,count String ls_mtrlcode Long li_affirmflag s_pfmx ls_s_pfmx[] //IF uo_option_bom_affirm = -1000 THEN // rslt = 0 // arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!' // GOTO ext //END IF IF uo_option_check_mtrl_pf = -1000 THEN rslt = 0 arg_msg = '选项:[196]物料清单保存时检查下级清单是否已审核,读取初始默认值失败,操作取消!' GOTO ext END IF SELECT mtrlcode INTO :ls_mtrlcode FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料编码失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT flag INTO :li_flag FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid And pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料:'+ls_mtrlcode+',清单:'+arg_pfcode+',审核标记失败,'+sqlca.SQLErrText GOTO ext END IF IF li_flag = 0 THEN IF uof_audit(arg_mtrlid,arg_pfcode,1,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF DECLARE pf_cur CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.sonpfcode FROM u_PrdPF WHERE ( u_PrdPF.mtrlid = :arg_mtrlid ) AND ( u_PrdPF.pfcode = :arg_pfcode ); OPEN pf_cur; count = 1 FETCH pf_cur Into :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode; DO WHILE sqlca.SQLCode = 0 count++ FETCH pf_cur Into :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode; LOOP count = count - 1 CLOSE pf_cur; IF count = 0 THEN rslt = 1 GOTO ext END IF FOR ll_i = 1 To count IF uo_option_check_mtrl_pf = 1 THEN SELECT flag,affirmflag INTO :li_flag,:li_affirmflag FROM u_mtrl_pf WHERE mtrlid = :ls_s_pfmx[ll_i].SonMtrlid And pfcode = :ls_s_pfmx[ll_i].sonpfcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询审核标记失败' GOTO ext END IF // IF uo_option_bom_affirm = 1 And li_affirmflag = 0 THEN // rslt = 0 // arg_msg = '下级物料物料清单资料没有确认,不能审核' // GOTO ext // END IF IF li_flag = 0 THEN rslt = 0 arg_msg = '下级物料物料清单资料没有审核,不能审核本物料清单' GOTO ext END IF END IF IF uof_audit_all(ls_s_pfmx[ll_i].SonMtrlid,& ls_s_pfmx[ll_i].sonpfcode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function public function integer uof_caudit_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg);Int rslt = 1 Int li_flag Long ll_i,count String ls_mtrlcode Long ll_mtrlorigin s_pfmx ls_s_pfmx[] SELECT mtrlcode,mtrlorigin INTO :ls_mtrlcode,:ll_mtrlorigin FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料编码失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_mtrlorigin = 2 THEN //采购类的物料不执行批撤审 rslt = 1 GOTO ext END IF SELECT flag INTO :li_flag FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料:'+ls_mtrlcode+',清单:'+arg_pfcode+',审核标记失败,'+sqlca.SQLErrText GOTO ext END IF IF li_flag = 1 THEN IF uof_audit(arg_mtrlid,arg_pfcode,0,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF DECLARE pf_cur CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.sonpfcode FROM u_PrdPF WHERE ( u_PrdPF.mtrlid = :arg_mtrlid ) AND ( u_PrdPF.pfcode = :arg_pfcode ); OPEN pf_cur; count = 1 FETCH pf_cur INTO :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode; DO WHILE sqlca.SQLCode = 0 count++ FETCH pf_cur INTO :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode; LOOP count = count - 1 CLOSE pf_cur; IF count = 0 THEN rslt = 1 GOTO ext END IF FOR ll_i = 1 TO count IF uof_caudit_all(ls_s_pfmx[ll_i].SonMtrlid,& ls_s_pfmx[ll_i].sonpfcode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function public function integer f_cmpprdpf (long arg_mtrlid, long arg_cmpmtrlid, string arg_dpfcode, string arg_pfcode, decimal arg_groupqty, decimal arg_qty, long arg_grade, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 Long count = 0,ls_i,cnt = 0 Int li_sonflag Decimal ld_cmpqty Decimal ld_qty,ld_groupqty s_pfmx ls_s_pfmx[] IF sys_option_produce_dec = -1000 THEN rslt = 0 arg_msg = '选项:[089]生产运算小数位,读取初始默认值失败,操作取消!' GOTO ext END IF deep_count++ IF deep_count > 2000 THEN //防止死递归 arg_msg = '递归太深'+String(deep_count) rslt = 0 GOTO ext END IF SELECT cmpqty INTO :ld_cmpqty FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料清单基数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ld_cmpqty <= 0 THEN arg_msg = '不合理的物料清单基数' rslt = 0 GOTO ext END IF DECLARE pf_cur CURSOR FOR SELECT u_PrdPF.Sonscale, u_PrdPF.SonLoss, u_PrdPF.SonDECLosS, u_PrdPF.Sonahead, u_PrdPF.SonMtrlid, u_mtrldef.mtrlcode, u_mtrldef.mtrlname, u_PrdPF.wrkgrpid, u_PrdPF.status, u_PrdPF.pfgroupqty, u_PrdPF.pfgroupmode, u_PrdPF.promode, u_PrdPF.pfgroup, u_PrdPF.dscrp, u_PrdPF.woodcode, u_PrdPF.pcode, u_PrdPF.sonpfcode, u_PrdPF.pfklmode, u_mtrldef.mrptype, u_mtrldef.mrparg FROM u_PrdPF, u_mtrldef WHERE ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) AND ( u_PrdPF.mtrlid = :arg_cmpmtrlid ) AND ( u_PrdPF.pfcode = :arg_pfcode ) Order By u_PrdPF.printid; OPEN pf_cur; count = 1 FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].Sonahead,& :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].mtrlcode,& :ls_s_pfmx[count].mtrlname,:ls_s_pfmx[count].wrkgrpid,& :ls_s_pfmx[count].status,:ls_s_pfmx[count].pfgroupqty,& :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].promode,& :ls_s_pfmx[count].pfgroup,& :ls_s_pfmx[count].dscrp,:ls_s_pfmx[count].woodcode,& :ls_s_pfmx[count].pcode,:ls_s_pfmx[count].sonpfcode,& :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg; DO WHILE sqlca.SQLCode = 0 count++ FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].Sonahead,& :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].mtrlcode,& :ls_s_pfmx[count].mtrlname,:ls_s_pfmx[count].wrkgrpid,& :ls_s_pfmx[count].status,:ls_s_pfmx[count].pfgroupqty,& :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].promode,& :ls_s_pfmx[count].pfgroup,& :ls_s_pfmx[count].dscrp,:ls_s_pfmx[count].woodcode,& :ls_s_pfmx[count].pcode,:ls_s_pfmx[count].sonpfcode,& :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg; LOOP count = count - 1 CLOSE pf_cur; FOR ls_i = 1 To count SELECT count(*) INTO :cnt FROM u_PrdPF WHERE ( u_PrdPF.mtrlid = :ls_s_pfmx[ls_i].SonMtrlid ) AND ( u_PrdPF.pfcode = :ls_s_pfmx[ls_i].sonpfcode ); IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+ls_s_pfmx[ls_i].mtrlcode+'物料清单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN li_sonflag = 1 ELSE li_sonflag = 0 END IF IF ls_s_pfmx[ls_i].u_mtrldef_mrptype = 0 THEN ld_qty = Round(arg_qty * (ls_s_pfmx[ls_i].Sonscale/(1 - ls_s_pfmx[ls_i].SonLoss)+ls_s_pfmx[ls_i].SonDECLosS)/ld_cmpqty,ls_s_pfmx[ls_i].u_mtrldef_mrparg) ELSE ld_qty = Ceiling(Truncate(arg_qty * ls_s_pfmx[ls_i].Sonscale/(1 - ls_s_pfmx[ls_i].SonLoss)+ls_s_pfmx[ls_i].SonDECLosS,10)/ld_cmpqty) END IF ld_groupqty = arg_groupqty * ls_s_pfmx[ls_i].pfgroupqty il_printid++ INSERT INTO u_prdpf_mx (mtrlid, pfcode, sonmtrlid, sonscale, sonloss, sondecloss, sonahead, dscrp, pfgroup, pfgroupqty, pfgroupmode, promode, printid, wrkgrpid, status, sonflag, woodcode, pcode, realqty, pfklmode, grade, sonpfcode) VALUES ( :arg_mtrlid, :arg_dpfcode, :ls_s_pfmx[ls_i].SonMtrlid, :ls_s_pfmx[ls_i].sonscale, :ls_s_pfmx[ls_i].sonloss, :ls_s_pfmx[ls_i].sondecloss, :ls_s_pfmx[ls_i].sonahead, :ls_s_pfmx[ls_i].dscrp, :ls_s_pfmx[ls_i].pfgroup, :ld_groupqty, :ls_s_pfmx[ls_i].pfgroupmode, :ls_s_pfmx[ls_i].promode, :il_printid, :ls_s_pfmx[ls_i].wrkgrpid, :ls_s_pfmx[ls_i].status, :li_sonflag, :ls_s_pfmx[ls_i].woodcode, :ls_s_pfmx[ls_i].pcode, :ld_qty, :ls_s_pfmx[ls_i].pfklmode, :arg_grade, :ls_s_pfmx[ls_i].sonpfcode); IF sqlca.SQLCode <> 0 THEN arg_msg = "因为网络或关键内容重复,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF f_cmpPrdPF(arg_mtrlid,ls_s_pfmx[ls_i].SonMtrlid,arg_dpfcode,ls_s_pfmx[ls_i].sonpfcode,ld_groupqty,ld_qty,arg_grade + 1,arg_msg,arg_ifcommit) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_affirm (long arg_mtrlid, string arg_pfcode, integer arg_flag, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 //IF uo_option_bom_affirm = -1000 THEN // rslt = 0 // arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!' // GOTO ext //END IF //IF uo_option_bom_affirm = 0 THEN // rslt = 0 // arg_msg = '系统没有设置物料清单使用确认功能,不能执行操作' // GOTO ext //END IF Int li_flag,li_affirmflag DateTime null_dt SetNull(null_dt) SELECT flag,affirmflag INTO :li_flag,:li_affirmflag FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询清单:'+arg_pfcode+',确认标记与审核标记失败' GOTO ext END IF IF arg_flag = 1 THEN //确认 IF li_flag = 1 THEN rslt = 0 arg_msg = 'BOM资料已经审核,不能确认' GOTO ext END IF IF li_affirmflag = 1 THEN rslt = 0 arg_msg = 'BOM资料已经确认,不能再确认' GOTO ext END IF ELSE IF li_flag = 1 THEN rslt = 0 arg_msg = 'BOM资料已经审核,不能反确认' GOTO ext END IF IF li_affirmflag = 0 THEN rslt = 0 arg_msg = 'BOM资料未确认,不能反确认' GOTO ext END IF END IF IF arg_flag = 1 THEN UPDATE u_mtrl_pf SET affirmflag = 1, affirmdate = getdate(), affirmemp = :publ_operator WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode AND affirmflag = 0; ELSE UPDATE u_mtrl_pf SET affirmflag = 0, affirmdate = :null_dt, affirmemp = '' WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode AND affirmflag = 1; END IF IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新标记失败,~n'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_affirm_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg);Int rslt = 1 //IF uo_option_bom_affirm = -1000 THEN // rslt = 0 // arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!' // GOTO ext //END IF //IF uo_option_bom_affirm = 0 THEN // rslt = 0 // arg_msg = '系统没有设置物料清单使用确认功能,不能执行操作' // GOTO ext //END IF Int li_affirmflag Long ll_i,count String ls_mtrlcode s_pfmx ls_s_pfmx[] SELECT mtrlcode INTO :ls_mtrlcode FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料编码失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT affirmflag INTO :li_affirmflag FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料:'+ls_mtrlcode+',清单:'+arg_pfcode+',确认标记失败,'+sqlca.SQLErrText GOTO ext END IF IF li_affirmflag = 0 THEN IF uof_affirm(arg_mtrlid,arg_pfcode,1,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF DECLARE pf_cur CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.sonpfcode FROM u_PrdPF WHERE ( u_PrdPF.mtrlid = :arg_mtrlid ) AND ( u_PrdPF.pfcode = :arg_pfcode ); OPEN pf_cur; count = 1 FETCH pf_cur INTO :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode; DO WHILE sqlca.SQLCode = 0 count++ FETCH pf_cur INTO :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode; LOOP count = count - 1 CLOSE pf_cur; IF count = 0 THEN rslt = 1 GOTO ext END IF FOR ll_i = 1 TO count IF uof_affirm_all(ls_s_pfmx[ll_i].SonMtrlid,& ls_s_pfmx[ll_i].sonpfcode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function public function integer uof_caffirm_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg);Int rslt = 1 //IF uo_option_bom_affirm = -1000 THEN // rslt = 0 // arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!' // GOTO ext //END IF // // //IF uo_option_bom_affirm = 0 THEN // rslt = 0 // arg_msg = '系统没有设置物料清单使用确认功能,不能执行操作' // GOTO ext //END IF Int li_affirmflag Long ll_i,count String ls_mtrlcode Long ll_mtrlorigin s_pfmx ls_s_pfmx[] SELECT mtrlcode,mtrlorigin INTO :ls_mtrlcode,:ll_mtrlorigin FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料编码失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_mtrlorigin = 2 THEN //采购类的物料不执行 rslt = 1 GOTO ext END IF SELECT affirmflag INTO :li_affirmflag FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料:'+ls_mtrlcode+',清单:'+arg_pfcode+',确认标记失败,'+sqlca.SQLErrText GOTO ext END IF IF li_affirmflag = 1 THEN IF uof_affirm(arg_mtrlid,arg_pfcode,0,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF DECLARE pf_cur CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.sonpfcode FROM u_PrdPF WHERE ( u_PrdPF.mtrlid = :arg_mtrlid ) AND ( u_PrdPF.pfcode = :arg_pfcode ); OPEN pf_cur; count = 1 FETCH pf_cur INTO :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode; DO WHILE sqlca.SQLCode = 0 count++ FETCH pf_cur INTO :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode; LOOP count = count - 1 CLOSE pf_cur; IF count = 0 THEN rslt = 1 GOTO ext END IF FOR ll_i = 1 TO count IF uof_caffirm_all(ls_s_pfmx[ll_i].SonMtrlid,& ls_s_pfmx[ll_i].sonpfcode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function public function integer uof_del_dymx (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 DELETE FROM u_prdpf_dymx WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode AND pfgroup = :arg_pfgroup AND sonmtrlid = :arg_sonmtrlid AND wrkgrpid = :arg_wrkgrpid AND sonpfcode = :arg_sonpfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除物料清单用料代用明细表失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_add_dymx (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, long arg_printid, long arg_dymtrlid, decimal arg_sonscale, decimal arg_sonloss, decimal arg_scllloss, string arg_dscrp, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 String ls_sonmtrlcode IF sys_option_change_status = '-1000' THEN rslt = 0 arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF sys_option_change_woodcode = '-1000' THEN rslt = 0 arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF sys_option_change_pcode = '-1000' THEN rslt = 0 arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_pfcode) THEN arg_pfcode = '' IF IsNull(arg_sonpfcode) THEN arg_sonpfcode = '' IF IsNull(arg_pfgroup) THEN arg_pfgroup = '' IF IsNull(arg_SonMtrlid) THEN arg_SonMtrlid = 0 IF IsNull(arg_Sonscale) THEN arg_Sonscale = 0 IF IsNull(arg_SonLoss) THEN arg_SonLoss = 0 IF IsNull(arg_dscrp) THEN arg_dscrp = '' IF IsNull(arg_wrkgrpid) THEN arg_wrkgrpid = 0 IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_scllloss) THEN arg_scllloss = 0 cnt = 0 SELECT count(*) INTO :cnt FROM u_prdpf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode AND pfgroup = :arg_pfgroup AND sonmtrlid = :arg_sonmtrlid AND wrkgrpid = :arg_wrkgrpid AND sonpfcode = :arg_sonpfcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关物料清单内容失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '查询使用代用材料的清单内容失败,请检查' GOTO ext END IF IF f_check_status(1,arg_status) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能'+sys_option_change_status+'未定义,物料:"+ls_sonmtrlcode+",内容:"+arg_status GOTO ext END IF IF f_check_status(2,arg_woodcode) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能'+sys_option_change_woodcode+'未定义,物料:"+ls_sonmtrlcode+",内容:"+arg_woodcode GOTO ext END IF IF f_check_status(3,arg_pcode) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能'+sys_option_change_pcode+'未定义,物料:"+ls_sonmtrlcode+",内容:"+arg_pcode GOTO ext END IF IF arg_Sonscale <= 0 THEN arg_msg = '请输入用料量' rslt = 0 GOTO ext END IF INSERT INTO u_prdpf_dymx (mtrlid, pfcode, pfgroup, sonmtrlid, wrkgrpid, sonpfcode, printid, dymtrlid, sonscale, sonloss, scllloss, dscrp, status, woodcode, pcode) VALUES (:arg_mtrlid, :arg_pfcode, :arg_pfgroup, :arg_sonmtrlid, :arg_wrkgrpid, :arg_sonpfcode, :arg_printid, :arg_dymtrlid, :arg_sonscale, :arg_sonloss, :arg_scllloss, :arg_dscrp, :arg_status, :arg_woodcode, :arg_pcode); IF sqlca.SQLCode <> 0 THEN arg_msg = '建立物料清单资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_addpflist (long arg_mtrlid, string arg_pfcode, string arg_dscrp, integer arg_ifdi, integer arg_ifdft, integer arg_pftype, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Long cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF Trim(arg_pfcode) = '' THEN arg_msg = '请输入结构名称' rslt = 0 GOTO ext END IF INSERT INTO u_mtrl_pf (Mtrlid, pfcode, dscrp, ifdi, ifdft, inuse, pftype, opemp, opdate) VALUES (:arg_mtrlid, :arg_pfcode, :arg_dscrp, :arg_ifdi, :arg_ifdft, 1, :arg_pftype, :publ_operator, getdate()); IF sqlca.SQLCode <> 0 THEN arg_msg = '建立物料清单失败,' + sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_pzpf (long arg_mtrlid, string arg_pfcode, integer arg_ifpzpf, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Int li_statusflag Long cnt = 0 SELECT statusflag INTO :li_statusflag FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料是否使用组合配置失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_ifpzpf = 1 AND li_statusflag <> 2 THEN arg_msg = '该物料不是使用组合配置,操作取消' rslt = 0 GOTO ext END IF UPDATE u_mtrl_pf SET ifpzpf = :arg_ifpzpf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新物料清单启用组合配置清单标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_add_pf (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, decimal arg_sonscale, decimal arg_sonloss, decimal arg_sondecloss, string arg_dscrp, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, long arg_printid, string arg_pfgroupmode, string arg_promode, string arg_sonpfcode, integer arg_ifover, integer arg_mtrlkind, string arg_pfklmode, decimal arg_pfgroupqty, long arg_dipztype, decimal arg_scllloss, integer arg_dytype, decimal arg_advancetime, decimal arg_sclldecloss, decimal arg_baseqty, decimal arg_buyarg, string arg_sonlossstr, integer arg_scllqtytype, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 Int li_ifpackpro,li_ifpack String ls_sonmtrlcode IF sys_option_change_status = '-1000' THEN rslt = 0 arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF sys_option_change_woodcode = '-1000' THEN rslt = 0 arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF sys_option_change_pcode = '-1000' THEN rslt = 0 arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_pfcode) THEN arg_pfcode = '' IF IsNull(arg_sonpfcode) THEN arg_sonpfcode = '' IF IsNull(arg_pfgroup) THEN arg_pfgroup = '' IF IsNull(arg_pfgroupmode) THEN arg_pfgroupmode = '' IF IsNull(arg_promode) THEN arg_promode = '' IF IsNull(arg_SonMtrlid) THEN arg_SonMtrlid = 0 IF IsNull(arg_Sonscale) THEN arg_Sonscale = 0 IF IsNull(arg_SonLoss) THEN arg_SonLoss = 0 IF IsNull(arg_SonDECLosS) THEN arg_SonDECLosS = 0 IF IsNull(arg_dscrp) THEN arg_dscrp = '' IF IsNull(arg_wrkgrpid) THEN arg_wrkgrpid = 0 IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_ifover) THEN arg_ifover = 0 IF IsNull(arg_mtrlkind) THEN arg_mtrlkind = 0 IF IsNull(arg_pfklmode) THEN arg_pfklmode = '' IF IsNull(arg_pfgroupqty) THEN arg_pfgroupqty = 0 IF IsNull(arg_dipztype) THEN arg_dipztype = 0 IF IsNull(arg_scllloss) THEN arg_scllloss = 0 IF IsNull(arg_dytype) THEN arg_dytype = 0 IF IsNull(arg_advancetime) THEN arg_advancetime = 0 IF IsNull(arg_sclldecloss) THEN arg_sclldecloss = 0 IF IsNull(arg_baseqty) THEN arg_baseqty = 1 IF IsNull(arg_sonlossstr) THEN arg_sonlossstr = '' IF IsNull(arg_buyarg) THEN arg_buyarg = 0 IF IsNull(arg_scllqtytype) THEN arg_scllqtytype = 0 SELECT ifpackpro INTO :li_ifpackpro FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询产品物料资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT mtrlcode,ifpack INTO :ls_sonmtrlcode,:li_ifpack FROM u_mtrldef Where mtrlid = :arg_SonMtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询清单明细物料资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_option_packpro2_pf_pack2_useifover = 1 THEN IF li_ifpackpro = 2 And li_ifpack = 2 THEN IF arg_ifover = 0 THEN arg_msg = '清单明细物料未勾选按配置拆装,请检查' rslt = 0 GOTO ext END IF END IF END IF IF arg_ifover = 0 THEN arg_dipztype = -1 ELSE IF arg_dipztype = -1 THEN arg_msg = '清单明细物料设置配置拆装类型,请检查' rslt = 0 GOTO ext END IF END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrl_pf WHERE mtrlid = :arg_SonMtrlid And pfcode = :arg_sonpfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询清单明细物料的物料清单资料是否已建立失败,可能资料不存在' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '清单明细物料的物料清单资料:'+arg_sonpfcode+',未建立,请检查' rslt = 0 GOTO ext END IF IF f_check_status(1,arg_status) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能'+sys_option_change_status+'未定义,物料:"+ls_sonmtrlcode+",内容:"+arg_status GOTO ext END IF IF f_check_status(2,arg_woodcode) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能'+sys_option_change_woodcode+'未定义,物料:"+ls_sonmtrlcode+",内容:"+arg_woodcode GOTO ext END IF IF f_check_status(3,arg_pcode) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能'+sys_option_change_pcode+'未定义,物料:"+ls_sonmtrlcode+",内容:"+arg_pcode GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_sc_workgroup Where wrkgrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询工组资料失败,可能资料不存在' rslt = 0 GOTO ext END IF IF cnt <> 1 THEN arg_msg = '工组资料重复或不存在' rslt = 0 GOTO ext END IF IF arg_Sonscale <= 0 THEN arg_msg = '请输入用料量' rslt = 0 GOTO ext END IF IF arg_SonLoss < 0 Or arg_SonLoss >= 1 THEN arg_msg = '不合理损耗率' rslt = 0 GOTO ext END IF IF arg_baseqty < 1 THEN arg_msg = '不合理的基数,基数必须大于1' rslt = 0 GOTO ext END IF IF arg_buyarg < 0 THEN arg_msg = '不合理的采购参数,采购参数不能小于0' rslt = 0 GOTO ext END IF //变更序号 IF ii_ifautop = 1 THEN UPDATE u_prdpf SET printid = printid + 1 WHERE mtrlid = :arg_mtrlid And pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '变更清单其它物料序号失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF INSERT INTO u_prdpf (mtrlid, pfcode, pfgroup, SonMtrlid, Sonscale, SonLoss, SonDECLosS, dscrp, wrkgrpid, status, woodcode, pcode, printid, pfgroupmode, promode, sonpfcode, ifover, mtrlkind, pfklmode, pfgroupqty, dipztype, scllloss, dytype, advancetime, sclldecloss, baseqty, sonlossstr, buyarg, scllqtytype) VALUES (:arg_mtrlid, :arg_pfcode, :arg_pfgroup, :arg_SonMtrlid, :arg_Sonscale, :arg_SonLoss, :arg_SonDECLosS, :arg_dscrp, :arg_wrkgrpid, :arg_status, :arg_woodcode, :arg_pcode, :arg_printid, :arg_pfgroupmode, :arg_promode, :arg_sonpfcode, :arg_ifover, :arg_mtrlkind, :arg_pfklmode, :arg_pfgroupqty, :arg_dipztype, :arg_scllloss, :arg_dytype, :arg_advancetime, :arg_sclldecloss, :arg_baseqty, :arg_sonlossstr, :arg_buyarg, :arg_scllqtytype); IF sqlca.SQLCode <> 0 THEN arg_msg = '建立物料清单资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_set_inuse (long arg_mtrlid, string arg_pfcode, integer arg_inuse, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Int li_inuse Long cnt = 0 SELECT inuse INTO :li_inuse FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料清单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_inuse = 1 THEN IF arg_inuse = 1 THEN arg_msg = '物料清单已设置为有效,不能再设置' rslt = 0 GOTO ext END IF ELSE IF arg_inuse = 0 THEN arg_msg = '物料清单未设置为有效,不能取消设置' rslt = 0 GOTO ext END IF END IF UPDATE u_mtrl_pf SET inuse = :arg_inuse WHERE mtrlid = :arg_mtrlid AND pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新物料清单默认标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_mod_pfcode (long arg_mtrlid, string arg_pfcode, string arg_pfcode_new, string arg_dscrp, ref string arg_msg, boolean arg_ifcommit);Int rslt rslt = 1 Long cnt cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid And pfcode = :arg_pfcode_new; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询新物料清单名称是否重复失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '新物料清单名称与现在资料重复,请检查' GOTO ext END IF UPDATE u_mtrl_pf SET pfcode = :arg_pfcode_new, dscrp = :arg_dscrp WHERE mtrlid = :arg_mtrlid And pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新新物料清单名称失败,'+sqlca.SQLErrText GOTO ext END IF update u_prdpf set pfcode = :arg_pfcode_new WHERE mtrlid = :arg_mtrlid And pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新物料清单明细失败,'+sqlca.SQLErrText GOTO ext END IF UPDATE u_PrdPF SET sonpfcode = :arg_pfcode_new WHERE SonMtrlid = :arg_mtrlid And sonpfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新已使用该物料清单的资料失败,'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function on uo_mtrl_pf.create call super::create TriggerEvent( this, "constructor" ) end on on uo_mtrl_pf.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String str_optionvalue,arg_msg //f_get_sys_option_value('085',str_optionvalue,arg_msg) //uo_option_bom_affirm = Long(str_optionvalue) //f_get_sys_option_value('196',str_optionvalue,arg_msg) uo_option_check_mtrl_pf = Long(str_optionvalue) //f_get_sys_option_value('089',str_optionvalue,arg_msg) //sys_option_produce_dec = Long(str_optionvalue) //f_get_sys_option_value('029',str_optionvalue,arg_msg) //sys_option_change_status = str_optionvalue //f_get_sys_option_value('027',str_optionvalue,arg_msg) //sys_option_change_woodcode = str_optionvalue //f_get_sys_option_value('028',str_optionvalue,arg_msg) //sys_option_change_pcode = str_optionvalue //f_get_sys_option_value('274',str_optionvalue,arg_msg) uo_option_packpro2_pf_pack2_useifover = Long(str_optionvalue) end event