uo_config_change.sru 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262
  1. $PBExportHeader$uo_config_change.sru
  2. forward
  3. global type uo_config_change from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_config_change from nonvisualobject
  7. end type
  8. global uo_config_change uo_config_change
  9. type variables
  10. long uo_billid
  11. string uo_billcode
  12. end variables
  13. forward prototypes
  14. public function integer save (s_config_change arg_s_config, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  15. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  16. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  17. public function integer p_getinfo (long arg_billid, ref s_config_change arg_s_config, ref string arg_msg)
  18. public function integer updatebegin (long arg_billid, ref string arg_msg)
  19. end prototypes
  20. public function integer save (s_config_change arg_s_config, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt
  21. rslt = 1
  22. DateTime server_dt
  23. Long ll_newid
  24. String ls_sccode,ls_new_billcode
  25. If IsNull(arg_s_config.scid) Then arg_s_config.scid = 0
  26. If IsNull(arg_s_config.billid) Then arg_s_config.billid = 0
  27. If IsNull(arg_s_config.billcode) Then arg_s_config.billcode = ''
  28. If IsNull(arg_s_config.rep) Then arg_s_config.rep = ''
  29. If IsNull(arg_s_config.mtrlid) Then arg_s_config.mtrlid = 0
  30. If IsNull(arg_s_config.status_ori) Then arg_s_config.status_ori = ''
  31. If IsNull(arg_s_config.woodcode_ori) Then arg_s_config.woodcode_ori = ''
  32. If IsNull(arg_s_config.pcode_ori) Then arg_s_config.pcode_ori = ''
  33. If IsNull(arg_s_config.status_new) Then arg_s_config.status_new = ''
  34. If IsNull(arg_s_config.woodcode_new) Then arg_s_config.woodcode_new = ''
  35. If IsNull(arg_s_config.pcode_new) Then arg_s_config.pcode_new = ''
  36. If IsNull(arg_s_config.if_status) Then arg_s_config.if_status = 0
  37. If IsNull(arg_s_config.if_woodcode) Then arg_s_config.if_woodcode = 0
  38. If IsNull(arg_s_config.if_pcode) Then arg_s_config.if_woodcode = 0
  39. If IsNull(arg_s_config.if_update_mtrl) Then arg_s_config.if_update_mtrl = 0
  40. If IsNull(arg_s_config.dscrp) Then arg_s_config.dscrp = ''
  41. If arg_s_config.rep = '' Then
  42. arg_msg = '请输入经手人'
  43. rslt = 0
  44. Goto ext
  45. End If
  46. Select Top 1 getdate() Into :server_dt From u_user;
  47. If sqlca.SQLCode <> 0 Then
  48. rslt = 0
  49. arg_msg = "查询操作失败,日期 "
  50. Goto ext
  51. End If
  52. If arg_s_config.if_status = 0 And arg_s_config.if_woodcode = 0 And arg_s_config.if_woodcode = 0 Then
  53. rslt = 0
  54. arg_msg = '请至少选择一个要更新的配置'
  55. Goto ext
  56. End If
  57. If arg_s_config.billid = 0 Then
  58. ll_newid = f_sys_scidentity(0,"u_config_change","billid",arg_msg,True,id_sqlca)
  59. If ll_newid <= 0 Then
  60. rslt = 0
  61. Goto ext
  62. End If
  63. If f_get_sccode(arg_s_config.scid,sqlca,ls_sccode,arg_msg) = 0 Then
  64. rslt = 0
  65. Goto ext
  66. End If
  67. ls_new_billcode = getid(arg_s_config.scid,ls_sccode + 'CX',Date(server_dt),False,sqlca)
  68. If ls_new_billcode = "err" Then
  69. rslt = 0
  70. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  71. Goto ext
  72. End If
  73. Insert Into u_config_change
  74. (scid,
  75. billid,
  76. billcode,
  77. billdate,
  78. rep,
  79. mtrlid,
  80. status_ori,
  81. woodcode_ori,
  82. pcode_ori,
  83. status_new,
  84. woodcode_new,
  85. pcode_new,
  86. if_status,
  87. if_woodcode,
  88. if_pcode,
  89. if_update_mtrl,
  90. dscrp,
  91. opdate,
  92. opemp)
  93. Values (:arg_s_config.scid,
  94. :ll_newid,
  95. :ls_new_billcode,
  96. :arg_s_config.billdate,
  97. :arg_s_config.rep,
  98. :arg_s_config.mtrlid,
  99. :arg_s_config.status_ori,
  100. :arg_s_config.woodcode_ori,
  101. :arg_s_config.pcode_ori,
  102. :arg_s_config.status_new,
  103. :arg_s_config.woodcode_new,
  104. :arg_s_config.pcode_new,
  105. :arg_s_config.if_status,
  106. :arg_s_config.if_woodcode,
  107. :arg_s_config.if_pcode,
  108. :arg_s_config.if_update_mtrl,
  109. :arg_s_config.dscrp,
  110. getdate(),
  111. :arg_opemp);
  112. If sqlca.SQLCode <> 0 Then
  113. rslt = 0
  114. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  115. Goto ext
  116. End If
  117. uo_billcode = ls_new_billcode
  118. Else
  119. Update u_config_change
  120. Set scid = :arg_s_config.scid,
  121. billdate = :arg_s_config.billdate,
  122. rep = :arg_s_config.rep,
  123. mtrlid = :arg_s_config.mtrlid,
  124. status_ori = :arg_s_config.status_ori,
  125. woodcode_ori = :arg_s_config.woodcode_ori,
  126. pcode_ori = :arg_s_config.pcode_ori,
  127. status_new = :arg_s_config.status_new,
  128. woodcode_new = :arg_s_config.woodcode_new,
  129. pcode_new = :arg_s_config.pcode_new,
  130. if_status = :arg_s_config.if_status,
  131. if_woodcode = :arg_s_config.if_woodcode,
  132. if_pcode = :arg_s_config.if_pcode,
  133. if_update_mtrl = :arg_s_config.if_update_mtrl,
  134. dscrp = :arg_s_config.dscrp,
  135. moddate = getdate(),
  136. modemp = :arg_opemp
  137. Where billid = :arg_s_config.billid;
  138. If sqlca.SQLCode <> 0 Then
  139. rslt = 0
  140. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  141. Goto ext
  142. End If
  143. Delete From u_config_change_mx
  144. Where billid = :arg_s_config.billid;
  145. If sqlca.SQLCode <> 0 Then
  146. rslt = 0
  147. arg_msg = "删除旧有汇总明细操作失败"+"~n"+sqlca.SQLErrText
  148. Goto ext
  149. End If
  150. ll_newid = arg_s_config.billid
  151. uo_billcode = arg_s_config.billcode
  152. End If
  153. uo_billid = ll_newid
  154. //插入明细
  155. //1.销售报价单
  156. Insert Into u_config_change_mx
  157. (billid, kind, relid, relprintid, relcode, status_ori, woodcode_ori, pcode_ori)
  158. Select :ll_newid,0,u_quote.quoteid, u_quotemx.printid, u_quote.quotecode, u_quotemx.status, u_quotemx.woodcode, u_quotemx.pcode
  159. From u_quotemx Inner JOIN
  160. u_quote ON u_quotemx.scid = u_quote.scid And
  161. u_quotemx.quoteid = u_quote.quoteid
  162. Where (u_quotemx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  163. And (u_quotemx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  164. And (u_quotemx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  165. and (u_quotemx.mtrlid = :arg_s_config.mtrlid);
  166. If sqlca.SQLCode <> 0 Then
  167. rslt = 0
  168. arg_msg = "插入明细失败(销售报价单)"+"~n"+sqlca.SQLErrText
  169. Goto ext
  170. End If
  171. //2.销售订单
  172. Insert Into u_config_change_mx
  173. (billid, kind, relid, relprintid, relcode,
  174. status_ori, woodcode_ori, pcode_ori,qty)
  175. Select :ll_newid,1,u_SaleTaskMx.TaskID, u_SaleTaskMx.printid, u_SaleTask.TaskCode,
  176. u_SaleTaskMx.status, u_SaleTaskMx.woodcode, u_SaleTaskMx.pcode,u_SaleTaskMx.SaleQty
  177. From u_SaleTaskMx Inner JOIN
  178. u_SaleTask ON u_SaleTaskMx.scid = u_SaleTask.scid And
  179. u_SaleTaskMx.TaskID = u_SaleTask.TaskID
  180. Where (u_SaleTaskMx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  181. And (u_SaleTaskMx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  182. And (u_SaleTaskMx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  183. and (u_SaleTaskMx.mtrlid = :arg_s_config.mtrlid);
  184. If sqlca.SQLCode <> 0 Then
  185. rslt = 0
  186. arg_msg = "插入明细失败(销售订单)"+"~n"+sqlca.SQLErrText
  187. Goto ext
  188. End If
  189. //3.生产计划
  190. Insert Into u_config_change_mx
  191. (billid, kind, relid, relprintid, relcode,status_ori, woodcode_ori, pcode_ori,qty)
  192. Select :ll_newid,2,OrderID,0, OrderCode, status_mode, woodcode, pcode, orderqty
  193. From u_Order_ml
  194. Where (u_Order_ml.status_mode = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  195. And (u_Order_ml.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  196. And (u_Order_ml.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  197. And (u_Order_ml.ordertype <> 4)
  198. and (u_Order_ml.mtrlid = :arg_s_config.mtrlid);
  199. If sqlca.SQLCode <> 0 Then
  200. rslt = 0
  201. arg_msg = "插入明细失败(生产计划)"+"~n"+sqlca.SQLErrText
  202. Goto ext
  203. End If
  204. //4.生产指令单
  205. Insert Into u_config_change_mx
  206. (billid, kind, relid, relprintid, relcode,status_ori, woodcode_ori, pcode_ori,qty)
  207. Select :ll_newid,3,OrderID,0, OrderCode, status_mode, woodcode, pcode, orderqty
  208. From u_Order_ml
  209. Where (u_Order_ml.status_mode = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  210. And (u_Order_ml.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  211. And (u_Order_ml.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  212. And (u_Order_ml.ordertype = 4)
  213. and (u_Order_ml.mtrlid = :arg_s_config.mtrlid);
  214. If sqlca.SQLCode <> 0 Then
  215. rslt = 0
  216. arg_msg = "插入明细失败(生产指令单)"+"~n"+sqlca.SQLErrText
  217. Goto ext
  218. End If
  219. //5.进仓单
  220. Insert Into u_config_change_mx
  221. (billid, kind, relid, relprintid, relcode,status_ori, woodcode_ori, pcode_ori,qty)
  222. Select :ll_newid,4,u_inwaremx.inwareid, u_inwaremx.printid, u_inware.inwarecode,
  223. u_inwaremx.status, u_inwaremx.woodcode, u_inwaremx.pcode,
  224. u_inwaremx.qty
  225. From u_inware Inner JOIN
  226. u_inwaremx ON u_inware.scid = u_inwaremx.scid And
  227. u_inware.inwareid = u_inwaremx.inwareid
  228. Where (u_inwaremx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  229. And (u_inwaremx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  230. And (u_inwaremx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  231. and (u_inwaremx.mtrlid = :arg_s_config.mtrlid);
  232. If sqlca.SQLCode <> 0 Then
  233. rslt = 0
  234. arg_msg = "插入明细失败(进仓单)"+"~n"+sqlca.SQLErrText
  235. Goto ext
  236. End If
  237. //6.出仓单
  238. Insert Into u_config_change_mx
  239. (billid, kind, relid, relprintid, relcode,status_ori, woodcode_ori, pcode_ori,qty)
  240. Select :ll_newid,5,u_outwaremx.outwareid, u_outwaremx.printid, u_outware.outwarecode,
  241. u_outwaremx.status, u_outwaremx.woodcode, u_outwaremx.pcode,
  242. u_outwaremx.qty
  243. From u_outware Inner JOIN
  244. u_outwaremx ON u_outware.scid = u_outwaremx.scid And
  245. u_outware.outwareid = u_outwaremx.outwareid
  246. Where (u_outwaremx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  247. And (u_outwaremx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  248. And (u_outwaremx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  249. and (u_outwaremx.mtrlid = :arg_s_config.mtrlid);
  250. If sqlca.SQLCode <> 0 Then
  251. rslt = 0
  252. arg_msg = "插入明细失败(出仓单)"+"~n"+sqlca.SQLErrText
  253. Goto ext
  254. End If
  255. //7.条码生成单
  256. Insert Into u_config_change_mx
  257. (billid, kind, relid, relprintid, relcode,status_ori, woodcode_ori, pcode_ori,qty)
  258. Select :ll_newid,6,getbarid, ifrel, getbarcode, status, woodcode, pcode, qty
  259. From u_getbar
  260. Where (u_getbar.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  261. And (u_getbar.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  262. And (u_getbar.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  263. and (u_getbar.mtrlid = :arg_s_config.mtrlid);
  264. If sqlca.SQLCode <> 0 Then
  265. rslt = 0
  266. arg_msg = "插入明细失败(条码生成单)"+"~n"+sqlca.SQLErrText
  267. Goto ext
  268. End If
  269. //8.条码
  270. Insert Into u_config_change_mx
  271. (billid, kind, relid, relprintid, relcode,status_ori, woodcode_ori, pcode_ori,qty)
  272. Select :ll_newid,7,getbarid,0, barcode, status, woodcode, pcode, qty
  273. From u_mtrlware_mx
  274. Where (u_mtrlware_mx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  275. And (u_mtrlware_mx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  276. And (u_mtrlware_mx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  277. and (u_mtrlware_mx.mtrlid = :arg_s_config.mtrlid);
  278. If sqlca.SQLCode <> 0 Then
  279. rslt = 0
  280. arg_msg = "插入明细失败(条码)"+"~n"+sqlca.SQLErrText
  281. Goto ext
  282. End If
  283. //9.库存表
  284. Insert Into u_config_change_mx
  285. (billid, kind, relid, relprintid,status_ori, woodcode_ori, pcode_ori,qty)
  286. Select :ll_newid,8,mtrlwareid, storageid, Status, woodcode, pcode, noallocqty
  287. From u_mtrlware
  288. Where (u_mtrlware.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  289. And (u_mtrlware.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  290. And (u_mtrlware.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  291. and (u_mtrlware.mtrlid = :arg_s_config.mtrlid);
  292. If sqlca.SQLCode <> 0 Then
  293. rslt = 0
  294. arg_msg = "插入明细失败(库存表)"+"~n"+sqlca.SQLErrText
  295. Goto ext
  296. End If
  297. ext:
  298. If rslt = 0 Then
  299. Rollback;
  300. uo_billid = 0
  301. uo_billcode = ''
  302. ElseIf arg_ifcommit And rslt = 1 Then
  303. Commit;
  304. End If
  305. Return rslt
  306. end function
  307. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,li_flag
  308. s_config_change arg_s_config
  309. If arg_billid <= 0 Then
  310. rslt = 0
  311. arg_msg = '错误的单据唯一码'
  312. Goto ext
  313. End If
  314. If p_getinfo(arg_billid,arg_s_config,arg_msg) = 0 Then
  315. rslt = 0
  316. Goto ext
  317. End If
  318. If arg_s_config.flag <> 0 Then
  319. rslt = 0
  320. arg_msg = '单据不是在待审核状态,不可以删除'
  321. Goto ext
  322. End If
  323. Delete From u_config_change_mx
  324. Where billid = :arg_billid;
  325. If sqlca.SQLCode <> 0 Then
  326. rslt = 0
  327. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  328. Goto ext
  329. End If
  330. Delete From u_config_change
  331. Where billid = :arg_billid;
  332. If sqlca.SQLCode <> 0 Then
  333. rslt = 0
  334. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  335. Goto ext
  336. End If
  337. ext:
  338. If rslt = 0 Then
  339. Rollback;
  340. ElseIf rslt = 1 And arg_ifcommit Then
  341. Commit;
  342. End If
  343. Return rslt
  344. end function
  345. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  346. Int li_flag
  347. Long ll_i,ll_j
  348. Long ll_cusid,ll_mtrlid,ll_scid,ll_mtrlwareid,ll_storageid,ll_mtrlwareid_new
  349. String ls_plancode,ls_mtrlcuscode,ls_location
  350. Long ll_sptid,ll_dxflag
  351. Decimal ld_noallocqty,ld_allocqty,ld_wareamt,ld_cost,ld_noauditingqty,ld_noauditinguqty,ld_unoallocqty
  352. String ls_status,ls_woodcode,ls_pcode,ls_status_new,ls_woodcode_new,ls_pcode_new
  353. Long ll_moneyid
  354. Decimal ld_qty,ld_qty1,ld_fprice,ld_zqrate,ld_price ,ld_fprice_bj,ld_zqrate_bj,ld_price_bj
  355. Long ll_pricelistid
  356. DateTime sys_changetime
  357. Long ll_row
  358. Long ll_balcdateint
  359. //结存表参数
  360. Decimal bgqty, bgamt, incqty, incamt, desqty, desamt
  361. Decimal balcqty, balcamt, pypk, pypkamt, buyinqty, buyinamt, buyinqty_pack, buyinamt_pack
  362. Decimal saleinqty_packpro, saleinamt_packpro, cpinqty, cpinamt, jginqty, jginamt, diinqty
  363. Decimal diinamt, mvinqty, mvinamt, otinqty, otinamt, pyinqty, pyinamt, ubgqty, uincqty
  364. Decimal udesqty, ubalcqty
  365. //
  366. s_config_change arg_s_config
  367. datastore ds_price_ori,ds_price_new
  368. ds_price_ori = Create datastore
  369. ds_price_new = Create datastore
  370. ds_price_ori.DataObject = 'ds_cus_price_config'
  371. ds_price_new.DataObject = 'ds_cus_price_config'
  372. ds_price_ori.SetTransObject(sqlca)
  373. ds_price_new.SetTransObject(sqlca)
  374. datastore ds_ware_ori,ds_ware_new
  375. ds_ware_ori = Create datastore
  376. ds_ware_new = Create datastore
  377. ds_ware_ori.DataObject = 'ds_mtrlware_config'
  378. ds_ware_new.DataObject = 'ds_mtrlware_config'
  379. ds_ware_ori.SetTransObject(sqlca)
  380. ds_ware_new.SetTransObject(sqlca)
  381. datastore ds_balc_ori,ds_balc_new
  382. ds_balc_ori = Create datastore
  383. ds_balc_new = Create datastore
  384. ds_balc_ori.DataObject = 'ds_warebalc_config'
  385. ds_balc_new.DataObject = 'ds_warebalc_config'
  386. ds_balc_ori.SetTransObject(sqlca)
  387. ds_balc_new.SetTransObject(sqlca)
  388. If arg_billid <= 0 Then
  389. rslt = 0
  390. arg_msg = '错误的单据唯一码'
  391. Goto ext
  392. End If
  393. If p_getinfo(arg_billid,arg_s_config,arg_msg) = 0 Then
  394. rslt = 0
  395. Goto ext
  396. End If
  397. If arg_s_config.flag <> 0 Then
  398. rslt = 0
  399. arg_msg = '单据不是待审核状态,不可以审核'
  400. Goto ext
  401. End If
  402. //更新数据
  403. //1.销售报价单
  404. Update u_quotemx
  405. Set u_quotemx.status = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_quotemx.status End ,
  406. u_quotemx.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_quotemx.woodcode End ,
  407. u_quotemx.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_quotemx.pcode End
  408. Where (u_quotemx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  409. And (u_quotemx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  410. And (u_quotemx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  411. And (u_quotemx.mtrlid = :arg_s_config.mtrlid);
  412. If sqlca.SQLCode <> 0 Then
  413. rslt = 0
  414. arg_msg = "更新数据失败(销售报价单)"+"~n"+sqlca.SQLErrText
  415. Goto ext
  416. End If
  417. //1.1 客户报价历史
  418. ds_price_ori.Retrieve(arg_s_config.mtrlid,arg_s_config.status_ori,arg_s_config.woodcode_ori,arg_s_config.pcode_ori,arg_s_config.if_status,arg_s_config.if_woodcode,arg_s_config.if_pcode)
  419. ds_price_new.Retrieve(arg_s_config.mtrlid,arg_s_config.status_new,arg_s_config.woodcode_new,arg_s_config.pcode_new,arg_s_config.if_status,arg_s_config.if_woodcode,arg_s_config.if_pcode)
  420. For ll_i = 1 To ds_price_ori.RowCount()
  421. ll_cusid = ds_price_ori.Object.cusid[ll_i]
  422. ll_mtrlid = ds_price_ori.Object.mtrlid[ll_i]
  423. ls_status = ds_price_ori.Object.status[ll_i]
  424. ls_woodcode = ds_price_ori.Object.woodcode[ll_i]
  425. ls_pcode = ds_price_ori.Object.pcode[ll_i]
  426. ll_moneyid = ds_price_ori.Object.moneyid[ll_i]
  427. ld_qty = ds_price_ori.Object.qty[ll_i]
  428. ld_qty1 = ds_price_ori.Object.qty1[ll_i]
  429. ld_fprice = ds_price_ori.Object.fprice[ll_i]
  430. ld_zqrate = ds_price_ori.Object.zqrate[ll_i]
  431. ld_price = ds_price_ori.Object.price[ll_i]
  432. ld_fprice_bj = ds_price_ori.Object.fprice_bj[ll_i]
  433. ld_zqrate_bj = ds_price_ori.Object.zqrate_bj[ll_i]
  434. ld_price_bj = ds_price_ori.Object.price_bj[ll_i]
  435. ll_pricelistid = ds_price_ori.Object.pricelistid[ll_i]
  436. sys_changetime = ds_price_ori.Object.sys_changetime[ll_i]
  437. If arg_s_config.if_status = 0 Then
  438. ls_status_new = ls_status
  439. Else
  440. ls_status_new = arg_s_config.status_new
  441. End If
  442. If arg_s_config.if_woodcode = 0 Then
  443. ls_woodcode_new = ls_woodcode
  444. Else
  445. ls_woodcode_new = arg_s_config.woodcode_new
  446. End If
  447. If arg_s_config.if_pcode = 0 Then
  448. ls_pcode_new = ls_pcode
  449. Else
  450. ls_pcode_new = arg_s_config.pcode_new
  451. End If
  452. ll_row = ds_price_new.Find('cusid = '+String(ll_cusid)+' and mtrlid = '+String(ll_mtrlid) +' and status = "'+ls_status_new+'" and woodcode = "'+ls_woodcode_new+'" and pcode = "'+ls_pcode_new+'" and moneyid = '+String(ll_moneyid) + ' and qty = '+String(ld_qty) + ' and qty1 = '+String(ld_qty1),1,ds_price_new.RowCount())
  453. If ll_row <= 0 Then
  454. Update u_cus_price
  455. Set status = :ls_status_new,
  456. woodcode = :ls_woodcode_new,
  457. pcode = :ls_pcode_new
  458. Where cusid = :ll_cusid
  459. And mtrlid = :ll_mtrlid
  460. And status = :ls_status
  461. And woodcode = :ls_woodcode
  462. And pcode = :ls_pcode
  463. And moneyid = :ll_moneyid
  464. And qty = :ld_qty
  465. And qty1 = :ld_qty1;
  466. If sqlca.SQLCode <> 0 Then
  467. rslt = 0
  468. arg_msg = "更新数据失败(客户历史价)"+"~n"+sqlca.SQLErrText
  469. Goto ext
  470. End If
  471. Update u_cus_price_mx
  472. Set status = :ls_status_new,
  473. woodcode = :ls_woodcode_new,
  474. pcode = :ls_pcode_new
  475. Where cusid = :ll_cusid
  476. And mtrlid = :ll_mtrlid
  477. And status = :ls_status
  478. And woodcode = :ls_woodcode
  479. And pcode = :ls_pcode
  480. And moneyid = :ll_moneyid
  481. And qty = :ld_qty
  482. And qty1 = :ld_qty1;
  483. If sqlca.SQLCode <> 0 Then
  484. rslt = 0
  485. arg_msg = "更新数据失败(客户历史价明细)"+"~n"+sqlca.SQLErrText
  486. Goto ext
  487. End If
  488. Else
  489. //作废原配置价格
  490. Update u_cus_price
  491. Set ifcancel = 1
  492. Where cusid = :ll_cusid
  493. And mtrlid = :ll_mtrlid
  494. And status = :ls_status
  495. And woodcode = :ls_woodcode
  496. And pcode = :ls_pcode
  497. And moneyid = :ll_moneyid
  498. And qty = :ld_qty
  499. And qty1 = :ld_qty1;
  500. If sqlca.SQLCode <> 0 Then
  501. rslt = 0
  502. arg_msg = "更新数据失败(客户历史价,作废原价格)"+"~n"+sqlca.SQLErrText
  503. Goto ext
  504. End If
  505. //如果原价格最近更新时间晚于变更配置后价格的时间,用原价格更新到新配置
  506. If sys_changetime > ds_price_new.Object.sys_changetime[ll_row] Then
  507. Update u_cus_price
  508. Set fprice = :ld_fprice,
  509. zqrate = :ld_zqrate,
  510. price = :ld_price,
  511. fprice_bj = :ld_fprice_bj,
  512. zqrate_bj = :ld_zqrate_bj,
  513. price_bj = :ld_price_bj,
  514. pricelistid = :ll_pricelistid
  515. Where cusid = :ll_cusid
  516. And mtrlid = :ll_mtrlid
  517. And status = :ls_status_new
  518. And woodcode = :ls_woodcode_new
  519. And pcode = :ls_pcode_new
  520. And moneyid = :ll_moneyid
  521. And qty = :ld_qty
  522. And qty1 = :ld_qty1;
  523. If sqlca.SQLCode <> 0 Then
  524. rslt = 0
  525. arg_msg = "更新数据失败(客户历史价),更新配置价格失败"+"~n"+sqlca.SQLErrText
  526. Goto ext
  527. End If
  528. //把原价格明细中最后一条插入到新配置价格明细中
  529. Insert Into u_cus_price_mx
  530. (
  531. u_cus_price_mx.cusid,
  532. u_cus_price_mx.mtrlid,
  533. u_cus_price_mx.opdate,
  534. u_cus_price_mx.opemp,
  535. u_cus_price_mx.outwareid,
  536. u_cus_price_mx.outwarecode,
  537. u_cus_price_mx.outdate,
  538. u_cus_price_mx.price,
  539. u_cus_price_mx.fprice,
  540. u_cus_price_mx.zqrate,
  541. u_cus_price_mx.cost,
  542. :ls_status_new,
  543. :ls_woodcode_new,
  544. :ls_pcode_new,
  545. u_cus_price_mx.dscrp,
  546. u_cus_price_mx.buildtype,
  547. u_cus_price_mx.printid,
  548. u_cus_price_mx.moneyid,
  549. u_cus_price_mx.qty,
  550. u_cus_price_mx.qty1
  551. )
  552. Select top 1 u_cus_price_mx.cusid,
  553. u_cus_price_mx.mtrlid,
  554. u_cus_price_mx.opdate,
  555. u_cus_price_mx.opemp,
  556. u_cus_price_mx.outwareid,
  557. u_cus_price_mx.outwarecode,
  558. u_cus_price_mx.outdate,
  559. u_cus_price_mx.price,
  560. u_cus_price_mx.fprice,
  561. u_cus_price_mx.zqrate,
  562. u_cus_price_mx.cost,
  563. u_cus_price_mx.status,
  564. u_cus_price_mx.woodcode,
  565. u_cus_price_mx.pcode,
  566. u_cus_price_mx.dscrp,
  567. u_cus_price_mx.buildtype,
  568. u_cus_price_mx.printid,
  569. u_cus_price_mx.moneyid,
  570. u_cus_price_mx.qty,
  571. u_cus_price_mx.qty1
  572. From u_cus_price_mx
  573. Where u_cus_price_mx.cusid = :ll_cusid
  574. And u_cus_price_mx.mtrlid = :ll_mtrlid
  575. And u_cus_price_mx.status = :ls_status
  576. And u_cus_price_mx.woodcode = :ls_woodcode
  577. And u_cus_price_mx.pcode = :ls_pcode
  578. And u_cus_price_mx.moneyid = :ll_moneyid
  579. And u_cus_price_mx.qty = :ld_qty
  580. And u_cus_price_mx.qty1 = :ld_qty1
  581. Order By u_cus_price_mx.opdate Desc;
  582. If sqlca.SQLCode <> 0 Then
  583. rslt = 0
  584. arg_msg = "更新数据失败(客户历史价),插入新配置价格明细失败"+"~n"+sqlca.SQLErrText
  585. Goto ext
  586. End If
  587. End If
  588. End If
  589. Next
  590. //2.销售订单
  591. Update u_SaleTaskMx
  592. Set u_SaleTaskMx.status = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_SaleTaskMx.status End ,
  593. u_SaleTaskMx.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_SaleTaskMx.woodcode End ,
  594. u_SaleTaskMx.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_SaleTaskMx.pcode End
  595. Where (u_SaleTaskMx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  596. And (u_SaleTaskMx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  597. And (u_SaleTaskMx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  598. And (u_SaleTaskMx.mtrlid = :arg_s_config.mtrlid);
  599. If sqlca.SQLCode <> 0 Then
  600. rslt = 0
  601. arg_msg = "更新数据失败(销售订单)"+"~n"+sqlca.SQLErrText
  602. Goto ext
  603. End If
  604. //2.1 u_saletaskmxmx
  605. Update u_saletaskmxmx
  606. Set u_saletaskmxmx.status = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_saletaskmxmx.status End ,
  607. u_saletaskmxmx.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_saletaskmxmx.woodcode End ,
  608. u_saletaskmxmx.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_saletaskmxmx.pcode End
  609. Where (u_saletaskmxmx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  610. And (u_saletaskmxmx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  611. And (u_saletaskmxmx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  612. And (u_saletaskmxmx.mtrlid = :arg_s_config.mtrlid);
  613. If sqlca.SQLCode <> 0 Then
  614. rslt = 0
  615. arg_msg = "更新数据失败(销售订单u_saletaskmxmx)"+"~n"+sqlca.SQLErrText
  616. Goto ext
  617. End If
  618. //3.生产计划/生产指令单
  619. Update u_Order_ml
  620. Set u_Order_ml.status_mode = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_Order_ml.status_mode End ,
  621. u_Order_ml.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_Order_ml.woodcode End ,
  622. u_Order_ml.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_Order_ml.pcode End
  623. Where (u_Order_ml.status_mode = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  624. And (u_Order_ml.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  625. And (u_Order_ml.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  626. And (u_Order_ml.mtrlid = :arg_s_config.mtrlid);
  627. If sqlca.SQLCode <> 0 Then
  628. rslt = 0
  629. arg_msg = "更新数据失败(生产计划/指令单)"+"~n"+sqlca.SQLErrText
  630. Goto ext
  631. End If
  632. //3.1生产需求
  633. Update u_OrderRqMtrl
  634. Set u_OrderRqMtrl.status = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_OrderRqMtrl.status End ,
  635. u_OrderRqMtrl.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_OrderRqMtrl.woodcode End ,
  636. u_OrderRqMtrl.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_OrderRqMtrl.pcode End
  637. Where (u_OrderRqMtrl.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  638. And (u_OrderRqMtrl.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  639. And (u_OrderRqMtrl.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  640. And (u_OrderRqMtrl.mtrlid = :arg_s_config.mtrlid);
  641. If sqlca.SQLCode <> 0 Then
  642. rslt = 0
  643. arg_msg = "更新数据失败(生产计划需求明细)"+"~n"+sqlca.SQLErrText
  644. Goto ext
  645. End If
  646. //3.2生产计划运算树
  647. Update u_OrderRqMtrl_tree
  648. Set u_OrderRqMtrl_tree.status = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_OrderRqMtrl_tree.status End ,
  649. u_OrderRqMtrl_tree.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_OrderRqMtrl_tree.woodcode End ,
  650. u_OrderRqMtrl_tree.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_OrderRqMtrl_tree.pcode End
  651. Where (u_OrderRqMtrl_tree.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  652. And (u_OrderRqMtrl_tree.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  653. And (u_OrderRqMtrl_tree.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  654. And (u_OrderRqMtrl_tree.mtrlid = :arg_s_config.mtrlid);
  655. If sqlca.SQLCode <> 0 Then
  656. rslt = 0
  657. arg_msg = "更新数据失败(生产计划运算)"+"~n"+sqlca.SQLErrText
  658. Goto ext
  659. End If
  660. //3.3生产领料明细
  661. Update u_OrderRqMtrl_scll
  662. Set u_OrderRqMtrl_scll.status = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_OrderRqMtrl_scll.status End ,
  663. u_OrderRqMtrl_scll.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_OrderRqMtrl_scll.woodcode End ,
  664. u_OrderRqMtrl_scll.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_OrderRqMtrl_scll.pcode End
  665. Where (u_OrderRqMtrl_scll.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  666. And (u_OrderRqMtrl_scll.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  667. And (u_OrderRqMtrl_scll.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  668. And (u_OrderRqMtrl_scll.mtrlid = :arg_s_config.mtrlid);
  669. If sqlca.SQLCode <> 0 Then
  670. rslt = 0
  671. arg_msg = "更新数据失败(生产领料明细)"+"~n"+sqlca.SQLErrText
  672. Goto ext
  673. End If
  674. //4.进仓单
  675. Update u_inwaremx
  676. Set u_inwaremx.status = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_inwaremx.status End ,
  677. u_inwaremx.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_inwaremx.woodcode End ,
  678. u_inwaremx.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_inwaremx.pcode End
  679. Where (u_inwaremx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  680. And (u_inwaremx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  681. And (u_inwaremx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  682. And (u_inwaremx.mtrlid = :arg_s_config.mtrlid);
  683. If sqlca.SQLCode <> 0 Then
  684. rslt = 0
  685. arg_msg = "更新数据失败(进仓单)"+"~n"+sqlca.SQLErrText
  686. Goto ext
  687. End If
  688. //4.1进仓单包件明细
  689. Update u_inwaremx_mx
  690. Set u_inwaremx_mx.status = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_inwaremx_mx.status End ,
  691. u_inwaremx_mx.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_inwaremx_mx.woodcode End ,
  692. u_inwaremx_mx.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_inwaremx_mx.pcode End
  693. Where (u_inwaremx_mx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  694. And (u_inwaremx_mx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  695. And (u_inwaremx_mx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  696. And (u_inwaremx_mx.mtrlid = :arg_s_config.mtrlid);
  697. If sqlca.SQLCode <> 0 Then
  698. rslt = 0
  699. arg_msg = "更新数据失败(进仓单包件明细)"+"~n"+sqlca.SQLErrText
  700. Goto ext
  701. End If
  702. //5.出仓单
  703. Update u_outwaremx
  704. Set u_outwaremx.status = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_outwaremx.status End ,
  705. u_outwaremx.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_outwaremx.woodcode End ,
  706. u_outwaremx.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_outwaremx.pcode End
  707. Where (u_outwaremx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  708. And (u_outwaremx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  709. And (u_outwaremx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  710. And (u_outwaremx.mtrlid = :arg_s_config.mtrlid);
  711. If sqlca.SQLCode <> 0 Then
  712. rslt = 0
  713. arg_msg = "更新数据失败(出仓单)"+"~n"+sqlca.SQLErrText
  714. Goto ext
  715. End If
  716. //5.1出仓单包件明细
  717. Update u_outwaremx_mx
  718. Set u_outwaremx_mx.status = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_outwaremx_mx.status End ,
  719. u_outwaremx_mx.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_outwaremx_mx.woodcode End ,
  720. u_outwaremx_mx.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_outwaremx_mx.pcode End
  721. Where (u_outwaremx_mx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  722. And (u_outwaremx_mx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  723. And (u_outwaremx_mx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  724. And (u_outwaremx_mx.mtrlid = :arg_s_config.mtrlid);
  725. If sqlca.SQLCode <> 0 Then
  726. rslt = 0
  727. arg_msg = "更新数据失败(出仓单包件明细)"+"~n"+sqlca.SQLErrText
  728. Goto ext
  729. End If
  730. //6.条码生成单
  731. Update u_getbar
  732. Set u_getbar.status = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_getbar.status End ,
  733. u_getbar.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_getbar.woodcode End ,
  734. u_getbar.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_getbar.pcode End
  735. Where (u_getbar.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  736. And (u_getbar.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  737. And (u_getbar.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  738. And (u_getbar.mtrlid = :arg_s_config.mtrlid);
  739. If sqlca.SQLCode <> 0 Then
  740. rslt = 0
  741. arg_msg = "更新数据失败(条码生成单)"+"~n"+sqlca.SQLErrText
  742. Goto ext
  743. End If
  744. //7.条码
  745. Update u_mtrlware_mx
  746. Set u_mtrlware_mx.status = case :arg_s_config.if_status when 1 then :arg_s_config.status_new else u_mtrlware_mx.status End ,
  747. u_mtrlware_mx.woodcode = case :arg_s_config.if_woodcode when 1 then :arg_s_config.woodcode_new else u_mtrlware_mx.woodcode End ,
  748. u_mtrlware_mx.pcode = case :arg_s_config.if_pcode when 1 then :arg_s_config.pcode_new else u_mtrlware_mx.pcode End
  749. Where (u_mtrlware_mx.status = :arg_s_config.status_ori Or :arg_s_config.if_status = 0)
  750. And (u_mtrlware_mx.woodcode = :arg_s_config.woodcode_ori Or :arg_s_config.if_woodcode = 0)
  751. And (u_mtrlware_mx.pcode = :arg_s_config.pcode_ori Or :arg_s_config.if_pcode = 0)
  752. And (u_mtrlware_mx.mtrlid = :arg_s_config.mtrlid);
  753. If sqlca.SQLCode <> 0 Then
  754. rslt = 0
  755. arg_msg = "更新数据失败(条码)"+"~n"+sqlca.SQLErrText
  756. Goto ext
  757. End If
  758. //8.库存,结存
  759. //库存ID要同时更新到出仓单明细
  760. ds_ware_ori.Retrieve(arg_s_config.mtrlid,arg_s_config.status_ori,arg_s_config.woodcode_ori,arg_s_config.pcode_ori,arg_s_config.if_status,arg_s_config.if_woodcode,arg_s_config.if_pcode)
  761. ds_ware_new.Retrieve(arg_s_config.mtrlid,arg_s_config.status_new,arg_s_config.woodcode_new,arg_s_config.pcode_new,arg_s_config.if_status,arg_s_config.if_woodcode,arg_s_config.if_pcode)
  762. For ll_i = 1 To ds_ware_ori.RowCount()
  763. ll_scid = ds_ware_ori.Object.scid[ll_i]
  764. ll_mtrlwareid = ds_ware_ori.Object.mtrlwareid[ll_i]
  765. ll_mtrlid = ds_ware_ori.Object.mtrlid[ll_i]
  766. ll_storageid = ds_ware_ori.Object.storageid[ll_i]
  767. ls_status = ds_ware_ori.Object.status[ll_i]
  768. ls_woodcode = ds_ware_ori.Object.woodcode[ll_i]
  769. ls_pcode = ds_ware_ori.Object.pcode[ll_i]
  770. ls_plancode = ds_ware_ori.Object.plancode[ll_i]
  771. ls_mtrlcuscode = ds_ware_ori.Object.mtrlcuscode[ll_i]
  772. ls_location = ds_ware_ori.Object.Location[ll_i]
  773. ll_sptid = ds_ware_ori.Object.sptid[ll_i]
  774. ll_dxflag = ds_ware_ori.Object.dxflag[ll_i]
  775. ld_noallocqty = ds_ware_ori.Object.noallocqty[ll_i]
  776. ld_unoallocqty = ds_ware_ori.Object.unoallocqty[ll_i]
  777. ld_allocqty = ds_ware_ori.Object.allocqty[ll_i]
  778. ld_wareamt = ds_ware_ori.Object.wareamt[ll_i]
  779. ld_cost = ds_ware_ori.Object.cost[ll_i]
  780. ld_noauditingqty = ds_ware_ori.Object.noauditingqty[ll_i]
  781. ld_noauditinguqty = ds_ware_ori.Object.noauditinguqty[ll_i]
  782. If arg_s_config.if_status = 0 Then
  783. ls_status_new = ls_status
  784. Else
  785. ls_status_new = arg_s_config.status_new
  786. End If
  787. If arg_s_config.if_woodcode = 0 Then
  788. ls_woodcode_new = ls_woodcode
  789. Else
  790. ls_woodcode_new = arg_s_config.woodcode_new
  791. End If
  792. If arg_s_config.if_pcode = 0 Then
  793. ls_pcode_new = ls_pcode
  794. Else
  795. ls_pcode_new = arg_s_config.pcode_new
  796. End If
  797. ll_row = ds_ware_new.Find('scid = '+String(ll_scid)+' and mtrlid = '+String(ll_mtrlid)+' and storageid = '+String(ll_storageid)+' status = "'+ls_status_new+'" and woodcode = "'+ls_woodcode_new+'" and pcode = "'+ls_pcode_new+'" and plancode = "'+ls_plancode+'" and mtrlcuscode = "'+ls_mtrlcuscode+'" and location = "'+ls_location+'" and sptid = '+String(ll_sptid)+' and dxflag = '+String(ll_dxflag),1,ds_ware_new.RowCount())
  798. if isnull(ll_row) then ll_row = 0
  799. If ll_row <= 0 Then
  800. Update u_mtrlware
  801. Set status = :ls_status_new,
  802. woodcode = :ls_woodcode_new,
  803. pcode = :ls_pcode_new
  804. Where scid = :ll_scid
  805. And mtrlwareid = :ll_mtrlwareid;
  806. // And mtrlid = :ll_mtrlid
  807. // And status = :ls_status
  808. // And woodcode = :ls_woodcode
  809. // And pcode = :ls_pcode
  810. // And plancode = :ls_plancode
  811. // And mtrlcuscode = :ls_mtrlcuscode
  812. // And location = :ls_location
  813. // And sptid = :ll_sptid
  814. // And dxflag = :ll_dxflag;
  815. If sqlca.SQLCode <> 0 Then
  816. rslt = 0
  817. arg_msg = "更新数据失败(库存表)"+"~n"+sqlca.SQLErrText
  818. Goto ext
  819. End If
  820. Update u_warebalc
  821. Set status = :ls_status_new,
  822. woodcode = :ls_woodcode_new,
  823. pcode = :ls_pcode_new
  824. Where scid = :ll_scid
  825. And mtrlwareid = :ll_mtrlwareid;
  826. If sqlca.SQLCode <> 0 Then
  827. rslt = 0
  828. arg_msg = "更新数据失败(结存表)"+"~n"+sqlca.SQLErrText
  829. Goto ext
  830. End If
  831. Else
  832. ll_mtrlwareid_new = ds_ware_new.Object.mtrlwareid[ll_row]
  833. //如果新配置已存在库存记录,则把原配置库存数量加到新配置库存记录中
  834. Update u_mtrlware
  835. Set noallocqty = noallocqty + :ld_noallocqty,
  836. unoallocqty = unoallocqty + :ld_unoallocqty,
  837. allocqty = allocqty + :ld_allocqty,
  838. wareamt = wareamt + :ld_wareamt,
  839. noauditingqty = noauditingqty + :ld_noauditingqty,
  840. noauditinguqty = noauditinguqty + :ld_noauditinguqty,
  841. cost = case (noallocqty + :ld_noallocqty) when 0 then cost else (wareamt + :ld_wareamt) / (noallocqty + :ld_noallocqty) End
  842. Where scid = :ll_scid
  843. And mtrlwareid = :ll_mtrlwareid_new;
  844. If sqlca.SQLCode <> 0 Then
  845. rslt = 0
  846. arg_msg = "更新数据失败(库存合并)"+"~n"+sqlca.SQLErrText
  847. Goto ext
  848. End If
  849. //把原配置库存数量清0
  850. Update u_mtrlware
  851. Set noallocqty = 0,
  852. unoallocqty = 0,
  853. allocqty = 0,
  854. wareamt = 0,
  855. noauditingqty = 0,
  856. noauditinguqty = 0
  857. Where scid = :ll_scid
  858. And mtrlwareid = :ll_mtrlwareid;
  859. If sqlca.SQLCode <> 0 Then
  860. rslt = 0
  861. arg_msg = "更新数据失败(库存合并)"+"~n"+sqlca.SQLErrText
  862. Goto ext
  863. End If
  864. //将出仓单明细的mtrlwareid由原id更新到新id
  865. Update u_outwaremx
  866. Set u_outwaremx.mtrlwareid = :ll_mtrlwareid_new
  867. Where (u_outwaremx.mtrlwareid = :ll_mtrlwareid);
  868. If sqlca.SQLCode <> 0 Then
  869. rslt = 0
  870. arg_msg = "更新数据失败(出仓单明细库存ID变更)"+"~n"+sqlca.SQLErrText
  871. Goto ext
  872. End If
  873. //更新结存
  874. ds_balc_ori.Retrieve(ll_scid,ll_mtrlwareid)
  875. ds_balc_new.Retrieve(ll_scid,ll_mtrlwareid_new)
  876. For ll_i = 1 To ds_balc_ori.RowCount()
  877. ll_balcdateint = ds_balc_ori.Object.balcdateint[ll_i]
  878. bgqty = ds_balc_ori.Object.bgqty[ll_i]
  879. bgamt = ds_balc_ori.Object.bgamt[ll_i]
  880. incqty = ds_balc_ori.Object.incqty[ll_i]
  881. incamt = ds_balc_ori.Object.incamt[ll_i]
  882. desqty = ds_balc_ori.Object.desqty[ll_i]
  883. desamt = ds_balc_ori.Object.desamt[ll_i]
  884. balcqty = ds_balc_ori.Object.balcqty[ll_i]
  885. balcamt = ds_balc_ori.Object.balcamt[ll_i]
  886. pypk = ds_balc_ori.Object.pypk[ll_i]
  887. pypkamt = ds_balc_ori.Object.pypkamt[ll_i]
  888. buyinqty = ds_balc_ori.Object.buyinqty[ll_i]
  889. buyinamt = ds_balc_ori.Object.buyinamt[ll_i]
  890. buyinqty_pack = ds_balc_ori.Object.buyinqty_pack[ll_i]
  891. buyinamt_pack = ds_balc_ori.Object.buyinamt_pack[ll_i]
  892. saleinqty_packpro = ds_balc_ori.Object.saleinqty_packpro[ll_i]
  893. saleinamt_packpro = ds_balc_ori.Object.saleinamt_packpro[ll_i]
  894. cpinqty = ds_balc_ori.Object.cpinqty[ll_i]
  895. cpinamt = ds_balc_ori.Object.cpinamt[ll_i]
  896. jginqty = ds_balc_ori.Object.jginqty[ll_i]
  897. jginamt = ds_balc_ori.Object.jginamt[ll_i]
  898. diinqty = ds_balc_ori.Object.diinqty[ll_i]
  899. diinamt = ds_balc_ori.Object.diinamt[ll_i]
  900. mvinqty = ds_balc_ori.Object.mvinqty[ll_i]
  901. mvinamt = ds_balc_ori.Object.mvinamt[ll_i]
  902. otinqty = ds_balc_ori.Object.otinqty[ll_i]
  903. otinamt = ds_balc_ori.Object.otinamt[ll_i]
  904. pyinqty = ds_balc_ori.Object.pyinqty[ll_i]
  905. pyinamt = ds_balc_ori.Object.pyinamt[ll_i]
  906. ubgqty = ds_balc_ori.Object.ubgqty[ll_i]
  907. uincqty = ds_balc_ori.Object.uincqty[ll_i]
  908. udesqty = ds_balc_ori.Object.udesqty[ll_i]
  909. ubalcqty = ds_balc_ori.Object.ubalcqty[ll_i]
  910. ll_row = ds_balc_new.Find('balcdateint = '+String(ll_balcdateint),1,ds_balc_new.RowCount())
  911. If ll_row > 0 Then
  912. //如果同一结存表有新库存ID,则把原库存ID结存表数量加到新库存结存上面,并把原结存数量清0
  913. Update u_warebalc
  914. Set bgqty = bgqty + :bgqty,
  915. bgamt = bgamt + :bgamt,
  916. incqty = incqty + :incqty,
  917. incamt = incamt + :incamt,
  918. desqty = desqty + :desqty,
  919. desamt = desamt + :desamt,
  920. balcqty = balcqty + :balcqty,
  921. balcamt = balcamt + :balcamt,
  922. pypk = pypk + :pypk,
  923. pypkamt = pypkamt + :pypkamt,
  924. buyinqty = buyinqty + :buyinqty,
  925. buyinamt = buyinamt + :buyinamt,
  926. buyinqty_pack = buyinqty_pack + :buyinqty_pack,
  927. buyinamt_pack = buyinamt_pack + :buyinamt_pack,
  928. saleinqty_packpro = saleinqty_packpro + :saleinqty_packpro,
  929. saleinamt_packpro = saleinamt_packpro + :saleinamt_packpro,
  930. cpinqty = cpinqty + :cpinqty,
  931. cpinamt = cpinamt + :cpinamt,
  932. jginqty = jginqty + :jginqty,
  933. jginamt = jginamt + :jginamt,
  934. diinqty = diinqty + :diinqty,
  935. diinamt = diinamt + :diinamt,
  936. mvinqty = mvinqty + :mvinqty,
  937. mvinamt = mvinamt + :mvinamt,
  938. otinqty = otinqty + :otinqty,
  939. otinamt = otinamt + :otinamt,
  940. pyinqty = pyinqty + :pyinqty,
  941. pyinamt = pyinamt + :pyinamt,
  942. ubgqty = ubgqty + :ubgqty,
  943. uincqty = uincqty + :uincqty,
  944. udesqty = udesqty + :udesqty,
  945. ubalcqty = ubalcqty + :ubalcqty
  946. Where scid = :ll_scid
  947. And mtrlwareid = :ll_mtrlwareid_new
  948. And balcdateint = :ll_balcdateint;
  949. If sqlca.SQLCode <> 0 Then
  950. rslt = 0
  951. arg_msg = "更新数据失败(结存表)失败(增加新库存ID结存数量)"+"~n"+sqlca.SQLErrText
  952. Goto ext
  953. End If
  954. //清空原库存ID结存数据
  955. Update u_warebalc
  956. Set bgqty = 0,
  957. bgamt = 0,
  958. incqty = 0,
  959. incamt = 0,
  960. desqty = 0,
  961. desamt = 0,
  962. balcqty = 0,
  963. balcamt = 0,
  964. pypk = 0,
  965. pypkamt = 0,
  966. buyinqty = 0,
  967. buyinamt = 0,
  968. buyinqty_pack = 0,
  969. buyinamt_pack = 0,
  970. saleinqty_packpro = 0,
  971. saleinamt_packpro = 0,
  972. cpinqty = 0,
  973. cpinamt = 0,
  974. jginqty = 0,
  975. jginamt = 0,
  976. diinqty = 0,
  977. diinamt = 0,
  978. mvinqty = 0,
  979. mvinamt = 0,
  980. otinqty = 0,
  981. otinamt = 0,
  982. pyinqty = 0,
  983. pyinamt = 0,
  984. ubgqty = 0,
  985. uincqty = 0,
  986. udesqty = 0,
  987. ubalcqty = 0
  988. Where scid = :ll_scid
  989. And mtrlwareid = :ll_mtrlwareid
  990. And balcdateint = :ll_balcdateint;
  991. If sqlca.SQLCode <> 0 Then
  992. rslt = 0
  993. arg_msg = "更新数据失败(结存表)失败(清空原结存记录)"+"~n"+sqlca.SQLErrText
  994. Goto ext
  995. End If
  996. Else
  997. //没有找到新库存ID的结存表信息,则把原来结存表库存ID更新为新id,并把原配置更新为新配置
  998. Update u_warebalc
  999. Set status = :ls_status_new,
  1000. woodcode = :ls_woodcode_new,
  1001. pcode = :ls_pcode_new,
  1002. mtrlwareid = :ll_mtrlwareid_new
  1003. Where scid = :ll_scid
  1004. And mtrlwareid = :ll_mtrlwareid
  1005. And balcdateint = :ll_balcdateint;
  1006. If sqlca.SQLCode <> 0 Then
  1007. rslt = 0
  1008. arg_msg = "更新数据失败(结存表)失败"+"~n"+sqlca.SQLErrText
  1009. Goto ext
  1010. End If
  1011. End If
  1012. Next
  1013. End If
  1014. Next
  1015. //////////////// //
  1016. Update u_config_change
  1017. Set flag = 1,
  1018. auditdate = getdate(),
  1019. auditemp = :arg_opemp
  1020. Where billid = :arg_billid;
  1021. If sqlca.SQLCode <> 0 Then
  1022. rslt = 0
  1023. arg_msg = '更新单据状态失败,'+sqlca.SQLErrText
  1024. Goto ext
  1025. End If
  1026. ext:
  1027. If rslt = 0 Then
  1028. Rollback;
  1029. ElseIf rslt = 1 And arg_ifcommit Then
  1030. Commit;
  1031. End If
  1032. Destroy ds_price_ori
  1033. Destroy ds_price_new
  1034. Destroy ds_ware_ori
  1035. Destroy ds_ware_new
  1036. Destroy ds_balc_ori
  1037. Destroy ds_balc_new
  1038. Return rslt
  1039. end function
  1040. public function integer p_getinfo (long arg_billid, ref s_config_change arg_s_config, ref string arg_msg);Int rslt = 1
  1041. Select flag,
  1042. mtrlid,
  1043. status_ori,
  1044. woodcode_ori,
  1045. pcode_ori,
  1046. status_new,
  1047. woodcode_new,
  1048. pcode_new,
  1049. if_status,
  1050. if_woodcode,
  1051. if_pcode,
  1052. if_update_mtrl
  1053. Into :arg_s_config.flag,
  1054. :arg_s_config.mtrlid,
  1055. :arg_s_config.status_ori,
  1056. :arg_s_config.woodcode_ori,
  1057. :arg_s_config.pcode_ori,
  1058. :arg_s_config.status_new,
  1059. :arg_s_config.woodcode_new,
  1060. :arg_s_config.pcode_new,
  1061. :arg_s_config.if_status,
  1062. :arg_s_config.if_woodcode,
  1063. :arg_s_config.if_pcode,
  1064. :arg_s_config.if_update_mtrl
  1065. From u_config_change
  1066. Where billid = :arg_billid;
  1067. If sqlca.SQLCode <> 0 Then
  1068. rslt = 0
  1069. arg_msg = '查询单据信息失败,'+sqlca.SQLErrText
  1070. Goto ext
  1071. End If
  1072. ext:
  1073. Return rslt
  1074. end function
  1075. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  1076. If arg_billid <= 0 Then
  1077. rslt = 0
  1078. arg_msg = '错误的单据唯一码'
  1079. Goto ext
  1080. End If
  1081. s_config_change arg_s_config
  1082. If p_getinfo(arg_billid,arg_s_config,arg_msg) = 0 Then
  1083. rslt = 0
  1084. Goto ext
  1085. End If
  1086. If arg_s_config.flag <> 0 Then
  1087. rslt = 0
  1088. arg_msg = '单据不是待审核状态,不可以修改'
  1089. Goto ext
  1090. End If
  1091. ext:
  1092. Return rslt
  1093. end function
  1094. on uo_config_change.create
  1095. call super::create
  1096. TriggerEvent( this, "constructor" )
  1097. end on
  1098. on uo_config_change.destroy
  1099. TriggerEvent( this, "destructor" )
  1100. call super::destroy
  1101. end on