$PBExportHeader$uo_func_mtrlcfg.sru forward global type uo_func_mtrlcfg from nonvisualobject end type end forward global type uo_func_mtrlcfg from nonvisualobject end type global uo_func_mtrlcfg uo_func_mtrlcfg type variables int uo_option_bom_affirm end variables forward prototypes public function integer check_mtrlcfg_str (long arg_mtrlid, ref string arg_str, integer arg_cfgtype, ref string arg_msg) public function integer save (s_mtrl_pz arg_s_mtrlpz, ref string arg_msg, boolean if_commit) public function integer check_mtrlcfg_exist (long arg_mtrlid, string arg_str, ref string arg_msg) end prototypes public function integer check_mtrlcfg_str (long arg_mtrlid, ref string arg_str, integer arg_cfgtype, ref string arg_msg);//==================================================================== // Function: check_mtrlcfg_str() //-------------------------------------------------------------------- // Description:检查并合并配置串 //-------------------------------------------------------------------- // Arguments: // value long arg_mtrlid // reference string arg_str // value integer arg_cfgtype // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: Date: 2006.08.31 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 , i , j , k, li_pos Long count Boolean flag String str[] s_mtrlcfg_expr s_mtrl_config_expr[] , s_mtrl_config_expr_1[] arg_str = Trim(arg_str) IF arg_str = '' THEN rslt = 0 arg_msg = '配置说明不能为空!' GOTO ext END IF IF arg_cfgtype = 1 THEN //子件 IF Pos(arg_str , '+') > 0 Or Pos(arg_str , '*') > 0 THEN //检查配置名称合法性 rslt = 0 arg_msg = "配置名称输入错误,配置类型为子件,不是组合!" GOTO ext END IF SELECT count(*) //检查配置名称是否存在 INTO :count FROM u_mtrl_configure WHERE mtrlid = :arg_mtrlid AND name = :arg_str AND type = 1 And ifzj = :arg_cfgtype; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或者其他原因导致查询配置说明失败!>>'+sqlca.SQLErrText GOTO ext END IF IF count <> 0 THEN rslt = 0 arg_msg = '产品已经存在该配置说明,请重新输入!' GOTO ext END IF END IF IF arg_cfgtype = 0 THEN //组合配置 IF Pos(arg_str,'+') <= 0 And Pos(arg_str,'*') <= 0 THEN rslt = 0 arg_msg = '配置名称输入错误,配置类型为组合,不是子件!' GOTO ext END IF i = 0 li_pos = 1 flag = True DO WHILE flag //利用'+'号分割字符串 IF Pos(arg_str , '+') > 0 THEN i++ str[i] = Mid(arg_str , li_pos , Pos(arg_str , '+') - 1 ) arg_str = Mid(arg_str , Pos(arg_str , '+') + 1) ELSE flag = False str[i+1] = arg_str END IF LOOP FOR i = 1 To UpperBound(str[]) //利用'*'号分割出配置名和数量 IF Pos(str[i] , '*') > 0 THEN s_mtrl_config_expr[i].cfgname = Trim(Mid(str[i] , 1 , Pos(str[i] , '*') - 1)) s_mtrl_config_expr[i].qty = Trim(Mid(str[i] , (Pos(str[i] , '*') + 1), Len(str[i]) - (Pos(str[i] , '*') + 1) + 1)) s_mtrl_config_expr[i].Sign = '*' ELSE s_mtrl_config_expr[i].cfgname = Trim(str[i]) s_mtrl_config_expr[i].Sign = '*' s_mtrl_config_expr[i].qty = '1' END IF NEXT FOR i = 1 To UpperBound(s_mtrl_config_expr[]) //检查配置名称合法性 IF s_mtrl_config_expr[i].cfgname = '' THEN rslt = 0 arg_msg = '该产品配置说明输入格式错误,请重新输入!' GOTO ext END IF s_mtrl_config_expr[i].if_chinese = False // FOR k = 1 TO Len(s_mtrl_config_expr[i].cfgname) //利用asc码值判断配置串中是否存在中文字 // IF (asc(MID(s_mtrl_config_expr[i].cfgname,k,1)) >= 128) or & // (asc(MID(s_mtrl_config_expr[i].cfgname,k,1)) >= 65 and asc(MID(s_mtrl_config_expr[i].cfgname,k,1)) <= 90) or & // (asc(MID(s_mtrl_config_expr[i].cfgname,k,1)) >= 97 and asc(MID(s_mtrl_config_expr[i].cfgname,k,1)) <= 122)THEN // s_mtrl_config_expr[i].if_chinese = TRUE // EXIT; // END IF // NEXT If (Asc(Mid(s_mtrl_config_expr[i].cfgname,1,1)) >= 128) Or & (Asc(Mid(s_mtrl_config_expr[i].cfgname,1,1)) >= 65 And Asc(Mid(s_mtrl_config_expr[i].cfgname,1,1)) <= 90) Or & (Asc(Mid(s_mtrl_config_expr[i].cfgname,1,1)) >= 97 And Asc(Mid(s_mtrl_config_expr[i].cfgname,1,1)) <= 122)THEN s_mtrl_config_expr[i].if_chinese = True END IF IF Not s_mtrl_config_expr[i].if_chinese And Dec(s_mtrl_config_expr[i].qty) > 1 THEN rslt = 0 arg_msg = '该产品配置说明输入格式错误,请重新输入!' GOTO ext END IF String ls_cfgname //检查配置是否在子件中 ls_cfgname = s_mtrl_config_expr[i].cfgname SELECT count(*) INTO :count FROM u_mtrl_configure WHERE mtrlid = :arg_mtrlid AND name = :ls_cfgname AND type = 1 And ifzj = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或者其它原因导致查询配置说明失败!>>'+sqlca.SQLErrText GOTO ext END IF IF count = 0 THEN rslt = 0 arg_msg = '['+ls_cfgname+']不是该产品配置说明的子件,请先添加子件' GOTO ext END IF NEXT Boolean lb_f //当为汉字时,合并数量 Long ch = 0 FOR i = 1 To UpperBound(s_mtrl_config_expr[]) FOR j = 1 To UpperBound(s_mtrl_config_expr_1[]) IF s_mtrl_config_expr_1[j].cfgname = s_mtrl_config_expr[i].cfgname And & s_mtrl_config_expr[i].if_chinese THEN s_mtrl_config_expr_1[j].qty = String(Dec(s_mtrl_config_expr_1[j].qty)+1,'##') lb_f = True END IF NEXT IF lb_f = False THEN ch++ s_mtrl_config_expr_1[ch].cfgname = s_mtrl_config_expr[i].cfgname s_mtrl_config_expr_1[ch].qty = s_mtrl_config_expr[i].qty s_mtrl_config_expr_1[ch].if_chinese = s_mtrl_config_expr[i].if_chinese END IF lb_f = False NEXT s_mtrl_config_expr = s_mtrl_config_expr_1 //FOR i = 1 To UpperBound(s_mtrl_config_expr[]) //按照配置名称排序 // FOR j = 1 To UpperBound(s_mtrl_config_expr[]) - i // IF Asc(s_mtrl_config_expr[j].cfgname) > Asc(s_mtrl_config_expr[j+1].cfgname) THEN // s_mtrl_config_expr_1[1] = s_mtrl_config_expr[j+1] // s_mtrl_config_expr[j+1] = s_mtrl_config_expr[j] // s_mtrl_config_expr[j] = s_mtrl_config_expr_1[1] // END IF // NEXT //NEXT arg_str = '' FOR i = 1 To UpperBound(s_mtrl_config_expr[]) //连接配置串 IF s_mtrl_config_expr[i].cfgname <> '' THEN IF Dec(s_mtrl_config_expr[i].qty) <> 1 THEN arg_str = arg_str + s_mtrl_config_expr[i].cfgname + '*' + s_mtrl_config_expr[i].qty + '+' ELSE arg_str = arg_str + s_mtrl_config_expr[i].cfgname + '+' END IF END IF NEXT arg_str = Mid(arg_str , 1, Len(arg_str) - 1 ) SELECT count(*) INTO :count FROM u_mtrl_configure //检查配置名称是否存在 WHERE mtrlid = :arg_mtrlid AND name = :arg_str AND type = 1 And ifzj = :arg_cfgtype; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或者其它原因导致查询该产品的配置说明失败!>>'+sqlca.SQLErrText GOTO ext END IF IF count <> 0 THEN rslt = 0 arg_msg = '产品已经存在该配置说明,请重新输入!' GOTO ext END IF END IF ext: RETURN rslt end function public function integer save (s_mtrl_pz arg_s_mtrlpz, ref string arg_msg, boolean if_commit);String ls_pzname,ls_pzename,ls_dscrp Long ll_pztype,rslt = 1,li_colorprp Long ll_mtrlid,ll_pzid,ll_newid,ll_pfid,ll_newpzflag,ll_ifzj Decimal ld_capacity,ld_capaparm Long cnt Int li_ifgeneral Decimal ld_net_weight,ld_gross_weight,ld_cubage IF uo_option_bom_affirm = -1000 THEN rslt = 0 arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!' GOTO ext END IF ll_mtrlid = arg_s_mtrlpz.mtrlid ll_pzid = arg_s_mtrlpz.cid ls_pzname = arg_s_mtrlpz.Name ls_pzename = arg_s_mtrlpz.ename ls_dscrp = arg_s_mtrlpz.dscrp ll_pztype = arg_s_mtrlpz.ctype ll_newpzflag = arg_s_mtrlpz.newpzflag ll_ifzj = arg_s_mtrlpz.ifzj ld_capacity = arg_s_mtrlpz.capacity ld_capaparm = arg_s_mtrlpz.capaparm ld_net_weight = arg_s_mtrlpz.net_weight ld_gross_weight = arg_s_mtrlpz.gross_weight ld_cubage = arg_s_mtrlpz.cubage li_ifgeneral = arg_s_mtrlpz.ifgeneral IF IsNull(ll_mtrlid) THEN ll_mtrlid = 0 IF IsNull(ll_pzid) THEN ll_pzid = 0 IF IsNull(ls_pzname) THEN ls_pzname = '' IF IsNull(ls_pzename) THEN ls_pzename = '' IF IsNull(ls_dscrp) THEN ls_dscrp = '' IF IsNull(ll_pztype) THEN ll_pztype = 0 IF IsNull(ld_capacity) THEN ld_capacity = 0 IF IsNull(ll_ifzj) THEN ll_ifzj = 0 IF IsNull(ld_net_weight) THEN ld_net_weight = 0 IF IsNull(ld_gross_weight) THEN ld_gross_weight = 0 IF IsNull(ld_cubage) THEN ld_cubage = 0 IF IsNull(li_ifgeneral) THEN li_ifgeneral = 0 IF ll_mtrlid = 0 THEN rslt = 0 arg_msg = '查询产品资料失败!' GOTO ext END IF //荣改 20170518 组合类型也可以保存 净重 体积等 IF ll_ifzj = 0 THEN ld_capacity = 0 ld_capaparm = 1 // ld_net_weight = 0 // ld_gross_weight = 0 // ld_cubage = 0 ELSE li_ifgeneral = 0 END IF //新建配置 IF ll_newpzflag = 1 THEN ll_newid = f_sys_scidentity(0,"u_mtrl_configure","cid",arg_msg,True,sqlca) IF ll_newid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_mtrl_configure( cid, mtrlid, code, name, ename, type, dscrp, ifzj, capacity, capaparm, net_weight, gross_weight, cubage, ifgeneral) VALUES( :ll_newid, :ll_mtrlid, :ls_pzname, :ls_pzname, :ls_pzename, :ll_pztype, :ls_dscrp, :ll_ifzj, :ld_capacity, :ld_capaparm, :ld_net_weight, :ld_gross_weight, :ld_cubage, :li_ifgeneral); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或者其他原因导致插入纪录失败!>>'+sqlca.SQLErrText GOTO ext END IF ELSE //更新 UPDATE u_mtrl_configure SET code = :ls_pzname, name = :ls_pzname, ename = :ls_pzename, type = :ll_pztype, dscrp = :ls_dscrp, ifzj = :ll_ifzj, capacity = :ld_capacity, capaparm = :ld_capaparm, net_weight = :ld_net_weight, gross_weight = :ld_gross_weight, cubage = :ld_cubage, ifgeneral = :li_ifgeneral Where u_mtrl_configure.cid = :ll_pzid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '由于网络或者其他原因导致更新操作失败!>>'+sqlca.SQLErrText GOTO ext END IF END IF ////// // //SELECT count(*) // INTO :cnt // FROM u_mtrldef_planprice // WHERE mtrlid = :ll_mtrlid // AND status = :ls_pzname // AND woodcode = '' // And pcode = ''; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询配置是否已有计划成本价资料失败!>>'+sqlca.SQLErrText // GOTO ext //END IF // //IF cnt = 0 THEN // INSERT INTO u_mtrldef_planprice // (mtrlid, status) // Values (:ll_mtrlid,:ls_pzname); // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '插入产品配置计划成本价资料失败!>>'+sqlca.SQLErrText // GOTO ext // END IF //END IF // // //IF ll_ifzj = 0 And li_ifgeneral = 0 THEN // rslt = 1 // GOTO ext //END IF ////查询是否已有清单存在 //cnt = 0 //SELECT count(*) INTO :cnt // FROM u_mtrl_pf // WHERE mtrlid = :ll_mtrlid // And pfcode = :ls_pzname; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '由于网络或者其他原因导致查询操作失败!>>'+sqlca.SQLErrText // GOTO ext //END IF // //IF cnt > 0 THEN //存在时不插入 // rslt = 1 // GOTO ext //END IF // //uo_mtrl_pf uo_pf //uo_pf = Create uo_mtrl_pf // //IF uo_pf.uof_addpflist(ll_mtrlid,ls_pzname,'',0,0,0,False,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // ////确认并审核该清单 //IF uo_option_bom_affirm = 1 THEN // IF uo_pf.uof_affirm(ll_mtrlid,ls_pzname,1,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext // END IF //END IF // //IF uo_pf.uof_audit(ll_mtrlid,ls_pzname,1,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext //END IF // //Destroy uo_pf ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And if_commit THEN COMMIT; END IF RETURN rslt end function public function integer check_mtrlcfg_exist (long arg_mtrlid, string arg_str, ref string arg_msg);//==================================================================== // Function: check_mtrlcfg_exist() //-------------------------------------------------------------------- // Description: 判断子件是否已用于组合配置中 //-------------------------------------------------------------------- // Arguments: // value long arg_mtrlid // value string ls_name // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: Date: 2006.09.14 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Long cnt,rslt = 1,i,j,li_pos String ls_pzname[],str[],ls_name s_mtrlcfg_expr s_mtrl_config_expr[] Boolean flag DECLARE cur_mtrlcfg CURSOR FOR SELECT name FROM u_mtrl_configure Where mtrlid = :arg_mtrlid ANd TYPE = 1 AND ifzj = 0; OPEN cur_mtrlcfg; cnt = 1 FETCH cur_mtrlcfg INTO :ls_pzname[cnt]; DO WHILE sqlca.SQLCode = 0 cnt++ FETCH cur_mtrlcfg INTO :ls_pzname[cnt]; LOOP CLOSE cur_mtrlcfg; cnt = cnt - 1 FOR j = 1 to cnt ls_name = ls_pzname[j] i = 0 li_pos = 1 flag = TRUE DO WHILE flag //利用'+'号分割字符串 IF Pos(ls_name , '+') > 0 THEN i++ str[i] = Mid(ls_name , li_pos , Pos(ls_name , '+') - 1 ) ls_name = Mid(ls_name , Pos(ls_name , '+') + 1) ELSE flag = FALSE str[i+1] = ls_name END IF LOOP FOR i = 1 TO UpperBound(str[]) //利用'*'号分割出配置名和数量 IF Pos(str[i] , '*') > 0 THEN s_mtrl_config_expr[i].cfgname = Trim(Mid(str[i] , 1 , Pos(str[i] , '*') - 1)) s_mtrl_config_expr[i].Sign = Trim(Mid(str[i] , Pos(str[i] , '*'), 1)) s_mtrl_config_expr[i].qty = Trim(Mid(str[i] , (Pos(str[i] , '*') + 1), Len(str[i]) - (Pos(str[i] , '*') + 1) + 1)) ELSE s_mtrl_config_expr[i].cfgname = Trim(str[i]) s_mtrl_config_expr[i].Sign = '*' s_mtrl_config_expr[i].qty = '1' END IF IF s_mtrl_config_expr[i].cfgname = arg_str THEN rslt = 0 arg_msg = '子件['+arg_str+']'+'已用于组合配置中!' goto ext ENd IF NEXT NEXT ext: RETURN rslt end function on uo_func_mtrlcfg.create call super::create TriggerEvent( this, "constructor" ) end on on uo_func_mtrlcfg.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) end event