uo_func_mtrlcfg.sru 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582
  1. $PBExportHeader$uo_func_mtrlcfg.sru
  2. forward
  3. global type uo_func_mtrlcfg from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_func_mtrlcfg from nonvisualobject
  7. end type
  8. global uo_func_mtrlcfg uo_func_mtrlcfg
  9. type variables
  10. int uo_option_bom_affirm
  11. end variables
  12. forward prototypes
  13. public function integer check_mtrlcfg_str (long arg_mtrlid, ref string arg_str, integer arg_cfgtype, ref string arg_msg)
  14. public function integer save (s_mtrl_pz arg_s_mtrlpz, ref string arg_msg, boolean if_commit)
  15. public function integer check_mtrlcfg_exist (long arg_mtrlid, string arg_str, ref string arg_msg)
  16. end prototypes
  17. public function integer check_mtrlcfg_str (long arg_mtrlid, ref string arg_str, integer arg_cfgtype, ref string arg_msg);//====================================================================
  18. // Function: check_mtrlcfg_str()
  19. //--------------------------------------------------------------------
  20. // Description:检查并合并配置串
  21. //--------------------------------------------------------------------
  22. // Arguments:
  23. // value long arg_mtrlid
  24. // reference string arg_str
  25. // value integer arg_cfgtype
  26. // reference string arg_msg
  27. //--------------------------------------------------------------------
  28. // Returns: integer
  29. //--------------------------------------------------------------------
  30. // Author: Date: 2006.08.31
  31. //--------------------------------------------------------------------
  32. // Modify History:
  33. //
  34. //====================================================================
  35. Int rslt = 1 , i , j , k, li_pos
  36. Long count
  37. Boolean flag
  38. String str[]
  39. s_mtrlcfg_expr s_mtrl_config_expr[] , s_mtrl_config_expr_1[]
  40. arg_str = Trim(arg_str)
  41. IF arg_str = '' THEN
  42. rslt = 0
  43. arg_msg = '配置说明不能为空!'
  44. GOTO ext
  45. END IF
  46. IF arg_cfgtype = 1 THEN //子件
  47. IF Pos(arg_str , '+') > 0 Or Pos(arg_str , '*') > 0 THEN //检查配置名称合法性
  48. rslt = 0
  49. arg_msg = "配置名称输入错误,配置类型为子件,不是组合!"
  50. GOTO ext
  51. END IF
  52. SELECT count(*) //检查配置名称是否存在
  53. INTO :count
  54. FROM u_mtrl_configure
  55. WHERE mtrlid = :arg_mtrlid
  56. AND name = :arg_str
  57. AND type = 1
  58. And ifzj = :arg_cfgtype;
  59. IF sqlca.SQLCode <> 0 THEN
  60. rslt = 0
  61. arg_msg = '因网络或者其他原因导致查询配置说明失败!>>'+sqlca.SQLErrText
  62. GOTO ext
  63. END IF
  64. IF count <> 0 THEN
  65. rslt = 0
  66. arg_msg = '产品已经存在该配置说明,请重新输入!'
  67. GOTO ext
  68. END IF
  69. END IF
  70. IF arg_cfgtype = 0 THEN //组合配置
  71. IF Pos(arg_str,'+') <= 0 And Pos(arg_str,'*') <= 0 THEN
  72. rslt = 0
  73. arg_msg = '配置名称输入错误,配置类型为组合,不是子件!'
  74. GOTO ext
  75. END IF
  76. i = 0
  77. li_pos = 1
  78. flag = True
  79. DO WHILE flag //利用'+'号分割字符串
  80. IF Pos(arg_str , '+') > 0 THEN
  81. i++
  82. str[i] = Mid(arg_str , li_pos , Pos(arg_str , '+') - 1 )
  83. arg_str = Mid(arg_str , Pos(arg_str , '+') + 1)
  84. ELSE
  85. flag = False
  86. str[i+1] = arg_str
  87. END IF
  88. LOOP
  89. FOR i = 1 To UpperBound(str[]) //利用'*'号分割出配置名和数量
  90. IF Pos(str[i] , '*') > 0 THEN
  91. s_mtrl_config_expr[i].cfgname = Trim(Mid(str[i] , 1 , Pos(str[i] , '*') - 1))
  92. s_mtrl_config_expr[i].qty = Trim(Mid(str[i] , (Pos(str[i] , '*') + 1), Len(str[i]) - (Pos(str[i] , '*') + 1) + 1))
  93. s_mtrl_config_expr[i].Sign = '*'
  94. ELSE
  95. s_mtrl_config_expr[i].cfgname = Trim(str[i])
  96. s_mtrl_config_expr[i].Sign = '*'
  97. s_mtrl_config_expr[i].qty = '1'
  98. END IF
  99. NEXT
  100. FOR i = 1 To UpperBound(s_mtrl_config_expr[]) //检查配置名称合法性
  101. IF s_mtrl_config_expr[i].cfgname = '' THEN
  102. rslt = 0
  103. arg_msg = '该产品配置说明输入格式错误,请重新输入!'
  104. GOTO ext
  105. END IF
  106. s_mtrl_config_expr[i].if_chinese = False
  107. // FOR k = 1 TO Len(s_mtrl_config_expr[i].cfgname) //利用asc码值判断配置串中是否存在中文字
  108. // IF (asc(MID(s_mtrl_config_expr[i].cfgname,k,1)) >= 128) or &
  109. // (asc(MID(s_mtrl_config_expr[i].cfgname,k,1)) >= 65 and asc(MID(s_mtrl_config_expr[i].cfgname,k,1)) <= 90) or &
  110. // (asc(MID(s_mtrl_config_expr[i].cfgname,k,1)) >= 97 and asc(MID(s_mtrl_config_expr[i].cfgname,k,1)) <= 122)THEN
  111. // s_mtrl_config_expr[i].if_chinese = TRUE
  112. // EXIT;
  113. // END IF
  114. // NEXT
  115. If (Asc(Mid(s_mtrl_config_expr[i].cfgname,1,1)) >= 128) Or &
  116. (Asc(Mid(s_mtrl_config_expr[i].cfgname,1,1)) >= 65 And Asc(Mid(s_mtrl_config_expr[i].cfgname,1,1)) <= 90) Or &
  117. (Asc(Mid(s_mtrl_config_expr[i].cfgname,1,1)) >= 97 And Asc(Mid(s_mtrl_config_expr[i].cfgname,1,1)) <= 122)THEN
  118. s_mtrl_config_expr[i].if_chinese = True
  119. END IF
  120. IF Not s_mtrl_config_expr[i].if_chinese And Dec(s_mtrl_config_expr[i].qty) > 1 THEN
  121. rslt = 0
  122. arg_msg = '该产品配置说明输入格式错误,请重新输入!'
  123. GOTO ext
  124. END IF
  125. String ls_cfgname //检查配置是否在子件中
  126. ls_cfgname = s_mtrl_config_expr[i].cfgname
  127. SELECT count(*) INTO :count
  128. FROM u_mtrl_configure
  129. WHERE mtrlid = :arg_mtrlid
  130. AND name = :ls_cfgname
  131. AND type = 1
  132. And ifzj = 1;
  133. IF sqlca.SQLCode <> 0 THEN
  134. rslt = 0
  135. arg_msg = '因网络或者其它原因导致查询配置说明失败!>>'+sqlca.SQLErrText
  136. GOTO ext
  137. END IF
  138. IF count = 0 THEN
  139. rslt = 0
  140. arg_msg = '['+ls_cfgname+']不是该产品配置说明的子件,请先添加子件'
  141. GOTO ext
  142. END IF
  143. NEXT
  144. Boolean lb_f //当为汉字时,合并数量
  145. Long ch = 0
  146. FOR i = 1 To UpperBound(s_mtrl_config_expr[])
  147. FOR j = 1 To UpperBound(s_mtrl_config_expr_1[])
  148. IF s_mtrl_config_expr_1[j].cfgname = s_mtrl_config_expr[i].cfgname And &
  149. s_mtrl_config_expr[i].if_chinese THEN
  150. s_mtrl_config_expr_1[j].qty = String(Dec(s_mtrl_config_expr_1[j].qty)+1,'##')
  151. lb_f = True
  152. END IF
  153. NEXT
  154. IF lb_f = False THEN
  155. ch++
  156. s_mtrl_config_expr_1[ch].cfgname = s_mtrl_config_expr[i].cfgname
  157. s_mtrl_config_expr_1[ch].qty = s_mtrl_config_expr[i].qty
  158. s_mtrl_config_expr_1[ch].if_chinese = s_mtrl_config_expr[i].if_chinese
  159. END IF
  160. lb_f = False
  161. NEXT
  162. s_mtrl_config_expr = s_mtrl_config_expr_1
  163. //FOR i = 1 To UpperBound(s_mtrl_config_expr[]) //按照配置名称排序
  164. // FOR j = 1 To UpperBound(s_mtrl_config_expr[]) - i
  165. // IF Asc(s_mtrl_config_expr[j].cfgname) > Asc(s_mtrl_config_expr[j+1].cfgname) THEN
  166. // s_mtrl_config_expr_1[1] = s_mtrl_config_expr[j+1]
  167. // s_mtrl_config_expr[j+1] = s_mtrl_config_expr[j]
  168. // s_mtrl_config_expr[j] = s_mtrl_config_expr_1[1]
  169. // END IF
  170. // NEXT
  171. //NEXT
  172. arg_str = ''
  173. FOR i = 1 To UpperBound(s_mtrl_config_expr[]) //连接配置串
  174. IF s_mtrl_config_expr[i].cfgname <> '' THEN
  175. IF Dec(s_mtrl_config_expr[i].qty) <> 1 THEN
  176. arg_str = arg_str + s_mtrl_config_expr[i].cfgname + '*' + s_mtrl_config_expr[i].qty + '+'
  177. ELSE
  178. arg_str = arg_str + s_mtrl_config_expr[i].cfgname + '+'
  179. END IF
  180. END IF
  181. NEXT
  182. arg_str = Mid(arg_str , 1, Len(arg_str) - 1 )
  183. SELECT count(*)
  184. INTO :count
  185. FROM u_mtrl_configure //检查配置名称是否存在
  186. WHERE mtrlid = :arg_mtrlid
  187. AND name = :arg_str
  188. AND type = 1
  189. And ifzj = :arg_cfgtype;
  190. IF sqlca.SQLCode <> 0 THEN
  191. rslt = 0
  192. arg_msg = '因网络或者其它原因导致查询该产品的配置说明失败!>>'+sqlca.SQLErrText
  193. GOTO ext
  194. END IF
  195. IF count <> 0 THEN
  196. rslt = 0
  197. arg_msg = '产品已经存在该配置说明,请重新输入!'
  198. GOTO ext
  199. END IF
  200. END IF
  201. ext:
  202. RETURN rslt
  203. end function
  204. public function integer save (s_mtrl_pz arg_s_mtrlpz, ref string arg_msg, boolean if_commit);String ls_pzname,ls_pzename,ls_dscrp
  205. Long ll_pztype,rslt = 1,li_colorprp
  206. Long ll_mtrlid,ll_pzid,ll_newid,ll_pfid,ll_newpzflag,ll_ifzj
  207. Decimal ld_capacity,ld_capaparm
  208. Long cnt
  209. Int li_ifgeneral
  210. Decimal ld_net_weight,ld_gross_weight,ld_cubage
  211. String ls_unit
  212. Decimal ld_packqty,ld_wprate
  213. Long ll_dftwrkgrpid
  214. If uo_option_bom_affirm = -1000 Then
  215. rslt = 0
  216. arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!'
  217. Goto ext
  218. End If
  219. ll_mtrlid = arg_s_mtrlpz.mtrlid
  220. ll_pzid = arg_s_mtrlpz.cid
  221. ls_pzname = arg_s_mtrlpz.Name
  222. ls_pzename = arg_s_mtrlpz.ename
  223. ls_dscrp = arg_s_mtrlpz.dscrp
  224. ll_pztype = arg_s_mtrlpz.ctype
  225. ll_newpzflag = arg_s_mtrlpz.newpzflag
  226. ll_ifzj = arg_s_mtrlpz.ifzj
  227. ld_capacity = arg_s_mtrlpz.capacity
  228. ld_capaparm = arg_s_mtrlpz.capaparm
  229. ld_net_weight = arg_s_mtrlpz.net_weight
  230. ld_gross_weight = arg_s_mtrlpz.gross_weight
  231. ld_cubage = arg_s_mtrlpz.cubage
  232. li_ifgeneral = arg_s_mtrlpz.ifgeneral
  233. ls_unit = arg_s_mtrlpz.unit
  234. ld_packqty = arg_s_mtrlpz.packqty
  235. ld_wprate = arg_s_mtrlpz.wprate
  236. If IsNull(ll_mtrlid) Then ll_mtrlid = 0
  237. If IsNull(ll_pzid) Then ll_pzid = 0
  238. If IsNull(ls_pzname) Then ls_pzname = ''
  239. If IsNull(ls_pzename) Then ls_pzename = ''
  240. If IsNull(ls_dscrp) Then ls_dscrp = ''
  241. If IsNull(ll_pztype) Then ll_pztype = 0
  242. If IsNull(ld_capacity) Then ld_capacity = 0
  243. If IsNull(ll_ifzj) Then ll_ifzj = 0
  244. If IsNull(ld_net_weight) Then ld_net_weight = 0
  245. If IsNull(ld_gross_weight) Then ld_gross_weight = 0
  246. If IsNull(ld_cubage) Then ld_cubage = 0
  247. If IsNull(li_ifgeneral) Then li_ifgeneral = 0
  248. If IsNull(ls_unit) Then ls_unit = ''
  249. If IsNull(ld_packqty) Then ld_packqty = 0
  250. If IsNull(ld_wprate) Then ld_wprate = 0
  251. If ll_mtrlid = 0 Then
  252. rslt = 0
  253. arg_msg = '查询产品资料失败!'
  254. Goto ext
  255. End If
  256. If ll_ifzj = 0 Then
  257. ld_capacity = 0
  258. ld_capaparm = 1
  259. ld_net_weight = 0
  260. ld_gross_weight = 0
  261. ld_cubage = 0
  262. Else
  263. li_ifgeneral = 0
  264. End If
  265. //新建配置
  266. If ll_newpzflag = 1 Then
  267. ll_newid = f_sys_scidentity(0,"u_mtrl_configure","cid",arg_msg,True,id_sqlca)
  268. If ll_newid <= 0 Then
  269. rslt = 0
  270. Goto ext
  271. End If
  272. Insert Into u_mtrl_configure(
  273. cid,
  274. mtrlid,
  275. code,
  276. name,
  277. ename,
  278. type,
  279. dscrp,
  280. ifzj,
  281. capacity,
  282. capaparm,
  283. net_weight,
  284. gross_weight,
  285. cubage,
  286. ifgeneral,
  287. unit,
  288. packqty,
  289. wprate)
  290. Values(
  291. :ll_newid,
  292. :ll_mtrlid,
  293. :ls_pzname,
  294. :ls_pzname,
  295. :ls_pzename,
  296. :ll_pztype,
  297. :ls_dscrp,
  298. :ll_ifzj,
  299. :ld_capacity,
  300. :ld_capaparm,
  301. :ld_net_weight,
  302. :ld_gross_weight,
  303. :ld_cubage,
  304. :li_ifgeneral,
  305. :ls_unit,
  306. :ld_packqty,
  307. :ld_wprate);
  308. If sqlca.SQLCode <> 0 Then
  309. rslt = 0
  310. arg_msg = '因网络或者其他原因导致插入纪录失败!>>'+sqlca.SQLErrText
  311. Goto ext
  312. End If
  313. Else //更新
  314. Update u_mtrl_configure
  315. Set code = :ls_pzname,
  316. name = :ls_pzname,
  317. ename = :ls_pzename,
  318. type = :ll_pztype,
  319. dscrp = :ls_dscrp,
  320. ifzj = :ll_ifzj,
  321. capacity = :ld_capacity,
  322. capaparm = :ld_capaparm,
  323. net_weight = :ld_net_weight,
  324. gross_weight = :ld_gross_weight,
  325. cubage = :ld_cubage,
  326. ifgeneral = :li_ifgeneral,
  327. unit = :ls_unit,
  328. packqty = :ld_packqty,
  329. wprate = :ld_wprate
  330. Where u_mtrl_configure.cid = :ll_pzid;
  331. If sqlca.SQLCode <> 0 Then
  332. rslt = 0
  333. arg_msg = '由于网络或者其他原因导致更新操作失败!>>'+sqlca.SQLErrText
  334. Goto ext
  335. End If
  336. End If
  337. ////// //
  338. Select count(*)
  339. Into :cnt
  340. From u_mtrldef_planprice
  341. Where mtrlid = :ll_mtrlid
  342. And status = :ls_pzname
  343. And woodcode = ''
  344. And pcode = '';
  345. If sqlca.SQLCode <> 0 Then
  346. rslt = 0
  347. arg_msg = '查询配置是否已有计划成本价资料失败!>>'+sqlca.SQLErrText
  348. Goto ext
  349. End If
  350. If cnt = 0 Then
  351. Insert Into u_mtrldef_planprice
  352. (mtrlid, status)
  353. Values (:ll_mtrlid,:ls_pzname);
  354. If sqlca.SQLCode <> 0 Then
  355. rslt = 0
  356. arg_msg = '插入产品配置计划成本价资料失败!>>'+sqlca.SQLErrText
  357. Goto ext
  358. End If
  359. End If
  360. If ll_ifzj = 0 And li_ifgeneral = 0 Then
  361. rslt = 1
  362. Goto ext
  363. End If
  364. //查询是否已有清单存在
  365. cnt = 0
  366. Select count(*) Into :cnt
  367. From u_mtrl_pf
  368. Where mtrlid = :ll_mtrlid
  369. And pfcode = :ls_pzname;
  370. If sqlca.SQLCode <> 0 Then
  371. rslt = 0
  372. arg_msg = '由于网络或者其他原因导致查询操作失败!>>'+sqlca.SQLErrText
  373. Goto ext
  374. End If
  375. If cnt > 0 Then //存在时不插入
  376. rslt = 1
  377. Goto ext
  378. End If
  379. Select dftwrkgrpid
  380. Into :ll_dftwrkgrpid
  381. From u_mtrldef
  382. Where mtrlid = :ll_mtrlid;
  383. If sqlca.SQLCode <> 0 Then
  384. rslt = 0
  385. arg_msg = '查询物料默认制造车间失败!>>'+sqlca.SQLErrText
  386. Goto ext
  387. End If
  388. uo_mtrl_pf uo_pf
  389. uo_pf = Create uo_mtrl_pf
  390. If uo_pf.uof_addpflist(ll_mtrlid,ls_pzname,ll_dftwrkgrpid,'',0,0,0,False,arg_msg) = 0 Then
  391. rslt = 0
  392. Goto ext
  393. End If
  394. //确认并审核该清单
  395. If uo_option_bom_affirm = 1 Then
  396. If uo_pf.uof_affirm(ll_mtrlid,ls_pzname,1,arg_msg,False) = 0 Then
  397. rslt = 0
  398. Goto ext
  399. End If
  400. End If
  401. If uo_pf.uof_audit(ll_mtrlid,ls_pzname,1,arg_msg,False) = 0 Then
  402. rslt = 0
  403. Goto ext
  404. End If
  405. Destroy uo_pf
  406. ext:
  407. If rslt = 0 Then
  408. Rollback;
  409. ElseIf rslt = 1 And if_commit Then
  410. Commit;
  411. End If
  412. Return rslt
  413. end function
  414. public function integer check_mtrlcfg_exist (long arg_mtrlid, string arg_str, ref string arg_msg);//====================================================================
  415. // Function: check_mtrlcfg_exist()
  416. //--------------------------------------------------------------------
  417. // Description: 判断子件是否已用于组合配置中
  418. //--------------------------------------------------------------------
  419. // Arguments:
  420. // value long arg_mtrlid
  421. // value string ls_name
  422. // reference string arg_msg
  423. //--------------------------------------------------------------------
  424. // Returns: integer
  425. //--------------------------------------------------------------------
  426. // Author: Date: 2006.09.14
  427. //--------------------------------------------------------------------
  428. // Modify History:
  429. //
  430. //====================================================================
  431. Long cnt,rslt = 1,i,j,li_pos
  432. String ls_pzname[],str[],ls_name
  433. s_mtrlcfg_expr s_mtrl_config_expr[]
  434. Boolean flag
  435. DECLARE cur_mtrlcfg CURSOR FOR
  436. SELECT name FROM u_mtrl_configure
  437. Where mtrlid = :arg_mtrlid
  438. ANd TYPE = 1
  439. AND ifzj = 0;
  440. OPEN cur_mtrlcfg;
  441. cnt = 1
  442. FETCH cur_mtrlcfg INTO :ls_pzname[cnt];
  443. DO WHILE sqlca.SQLCode = 0
  444. cnt++
  445. FETCH cur_mtrlcfg INTO :ls_pzname[cnt];
  446. LOOP
  447. CLOSE cur_mtrlcfg;
  448. cnt = cnt - 1
  449. FOR j = 1 to cnt
  450. ls_name = ls_pzname[j]
  451. i = 0
  452. li_pos = 1
  453. flag = TRUE
  454. DO WHILE flag //利用'+'号分割字符串
  455. IF Pos(ls_name , '+') > 0 THEN
  456. i++
  457. str[i] = Mid(ls_name , li_pos , Pos(ls_name , '+') - 1 )
  458. ls_name = Mid(ls_name , Pos(ls_name , '+') + 1)
  459. ELSE
  460. flag = FALSE
  461. str[i+1] = ls_name
  462. END IF
  463. LOOP
  464. FOR i = 1 TO UpperBound(str[]) //利用'*'号分割出配置名和数量
  465. IF Pos(str[i] , '*') > 0 THEN
  466. s_mtrl_config_expr[i].cfgname = Trim(Mid(str[i] , 1 , Pos(str[i] , '*') - 1))
  467. s_mtrl_config_expr[i].Sign = Trim(Mid(str[i] , Pos(str[i] , '*'), 1))
  468. s_mtrl_config_expr[i].qty = Trim(Mid(str[i] , (Pos(str[i] , '*') + 1), Len(str[i]) - (Pos(str[i] , '*') + 1) + 1))
  469. ELSE
  470. s_mtrl_config_expr[i].cfgname = Trim(str[i])
  471. s_mtrl_config_expr[i].Sign = '*'
  472. s_mtrl_config_expr[i].qty = '1'
  473. END IF
  474. IF s_mtrl_config_expr[i].cfgname = arg_str THEN
  475. rslt = 0
  476. arg_msg = '子件['+arg_str+']'+'已用于组合配置中!'
  477. goto ext
  478. ENd IF
  479. NEXT
  480. NEXT
  481. ext:
  482. RETURN rslt
  483. end function
  484. on uo_func_mtrlcfg.create
  485. call super::create
  486. TriggerEvent( this, "constructor" )
  487. end on
  488. on uo_func_mtrlcfg.destroy
  489. TriggerEvent( this, "destructor" )
  490. call super::destroy
  491. end on
  492. event constructor;String str_optionvalue,arg_msg
  493. f_get_sys_option_value('085',str_optionvalue,arg_msg)
  494. uo_option_bom_affirm = Long(str_optionvalue)
  495. end event