123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553 |
- $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
|