uo_func_mtrlcfg.sru 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  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. IF uo_option_bom_affirm = -1000 THEN
  212. rslt = 0
  213. arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!'
  214. GOTO ext
  215. END IF
  216. ll_mtrlid = arg_s_mtrlpz.mtrlid
  217. ll_pzid = arg_s_mtrlpz.cid
  218. ls_pzname = arg_s_mtrlpz.Name
  219. ls_pzename = arg_s_mtrlpz.ename
  220. ls_dscrp = arg_s_mtrlpz.dscrp
  221. ll_pztype = arg_s_mtrlpz.ctype
  222. ll_newpzflag = arg_s_mtrlpz.newpzflag
  223. ll_ifzj = arg_s_mtrlpz.ifzj
  224. ld_capacity = arg_s_mtrlpz.capacity
  225. ld_capaparm = arg_s_mtrlpz.capaparm
  226. ld_net_weight = arg_s_mtrlpz.net_weight
  227. ld_gross_weight = arg_s_mtrlpz.gross_weight
  228. ld_cubage = arg_s_mtrlpz.cubage
  229. li_ifgeneral = arg_s_mtrlpz.ifgeneral
  230. IF IsNull(ll_mtrlid) THEN ll_mtrlid = 0
  231. IF IsNull(ll_pzid) THEN ll_pzid = 0
  232. IF IsNull(ls_pzname) THEN ls_pzname = ''
  233. IF IsNull(ls_pzename) THEN ls_pzename = ''
  234. IF IsNull(ls_dscrp) THEN ls_dscrp = ''
  235. IF IsNull(ll_pztype) THEN ll_pztype = 0
  236. IF IsNull(ld_capacity) THEN ld_capacity = 0
  237. IF IsNull(ll_ifzj) THEN ll_ifzj = 0
  238. IF IsNull(ld_net_weight) THEN ld_net_weight = 0
  239. IF IsNull(ld_gross_weight) THEN ld_gross_weight = 0
  240. IF IsNull(ld_cubage) THEN ld_cubage = 0
  241. IF IsNull(li_ifgeneral) THEN li_ifgeneral = 0
  242. IF ll_mtrlid = 0 THEN
  243. rslt = 0
  244. arg_msg = '查询产品资料失败!'
  245. GOTO ext
  246. END IF
  247. //荣改 20170518 组合类型也可以保存 净重 体积等
  248. IF ll_ifzj = 0 THEN
  249. ld_capacity = 0
  250. ld_capaparm = 1
  251. // ld_net_weight = 0
  252. // ld_gross_weight = 0
  253. // ld_cubage = 0
  254. ELSE
  255. li_ifgeneral = 0
  256. END IF
  257. //新建配置
  258. IF ll_newpzflag = 1 THEN
  259. ll_newid = f_sys_scidentity(0,"u_mtrl_configure","cid",arg_msg,True,sqlca)
  260. IF ll_newid <= 0 THEN
  261. rslt = 0
  262. GOTO ext
  263. END IF
  264. INSERT INTO u_mtrl_configure(
  265. cid,
  266. mtrlid,
  267. code,
  268. name,
  269. ename,
  270. type,
  271. dscrp,
  272. ifzj,
  273. capacity,
  274. capaparm,
  275. net_weight,
  276. gross_weight,
  277. cubage,
  278. ifgeneral)
  279. VALUES(
  280. :ll_newid,
  281. :ll_mtrlid,
  282. :ls_pzname,
  283. :ls_pzname,
  284. :ls_pzename,
  285. :ll_pztype,
  286. :ls_dscrp,
  287. :ll_ifzj,
  288. :ld_capacity,
  289. :ld_capaparm,
  290. :ld_net_weight,
  291. :ld_gross_weight,
  292. :ld_cubage,
  293. :li_ifgeneral);
  294. IF sqlca.SQLCode <> 0 THEN
  295. rslt = 0
  296. arg_msg = '因网络或者其他原因导致插入纪录失败!>>'+sqlca.SQLErrText
  297. GOTO ext
  298. END IF
  299. ELSE //更新
  300. UPDATE u_mtrl_configure
  301. SET code = :ls_pzname,
  302. name = :ls_pzname,
  303. ename = :ls_pzename,
  304. type = :ll_pztype,
  305. dscrp = :ls_dscrp,
  306. ifzj = :ll_ifzj,
  307. capacity = :ld_capacity,
  308. capaparm = :ld_capaparm,
  309. net_weight = :ld_net_weight,
  310. gross_weight = :ld_gross_weight,
  311. cubage = :ld_cubage,
  312. ifgeneral = :li_ifgeneral
  313. Where u_mtrl_configure.cid = :ll_pzid;
  314. IF sqlca.SQLCode <> 0 THEN
  315. rslt = 0
  316. arg_msg = '由于网络或者其他原因导致更新操作失败!>>'+sqlca.SQLErrText
  317. GOTO ext
  318. END IF
  319. END IF
  320. ////// //
  321. //SELECT count(*)
  322. // INTO :cnt
  323. // FROM u_mtrldef_planprice
  324. // WHERE mtrlid = :ll_mtrlid
  325. // AND status = :ls_pzname
  326. // AND woodcode = ''
  327. // And pcode = '';
  328. //IF sqlca.SQLCode <> 0 THEN
  329. // rslt = 0
  330. // arg_msg = '查询配置是否已有计划成本价资料失败!>>'+sqlca.SQLErrText
  331. // GOTO ext
  332. //END IF
  333. //
  334. //IF cnt = 0 THEN
  335. // INSERT INTO u_mtrldef_planprice
  336. // (mtrlid, status)
  337. // Values (:ll_mtrlid,:ls_pzname);
  338. // IF sqlca.SQLCode <> 0 THEN
  339. // rslt = 0
  340. // arg_msg = '插入产品配置计划成本价资料失败!>>'+sqlca.SQLErrText
  341. // GOTO ext
  342. // END IF
  343. //END IF
  344. //
  345. //
  346. //IF ll_ifzj = 0 And li_ifgeneral = 0 THEN
  347. // rslt = 1
  348. // GOTO ext
  349. //END IF
  350. ////查询是否已有清单存在
  351. //cnt = 0
  352. //SELECT count(*) INTO :cnt
  353. // FROM u_mtrl_pf
  354. // WHERE mtrlid = :ll_mtrlid
  355. // And pfcode = :ls_pzname;
  356. //IF sqlca.SQLCode <> 0 THEN
  357. // rslt = 0
  358. // arg_msg = '由于网络或者其他原因导致查询操作失败!>>'+sqlca.SQLErrText
  359. // GOTO ext
  360. //END IF
  361. //
  362. //IF cnt > 0 THEN //存在时不插入
  363. // rslt = 1
  364. // GOTO ext
  365. //END IF
  366. //
  367. //uo_mtrl_pf uo_pf
  368. //uo_pf = Create uo_mtrl_pf
  369. //
  370. //IF uo_pf.uof_addpflist(ll_mtrlid,ls_pzname,'',0,0,0,False,arg_msg) = 0 THEN
  371. // rslt = 0
  372. // GOTO ext
  373. //END IF
  374. //
  375. ////确认并审核该清单
  376. //IF uo_option_bom_affirm = 1 THEN
  377. // IF uo_pf.uof_affirm(ll_mtrlid,ls_pzname,1,arg_msg,False) = 0 THEN
  378. // rslt = 0
  379. // GOTO ext
  380. // END IF
  381. //END IF
  382. //
  383. //IF uo_pf.uof_audit(ll_mtrlid,ls_pzname,1,arg_msg,False) = 0 THEN
  384. // rslt = 0
  385. // GOTO ext
  386. //END IF
  387. //
  388. //Destroy uo_pf
  389. ext:
  390. IF rslt = 0 THEN
  391. ROLLBACK;
  392. ELSEIF rslt = 1 And if_commit THEN
  393. COMMIT;
  394. END IF
  395. RETURN rslt
  396. end function
  397. public function integer check_mtrlcfg_exist (long arg_mtrlid, string arg_str, ref string arg_msg);//====================================================================
  398. // Function: check_mtrlcfg_exist()
  399. //--------------------------------------------------------------------
  400. // Description: 判断子件是否已用于组合配置中
  401. //--------------------------------------------------------------------
  402. // Arguments:
  403. // value long arg_mtrlid
  404. // value string ls_name
  405. // reference string arg_msg
  406. //--------------------------------------------------------------------
  407. // Returns: integer
  408. //--------------------------------------------------------------------
  409. // Author: Date: 2006.09.14
  410. //--------------------------------------------------------------------
  411. // Modify History:
  412. //
  413. //====================================================================
  414. Long cnt,rslt = 1,i,j,li_pos
  415. String ls_pzname[],str[],ls_name
  416. s_mtrlcfg_expr s_mtrl_config_expr[]
  417. Boolean flag
  418. DECLARE cur_mtrlcfg CURSOR FOR
  419. SELECT name FROM u_mtrl_configure
  420. Where mtrlid = :arg_mtrlid
  421. ANd TYPE = 1
  422. AND ifzj = 0;
  423. OPEN cur_mtrlcfg;
  424. cnt = 1
  425. FETCH cur_mtrlcfg INTO :ls_pzname[cnt];
  426. DO WHILE sqlca.SQLCode = 0
  427. cnt++
  428. FETCH cur_mtrlcfg INTO :ls_pzname[cnt];
  429. LOOP
  430. CLOSE cur_mtrlcfg;
  431. cnt = cnt - 1
  432. FOR j = 1 to cnt
  433. ls_name = ls_pzname[j]
  434. i = 0
  435. li_pos = 1
  436. flag = TRUE
  437. DO WHILE flag //利用'+'号分割字符串
  438. IF Pos(ls_name , '+') > 0 THEN
  439. i++
  440. str[i] = Mid(ls_name , li_pos , Pos(ls_name , '+') - 1 )
  441. ls_name = Mid(ls_name , Pos(ls_name , '+') + 1)
  442. ELSE
  443. flag = FALSE
  444. str[i+1] = ls_name
  445. END IF
  446. LOOP
  447. FOR i = 1 TO UpperBound(str[]) //利用'*'号分割出配置名和数量
  448. IF Pos(str[i] , '*') > 0 THEN
  449. s_mtrl_config_expr[i].cfgname = Trim(Mid(str[i] , 1 , Pos(str[i] , '*') - 1))
  450. s_mtrl_config_expr[i].Sign = Trim(Mid(str[i] , Pos(str[i] , '*'), 1))
  451. s_mtrl_config_expr[i].qty = Trim(Mid(str[i] , (Pos(str[i] , '*') + 1), Len(str[i]) - (Pos(str[i] , '*') + 1) + 1))
  452. ELSE
  453. s_mtrl_config_expr[i].cfgname = Trim(str[i])
  454. s_mtrl_config_expr[i].Sign = '*'
  455. s_mtrl_config_expr[i].qty = '1'
  456. END IF
  457. IF s_mtrl_config_expr[i].cfgname = arg_str THEN
  458. rslt = 0
  459. arg_msg = '子件['+arg_str+']'+'已用于组合配置中!'
  460. goto ext
  461. ENd IF
  462. NEXT
  463. NEXT
  464. ext:
  465. RETURN rslt
  466. end function
  467. on uo_func_mtrlcfg.create
  468. call super::create
  469. TriggerEvent( this, "constructor" )
  470. end on
  471. on uo_func_mtrlcfg.destroy
  472. TriggerEvent( this, "destructor" )
  473. call super::destroy
  474. end on
  475. event constructor;String str_optionvalue,arg_msg
  476. //f_get_sys_option_value('085',str_optionvalue,arg_msg)
  477. uo_option_bom_affirm = Long(str_optionvalue)
  478. end event