uo_order_ml_stop.sru 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893
  1. $PBExportHeader$uo_order_ml_stop.sru
  2. forward
  3. global type uo_order_ml_stop from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_order_ml_stop from nonvisualobject
  7. end type
  8. global uo_order_ml_stop uo_order_ml_stop
  9. type variables
  10. Long uo_billid
  11. String uo_billcode
  12. Int uo_option_order_bh_use_yc
  13. end variables
  14. forward prototypes
  15. public function integer save (s_order_ml_stop arg_stop, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  16. public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg)
  17. public function integer updatebegin (long arg_billid, ref string arg_msg)
  18. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  19. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  20. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  21. public function integer getinfo (long arg_billid, ref s_order_ml_stop_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg)
  22. public function integer getinfo_order (long arg_scid, long arg_orderid, ref s_order_ml_mx arg_order_mx[], ref long arg_cnt_arr, ref string arg_msg)
  23. end prototypes
  24. public function integer save (s_order_ml_stop arg_stop, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  25. Long cnt = 0
  26. DateTime server_dt
  27. Long ll_billid
  28. String ls_sccode,ls_billcode
  29. Long it_mxbt,i
  30. IF IsNull(arg_stop.scid) THEN arg_stop.scid = 0
  31. IF IsNull(arg_stop.billid) THEN arg_stop.billid = 0
  32. IF IsNull(arg_stop.billemp) THEN arg_stop.billemp = ''
  33. IF IsNull(arg_stop.relcode) THEN arg_stop.relcode = ''
  34. IF IsNull(arg_stop.dscrp) THEN arg_stop.dscrp = ''
  35. IF IsNull(arg_stop.orderid) THEN arg_stop.orderid = 0
  36. IF IsNull(arg_stop.oriqty) THEN arg_stop.oriqty = 0
  37. IF IsNull(arg_stop.stopqty) THEN arg_stop.stopqty = 0
  38. IF IsNull(arg_stop.ifchange) THEN arg_stop.ifchange = 0
  39. IF IsNull(arg_stop.ifstoppro) THEN arg_stop.ifstoppro = 0
  40. IF arg_stop.orderid = 0 THEN
  41. rslt = 0
  42. arg_msg = '请选择要终止数量的生产计划'
  43. GOTO ext
  44. END IF
  45. Long ll_status
  46. Decimal ld_orderqty,ld_acmpqty
  47. SELECT status,orderqty,acmpqty INTO :ll_status,:ld_orderqty,:ld_acmpqty
  48. FROM u_order_ml
  49. WHERE scid = :arg_stop.scid
  50. AND orderid = :arg_stop.orderid;
  51. IF sqlca.SQLCode <> 0 THEN
  52. rslt = 0
  53. arg_msg = '查询生产计划状态失败'+sqlca.SQLErrText
  54. GOTO ext
  55. END IF
  56. IF ll_status <> 1 THEN
  57. rslt = 0
  58. arg_msg = '生产计划不是在进行状态,不能终止数量'
  59. GOTO ext
  60. END IF
  61. arg_stop.oriqty = ld_orderqty
  62. IF ld_orderqty - ld_acmpqty < arg_stop.stopqty THEN
  63. rslt = 0
  64. arg_msg = '生产计划未完成数:'+String(ld_orderqty - ld_acmpqty,'#,##0.##########')+',不能终止数量:'+String( arg_stop.stopqty,'#,##0.##########')
  65. GOTO ext
  66. END IF
  67. IF arg_stop.billemp = '' THEN
  68. arg_msg = '请输入经手人'
  69. rslt = 0
  70. GOTO ext
  71. END IF
  72. it_mxbt = UpperBound(arg_stop.arg_s_stopmx)
  73. FOR i = 1 TO it_mxbt
  74. IF arg_stop.arg_s_stopmx[i].qty_stop > arg_stop.arg_s_stopmx[i].qty THEN
  75. rslt = 0
  76. arg_msg = '第'+String(i)+'行,终止数量不能大于原计划数量'
  77. GOTO ext
  78. END IF
  79. NEXT
  80. SELECT Top 1 getdate() INTO :server_dt FROM u_user;
  81. IF sqlca.SQLCode <> 0 THEN
  82. rslt = 0
  83. arg_msg = "查询操作失败,日期 "
  84. GOTO ext
  85. END IF
  86. IF arg_stop.billid = 0 THEN
  87. ll_billid = f_sys_scidentity(0,"u_order_ml_stop","billid",arg_msg,TRUE,id_sqlca)
  88. IF ll_billid <= 0 THEN
  89. rslt = 0
  90. GOTO ext
  91. END IF
  92. IF f_get_sccode(arg_stop.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  93. rslt = 0
  94. GOTO ext
  95. END IF
  96. ls_billcode = getid(arg_stop.scid,ls_sccode + 'OS',Date(server_dt),FALSE,sqlca)
  97. IF ls_billcode = "err" THEN
  98. rslt = 0
  99. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  100. GOTO ext
  101. END IF
  102. INSERT INTO u_order_ml_stop
  103. (scid,
  104. billid,
  105. billcode,
  106. billdate,
  107. billemp,
  108. opdate,
  109. opemp,
  110. relcode,
  111. dscrp,
  112. orderid,
  113. oriqty,
  114. stopqty,
  115. ifchange,
  116. ifstoppro)
  117. VALUES (
  118. :arg_stop.scid,
  119. :ll_billid,
  120. :ls_billcode,
  121. :arg_stop.billdate,
  122. :arg_stop.billemp,
  123. getdate(),
  124. :arg_opemp,
  125. :arg_stop.relcode,
  126. :arg_stop.dscrp,
  127. :arg_stop.orderid,
  128. :arg_stop.oriqty,
  129. :arg_stop.stopqty,
  130. :arg_stop.ifchange,
  131. :arg_stop.ifstoppro) ;
  132. IF sqlca.SQLCode <> 0 THEN
  133. rslt = 0
  134. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  135. GOTO ext
  136. END IF
  137. FOR i = 1 TO it_mxbt
  138. INSERT INTO u_order_ml_stop_mx
  139. (billid,
  140. printid,
  141. taskid,
  142. scid,
  143. orderid,
  144. taskcode,
  145. qty,
  146. cusid,
  147. taskmxid,
  148. taskscid,
  149. qty_stop)
  150. VALUES (
  151. :ll_billid,
  152. :arg_stop.arg_s_stopmx[i].printid,
  153. :arg_stop.arg_s_stopmx[i].taskid,
  154. :arg_stop.scid,
  155. :arg_stop.arg_s_stopmx[i].orderid,
  156. :arg_stop.arg_s_stopmx[i].taskcode,
  157. :arg_stop.arg_s_stopmx[i].qty,
  158. :arg_stop.arg_s_stopmx[i].cusid,
  159. :arg_stop.arg_s_stopmx[i].taskmxid,
  160. :arg_stop.arg_s_stopmx[i].taskscid,
  161. :arg_stop.arg_s_stopmx[i].qty_stop);
  162. IF sqlca.SQLCode <> 0 THEN
  163. rslt = 0
  164. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  165. GOTO ext
  166. END IF
  167. NEXT
  168. uo_billid = ll_billid
  169. uo_billcode = ls_billcode
  170. ELSE
  171. UPDATE u_order_ml_stop
  172. SET
  173. billdate = :arg_stop.billdate,
  174. billemp = :arg_stop.billemp,
  175. moddate = getdate(),
  176. modemp = :arg_opemp,
  177. relcode = :arg_stop.relcode,
  178. dscrp = :arg_stop.dscrp,
  179. orderid = :arg_stop.orderid,
  180. oriqty = :arg_stop.oriqty,
  181. stopqty = :arg_stop.stopqty,
  182. ifchange = :arg_stop.ifchange,
  183. ifstoppro = :arg_stop.ifstoppro
  184. WHERE billid = :arg_stop.billid
  185. AND flag = 0;
  186. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  187. rslt = 0
  188. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  189. GOTO ext
  190. END IF
  191. DELETE FROM u_order_ml_stop_mx
  192. WHERE billid = :arg_stop.billid;
  193. IF sqlca.SQLCode <> 0 THEN
  194. rslt = 0
  195. arg_msg = "删除原有明细操作失败"+"~n"+sqlca.SQLErrText
  196. GOTO ext
  197. END IF
  198. FOR i = 1 TO it_mxbt
  199. INSERT INTO u_order_ml_stop_mx
  200. (billid,
  201. printid,
  202. taskid,
  203. scid,
  204. orderid,
  205. taskcode,
  206. qty,
  207. cusid,
  208. taskmxid,
  209. taskscid,
  210. qty_stop)
  211. VALUES (
  212. :arg_stop.billid,
  213. :arg_stop.arg_s_stopmx[i].printid,
  214. :arg_stop.arg_s_stopmx[i].taskid,
  215. :arg_stop.scid,
  216. :arg_stop.arg_s_stopmx[i].orderid,
  217. :arg_stop.arg_s_stopmx[i].taskcode,
  218. :arg_stop.arg_s_stopmx[i].qty,
  219. :arg_stop.arg_s_stopmx[i].cusid,
  220. :arg_stop.arg_s_stopmx[i].taskmxid,
  221. :arg_stop.arg_s_stopmx[i].taskscid,
  222. :arg_stop.arg_s_stopmx[i].qty_stop);
  223. IF sqlca.SQLCode <> 0 THEN
  224. rslt = 0
  225. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  226. GOTO ext
  227. END IF
  228. NEXT
  229. uo_billid = arg_stop.billid
  230. END IF
  231. ext:
  232. IF rslt = 0 THEN
  233. ROLLBACK;
  234. ELSEIF arg_ifcommit AND rslt = 1 THEN
  235. COMMIT;
  236. END IF
  237. RETURN rslt
  238. end function
  239. public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg);Int rslt = 1
  240. SELECT flag
  241. INTO :arg_flag
  242. FROM u_order_ml_stop
  243. WHERE billid = :arg_billid;
  244. IF sqlca.SQLCode <> 0 THEN
  245. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  246. rslt = 0
  247. GOTO ext
  248. END IF
  249. ext:
  250. RETURN rslt
  251. end function
  252. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  253. Int li_flag
  254. Long cnt
  255. IF arg_billid <= 0 THEN
  256. rslt = 0
  257. arg_msg = '错误单据唯一码'
  258. GOTO ext
  259. END IF
  260. IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN
  261. rslt = 0
  262. GOTO ext
  263. END IF
  264. IF li_flag = 1 THEN
  265. rslt = 0
  266. arg_msg = '单据已经审核,不可以再修改'
  267. GOTO ext
  268. END IF
  269. ext:
  270. RETURN rslt
  271. end function
  272. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  273. Int li_flag
  274. IF arg_billid <= 0 THEN
  275. rslt = 0
  276. arg_msg = '错误单据唯一码'
  277. GOTO ext
  278. END IF
  279. IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN
  280. rslt = 0
  281. GOTO ext
  282. END IF
  283. IF li_flag = 1 THEN
  284. rslt = 0
  285. arg_msg = '单据不是在待审状态,不可以删除'
  286. GOTO ext
  287. END IF
  288. DELETE FROM u_order_ml_stop
  289. WHERE billid = :arg_billid;
  290. IF sqlca.SQLCode <> 0 THEN
  291. rslt = 0
  292. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  293. GOTO ext
  294. END IF
  295. ext:
  296. IF rslt = 0 THEN
  297. ROLLBACK;
  298. ELSEIF rslt = 1 AND arg_ifcommit THEN
  299. COMMIT;
  300. END IF
  301. RETURN rslt
  302. end function
  303. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  304. Int li_flag
  305. IF arg_newdescppart = '' THEN
  306. rslt = 0
  307. arG_MSG = "要添加内容为空,操作取消"
  308. GOTO ext
  309. END IF
  310. IF p_getflag(arg_billid,li_flag,arG_MSG) = 0 THEN
  311. rslt = 0
  312. GOTO ext
  313. END IF
  314. IF li_flag = 0 THEN
  315. rslt = 0
  316. arG_MSG = "待审核状态下不可用"
  317. GOTO ext
  318. END IF
  319. UPDATE u_order_ml_stop
  320. SET DSCRP = DSCRP+' '+:arg_newdescppart
  321. WHERE u_order_ml_stop.billid = :arg_billid;
  322. IF SQLCA.SQLCode <> 0 THEN
  323. rslt = 0
  324. arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  325. GOTO ext
  326. END IF
  327. ext:
  328. IF rslt = 0 THEN
  329. ROLLBACK;
  330. ELSEIF rslt = 1 AND arg_ifcommit THEN
  331. COMMIT;
  332. END IF
  333. Return (rslt)
  334. end function
  335. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  336. Int li_flag
  337. Long ll_i
  338. Long ll_arr_cnt
  339. Decimal ld_stopqty,ld_stopqty_ori
  340. datastore ds_pro
  341. ds_pro = Create datastore
  342. ds_pro.DataObject = 'ds_order_ml_stop_proqty'
  343. ds_pro.SetTransObject(sqlca)
  344. uo_saletask uo_task
  345. uo_task = Create uo_saletask
  346. uo_task.commit_transaction = sqlca
  347. uo_order_ml uo_order
  348. uo_order = Create uo_order_ml
  349. IF uo_option_order_bh_use_yc = -1000 THEN
  350. rslt = 0
  351. arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!'
  352. GOTO ext
  353. END IF
  354. IF arg_billid <= 0 THEN
  355. rslt = 0
  356. arg_msg = '错误单据唯一码'
  357. GOTO ext
  358. END IF
  359. IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN
  360. rslt = 0
  361. GOTO ext
  362. END IF
  363. IF li_flag <> 0 THEN
  364. rslt = 0
  365. arg_msg = '单据不是在待审核状态,不可以再审'
  366. GOTO ext
  367. END IF
  368. //更新审核标记
  369. UPDATE u_order_ml_stop
  370. SET auditemp = :arg_opemp,
  371. auditdate = getdate(),
  372. flag = 1
  373. WHERE billid = :arg_billid
  374. And flag = 0;
  375. IF sqlca.SQLCode <> 0 THEN
  376. rslt = 0
  377. arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  378. GOTO ext
  379. ELSEIF sqlca.SQLNRows = 0 THEN
  380. rslt = 0
  381. arg_msg = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  382. GOTO ext
  383. END IF
  384. //更新计划数量,需求表,领料明细
  385. Long ll_scid,ll_orderid
  386. Decimal ld_orderqty,ld_acmpqty,ld_stopqty_zl
  387. Long ll_ordertype
  388. Int li_ifchange,li_ifstoppro
  389. SELECT stopqty,scid,orderid,ifchange,ifstoppro INTO :ld_stopqty,:ll_scid,:ll_orderid,:li_ifchange,:li_ifstoppro
  390. FROM u_order_ml_stop
  391. Where billid = :arg_billid;
  392. IF sqlca.SQLCode <> 0 THEN
  393. rslt = 0
  394. arg_msg = '查询单据信息失败'+"~n"+sqlca.SQLErrText
  395. GOTO ext
  396. END IF
  397. SELECT orderqty,acmpqty,ordertype,stopqty
  398. INTO :ld_orderqty,:ld_acmpqty,:ll_ordertype,:ld_stopqty_zl
  399. FROM u_order_ml
  400. WHERE orderid = :ll_orderid
  401. And scid = :ll_scid;
  402. IF sqlca.SQLCode <> 0 THEN
  403. rslt = 0
  404. arg_msg = '查询生产计划信息失败'+"~n"+sqlca.SQLErrText
  405. GOTO ext
  406. END IF
  407. IF ld_orderqty <= 0 THEN
  408. rslt = 0
  409. arg_msg = '生产计划数为0,不允许再终止'
  410. GOTO ext
  411. END IF
  412. IF ld_orderqty - ld_acmpqty - ld_stopqty_zl < ld_stopqty THEN
  413. rslt = 0
  414. arg_msg = '未进仓数只有:'+String(ld_orderqty - ld_acmpqty - ld_stopqty_zl,'#,##0.##########')+',不能终止:'+String(ld_stopqty,'#,##0.##########')
  415. GOTO ext
  416. END IF
  417. UPDATE u_order_ml
  418. SET stopqty = stopqty + :ld_stopqty
  419. WHERE orderid = :ll_orderid
  420. And scid = :ll_scid;
  421. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN
  422. rslt = 0
  423. arg_msg = '更新生产计划数,终止数失败'+"~n"+sqlca.SQLErrText
  424. GOTO ext
  425. END IF
  426. Decimal ld_rate
  427. ld_rate = (ld_orderqty - ld_stopqty - ld_stopqty_zl) / (ld_orderqty - ld_stopqty_zl)
  428. IF li_ifchange = 1 Or li_ifchange = 2 THEN
  429. IF uo_order.uof_mtrl_change(ll_scid,ll_orderid,ld_rate,0,li_ifchange,0,arg_msg,False) = 0 THEN
  430. rslt = 0
  431. arg_msg = '建立相关变更类型的生产指令单换料单失败,'+arg_msg
  432. GOTO ext
  433. END IF
  434. ELSE
  435. UPDATE u_OrderRqMtrl_scll
  436. SET truerqqty = truerqqty * :ld_rate
  437. WHERE orderid = :ll_orderid
  438. And scid = :ll_scid;
  439. IF sqlca.SQLCode <> 0 THEN
  440. rslt = 0
  441. arg_msg = '更新领料明细失败'+"~n"+sqlca.SQLErrText
  442. GOTO ext
  443. END IF
  444. END IF
  445. //UPDATE u_OrderRqMtrl_scll
  446. // SET truerqqty = truerqqty * :ld_rate
  447. // WHERE orderid = :ll_orderid
  448. // And scid = :ll_scid;
  449. //IF sqlca.SQLCode <> 0 THEN
  450. // rslt = 0
  451. // ARG_MSG = '更新领料明细失败'+"~n"+sqlca.SQLErrText
  452. // GOTO ext
  453. //END IF
  454. //
  455. //IF ll_ordertype <> 4 THEN
  456. // UPDATE u_OrderRqMtrl
  457. // SET truerqqty = truerqqty * :ld_rate,
  458. // RqQty = RqQty * :ld_rate
  459. // WHERE orderid = :ll_orderid
  460. // And scid = :ll_scid;
  461. // IF sqlca.SQLCode <> 0 THEN
  462. // rslt = 0
  463. // ARG_MSG = '更新需求表失败'+"~n"+sqlca.SQLErrText
  464. // GOTO ext
  465. // END IF
  466. //END IF
  467. IF ld_orderqty - ld_acmpqty - ld_stopqty_zl = ld_stopqty THEN
  468. UPDATE u_order_ml
  469. SET status = 3,
  470. Accomplishdate = getdate(),
  471. stopemp = :publ_operator
  472. WHERE orderid = :ll_orderid
  473. And scid = :ll_scid;
  474. IF sqlca.SQLCode <> 0 THEN
  475. rslt = 0
  476. arg_msg = "因网络或其它原因导致终止生产计划操作失败"+"~n"+sqlca.SQLErrText
  477. GOTO ext
  478. END IF
  479. END IF
  480. s_order_ml_stop_mx s_stop_mx[]
  481. IF getinfo(arg_billid,s_stop_mx,ll_arr_cnt,arg_msg) = 0 THEN
  482. rslt = 0
  483. GOTO ext
  484. END IF
  485. FOR ll_i = 1 To ll_arr_cnt
  486. IF ll_ordertype <> 4 THEN
  487. UPDATE u_SaleTaskMx
  488. SET AssignQty = AssignQty - :s_stop_mx[ll_i].qty_stop
  489. WHERE scid = :s_stop_mx[ll_i].taskscid AND
  490. taskid = :s_stop_mx[ll_i].taskid AND
  491. printid = :s_stop_mx[ll_i].taskmxid ;
  492. IF sqlca.SQLCode <> 0 THEN
  493. arg_msg = '更新订单已排产数失败>>'+sqlca.SQLErrText
  494. rslt = 0
  495. GOTO ext
  496. END IF
  497. IF ll_ordertype = 0 And uo_option_order_bh_use_yc = 1 THEN
  498. IF s_stop_mx[ll_i].taskid > 0 THEN
  499. SELECT stopqty
  500. INTO :ld_stopqty_ori
  501. FROM u_saletaskmx
  502. WHERE scid = :s_stop_mx[ll_i].taskscid
  503. AND taskid = :s_stop_mx[ll_i].taskid
  504. And printid = :s_stop_mx[ll_i].taskmxid;
  505. IF sqlca.SQLCode <> 0 THEN
  506. rslt = 0
  507. arg_msg = '查询生产计划相关销售预测单信息失败'+sqlca.SQLErrText
  508. GOTO ext
  509. END IF
  510. ld_stopqty = ld_stopqty_ori + s_stop_mx[ll_i].qty_stop
  511. IF uo_task.stopqty(s_stop_mx[ll_i].taskscid,s_stop_mx[ll_i].taskid,s_stop_mx[ll_i].taskmxid,'',ld_stopqty,'',arg_msg,False) = 0 THEN
  512. rslt = 0
  513. GOTO ext
  514. END IF
  515. END IF
  516. END IF
  517. ELSE
  518. Int li_plantype
  519. Long ll_wrkGrpid_scll
  520. Long ll_mtrlid
  521. String ls_status,ls_woodcode,ls_pcode
  522. SELECT plantype,
  523. wrkGrpid,
  524. mtrlid,
  525. status,
  526. woodcode,
  527. pcode
  528. INTO :li_plantype,
  529. :ll_wrkGrpid_scll,
  530. :ll_mtrlid,
  531. :ls_status,
  532. :ls_woodcode,
  533. :ls_pcode
  534. FROM u_OrderRqMtrl
  535. WHERE scid = :s_stop_mx[ll_i].scid
  536. AND orderid = :s_stop_mx[ll_i].taskid
  537. And mxpkid = :s_stop_mx[ll_i].taskmxid;
  538. IF sqlca.SQLCode <> 0 THEN
  539. arg_msg = '查询生产自制需求资料失败,'+sqlca.SQLErrText
  540. rslt = 0
  541. GOTO ext
  542. END IF
  543. UPDATE u_OrderRqMtrl
  544. SET consignedqty = consignedqty - :s_stop_mx[ll_i].qty_stop
  545. WHERE orderid = :s_stop_mx[ll_i].taskid
  546. AND wrkGrpid = :ll_wrkGrpid_scll
  547. AND mtrlid = :ll_mtrlid
  548. AND status = :ls_status
  549. AND woodcode = :ls_woodcode
  550. AND pcode = :ls_pcode
  551. AND scid = :s_stop_mx[ll_i].scid
  552. And plantype = 0;
  553. IF sqlca.SQLCode <> 0 THEN
  554. arg_msg = '更新生产计划自制需求已排产数失败>>'+sqlca.SQLErrText
  555. rslt = 0
  556. GOTO ext
  557. END IF
  558. END IF
  559. UPDATE u_order_ml_mx
  560. SET qty = qty - :s_stop_mx[ll_i].qty_stop
  561. WHERE orderid = :s_stop_mx[ll_i].orderid
  562. AND scid = :s_stop_mx[ll_i].scid
  563. And taskid = :s_stop_mx[ll_i].taskid;
  564. IF sqlca.SQLCode <> 0 THEN
  565. arg_msg = '更新生产计划/生产指令单明细失败>>'+sqlca.SQLErrText
  566. rslt = 0
  567. GOTO ext
  568. END IF
  569. NEXT
  570. String ls_procode,ls_proname
  571. Decimal ld_proqty_ori,ld_finishqty,ld_contaskqty,ld_stopqty_pro
  572. IF li_ifstoppro = 1 THEN
  573. ds_pro.Retrieve(ll_scid,ll_orderid)
  574. ld_rate = ld_stopqty / ld_orderqty
  575. FOR ll_i = 1 To ds_pro.RowCount()
  576. ls_procode = ds_pro.Object.u_orderrqwp_procode[ll_i]
  577. ls_proname = ds_pro.Object.u_orderrqwp_proname[ll_i]
  578. ld_proqty_ori = ds_pro.Object.proqty_ori[ll_i]
  579. ld_finishqty = ds_pro.Object.finishqty[ll_i] //已开计件单数
  580. ld_contaskqty = ds_pro.Object.contaskqty[ll_i] //已开派工单数
  581. ld_stopqty_pro = ds_pro.Object.u_orderrqwp_stopqty[ll_i]
  582. IF ld_finishqty > ld_proqty_ori - (ld_proqty_ori * ld_rate + ld_stopqty_pro) THEN
  583. rslt = 0
  584. arg_msg = '['+ls_procode+']'+ls_proname+'已开计件单数:'+String(ld_finishqty,'#,##0.##########')+' 大于本次终止后的数:'+String(ld_proqty_ori - (ld_proqty_ori * ld_rate + ld_stopqty_pro),'#,##0.##########')+',不能终止'
  585. GOTO ext
  586. END IF
  587. IF ld_contaskqty > ld_proqty_ori - (ld_proqty_ori * ld_rate + ld_stopqty) THEN
  588. rslt = 0
  589. arg_msg = '['+ls_procode+']'+ls_proname+'已开派工单数:'+String(ld_contaskqty,'#,##0.##########')+' 大于本次终止后的数:'+String(ld_proqty_ori - (ld_proqty_ori * ld_rate + ld_stopqty_pro),'#,##0.##########')+',不能终止'
  590. GOTO ext
  591. END IF
  592. UPDATE u_orderrqwp
  593. SET proqty = proqty - :ld_proqty_ori * :ld_rate,
  594. stopqty = stopqty + :ld_proqty_ori * :ld_rate
  595. WHERE scid = :ll_scid
  596. AND orderid = :ll_orderid
  597. And procode = :ls_procode;
  598. IF sqlca.SQLCode <> 0 THEN
  599. arg_msg = '更新生产计划/生产指令单工序进度失败>>工序:['+ls_procode+']'+ls_proname+','+sqlca.SQLErrText
  600. rslt = 0
  601. GOTO ext
  602. END IF
  603. NEXT
  604. END IF
  605. ext:
  606. Destroy ds_pro
  607. IF rslt = 0 THEN
  608. ROLLBACK;
  609. ELSEIF rslt = 1 And arg_ifcommit THEN
  610. COMMIT;
  611. END IF
  612. Destroy uo_order
  613. Destroy uo_task
  614. RETURN rslt
  615. end function
  616. public function integer getinfo (long arg_billid, ref s_order_ml_stop_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  617. Long i = 1,no_mxcheck = 0
  618. IF arg_billid <= 0 THEN
  619. rslt = 0
  620. arg_msg = '错误单据唯一码'
  621. GOTO ext
  622. END IF
  623. DECLARE cur_mx CURSOR FOR
  624. SELECT printid,
  625. taskid,
  626. scid,
  627. orderid,
  628. taskcode,
  629. qty,
  630. cusid,
  631. taskmxid,
  632. taskscid,
  633. qty_stop
  634. FROM u_order_ml_stop_mx
  635. Where billid = :arg_billid;
  636. OPEN cur_mx;
  637. FETCH cur_mx INTO :arg_ref_mx[i].printid,
  638. :arg_ref_mx[i].taskid,
  639. :arg_ref_mx[i].scid,
  640. :arg_ref_mx[i].orderid,
  641. :arg_ref_mx[i].taskcode,
  642. :arg_ref_mx[i].qty,
  643. :arg_ref_mx[i].cusid,
  644. :arg_ref_mx[i].taskmxid,
  645. :arg_ref_mx[i].taskscid,
  646. :arg_ref_mx[i].qty_stop;
  647. DO WHILE sqlca.SQLCode = 0
  648. i++
  649. FETCH cur_mx INTO :arg_ref_mx[i].printid,
  650. :arg_ref_mx[i].taskid,
  651. :arg_ref_mx[i].scid,
  652. :arg_ref_mx[i].orderid,
  653. :arg_ref_mx[i].taskcode,
  654. :arg_ref_mx[i].qty,
  655. :arg_ref_mx[i].cusid,
  656. :arg_ref_mx[i].taskmxid,
  657. :arg_ref_mx[i].taskscid,
  658. :arg_ref_mx[i].qty_stop;
  659. LOOP
  660. CLOSE cur_mx;
  661. //检验明细是否读入完整
  662. SELECT count(*) INTO :no_mxcheck
  663. FROM u_order_ml_stop_mx
  664. Where billid = :arg_billid;
  665. IF sqlca.SQLCode <> 0 THEN
  666. rslt = 0
  667. arg_msg = "查询操作失败,单据汇总数量"
  668. GOTO ext
  669. END IF
  670. IF i <> (no_mxcheck + 1) THEN
  671. rslt = 0
  672. arg_msg = "查询操作失败,单据汇总内容"
  673. GOTO ext
  674. END IF
  675. arg_arr_cnt = i - 1
  676. ext:
  677. RETURN rslt
  678. end function
  679. public function integer getinfo_order (long arg_scid, long arg_orderid, ref s_order_ml_mx arg_order_mx[], ref long arg_cnt_arr, ref string arg_msg);Int rslt = 1
  680. Long i = 1,no_mxcheck = 0
  681. IF arg_orderid <= 0 THEN
  682. rslt = 0
  683. arg_msg = "非法单据唯一码"
  684. GOTO ext
  685. END IF
  686. //用游标读取明细
  687. DECLARE cur_ordermx CURSOR FOR
  688. SELECT u_order_ml_mx.taskid,
  689. u_order_ml_mx.taskmxid,
  690. u_order_ml_mx.qty,
  691. u_order_ml_mx.taskscid
  692. FROM u_order_ml_mx
  693. WHERE u_order_ml_mx.orderid = :arg_orderid AND
  694. u_order_ml_mx.scid = :arg_scid ;
  695. OPEN cur_ordermx;
  696. FETCH cur_ordermx INTO :arg_order_mx[i].taskid,
  697. :arg_order_mx[i].taskmxid,
  698. :arg_order_mx[i].qty,
  699. :arg_order_mx[i].taskscid;
  700. DO WHILE sqlca.SQLCode = 0
  701. i++
  702. FETCH cur_ordermx INTO :arg_order_mx[i].taskid,
  703. :arg_order_mx[i].taskmxid,
  704. :arg_order_mx[i].qty,
  705. :arg_order_mx[i].taskscid;
  706. LOOP
  707. CLOSE cur_ordermx;
  708. //检验明细是否读入完整
  709. SELECT count(*) INTO :no_mxcheck
  710. FROM u_order_ml_mx
  711. WHERE orderid = :arg_orderid
  712. AND scid = :arg_scid ;
  713. IF sqlca.SQLCode <> 0 THEN
  714. rslt = 0
  715. arg_msg = "查询操作失败,计划明细数量"
  716. GOTO ext
  717. END IF
  718. IF i <> (no_mxcheck+1) THEN
  719. rslt = 0
  720. arg_msg = "查询操作失败,计划明细"
  721. GOTO ext
  722. END IF
  723. arg_cnt_arr = i - 1
  724. ext:
  725. RETURN rslt
  726. end function
  727. on uo_order_ml_stop.create
  728. call super::create
  729. TriggerEvent( this, "constructor" )
  730. end on
  731. on uo_order_ml_stop.destroy
  732. TriggerEvent( this, "destructor" )
  733. call super::destroy
  734. end on
  735. event constructor;String str_optionvalue,arg_msg
  736. f_get_sys_option_value('074',str_optionvalue,arg_msg)
  737. uo_option_order_bh_use_yc = Long(str_optionvalue)
  738. end event