uo_order_ml_rqmtrl_chng.sru 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118
  1. $PBExportHeader$uo_order_ml_rqmtrl_chng.sru
  2. forward
  3. global type uo_order_ml_rqmtrl_chng from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_order_ml_rqmtrl_chng from nonvisualobject
  7. end type
  8. global uo_order_ml_rqmtrl_chng uo_order_ml_rqmtrl_chng
  9. type variables
  10. long uo_scid
  11. long uo_billid
  12. string uo_billcode
  13. end variables
  14. forward prototypes
  15. public function integer save (s_order_ml_rqmtrl_chng arg_s_main, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  16. public function integer getinfo (long arg_scid, long arg_billid, ref s_order_ml_rqmtrl_chngmx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg)
  17. public function integer audit (long arg_scid, long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  18. public function integer p_getflag (long arg_scid, long arg_billid, ref integer arg_flag, ref string arg_msg)
  19. public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  20. public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  21. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg)
  22. public function integer getinfo2 (long arg_scid, long arg_billid, ref s_order_ml_rqmtrl_chngmx2 arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg)
  23. public function integer uf_add_bom (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  24. end prototypes
  25. public function integer save (s_order_ml_rqmtrl_chng arg_s_main, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0
  26. DateTime server_dt
  27. Long ll_billid,it_mxbt,i,it_mxbt2, ll_scllflag
  28. String ls_sccode,ls_billcode, ls_taskcode
  29. IF IsNull(arg_s_main.scid) THEN arg_s_main.scid = 0
  30. IF IsNull(arg_s_main.billid) THEN arg_s_main.billid = 0
  31. //IF IsNull(arg_s_main.relid) THEN arg_s_main.relid = 0
  32. //IF IsNull(arg_s_main.relprintid) THEN arg_s_main.relprintid = 0
  33. //IF IsNull(arg_s_main.mtrlid) THEN arg_s_main.mtrlid = 0
  34. IF IsNull(arg_s_main.CreateBomFlag) THEN arg_s_main.CreateBomFlag = 0
  35. IF IsNull(arg_s_main.relemp) THEN arg_s_main.relemp = ''
  36. IF IsNull(arg_s_main.dscrp) THEN arg_s_main.dscrp = ''
  37. IF arg_s_main.relemp = '' THEN
  38. arg_msg = '请输入经手人'
  39. rslt = 0
  40. GOTO ext
  41. END IF
  42. SELECT Top 1 getdate() INTO :server_dt FROM u_user;
  43. IF sqlca.SQLCode <> 0 THEN
  44. rslt = 0
  45. arg_msg = "查询操作失败,日期 "
  46. GOTO ext
  47. END IF
  48. it_mxbt = UpperBound(arg_s_main.arg_s_mx)
  49. IF it_mxbt <= 0 THEN
  50. rslt = 0
  51. arg_msg = "没有正确增料明细内容"
  52. GOTO ext
  53. END IF
  54. it_mxbt2 = UpperBound(arg_s_main.arg_s_mx2)
  55. IF it_mxbt2 <= 0 THEN
  56. rslt = 0
  57. arg_msg = "没有正确销售订单明细内容"
  58. GOTO ext
  59. END IF
  60. FOR i = 1 TO it_mxbt2
  61. IF arg_s_main.arg_s_mx2[i].relid = 0 &
  62. OR arg_s_main.arg_s_mx2[i].relprintid = 0 &
  63. OR arg_s_main.arg_s_mx2[i].mtrlid = 0 THEN
  64. rslt = 0
  65. arg_msg = "行["+string(i)+"],请选择销售订单明细内容"
  66. GOTO ext
  67. END IF
  68. //查订单
  69. SELECT taskcode
  70. INTO :ls_taskcode
  71. FROM u_saletask
  72. WHERE taskid = :arg_s_main.arg_s_mx2[i].relid
  73. USING sqlca;
  74. IF sqlca.SQLCode <> 0 THEN
  75. rslt = 0
  76. arg_msg = "查询销售订单明细内容信息失败"+"~n"+sqlca.SQLErrText
  77. GOTO ext
  78. END IF
  79. //查订单
  80. SELECT scllflag
  81. INTO :ll_scllflag
  82. FROM u_saletaskmx
  83. WHERE taskid = :arg_s_main.arg_s_mx2[i].relid
  84. AND printid = :arg_s_main.arg_s_mx2[i].relprintid
  85. AND mtrlid = :arg_s_main.arg_s_mx2[i].mtrlid
  86. USING sqlca;
  87. IF sqlca.SQLCode <> 0 THEN
  88. rslt = 0
  89. arg_msg = "查询销售订单明细内容信息失败"+"~n"+sqlca.SQLErrText
  90. GOTO ext
  91. END IF
  92. IF ll_scllflag = 0 THEN
  93. rslt = 0
  94. arg_msg = "行["+string(i)+"],销售订单["+ls_taskcode+"]未用料审"
  95. GOTO ext
  96. END IF
  97. //查物料
  98. SELECT Count(*)
  99. INTO :cnt
  100. FROM u_mtrldef
  101. WHERE mtrlid = :arg_s_main.arg_s_mx2[i].mtrlid
  102. USING sqlca;
  103. IF sqlca.SQLCode <> 0 THEN
  104. rslt = 0
  105. arg_msg = "查询销售订单明细物料资料信息失败"+"~n"+sqlca.SQLErrText
  106. GOTO ext
  107. END IF
  108. IF cnt = 0 THEN
  109. rslt = 0
  110. arg_msg = "行["+string(i)+"],销售订单明细物料资料不存在"
  111. GOTO ext
  112. END IF
  113. NEXT
  114. IF arg_s_main.billid = 0 THEN
  115. ll_billid = f_sys_scidentity(arg_s_main.scid,"u_OrderRqMtrl_chng","billid",arg_msg,FALSE,sqlca)
  116. IF ll_billid <= 0 THEN
  117. rslt = 0
  118. GOTO ext
  119. END IF
  120. IF f_get_sccode(arg_s_main.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  121. rslt = 0
  122. GOTO ext
  123. END IF
  124. ls_billcode = getid(arg_s_main.scid,ls_sccode + 'OG',Date(server_dt),FALSE,sqlca)
  125. IF ls_billcode = "err" THEN
  126. rslt = 0
  127. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  128. GOTO ext
  129. END IF
  130. INSERT INTO u_OrderRqMtrl_chng
  131. (scid,
  132. billid,
  133. billcode,
  134. billdate,
  135. relcode,
  136. relemp,
  137. dscrp,
  138. opdate,
  139. opemp,
  140. CreateBomFlag)
  141. VALUES
  142. (:arg_s_main.scid,
  143. :ll_billid,
  144. :ls_billcode,
  145. :arg_s_main.billdate,
  146. :arg_s_main.relcode,
  147. :arg_s_main.relemp,
  148. :arg_s_main.dscrp,
  149. getdate(),
  150. :arg_opemp,
  151. :arg_s_main.CreateBomFlag);
  152. IF sqlca.SQLCode <> 0 THEN
  153. rslt = 0
  154. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  155. GOTO ext
  156. END IF
  157. uo_scid = arg_s_main.scid
  158. uo_billid = ll_billid
  159. uo_billcode = ls_billcode
  160. ELSE
  161. UPDATE u_OrderRqMtrl_chng
  162. SET billdate = :arg_s_main.billdate,
  163. relemp = :arg_s_main.relemp,
  164. dscrp = :arg_s_main.dscrp,
  165. relcode = :arg_s_main.relcode,
  166. moddate = getdate(),
  167. modemp = :arg_opemp,
  168. CreateBomFlag = :arg_s_main.CreateBomFlag
  169. WHERE scid = :uo_scid
  170. AND billid = :uo_billid
  171. AND flag = 0 ;
  172. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  173. rslt = 0
  174. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  175. GOTO ext
  176. END IF
  177. DELETE FROM u_OrderRqMtrl_chngmx2
  178. WHERE scid = :uo_scid
  179. AND billid = :uo_billid;
  180. IF sqlca.SQLCode <> 0 THEN
  181. rslt = 0
  182. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  183. GOTO ext
  184. END IF
  185. DELETE FROM u_OrderRqMtrl_chngmx
  186. WHERE scid = :uo_scid
  187. AND billid = :uo_billid;
  188. IF sqlca.SQLCode <> 0 THEN
  189. rslt = 0
  190. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  191. GOTO ext
  192. END IF
  193. //uo_billid = arg_s_main.billid
  194. END IF
  195. FOR i = 1 TO it_mxbt2
  196. INSERT INTO u_OrderRqMtrl_chngmx2
  197. (scid,
  198. billid,
  199. printid,
  200. mtrlid,
  201. relid,
  202. relprintid,
  203. relcode)
  204. VALUES
  205. (:uo_scid,
  206. :uo_billid,
  207. :arg_s_main.arg_s_mx2[i].printid,
  208. :arg_s_main.arg_s_mx2[i].mtrlid,
  209. :arg_s_main.arg_s_mx2[i].relid,
  210. :arg_s_main.arg_s_mx2[i].relprintid,
  211. :arg_s_main.arg_s_mx2[i].relcode);
  212. IF sqlca.SQLCode <> 0 THEN
  213. rslt = 0
  214. uo_billid = arg_s_main.billid
  215. arg_msg = "因网络或其它原因导致插入销售订单明细操作失败"+"~n"+sqlca.SQLErrText
  216. GOTO ext
  217. END IF
  218. NEXT
  219. FOR i = 1 TO it_mxbt
  220. INSERT INTO u_OrderRqMtrl_chngmx
  221. (scid,
  222. billid,
  223. printid,
  224. mtrlid,
  225. truerqqty,
  226. rqqty,
  227. wrkgrpid,
  228. plantype,
  229. status,
  230. woodcode,
  231. pcode,
  232. plancode)
  233. VALUES
  234. (:uo_scid,
  235. :uo_billid,
  236. :arg_s_main.arg_s_mx[i].printid,
  237. :arg_s_main.arg_s_mx[i].mtrlid,
  238. :arg_s_main.arg_s_mx[i].truerqqty,
  239. :arg_s_main.arg_s_mx[i].rqqty,
  240. :arg_s_main.arg_s_mx[i].wrkgrpid,
  241. :arg_s_main.arg_s_mx[i].plantype,
  242. :arg_s_main.arg_s_mx[i].status,
  243. :arg_s_main.arg_s_mx[i].woodcode,
  244. :arg_s_main.arg_s_mx[i].pcode,
  245. :arg_s_main.arg_s_mx[i].plancode);
  246. IF sqlca.SQLCode <> 0 THEN
  247. rslt = 0
  248. uo_billid = arg_s_main.billid
  249. arg_msg = "因网络或其它原因导致插入增料明细操作失败"+"~n"+sqlca.SQLErrText
  250. GOTO ext
  251. END IF
  252. NEXT
  253. ext:
  254. IF rslt = 0 THEN
  255. ROLLBACK;
  256. ELSEIF arg_ifcommit AND rslt = 1 THEN
  257. COMMIT;
  258. END IF
  259. RETURN rslt
  260. end function
  261. public function integer getinfo (long arg_scid, long arg_billid, ref s_order_ml_rqmtrl_chngmx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  262. Long i = 1,no_mxcheck = 0
  263. IF arg_billid <= 0 THEN
  264. rslt = 0
  265. arg_msg = '错误单据唯一码'
  266. GOTO ext
  267. END IF
  268. //用游标读取明细
  269. DECLARE cur_mx CURSOR FOR
  270. SELECT u_OrderRqMtrl_chngmx.scid,
  271. u_OrderRqMtrl_chngmx.billid,
  272. u_OrderRqMtrl_chngmx.printid,
  273. u_OrderRqMtrl_chngmx.mtrlid,
  274. u_OrderRqMtrl_chngmx.truerqqty,
  275. u_OrderRqMtrl_chngmx.rqqty,
  276. u_OrderRqMtrl_chngmx.wrkgrpid,
  277. u_OrderRqMtrl_chngmx.plantype,
  278. u_OrderRqMtrl_chngmx.status,
  279. u_OrderRqMtrl_chngmx.woodcode,
  280. u_OrderRqMtrl_chngmx.pcode,
  281. u_mtrldef.mtrlcode,
  282. u_OrderRqMtrl_chngmx.plancode
  283. FROM u_OrderRqMtrl_chngmx inner join u_mtrldef
  284. on u_OrderRqMtrl_chngmx.mtrlid = u_mtrldef.mtrlid
  285. WHERE u_OrderRqMtrl_chngmx.scid = :arg_scid
  286. and u_OrderRqMtrl_chngmx.billid = :arg_billid
  287. Order By u_OrderRqMtrl_chngmx.printid;
  288. OPEN cur_mx;
  289. FETCH cur_mx INTO
  290. :arg_ref_mx[i].scid,
  291. :arg_ref_mx[i].billid,
  292. :arg_ref_mx[i].printid,
  293. :arg_ref_mx[i].mtrlid,
  294. :arg_ref_mx[i].truerqqty,
  295. :arg_ref_mx[i].rqqty,
  296. :arg_ref_mx[i].wrkgrpid,
  297. :arg_ref_mx[i].plantype,
  298. :arg_ref_mx[i].status,
  299. :arg_ref_mx[i].woodcode,
  300. :arg_ref_mx[i].pcode,
  301. :arg_ref_mx[i].mtrlcode,
  302. :arg_ref_mx[i].plancode;
  303. DO WHILE sqlca.SQLCode = 0
  304. i++
  305. FETCH cur_mx INTO
  306. :arg_ref_mx[i].scid,
  307. :arg_ref_mx[i].billid,
  308. :arg_ref_mx[i].printid,
  309. :arg_ref_mx[i].mtrlid,
  310. :arg_ref_mx[i].truerqqty,
  311. :arg_ref_mx[i].rqqty,
  312. :arg_ref_mx[i].wrkgrpid,
  313. :arg_ref_mx[i].plantype,
  314. :arg_ref_mx[i].status,
  315. :arg_ref_mx[i].woodcode,
  316. :arg_ref_mx[i].pcode,
  317. :arg_ref_mx[i].mtrlcode,
  318. :arg_ref_mx[i].plancode;
  319. LOOP
  320. CLOSE cur_mx;
  321. //检验明细是否读入完整
  322. SELECT count(*) INTO :no_mxcheck
  323. FROM u_OrderRqMtrl_chngmx
  324. Where scid = :arg_scid
  325. and billid = :arg_billid;
  326. IF sqlca.SQLCode <> 0 THEN
  327. rslt = 0
  328. arg_msg = "查询操作失败,单据明细数量"
  329. GOTO ext
  330. END IF
  331. IF i <> (no_mxcheck + 1) THEN
  332. rslt = 0
  333. arg_msg = "查询操作失败,单据明细"
  334. GOTO ext
  335. END IF
  336. arg_arr_cnt = i - 1
  337. ext:
  338. RETURN rslt
  339. end function
  340. public function integer audit (long arg_scid, long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  341. Int li_flag
  342. Long i, j, k
  343. Int li_CreateBomFlag
  344. uo_order_ml_mrp uo_ml_mrp
  345. uo_ml_mrp = CREATE uo_order_ml_mrp
  346. uo_mtrl_structure uo_mtrl_str
  347. uo_mtrl_str = CREATE uo_mtrl_structure
  348. IF arg_billid <= 0 THEN
  349. rslt = 0
  350. arg_msg = '错误单据唯一码'
  351. GOTO ext
  352. END IF
  353. IF p_getflag(arg_scid, arg_billid,li_flag,arg_msg) = 0 THEN
  354. rslt = 0
  355. GOTO ext
  356. END IF
  357. IF li_flag <> 0 THEN
  358. rslt = 0
  359. arg_msg = '单据不是在待审核状态,不可以审核'
  360. GOTO ext
  361. END IF
  362. //是否添加BOM
  363. SELECT CreateBomFlag
  364. INTO :li_CreateBomFlag
  365. FROM u_OrderRqMtrl_chng
  366. WHERE scid = :arg_scid
  367. AND billid = :arg_billid;
  368. IF sqlca.SQLCode <> 0 THEN
  369. arg_msg = '查询单据信息失败,'+sqlca.SQLErrText
  370. rslt = 0
  371. GOTO ext
  372. END IF
  373. Long ll_relid, ll_relprintid, ll_mtrlid
  374. DateTime serdate
  375. SELECT Top 1 getdate() INTO :serdate FROM u_user;
  376. IF sqlca.SQLCode <> 0 THEN
  377. arg_msg = '查询服务器时间失败'
  378. rslt = 0
  379. GOTO ext
  380. END IF
  381. s_order_ml_rqmtrl_chngmx s_mx[]
  382. Long ll_arr_cnt
  383. s_order_ml_rqmtrl_chngmx2 s_mx2[]
  384. Long ll_arr_cnt2
  385. IF getinfo(arg_scid,arg_billid,s_mx,ll_arr_cnt,arg_msg) = 0 THEN
  386. rslt = 0
  387. GOTO ext
  388. END IF
  389. IF getinfo2(arg_scid,arg_billid,s_mx2,ll_arr_cnt2,arg_msg) = 0 THEN
  390. rslt = 0
  391. GOTO ext
  392. END IF
  393. //订单运算,新增物料
  394. Long ch_tree, ch, ch_scll
  395. s_order_ml_rqmtrl s_mtrl,s_mtrl_tree,s_mtrl_scll, s_null
  396. Dec lde_qty
  397. String ls_pfcode, ls_pfgroup
  398. Long ll_mxcnt, ll_printid
  399. s_structuremx s_mx_str[], s_null_str[]
  400. FOR j = 1 TO ll_arr_cnt2
  401. ll_relid = s_mx2[j].relid
  402. ll_relprintid = s_mx2[j].relprintid
  403. ll_mtrlid = s_mx2[j].mtrlid
  404. //订单排产数量
  405. SELECT orderqty
  406. INTO :lde_qty
  407. FROM u_saletaskmx
  408. WHERE taskid = :ll_relid
  409. AND printid = :ll_relprintid
  410. AND mtrlid = :ll_mtrlid;
  411. IF sqlca.SQLCode <> 0 THEN
  412. rslt = 0
  413. arg_msg = "订单["+s_mx2[j].relcode+"]"+"查询销售订单信息操作失败"+"~n"+sqlca.SQLErrText
  414. GOTO ext
  415. END IF
  416. s_mtrl = s_null
  417. s_mtrl_tree = s_null
  418. s_mtrl_scll = s_null
  419. ch_tree = 0
  420. ch = 0
  421. ch_scll = 0
  422. FOR i = 1 TO ll_arr_cnt
  423. ch_tree++
  424. s_mtrl_tree.scid[ch_tree] = arg_scid
  425. s_mtrl_tree.taskid[ch_tree] = ll_relid
  426. s_mtrl_tree.printid[ch_tree] = ll_relprintid
  427. s_mtrl_tree.mtrlid[ch_tree] = s_mx[i].mtrlid
  428. s_mtrl_tree.ifmainmtrlid[ch_tree] = 0
  429. s_mtrl_tree.plantype[ch_tree] = s_mx[i].plantype
  430. s_mtrl_tree.qty[ch_tree] = s_mx[i].rqqty * lde_qty
  431. s_mtrl_tree.cmplqty[ch_tree] = s_mx[i].truerqqty * lde_qty
  432. s_mtrl_tree.mqty[ch_tree] = 0
  433. s_mtrl_tree.bqty[ch_tree] = 0
  434. s_mtrl_tree.wqty[ch_tree] = 0
  435. s_mtrl_tree.pqty[ch_tree] = 0
  436. s_mtrl_tree.wrkgrpid_scll[ch_tree] = s_mx[i].wrkgrpid
  437. s_mtrl_tree.lp[ch_tree] = 1
  438. s_mtrl_tree.status[ch_tree] = s_mx[i].status
  439. s_mtrl_tree.woodcode[ch_tree] = s_mx[i].woodcode
  440. s_mtrl_tree.pcode[ch_tree] = s_mx[i].pcode
  441. s_mtrl_tree.pmtrlid[ch_tree] = ll_mtrlid
  442. s_mtrl_tree.ifchanged[ch_tree] = 0
  443. s_mtrl_tree.pfgroup[ch_tree] = ""
  444. s_mtrl_tree.plancode[ch_tree] = s_mx[i].plancode
  445. IF s_mx[i].rqqty > 0 OR s_mx[i].truerqqty > 0 THEN
  446. ch++
  447. s_mtrl.scid[ch] = arg_scid
  448. s_mtrl.taskid[ch] = ll_relid
  449. s_mtrl.printid[ch] = ll_relprintid
  450. s_mtrl.mtrlid[ch] = s_mx[i].mtrlid
  451. s_mtrl.plantype[ch] = s_mx[i].plantype
  452. s_mtrl.qty[ch] = s_mx[i].rqqty * lde_qty
  453. s_mtrl.cmplqty[ch] = s_mx[i].truerqqty * lde_qty
  454. s_mtrl.mqty[ch] = 0
  455. s_mtrl.bqty[ch] = 0
  456. s_mtrl.wqty[ch] = 0
  457. s_mtrl.pqty[ch] = 0
  458. s_mtrl.wrkgrpid_scll[ch] = s_mx[i].wrkgrpid
  459. s_mtrl.status[ch] = s_mx[i].status
  460. s_mtrl.woodcode[ch] = s_mx[i].woodcode
  461. s_mtrl.pcode[ch] = s_mx[i].pcode
  462. s_mtrl.ifchanged[ch] = 0
  463. s_mtrl.plancode[ch] = s_mx[i].plancode
  464. END IF
  465. IF s_mx[i].rqqty > 0 THEN //领料
  466. ch_scll++
  467. s_mtrl_scll.scid[ch_scll] = arg_scid
  468. s_mtrl_scll.taskid[ch_scll] = ll_relid
  469. s_mtrl_scll.printid[ch_scll] = ll_relprintid
  470. s_mtrl_scll.mtrlid[ch_scll] = s_mx[i].mtrlid
  471. s_mtrl_scll.qty[ch_scll] = s_mx[i].rqqty * lde_qty
  472. s_mtrl_scll.cmplqty[ch_scll] = s_mx[i].truerqqty * lde_qty
  473. s_mtrl_scll.status[ch_scll] = s_mx[i].status
  474. s_mtrl_scll.woodcode[ch_scll] = s_mx[i].woodcode
  475. s_mtrl_scll.pcode[ch_scll] = s_mx[i].pcode
  476. s_mtrl_scll.ifchanged[ch_scll] = 0
  477. s_mtrl_scll.plancode[ch_scll] = s_mx[i].plancode
  478. END IF
  479. NEXT
  480. IF uo_ml_mrp.uof_add_rqmtrl_more(s_mtrl,FALSE,arg_msg) = 0 THEN
  481. rslt = 0
  482. arg_msg = "订单["+s_mx2[j].relcode+"]"+'保存物料需求表失败,'+arg_msg
  483. GOTO ext
  484. END IF
  485. IF uo_ml_mrp.uof_add_rqmtrl_tree_more(s_mtrl_tree,FALSE,arg_msg) = 0 THEN
  486. rslt = 0
  487. arg_msg = "订单["+s_mx2[j].relcode+"]"+'保存物料需求结构表失败,'+arg_msg
  488. GOTO ext
  489. END IF
  490. IF uo_ml_mrp.uof_add_rqmtrl_scll_more(s_mtrl_scll,FALSE,arg_msg) = 0 THEN
  491. rslt = 0
  492. arg_msg = "订单["+s_mx2[j].relcode+"]"+'保存用料明细表失败,'+arg_msg
  493. GOTO ext
  494. END IF
  495. NEXT
  496. //将物料增加到清单中
  497. IF li_CreateBomFlag = 1 THEN
  498. FOR j = 1 TO ll_arr_cnt2
  499. ll_relid = s_mx2[j].relid
  500. ll_relprintid = s_mx2[j].relprintid
  501. ll_mtrlid = s_mx2[j].mtrlid
  502. // lde_qty =
  503. //如果有相同产品,只执行第一次
  504. FOR k = 1 TO j - 1
  505. IF s_mx2[k].mtrlid = s_mx2[j].mtrlid THEN
  506. GOTO nxtmtrl
  507. END IF
  508. NEXT
  509. // SELECT saleqty
  510. // INTO :lde_qty
  511. // FROM u_saletaskmx
  512. // WHERE taskid = :ll_relid
  513. // AND printid = :ll_relprintid
  514. // AND mtrlid = :ll_mtrlid;
  515. // IF sqlca.SQLCode <> 0 THEN
  516. // rslt = 0
  517. // arg_msg = "因网络或其它原因导致查询销售订单信息操作失败"+"~n"+sqlca.SQLErrText
  518. // GOTO ext
  519. // END IF
  520. //
  521. // IF lde_qty = 0 THEN
  522. // rslt = 0
  523. // arg_msg = "销售订单明细行["+String(j)+"],数量为0"
  524. // GOTO ext
  525. // END IF
  526. uo_mtrl_str.ul_mtrlid = ll_mtrlid
  527. ls_pfcode = "组装"
  528. ls_pfgroup = ""
  529. ll_mxcnt = 0
  530. s_mx_str = s_null_str
  531. ll_printid = uo_mtrl_str.uof_get_maxprintid(ll_mtrlid,ls_pfcode)
  532. FOR i = 1 TO ll_arr_cnt
  533. //检查是否存在该物料
  534. IF uo_mtrl_str.uof_chk_prdpf(ll_mtrlid,ls_pfcode,ls_pfgroup,s_mx[i].mtrlid) = 0 THEN
  535. CONTINUE //如果有,跳出
  536. END IF
  537. IF uo_mtrl_str.uof_chk_rand(s_mx[i].mtrlid) = 0 THEN
  538. rslt = 0
  539. arg_msg = "销售订单明细行["+String(j)+"],物料明细行["+String(i)+"],发现环,不能添加清单"
  540. GOTO ext
  541. END IF
  542. ll_mxcnt++
  543. ll_printid++
  544. s_mx_str[ll_mxcnt].mtrlid = s_mx[i].mtrlid
  545. s_mx_str[ll_mxcnt].sonscale = s_mx[i].rqqty
  546. s_mx_str[ll_mxcnt].sonloss = 0
  547. s_mx_str[ll_mxcnt].sondecloss = 0
  548. s_mx_str[ll_mxcnt].sonahead = 0
  549. s_mx_str[ll_mxcnt].dscrp = ''
  550. s_mx_str[ll_mxcnt].updownrate = 0
  551. s_mx_str[ll_mxcnt].ifreputate = 0
  552. s_mx_str[ll_mxcnt].ifover = 0
  553. s_mx_str[ll_mxcnt].pfgroup = ''
  554. s_mx_str[ll_mxcnt].pfgroupqty = 0
  555. s_mx_str[ll_mxcnt].pfgroupmode = ''
  556. s_mx_str[ll_mxcnt].promode = ''
  557. s_mx_str[ll_mxcnt].printid = ll_printid
  558. s_mx_str[ll_mxcnt].wrkgrpid = s_mx[i].wrkgrpid
  559. s_mx_str[ll_mxcnt].status = s_mx[i].status
  560. s_mx_str[ll_mxcnt].pcode = s_mx[i].pcode
  561. s_mx_str[ll_mxcnt].woodcode = s_mx[i].woodcode
  562. NEXT
  563. IF ll_mxcnt > 0 THEN
  564. IF uo_mtrl_str.uof_prdpf_add(ll_mtrlid, ls_pfcode, s_mx_str, FALSE, arg_msg) = 0 THEN
  565. rslt = 0
  566. arg_msg = "销售订单明细行["+String(j)+"],物料明细行["+String(i)+"]~r~n"+arg_msg
  567. GOTO ext
  568. END IF
  569. END IF
  570. nxtmtrl:
  571. NEXT
  572. END IF
  573. //更新审核标记
  574. UPDATE u_OrderRqMtrl_chng
  575. SET auditingrep = :arg_opemp,
  576. auditingdate = getdate(),
  577. flag = 1
  578. WHERE scid = :arg_scid
  579. AND billid = :arg_billid
  580. AND flag = 0;
  581. IF sqlca.SQLCode <> 0 THEN
  582. rslt = 0
  583. arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  584. GOTO ext
  585. ELSEIF sqlca.SQLNRows = 0 THEN
  586. rslt = 0
  587. arg_msg = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  588. GOTO ext
  589. END IF
  590. ext:
  591. IF rslt = 0 THEN
  592. ROLLBACK;
  593. ELSEIF rslt = 1 AND arg_ifcommit THEN
  594. COMMIT;
  595. END IF
  596. DESTROY uo_ml_mrp
  597. DESTROY uo_mtrl_str
  598. RETURN rslt
  599. end function
  600. public function integer p_getflag (long arg_scid, long arg_billid, ref integer arg_flag, ref string arg_msg);Int rslt = 1
  601. SELECT flag
  602. INTO :arg_flag
  603. FROM u_OrderRqMtrl_chng
  604. WHERE scid = :arg_scid
  605. and billid = :arg_billid;
  606. IF sqlca.SQLCode <> 0 THEN
  607. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  608. rslt = 0
  609. GOTO ext
  610. END IF
  611. ext:
  612. RETURN rslt
  613. end function
  614. public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  615. Int li_flag
  616. IF arg_billid <= 0 THEN
  617. rslt = 0
  618. arg_msg = '错误单据唯一码'
  619. GOTO ext
  620. END IF
  621. IF p_getflag(arg_scid, arg_billid,li_flag,arg_msg) = 0 THEN
  622. rslt = 0
  623. GOTO ext
  624. END IF
  625. IF li_flag = 1 THEN
  626. rslt = 0
  627. arg_msg = '单据不是在待审状态,不可以删除'
  628. GOTO ext
  629. END IF
  630. DELETE FROM u_OrderRqMtrl_chng
  631. WHERE scid = :arg_scid
  632. and billid = :arg_billid;
  633. IF sqlca.SQLCode <> 0 THEN
  634. rslt = 0
  635. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  636. GOTO ext
  637. END IF
  638. DELETE FROM u_OrderRqMtrl_chngmx2
  639. WHERE scid = :arg_scid
  640. and billid = :arg_billid;
  641. IF sqlca.SQLCode <> 0 THEN
  642. rslt = 0
  643. arg_msg = "删除单据销售订单明细操作失败"+"~n"+sqlca.SQLErrText
  644. GOTO ext
  645. END IF
  646. DELETE FROM u_OrderRqMtrl_chngmx
  647. WHERE scid = :arg_scid
  648. and billid = :arg_billid;
  649. IF sqlca.SQLCode <> 0 THEN
  650. rslt = 0
  651. arg_msg = "删除单据增料明细操作失败"+"~n"+sqlca.SQLErrText
  652. GOTO ext
  653. END IF
  654. ext:
  655. IF rslt = 0 THEN
  656. ROLLBACK;
  657. ELSEIF rslt = 1 AND arg_ifcommit THEN
  658. COMMIT;
  659. END IF
  660. RETURN rslt
  661. end function
  662. public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  663. Int li_flag
  664. IF arg_newdescppart = '' THEN
  665. rslt = 0
  666. arG_MSG = "要添加内容为空,操作取消"
  667. GOTO ext
  668. END IF
  669. IF p_getflag(arg_scid, arg_billid,li_flag,arG_MSG) = 0 THEN
  670. rslt = 0
  671. GOTO ext
  672. END IF
  673. IF li_flag = 0 THEN
  674. rslt = 0
  675. arG_MSG = "待审核状态下不可用"
  676. GOTO ext
  677. END IF
  678. UPDATE u_OrderRqMtrl_chng
  679. SET DSCRP = DSCRP+' '+:arg_newdescppart
  680. WHERE scid = :arg_scid
  681. and billid = :arg_billid;
  682. IF SQLCA.SQLCode <> 0 THEN
  683. rslt = 0
  684. arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  685. GOTO ext
  686. END IF
  687. ext:
  688. IF rslt = 0 THEN
  689. ROLLBACK;
  690. ELSEIF rslt = 1 AND arg_ifcommit THEN
  691. COMMIT;
  692. END IF
  693. Return (rslt)
  694. end function
  695. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1
  696. Int li_flag
  697. Long cnt
  698. IF arg_billid <= 0 THEN
  699. rslt = 0
  700. arg_msg = '错误单据唯一码'
  701. GOTO ext
  702. END IF
  703. IF p_getflag(arg_scid,arg_billid,li_flag,arg_msg) = 0 THEN
  704. rslt = 0
  705. GOTO ext
  706. END IF
  707. IF li_flag = 1 THEN
  708. rslt = 0
  709. arg_msg = '单据已经审核,不可以再修改'
  710. GOTO ext
  711. END IF
  712. uo_scid = arg_scid
  713. uo_billid = arg_billid
  714. ext:
  715. RETURN rslt
  716. end function
  717. public function integer getinfo2 (long arg_scid, long arg_billid, ref s_order_ml_rqmtrl_chngmx2 arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  718. Long i = 1,no_mxcheck = 0
  719. IF arg_billid <= 0 THEN
  720. rslt = 0
  721. arg_msg = '错误单据唯一码'
  722. GOTO ext
  723. END IF
  724. //用游标读取明细2
  725. DECLARE cur_mx CURSOR FOR
  726. SELECT scid,
  727. billid,
  728. printid,
  729. mtrlid,
  730. relid,
  731. relprintid,
  732. relcode
  733. FROM u_OrderRqMtrl_chngmx2
  734. WHERE scid = :arg_scid
  735. and billid = :arg_billid
  736. Order By printid;
  737. OPEN cur_mx;
  738. FETCH cur_mx INTO
  739. :arg_ref_mx[i].scid,
  740. :arg_ref_mx[i].billid,
  741. :arg_ref_mx[i].printid,
  742. :arg_ref_mx[i].mtrlid,
  743. :arg_ref_mx[i].relid,
  744. :arg_ref_mx[i].relprintid,
  745. :arg_ref_mx[i].relcode;
  746. DO WHILE sqlca.SQLCode = 0
  747. i++
  748. FETCH cur_mx INTO
  749. :arg_ref_mx[i].scid,
  750. :arg_ref_mx[i].billid,
  751. :arg_ref_mx[i].printid,
  752. :arg_ref_mx[i].mtrlid,
  753. :arg_ref_mx[i].relid,
  754. :arg_ref_mx[i].relprintid,
  755. :arg_ref_mx[i].relcode;
  756. LOOP
  757. CLOSE cur_mx;
  758. //检验明细2是否读入完整
  759. SELECT count(*) INTO :no_mxcheck
  760. FROM u_OrderRqMtrl_chngmx2
  761. Where scid = :arg_scid
  762. and billid = :arg_billid;
  763. IF sqlca.SQLCode <> 0 THEN
  764. rslt = 0
  765. arg_msg = "查询操作失败,单据明细2数量"
  766. GOTO ext
  767. END IF
  768. IF i <> (no_mxcheck + 1) THEN
  769. rslt = 0
  770. arg_msg = "查询操作失败,单据明细2"
  771. GOTO ext
  772. END IF
  773. arg_arr_cnt = i - 1
  774. ext:
  775. RETURN rslt
  776. end function
  777. public function integer uf_add_bom (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  778. Int li_flag
  779. Long i, j, k
  780. Int li_CreateBomFlag
  781. uo_mtrl_structure uo_mtrl_str
  782. uo_mtrl_str = CREATE uo_mtrl_structure
  783. IF arg_billid <= 0 THEN
  784. rslt = 0
  785. arg_msg = '错误单据唯一码'
  786. GOTO ext
  787. END IF
  788. IF p_getflag(arg_scid, arg_billid,li_flag,arg_msg) = 0 THEN
  789. rslt = 0
  790. GOTO ext
  791. END IF
  792. IF li_flag <> 1 THEN
  793. rslt = 0
  794. arg_msg = '单据不是在已审核状态,不可以手动添加清单'
  795. GOTO ext
  796. END IF
  797. //是否添加BOM
  798. SELECT CreateBomFlag
  799. INTO :li_CreateBomFlag
  800. FROM u_OrderRqMtrl_chng
  801. WHERE scid = :arg_scid
  802. AND billid = :arg_billid;
  803. IF sqlca.SQLCode <> 0 THEN
  804. arg_msg = '查询单据信息失败,'+sqlca.SQLErrText
  805. rslt = 0
  806. GOTO ext
  807. END IF
  808. if li_CreateBomFlag = 1 then
  809. arg_msg = '单据已经添加清单'
  810. rslt = 0
  811. GOTO ext
  812. end if
  813. Long ll_relid, ll_relprintid, ll_mtrlid
  814. s_order_ml_rqmtrl_chngmx s_mx[]
  815. Long ll_arr_cnt
  816. s_order_ml_rqmtrl_chngmx2 s_mx2[]
  817. Long ll_arr_cnt2
  818. IF getinfo(arg_scid,arg_billid,s_mx,ll_arr_cnt,arg_msg) = 0 THEN
  819. rslt = 0
  820. GOTO ext
  821. END IF
  822. IF getinfo2(arg_scid,arg_billid,s_mx2,ll_arr_cnt2,arg_msg) = 0 THEN
  823. rslt = 0
  824. GOTO ext
  825. END IF
  826. //订单运算,新增物料
  827. Long ch_tree, ch, ch_scll
  828. s_order_ml_rqmtrl s_mtrl,s_mtrl_tree,s_mtrl_scll, s_null
  829. Dec lde_qty
  830. String ls_pfcode, ls_pfgroup
  831. Long ll_mxcnt, ll_printid
  832. s_structuremx s_mx_str[], s_null_str[]
  833. //将物料增加到清单中
  834. IF li_CreateBomFlag = 0 THEN
  835. FOR j = 1 TO ll_arr_cnt2
  836. ll_relid = s_mx2[j].relid
  837. ll_relprintid = s_mx2[j].relprintid
  838. ll_mtrlid = s_mx2[j].mtrlid
  839. // lde_qty =
  840. //如果有相同产品,只执行第一次
  841. FOR k = 1 TO j - 1
  842. IF s_mx2[k].mtrlid = s_mx2[j].mtrlid THEN
  843. GOTO nxtmtrl
  844. END IF
  845. NEXT
  846. uo_mtrl_str.ul_mtrlid = ll_mtrlid
  847. ls_pfcode = "组装"
  848. ls_pfgroup = ""
  849. ll_mxcnt = 0
  850. s_mx_str = s_null_str
  851. ll_printid = uo_mtrl_str.uof_get_maxprintid(ll_mtrlid,ls_pfcode)
  852. FOR i = 1 TO ll_arr_cnt
  853. //检查是否存在该物料
  854. IF uo_mtrl_str.uof_chk_prdpf(ll_mtrlid,ls_pfcode,ls_pfgroup,s_mx[i].mtrlid) = 0 THEN
  855. CONTINUE //如果有,跳出
  856. END IF
  857. IF uo_mtrl_str.uof_chk_rand(s_mx[i].mtrlid) = 0 THEN
  858. rslt = 0
  859. arg_msg = "销售订单明细行["+String(j)+"],物料明细行["+String(i)+"],发现环,不能添加清单"
  860. GOTO ext
  861. END IF
  862. ll_mxcnt++
  863. ll_printid++
  864. s_mx_str[ll_mxcnt].mtrlid = s_mx[i].mtrlid
  865. s_mx_str[ll_mxcnt].sonscale = s_mx[i].rqqty
  866. s_mx_str[ll_mxcnt].sonloss = 0
  867. s_mx_str[ll_mxcnt].sondecloss = 0
  868. s_mx_str[ll_mxcnt].sonahead = 0
  869. s_mx_str[ll_mxcnt].dscrp = ''
  870. s_mx_str[ll_mxcnt].updownrate = 0
  871. s_mx_str[ll_mxcnt].ifreputate = 0
  872. s_mx_str[ll_mxcnt].ifover = 0
  873. s_mx_str[ll_mxcnt].pfgroup = ''
  874. s_mx_str[ll_mxcnt].pfgroupqty = 0
  875. s_mx_str[ll_mxcnt].pfgroupmode = ''
  876. s_mx_str[ll_mxcnt].promode = ''
  877. s_mx_str[ll_mxcnt].printid = ll_printid
  878. s_mx_str[ll_mxcnt].wrkgrpid = s_mx[i].wrkgrpid
  879. s_mx_str[ll_mxcnt].status = s_mx[i].status
  880. s_mx_str[ll_mxcnt].pcode = s_mx[i].pcode
  881. s_mx_str[ll_mxcnt].woodcode = s_mx[i].woodcode
  882. NEXT
  883. IF ll_mxcnt > 0 THEN
  884. IF uo_mtrl_str.uof_prdpf_add(ll_mtrlid, ls_pfcode, s_mx_str, FALSE, arg_msg) = 0 THEN
  885. rslt = 0
  886. arg_msg = "销售订单明细行["+String(j)+"],物料明细行["+String(i)+"]~r~n"+arg_msg
  887. GOTO ext
  888. END IF
  889. END IF
  890. nxtmtrl:
  891. NEXT
  892. END IF
  893. update u_OrderRqMtrl_chng
  894. set CreateBomFlag = 1
  895. WHERE scid = :arg_scid
  896. AND billid = :arg_billid;
  897. IF sqlca.SQLCode <> 0 THEN
  898. arg_msg = '查询单据信息失败,'+sqlca.SQLErrText
  899. rslt = 0
  900. GOTO ext
  901. END IF
  902. ext:
  903. IF rslt = 0 THEN
  904. ROLLBACK;
  905. ELSEIF rslt = 1 AND arg_ifcommit THEN
  906. COMMIT;
  907. END IF
  908. DESTROY uo_mtrl_str
  909. RETURN rslt
  910. end function
  911. on uo_order_ml_rqmtrl_chng.create
  912. call super::create
  913. TriggerEvent( this, "constructor" )
  914. end on
  915. on uo_order_ml_rqmtrl_chng.destroy
  916. TriggerEvent( this, "destructor" )
  917. call super::destroy
  918. end on