123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582 |
- $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
- String ls_unit
- Decimal ld_packqty,ld_wprate
- Long ll_dftwrkgrpid
- 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
- ls_unit = arg_s_mtrlpz.unit
- ld_packqty = arg_s_mtrlpz.packqty
- ld_wprate = arg_s_mtrlpz.wprate
- 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 IsNull(ls_unit) Then ls_unit = ''
- If IsNull(ld_packqty) Then ld_packqty = 0
- If IsNull(ld_wprate) Then ld_wprate = 0
- If ll_mtrlid = 0 Then
- rslt = 0
- arg_msg = '查询产品资料失败!'
- Goto ext
- End If
- 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,id_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,
- unit,
- packqty,
- wprate)
- 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,
- :ls_unit,
- :ld_packqty,
- :ld_wprate);
- 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,
- unit = :ls_unit,
- packqty = :ld_packqty,
- wprate = :ld_wprate
- 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
- Select dftwrkgrpid
- Into :ll_dftwrkgrpid
- From u_mtrldef
- Where mtrlid = :ll_mtrlid;
- If sqlca.SQLCode <> 0 Then
- rslt = 0
- arg_msg = '查询物料默认制造车间失败!>>'+sqlca.SQLErrText
- Goto ext
- End If
- uo_mtrl_pf uo_pf
- uo_pf = Create uo_mtrl_pf
- If uo_pf.uof_addpflist(ll_mtrlid,ls_pzname,ll_dftwrkgrpid,'',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
|