uo_saletaskmx_change.sru 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073
  1. $PBExportHeader$uo_saletaskmx_change.sru
  2. forward
  3. global type uo_saletaskmx_change from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_saletaskmx_change from nonvisualobject
  7. end type
  8. global uo_saletaskmx_change uo_saletaskmx_change
  9. type variables
  10. Long uo_billid
  11. String uo_billcode
  12. end variables
  13. forward prototypes
  14. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  15. public function integer updatebegin (long arg_billid, ref string arg_msg)
  16. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  17. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  18. public function integer save (s_saletaskmx_change arg_s_change, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  19. public function integer getinfo (long arg_billid, ref s_saletaskmx_changemx arg_ref_changemx[], ref long arg_arr_cnt, ref string arg_msg)
  20. public function integer p_getflag (long arg_billid, ref s_saletaskmx_change arg_s_change, ref string arg_msg)
  21. public function integer affirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  22. public function integer caffirm (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  23. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  24. end prototypes
  25. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);int rslt = 1
  26. long ll_flag
  27. if arg_billid <= 0 then
  28. rslt = 0
  29. arg_msg = '错误单据唯一码'
  30. GOTO ext
  31. END IF
  32. s_saletaskmx_change arg_change
  33. IF p_getflag(arg_billid,arg_change,arg_msg) = 0 THEN
  34. rslt = 0
  35. GOTO ext
  36. END IF
  37. if arg_change.affirmflag <> 0 then
  38. rslt = 0
  39. arg_msg = '单据不是在待审核状态,不能删除'
  40. GOTO ext
  41. END IF
  42. if arg_change.flag <> 0 then
  43. rslt = 0
  44. arg_msg = '单据不是在待审核状态,不能删除'
  45. GOTO ext
  46. END IF
  47. DELETE FROM u_saletaskmx_changemx
  48. WHERE billid = :arg_billid;
  49. IF sqlca.SQLCode <> 0 THEN
  50. rslt = 0
  51. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  52. GOTO ext
  53. END IF
  54. DELETE FROM u_saletaskmx_change
  55. WHERE billid = :arg_billid
  56. AND flag = 0;
  57. IF sqlca.SQLCode <> 0 THEN
  58. rslt = 0
  59. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  60. GOTO ext
  61. END IF
  62. ext:
  63. IF rslt = 0 THEN
  64. ROLLBACK;
  65. ELSEIF rslt = 1 AND arg_ifcommit THEN
  66. COMMIT;
  67. END IF
  68. RETURN rslt
  69. end function
  70. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  71. long li_flag
  72. IF arg_billid <= 0 THEN
  73. rslt = 0
  74. arg_msg = '错误单据唯一码'
  75. GOTO ext
  76. END IF
  77. s_saletaskmx_change arg_change
  78. IF p_getflag(arg_billid,arg_change,arg_msg) = 0 THEN
  79. rslt = 0
  80. GOTO ext
  81. END IF
  82. IF arg_change.flag = 1 THEN
  83. rslt = 0
  84. arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核'
  85. GOTO ext
  86. END IF
  87. IF arg_change.affirmflag = 1 THEN
  88. rslt = 0
  89. ARG_MSG = '单据已经初审,不可以修改,要修改请先撤销审核'
  90. GOTO ext
  91. END IF
  92. ext:
  93. RETURN rslt
  94. end function
  95. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  96. Long ll_flag
  97. Long ll_mtrlid,cnt,ll_cnt
  98. Int li_ordertype_mtrl,li_statusflag,li_ifpackpro
  99. String ls_ordercode,ls_ordercode_str
  100. If arg_billid <= 0 Then
  101. rslt = 0
  102. ARG_MSG = '错误单据唯一码'
  103. Goto ext
  104. End If
  105. s_saletaskmx_change arg_change
  106. If p_getflag(arg_billid,arg_change,ARG_MSG) = 0 Then
  107. rslt = 0
  108. Goto ext
  109. End If
  110. If f_aps_mrp_cklock(arg_change.scid,ARG_MSG) = 0 Then
  111. rslt = 0
  112. Goto ext
  113. End If
  114. s_saletaskmx_changemx arg_changmx[]
  115. Long it_max,i
  116. If getinfo(arg_billid,arg_changmx,it_max,ARG_MSG) = 0 Then
  117. rslt = 0
  118. Goto ext
  119. End If
  120. If arg_change.affirmflag <> 1 Then
  121. rslt = 0
  122. ARG_MSG = '单据没有初审,不可以终审'
  123. Goto ext
  124. End If
  125. If arg_change.flag <> 0 Then
  126. rslt = 0
  127. ARG_MSG = '单据不是在待审核状态,不可以再审'
  128. Goto ext
  129. End If
  130. //dyy2014-07-26 检查明细,如果没有主计划的明细,检查订单是否已下生产计划,如果是,要求用户修改单据,重新生成明细
  131. cnt = 0
  132. For i = 1 To it_max
  133. If arg_changmx[i].mxtype = 0 Then
  134. cnt++
  135. End If
  136. Next
  137. //明细没有主计划类型,检查实际是否存在订单相关的主生产计划
  138. If cnt = 0 Then
  139. Select count(*)
  140. Into :ll_cnt
  141. From u_Order_ml
  142. Where u_Order_ml.scid = :arg_change.scid And
  143. u_Order_ml.taskid = :arg_change.taskid And
  144. u_Order_ml.taskmxid = :arg_change.printid And
  145. u_Order_ml.ordertype <> 4 ;
  146. If sqlca.SQLCode <> 0 Then
  147. ARG_MSG = '查询订单明细是否已有主生产计划失败,'+sqlca.SQLErrText
  148. rslt = 0
  149. Goto ext
  150. End If
  151. If ll_cnt > 0 Then
  152. rslt = 0
  153. ARG_MSG = '订单明细已有生产计划,单据明细没有生产计划类型的明细,请修改单据,执行单据功能-重新生成明细功能'
  154. Goto ext
  155. End If
  156. End If
  157. //
  158. //yyx2013-7-29
  159. cnt = 0
  160. Select count(*) Into :cnt
  161. From u_mtrlware_assign
  162. Where u_mtrlware_assign.assigntype = 1
  163. And u_mtrlware_assign.scid = :arg_change.scid
  164. And u_mtrlware_assign.Relbillid = :arg_change.taskid
  165. And u_mtrlware_assign.Relprintid = :arg_change.printid;
  166. If sqlca.SQLCode <> 0 Then
  167. ARG_MSG = '查询订单明细是否已有库存分配失败,'+sqlca.SQLErrText
  168. rslt = 0
  169. Goto ext
  170. End If
  171. If cnt > 0 Then
  172. ARG_MSG = '订单明细已有库存分配,操作取消,如需变更,请先取消库存分配'
  173. rslt = 0
  174. Goto ext
  175. End If
  176. //yyx2013-7-29_end
  177. Update u_SaleTaskMx
  178. Set status = :arg_change.newstatus,
  179. pcode = :arg_change.newpcode,
  180. woodcode = :arg_change.newwoodcode,
  181. mxdscrp = :arg_change.newmxdscrp,
  182. mxdscrp2 = :arg_change.newmxdscrp2,
  183. changedscrp = :arg_change.billcode
  184. Where u_SaleTaskMx.scid = :arg_change.scid And
  185. u_SaleTaskMx.taskid = :arg_change.taskid And
  186. u_SaleTaskMx.printid = :arg_change.printid ;
  187. If sqlca.SQLCode <> 0 Then
  188. rslt = 0
  189. ARG_MSG = "因网络或其它原因导致更新销售订单明细操作失败"+"~n"+sqlca.SQLErrText
  190. Goto ext
  191. End If
  192. Select u_SaleTaskMx.mtrlid,u_mtrldef.ordertype,u_mtrldef.statusflag,u_mtrldef.ifpackpro
  193. Into :ll_mtrlid,:li_ordertype_mtrl,:li_statusflag,:li_ifpackpro
  194. From u_SaleTaskMx,u_mtrldef
  195. Where u_SaleTaskMx.mtrlid = u_mtrldef.mtrlid And
  196. u_SaleTaskMx.scid = :arg_change.scid And
  197. u_SaleTaskMx.taskid = :arg_change.taskid And
  198. u_SaleTaskMx.printid = :arg_change.printid ;
  199. If sqlca.SQLCode <> 0 Then
  200. rslt = 0
  201. ARG_MSG = "因网络或其它原因导致更新销售订单明细操作失败"+"~n"+sqlca.SQLErrText
  202. Goto ext
  203. End If
  204. //检查生产计划/指令单是否已开条码生成单,有则要求作废
  205. cnt = 0
  206. For i = 1 To it_max
  207. If arg_changmx[i].mxtype = 0 Or arg_changmx[i].mxtype = 1 Then
  208. Select count(*)
  209. Into :ll_cnt
  210. From u_getbar Inner JOIN
  211. u_mtrlware_mx ON u_getbar.getbarid = u_mtrlware_mx.getbarid
  212. Where u_getbar.scid = :arg_changmx[i].scid
  213. And u_getbar.orderid = :arg_changmx[i].orderid
  214. And u_getbar.ifrel = 1
  215. And u_mtrlware_mx.isuse = 1;
  216. If sqlca.SQLCode <> 0 Then
  217. rslt = 0
  218. ARG_MSG = '查询明细生产计划/指令单是否已开条码生成单失败,'+sqlca.SQLErrText
  219. Goto ext
  220. End If
  221. If ll_cnt > 0 Then
  222. Select ordercode
  223. Into :ls_ordercode
  224. From u_order_ml
  225. Where scid = :arg_changmx[i].scid
  226. And orderid = :arg_changmx[i].orderid;
  227. If sqlca.SQLCode <> 0 Then
  228. rslt = 0
  229. ARG_MSG = '第'+String(i)+'行,查询明细生产计划/指令单信息失败,'+sqlca.SQLErrText
  230. Goto ext
  231. End If
  232. cnt = cnt + ll_cnt
  233. ls_ordercode_str = ls_ordercode+ ',' + ls_ordercode_str
  234. End If
  235. End If
  236. Next
  237. If cnt > 0 Then
  238. rslt = 0
  239. ARG_MSG = '相关生产计划/指令单已开条码生成单,请先作废,单号:'+ls_ordercode_str
  240. Goto ext
  241. End If
  242. For i = 1 To it_max
  243. If arg_changmx[i].mxtype = 2 Then //申购
  244. Update u_requestbuymx
  245. Set status = :arg_change.newstatus,
  246. woodcode = :arg_change.newwoodcode,
  247. pcode = :arg_change.newpcode,
  248. mxdscrp = :arg_changmx[i].newdscrp
  249. Where scid = :arg_changmx[i].scid And
  250. requestbuyid = :arg_changmx[i].orderid And
  251. printid = :arg_changmx[i].Relprintid;
  252. ElseIf arg_changmx[i].mxtype = 3 Then //采购
  253. Update u_buyTaskMx
  254. Set status = :arg_change.newstatus,
  255. woodcode = :arg_change.newwoodcode,
  256. pcode = :arg_change.newpcode,
  257. dscrp = :arg_changmx[i].newdscrp
  258. Where scid = :arg_changmx[i].scid And
  259. taskid = :arg_changmx[i].orderid And
  260. printid = :arg_changmx[i].Relprintid;
  261. Else
  262. If li_statusflag = 2 And li_ifpackpro = 4 Then
  263. Update u_Order_ml
  264. Set woodcode = :arg_change.newwoodcode,
  265. pcode = :arg_change.newpcode,
  266. dscrp = :arg_changmx[i].newdscrp,
  267. thdscrp = :arg_changmx[i].newthdscrp,
  268. secdscrp = :arg_changmx[i].newsecdscrp,
  269. changedscrp = :arg_change.billcode
  270. Where scid = :arg_changmx[i].scid And
  271. orderid = :arg_changmx[i].orderid;
  272. Else
  273. Update u_Order_ml
  274. Set status_mode = :arg_change.newstatus,
  275. woodcode = :arg_change.newwoodcode,
  276. pcode = :arg_change.newpcode,
  277. dscrp = :arg_changmx[i].newdscrp,
  278. thdscrp = :arg_changmx[i].newthdscrp,
  279. secdscrp = :arg_changmx[i].newsecdscrp,
  280. changedscrp = :arg_change.billcode
  281. Where scid = :arg_changmx[i].scid And
  282. orderid = :arg_changmx[i].orderid;
  283. End If
  284. End If
  285. If sqlca.SQLCode <> 0 Then
  286. rslt = 0
  287. If arg_changmx[i].mxtype = 2 Then //申购
  288. ARG_MSG = "因网络或其它原因导致更新成品申购单操作失败"+"~n"+sqlca.SQLErrText
  289. ElseIf arg_changmx[i].mxtype = 3 Then //采购
  290. ARG_MSG = "因网络或其它原因导致更新成品采购订单单操作失败"+"~n"+sqlca.SQLErrText
  291. Else
  292. ARG_MSG = "因网络或其它原因导致更新主计划/排产指令操作失败"+"~n"+sqlca.SQLErrText
  293. End If
  294. Goto ext
  295. End If
  296. If arg_changmx[i].mxtype = 0 Then
  297. Update u_OrderRqMtrl
  298. Set status = :arg_change.newstatus,
  299. pcode = :arg_change.newpcode,
  300. woodcode = :arg_change.newwoodcode
  301. Where scid = :arg_changmx[i].scid And
  302. orderid = :arg_changmx[i].orderid And
  303. mtrlid = :ll_mtrlid;
  304. If sqlca.SQLCode <> 0 Then
  305. rslt = 0
  306. ARG_MSG = "因网络或其它原因导致更新生产计划用料需求操作失败"+"~n"+sqlca.SQLErrText
  307. Goto ext
  308. // ELSE
  309. // IF li_ordertype_mtrl = 1 THEN
  310. // IF sqlca.SQLNRows = 0 THEN
  311. // rslt = 0
  312. // ARG_MSG = "订单产品为分离排产产品,更新主生产计划分离排产自制需求0行,请检查(可能主生产计划未计算用料)"
  313. // GOTO ext
  314. // END IF
  315. // END IF
  316. End If
  317. End If
  318. Next
  319. //更新审核标记
  320. Update u_saletaskmx_change
  321. Set auditemp = :arg_opemp,
  322. auditdate = getdate(),
  323. flag = 1
  324. Where billid = :arg_billid
  325. And flag = 0;
  326. If sqlca.SQLCode <> 0 Then
  327. rslt = 0
  328. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  329. Goto ext
  330. End If
  331. ext:
  332. If rslt = 0 Then
  333. Rollback;
  334. ElseIf rslt = 1 And arg_ifcommit Then
  335. Commit;
  336. End If
  337. Return rslt
  338. end function
  339. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  340. Long ll_flag
  341. DateTime null_dt
  342. SetNull(null_dt)
  343. IF arg_billid <= 0 THEN
  344. rslt = 0
  345. ARG_MSG = '错误单据唯一码'
  346. GOTO ext
  347. END IF
  348. s_saletaskmx_change arg_change
  349. IF p_getflag(arg_billid,arg_change,ARG_MSG) = 0 THEN
  350. rslt = 0
  351. GOTO ext
  352. END IF
  353. IF f_aps_mrp_cklock(arg_change.scid,arg_msg) = 0 THEN
  354. rslt = 0
  355. GOTO ext
  356. END IF
  357. IF arg_change.flag <> 1 THEN
  358. rslt = 0
  359. ARG_MSG = '单据不是在审核状态,不可以撤审'
  360. GOTO ext
  361. END IF
  362. //更新审核标记
  363. UPDATE u_saletaskmx_change
  364. SET auditemp = '',
  365. auditdate = :null_dt,
  366. flag = 0
  367. Where billid = :arg_billid;
  368. IF sqlca.SQLCode <> 0 THEN
  369. rslt = 0
  370. ARG_MSG = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText
  371. GOTO ext
  372. END IF
  373. ext:
  374. IF rslt = 0 THEN
  375. ROLLBACK;
  376. ELSEIF rslt = 1 AND arg_ifcommit THEN
  377. COMMIT;
  378. END IF
  379. RETURN rslt
  380. end function
  381. public function integer save (s_saletaskmx_change arg_s_change, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0
  382. DateTime server_dt
  383. Decimal ld_saletaskmx_mqty
  384. Long ll_billid,it_mxbt,i
  385. Int li_ordertype_mtrl
  386. String ls_sccode,ls_billcode
  387. IF IsNull(arg_s_change.scid) THEN arg_s_change.scid = 0
  388. IF IsNull(arg_s_change.billid) THEN arg_s_change.billid = 0
  389. IF IsNull(arg_s_change.rep) THEN arg_s_change.rep = ''
  390. IF IsNull(arg_s_change.relcode) THEN arg_s_change.relcode = ''
  391. IF IsNull(arg_s_change.taskid) THEN arg_s_change.taskid = 0
  392. IF IsNull(arg_s_change.printid) THEN arg_s_change.printid = 0
  393. IF IsNull(arg_s_change.oldstatus) THEN arg_s_change.oldstatus = ''
  394. IF IsNull(arg_s_change.oldwoodcode) THEN arg_s_change.oldwoodcode = ''
  395. IF IsNull(arg_s_change.oldpcode) THEN arg_s_change.oldpcode = ''
  396. IF IsNull(arg_s_change.oldmxdscrp) THEN arg_s_change.oldmxdscrp = ''
  397. IF IsNull(arg_s_change.oldmxdscrp2) THEN arg_s_change.oldmxdscrp2 = ''
  398. IF IsNull(arg_s_change.newstatus) THEN arg_s_change.newstatus = ''
  399. IF IsNull(arg_s_change.newwoodcode) THEN arg_s_change.newwoodcode = ''
  400. IF IsNull(arg_s_change.newpcode) THEN arg_s_change.newpcode = ''
  401. IF IsNull(arg_s_change.newmxdscrp) THEN arg_s_change.newmxdscrp = ''
  402. IF IsNull(arg_s_change.newmxdscrp2) THEN arg_s_change.newmxdscrp2 = ''
  403. IF IsNull(arg_s_change.dscrp) THEN arg_s_change.dscrp = ''
  404. IF arg_s_change.rep = '' THEN
  405. arg_msg = '请输入经手人'
  406. rslt = 0
  407. GOTO ext
  408. END IF
  409. IF arg_s_change.taskid = 0 THEN
  410. arg_msg = '请选择订单明细'
  411. rslt = 0
  412. GOTO ext
  413. END IF
  414. SELECT Top 1 getdate() Into :server_dt From u_user;
  415. IF sqlca.SQLCode <> 0 THEN
  416. rslt = 0
  417. arg_msg = "查询操作失败,日期 "
  418. GOTO ext
  419. END IF
  420. it_mxbt = UpperBound(arg_s_change.arg_s_changemx)
  421. SELECT u_saletaskmx.mqty,u_mtrldef.ordertype
  422. INTO :ld_saletaskmx_mqty,:li_ordertype_mtrl
  423. FROM u_saletaskmx,u_mtrldef
  424. WHERE u_saletaskmx.mtrlid = u_mtrldef.mtrlid
  425. AND u_saletaskmx.scid = :arg_s_change.scid
  426. AND u_saletaskmx.taskid = :arg_s_change.taskid
  427. And u_saletaskmx.printid = :arg_s_change.printid;
  428. IF sqlca.SQLCode <> 0 THEN
  429. arg_msg = '查询订单明细调度是否调库存失败,'+sqlca.SQLErrText
  430. rslt = 0
  431. GOTO ext
  432. END IF
  433. //IF ld_saletaskmx_mqty = 0 THEN
  434. // IF it_mxbt <= 0 THEN
  435. // rslt = 0
  436. // arg_msg = "没有正确明细内容"
  437. // GOTO ext
  438. // END IF
  439. //END IF
  440. cnt = 0
  441. SELECT count(*) INTO :cnt
  442. FROM u_mtrlware_assign
  443. WHERE u_mtrlware_assign.assigntype = 1
  444. AND u_mtrlware_assign.scid = :arg_s_change.scid
  445. AND u_mtrlware_assign.Relbillid = :arg_s_change.taskid
  446. And u_mtrlware_assign.Relprintid = :arg_s_change.printid;
  447. IF sqlca.SQLCode <> 0 THEN
  448. arg_msg = '查询订单明细是否已有库存分配失败,'+sqlca.SQLErrText
  449. rslt = 0
  450. GOTO ext
  451. END IF
  452. IF cnt > 0 THEN
  453. arg_msg = '订单明细已有库存分配,操作取消,如需变更,请先取消库存分配'
  454. rslt = 0
  455. GOTO ext
  456. END IF
  457. //IF li_ordertype_mtrl = 1 THEN
  458. // FOR i = 1 To it_mxbt
  459. // IF arg_s_change.arg_s_changemx[i].mxtype = 0 THEN
  460. // cnt = 0
  461. // SELECT count(*) INTO :cnt
  462. // FROM u_OrderRqMtrl_tree
  463. // WHERE u_OrderRqMtrl_tree.scid = :arg_s_change.scid
  464. // And u_OrderRqMtrl_tree = :arg_s_change.arg_s_changemx[i].orderid;
  465. // IF sqlca.SQLCode <> 0 THEN
  466. // arg_msg = '查询主生产计划是否已运算失败,'+sqlca.SQLErrText
  467. // rslt = 0
  468. // GOTO ext
  469. // END IF
  470. //
  471. // IF cnt = 0 THEN
  472. // arg_msg = '主生产计划未运算,请检查'
  473. // rslt = 0
  474. // GOTO ext
  475. // END IF
  476. // END IF
  477. // NEXT
  478. //END IF
  479. IF arg_s_change.billid = 0 THEN
  480. ll_billid = f_sys_scidentity(0,"u_saletaskmx_change","billid",arg_msg,True,id_sqlca)
  481. IF ll_billid <= 0 THEN
  482. rslt = 0
  483. GOTO ext
  484. END IF
  485. IF f_get_sccode(arg_s_change.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  486. rslt = 0
  487. GOTO ext
  488. END IF
  489. ls_billcode = getid(arg_s_change.scid,ls_sccode + 'XC',Date(server_dt),False,sqlca)
  490. IF ls_billcode = "err" THEN
  491. rslt = 0
  492. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  493. GOTO ext
  494. END IF
  495. INSERT INTO u_saletaskmx_change
  496. ( scid,
  497. Billid,
  498. billcode,
  499. billdate,
  500. rep,
  501. relcode,
  502. taskid,
  503. printid,
  504. oldstatus,
  505. oldwoodcode,
  506. oldpcode,
  507. oldmxdscrp,
  508. oldmxdscrp2,
  509. newstatus,
  510. newwoodcode,
  511. newpcode,
  512. newmxdscrp,
  513. newmxdscrp2,
  514. opemp,
  515. opdate,
  516. dscrp)
  517. VALUES ( :arg_s_change.scid,
  518. :ll_billid,
  519. :ls_billcode,
  520. :arg_s_change.billdate,
  521. :arg_s_change.rep,
  522. :arg_s_change.relcode,
  523. :arg_s_change.taskid,
  524. :arg_s_change.printid,
  525. :arg_s_change.oldstatus,
  526. :arg_s_change.oldwoodcode,
  527. :arg_s_change.oldpcode,
  528. :arg_s_change.oldmxdscrp,
  529. :arg_s_change.oldmxdscrp2,
  530. :arg_s_change.newstatus,
  531. :arg_s_change.newwoodcode,
  532. :arg_s_change.newpcode,
  533. :arg_s_change.newmxdscrp,
  534. :arg_s_change.newmxdscrp2,
  535. :arg_opemp,
  536. getdate(),
  537. :arg_s_change.dscrp) ;
  538. IF sqlca.SQLCode <> 0 THEN
  539. rslt = 0
  540. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  541. GOTO ext
  542. END IF
  543. FOR i = 1 To it_mxbt
  544. INSERT INTO u_saletaskmx_changemx
  545. ( billid,
  546. printid,
  547. mxtype,
  548. orderid,
  549. olddscrp,
  550. oldsecdscrp,
  551. oldthdscrp,
  552. newdscrp,
  553. newsecdscrp,
  554. newthdscrp,
  555. relprintid,
  556. scid)
  557. VALUES ( :ll_billid,
  558. :arg_s_change.arg_s_changemx[i].printid,
  559. :arg_s_change.arg_s_changemx[i].mxtype,
  560. :arg_s_change.arg_s_changemx[i].orderid,
  561. :arg_s_change.arg_s_changemx[i].olddscrp,
  562. :arg_s_change.arg_s_changemx[i].oldsecdscrp,
  563. :arg_s_change.arg_s_changemx[i].oldthdscrp,
  564. :arg_s_change.arg_s_changemx[i].newdscrp,
  565. :arg_s_change.arg_s_changemx[i].newsecdscrp,
  566. :arg_s_change.arg_s_changemx[i].newthdscrp,
  567. :arg_s_change.arg_s_changemx[i].relprintid,
  568. :arg_s_change.scid ) ;
  569. IF sqlca.SQLCode <> 0 THEN
  570. rslt = 0
  571. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  572. GOTO ext
  573. END IF
  574. NEXT
  575. uo_billid = ll_billid
  576. uo_billcode = ls_billcode
  577. ELSE
  578. UPDATE u_saletaskmx_change
  579. SET scid = :arg_s_change.scid,
  580. billdate = :arg_s_change.billdate,
  581. rep = :arg_s_change.rep,
  582. relcode = :arg_s_change.relcode,
  583. taskid = :arg_s_change.taskid,
  584. printid = :arg_s_change.printid,
  585. oldstatus = :arg_s_change.oldstatus,
  586. oldwoodcode = :arg_s_change.oldwoodcode,
  587. oldpcode = :arg_s_change.oldpcode,
  588. oldmxdscrp = :arg_s_change.oldmxdscrp,
  589. oldmxdscrp2 = :arg_s_change.oldmxdscrp2,
  590. newstatus = :arg_s_change.newstatus,
  591. newwoodcode = :arg_s_change.newwoodcode,
  592. newpcode = :arg_s_change.newpcode,
  593. newmxdscrp = :arg_s_change.newmxdscrp,
  594. newmxdscrp2 = :arg_s_change.newmxdscrp2,
  595. Modemp = :arg_opemp,
  596. Moddate = getdate(),
  597. dscrp = :arg_s_change.dscrp
  598. WHERE u_saletaskmx_change.flag = 0 AND
  599. u_saletaskmx_change.billid = :arg_s_change.billid;
  600. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  601. rslt = 0
  602. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  603. GOTO ext
  604. END IF
  605. DELETE FROM u_saletaskmx_changemx
  606. Where billid = :arg_s_change.billid;
  607. IF sqlca.SQLCode <> 0 THEN
  608. rslt = 0
  609. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  610. GOTO ext
  611. END IF
  612. FOR i = 1 To it_mxbt
  613. INSERT INTO u_saletaskmx_changemx
  614. ( billid,
  615. printid,
  616. mxtype,
  617. orderid,
  618. olddscrp,
  619. oldsecdscrp,
  620. oldthdscrp,
  621. newdscrp,
  622. newsecdscrp,
  623. newthdscrp,
  624. relprintid,
  625. scid )
  626. VALUES ( :arg_s_change.billid,
  627. :arg_s_change.arg_s_changemx[i].printid,
  628. :arg_s_change.arg_s_changemx[i].mxtype,
  629. :arg_s_change.arg_s_changemx[i].orderid,
  630. :arg_s_change.arg_s_changemx[i].olddscrp,
  631. :arg_s_change.arg_s_changemx[i].oldsecdscrp,
  632. :arg_s_change.arg_s_changemx[i].oldthdscrp,
  633. :arg_s_change.arg_s_changemx[i].newdscrp,
  634. :arg_s_change.arg_s_changemx[i].newsecdscrp,
  635. :arg_s_change.arg_s_changemx[i].newthdscrp,
  636. :arg_s_change.arg_s_changemx[i].relprintid,
  637. :arg_s_change.scid ) ;
  638. NEXT
  639. uo_billid = arg_s_change.billid
  640. END IF
  641. ext:
  642. IF rslt = 0 THEN
  643. ROLLBACK;
  644. ELSEIF arg_ifcommit And rslt = 1 THEN
  645. COMMIT;
  646. END IF
  647. RETURN rslt
  648. end function
  649. public function integer getinfo (long arg_billid, ref s_saletaskmx_changemx arg_ref_changemx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  650. Long i = 1,no_mxcheck = 0
  651. IF arg_billid <= 0 THEN
  652. rslt = 0
  653. arg_msg = '错误单据唯一码'
  654. GOTO ext
  655. END IF
  656. //用游标读取明细
  657. DECLARE cur_costmx CURSOR FOR
  658. SELECT u_saletaskmx_changemx.orderid,
  659. u_saletaskmx_changemx.olddscrp,
  660. u_saletaskmx_changemx.oldsecdscrp,
  661. u_saletaskmx_changemx.oldthdscrp,
  662. u_saletaskmx_changemx.newdscrp,
  663. u_saletaskmx_changemx.newsecdscrp,
  664. u_saletaskmx_changemx.newthdscrp,
  665. u_saletaskmx_changemx.mxtype,
  666. u_saletaskmx_changemx.relprintid,
  667. u_saletaskmx_changemx.scid
  668. FROM u_saletaskmx_changemx
  669. WHERE u_saletaskmx_changemx.billid = :arg_billid
  670. Order By u_saletaskmx_changemx.printid;
  671. OPEN cur_costmx;
  672. FETCH cur_costmx INTO
  673. :arg_ref_changemx[i].orderid,
  674. :arg_ref_changemx[i].olddscrp,
  675. :arg_ref_changemx[i].oldsecdscrp,
  676. :arg_ref_changemx[i].oldthdscrp,
  677. :arg_ref_changemx[i].newdscrp,
  678. :arg_ref_changemx[i].newsecdscrp,
  679. :arg_ref_changemx[i].newthdscrp,
  680. :arg_ref_changemx[i].mxtype,
  681. :arg_ref_changemx[i].relprintid,
  682. :arg_ref_changemx[i].scid;
  683. DO WHILE sqlca.SQLCode = 0
  684. i++
  685. FETCH cur_costmx INTO
  686. :arg_ref_changemx[i].orderid,
  687. :arg_ref_changemx[i].olddscrp,
  688. :arg_ref_changemx[i].oldsecdscrp,
  689. :arg_ref_changemx[i].oldthdscrp,
  690. :arg_ref_changemx[i].newdscrp,
  691. :arg_ref_changemx[i].newsecdscrp,
  692. :arg_ref_changemx[i].newthdscrp,
  693. :arg_ref_changemx[i].mxtype,
  694. :arg_ref_changemx[i].relprintid,
  695. :arg_ref_changemx[i].scid;
  696. LOOP
  697. CLOSE cur_costmx;
  698. //检验明细是否读入完整
  699. SELECT count(*) INTO :no_mxcheck
  700. FROM u_saletaskmx_changemx
  701. Where billid = :arg_billid;
  702. IF sqlca.SQLCode <> 0 THEN
  703. rslt = 0
  704. arg_msg = "查询操作失败,单据明细数量"
  705. GOTO ext
  706. END IF
  707. IF i <> (no_mxcheck + 1) THEN
  708. rslt = 0
  709. arg_msg = "查询操作失败,单据明细"
  710. GOTO ext
  711. END IF
  712. arg_arr_cnt = i - 1
  713. ext:
  714. RETURN rslt
  715. end function
  716. public function integer p_getflag (long arg_billid, ref s_saletaskmx_change arg_s_change, ref string arg_msg);Int rslt = 1
  717. SELECT flag,
  718. taskid,
  719. billcode,
  720. printid,
  721. scid,
  722. newstatus,
  723. newwoodcode,
  724. newpcode,
  725. newmxdscrp,
  726. newmxdscrp2,
  727. affirmflag,
  728. affirmrep,
  729. affirmdate
  730. INTO :arg_s_change.flag,
  731. :arg_s_change.taskid,
  732. :arg_s_change.billcode,
  733. :arg_s_change.printid,
  734. :arg_s_change.scid,
  735. :arg_s_change.newstatus,
  736. :arg_s_change.newwoodcode,
  737. :arg_s_change.newpcode,
  738. :arg_s_change.newmxdscrp,
  739. :arg_s_change.newmxdscrp2,
  740. :arg_s_change.affirmflag,
  741. :arg_s_change.affirmrep,
  742. :arg_s_change.affirmdate
  743. FROM u_saletaskmx_change
  744. Where billid = :arg_billid;
  745. IF sqlca.SQLCode <> 0 THEN
  746. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  747. rslt = 0
  748. GOTO ext
  749. END IF
  750. ext:
  751. RETURN rslt
  752. end function
  753. public function integer affirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  754. long cnt
  755. IF arg_billid <= 0 THEN
  756. rslt = 0
  757. ARG_MSG = '错误单据唯一码'
  758. GOTO ext
  759. END IF
  760. s_saletaskmx_change arg_s_ref
  761. IF p_getflag(arg_billid,arg_s_ref,ARG_MSG) = 0 THEN
  762. rslt = 0
  763. GOTO ext
  764. END IF
  765. IF arg_s_ref.affirmflag <> 0 THEN
  766. rslt = 0
  767. ARG_MSG = '单据不是在待初审状态,不可以初审'
  768. GOTO ext
  769. END IF
  770. //yyx2013-7-29
  771. cnt = 0
  772. SELECT count(*) INTO :cnt
  773. FROM u_mtrlware_assign
  774. WHERE u_mtrlware_assign.assigntype = 1
  775. AND u_mtrlware_assign.scid = :arg_s_ref.scid
  776. AND u_mtrlware_assign.Relbillid = :arg_s_ref.taskid
  777. And u_mtrlware_assign.Relprintid = :arg_s_ref.printid;
  778. IF sqlca.SQLCode <> 0 THEN
  779. arg_msg = '查询订单明细是否已有库存分配失败,'+sqlca.SQLErrText
  780. rslt = 0
  781. GOTO ext
  782. END IF
  783. IF cnt > 0 THEN
  784. arg_msg = '订单明细已有库存分配,操作取消,如需变更,请先取消库存分配'
  785. rslt = 0
  786. GOTO ext
  787. END IF
  788. //yyx2013-7-29_end
  789. //更新审核标记
  790. UPDATE u_saletaskmx_change
  791. SET affirmrep = :arg_opemp,
  792. affirmdate = getdate(),
  793. affirmflag = 1
  794. WHERE billid = :arg_billid
  795. And affirmflag = 0;
  796. IF sqlca.SQLCode <> 0 THEN
  797. rslt = 0
  798. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  799. GOTO ext
  800. ELSEIF sqlca.SQLNRows = 0 THEN
  801. rslt = 0
  802. ARG_MSG = "单据正在审核,请稍后重试"
  803. GOTO ext
  804. END IF
  805. ext:
  806. IF rslt = 0 THEN
  807. ROLLBACK;
  808. ELSEIF rslt = 1 And arg_ifcommit THEN
  809. COMMIT;
  810. END IF
  811. RETURN rslt
  812. end function
  813. public function integer caffirm (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  814. datetime ldt_null
  815. setnull(ldt_null)
  816. IF arg_billid <= 0 THEN
  817. rslt = 0
  818. ARG_MSG = '错误单据唯一码'
  819. GOTO ext
  820. END IF
  821. s_saletaskmx_change arg_s_ref
  822. IF p_getflag(arg_billid,arg_s_ref,ARG_MSG) = 0 THEN
  823. rslt = 0
  824. GOTO ext
  825. END IF
  826. IF arg_s_ref.affirmflag <> 1 THEN
  827. rslt = 0
  828. ARG_MSG = '单据不是在待终审状态,不可以初撤'
  829. GOTO ext
  830. END IF
  831. IF arg_s_ref.flag <> 0 THEN
  832. rslt = 0
  833. ARG_MSG = '单据不是在待终审状态,不可以初撤'
  834. GOTO ext
  835. END IF
  836. //更新审核标记
  837. UPDATE u_saletaskmx_change
  838. SET affirmrep = '',
  839. affirmdate = :ldt_null,
  840. affirmflag = 0
  841. WHERE billid = :arg_billid
  842. And affirmflag = 1;
  843. IF sqlca.SQLCode <> 0 THEN
  844. rslt = 0
  845. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  846. GOTO ext
  847. ELSEIF sqlca.SQLNRows = 0 THEN
  848. rslt = 0
  849. ARG_MSG = "单据正在审核,请稍后重试"
  850. GOTO ext
  851. END IF
  852. ext:
  853. IF rslt = 0 THEN
  854. ROLLBACK;
  855. ELSEIF rslt = 1 And arg_ifcommit THEN
  856. COMMIT;
  857. END IF
  858. RETURN rslt
  859. end function
  860. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart)
  861. //0 fail 1 SUCCESS
  862. Int rslt = 1
  863. arg_newdescppart = Trim(arg_newdescppart)
  864. IF arg_newdescppart = '' THEN
  865. rslt = 0
  866. arG_MSG = "要添加内容为空,操作取消"
  867. GOTO ext
  868. END IF
  869. s_saletaskmx_change arg_s_ref
  870. IF p_getflag(arg_billid,arg_s_ref,ARG_MSG) = 0 THEN
  871. rslt = 0
  872. GOTO ext
  873. END IF
  874. IF arg_s_ref.affirmflag = 0 THEN
  875. rslt = 0
  876. ARG_MSG = '单据不是在已审核状态,不可以增加备注'
  877. GOTO ext
  878. END IF
  879. UPDATE u_saletaskmx_change
  880. SET DSCRP = DSCRP+' '+:arg_newdescppart
  881. Where billid = :arg_billid ;
  882. IF sqlca.SQLCode <> 0 THEN
  883. rslt = 0
  884. arG_MSG = "因网络或其它原因导致添加单据备注操作失败"+"~n"+ sqlca.SQLErrText
  885. GOTO ext
  886. END IF
  887. ext:
  888. IF rslt = 0 THEN
  889. ROLLBACK;
  890. ELSEIF arg_ifcommit THEN
  891. COMMIT;
  892. END IF
  893. Return (rslt)
  894. end function
  895. on uo_saletaskmx_change.create
  896. call super::create
  897. TriggerEvent( this, "constructor" )
  898. end on
  899. on uo_saletaskmx_change.destroy
  900. TriggerEvent( this, "destructor" )
  901. call super::destroy
  902. end on