uo_mtrlware_trans_fp.sru 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572
  1. $PBExportHeader$uo_mtrlware_trans_fp.sru
  2. forward
  3. global type uo_mtrlware_trans_fp from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_mtrlware_trans_fp from nonvisualobject
  7. end type
  8. global uo_mtrlware_trans_fp uo_mtrlware_trans_fp
  9. type variables
  10. Long uo_billid
  11. String uo_billcode
  12. end variables
  13. forward prototypes
  14. public function integer save (s_mtrlware_trans_fp arg_fp, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  15. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg)
  16. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  17. public function integer updatebegin (long arg_billid, ref string arg_msg)
  18. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  19. public function integer p_getinfo (long arg_billid, ref s_mtrlware_trans_fp arg_s_ref, ref string arg_msg)
  20. public function integer caudit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  21. public function integer getinfo (long arg_billid, ref s_mtrlware_trans_fpmx arg_ref_mx[], ref s_mtrlware_trans_fpmx2 arg_ref_mx2[], ref long arg_arr_cnt, ref long arg_arr_cnt2, ref string arg_msg)
  22. public function integer affirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  23. public function integer caffirm (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  24. end prototypes
  25. public function integer save (s_mtrlware_trans_fp arg_fp, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1
  26. Long cnt = 0
  27. DateTime server_dt
  28. Long ll_billid,it_mxbt,it_mxbt2,i,j
  29. Int li_storagetype,li_ifbarcodefp,li_outtype
  30. Decimal ld_mxqty_sum,ld_barcodeqty
  31. String ls_sccode,ls_billcode
  32. Long ll_mx_taskid,ll_mx_taskprintid,ll_mtrlid
  33. IF IsNull(arg_fp.scid) THEN arg_fp.scid = 0
  34. IF IsNull(arg_fp.billid) THEN arg_fp.billid = 0
  35. IF IsNull(arg_fp.inrep) THEN arg_fp.inrep = ''
  36. IF IsNull(arg_fp.part) THEN arg_fp.part = ''
  37. IF IsNull(arg_fp.dscrp) THEN arg_fp.dscrp = ''
  38. IF IsNull(arg_fp.transqty) THEN arg_fp.transqty = 0
  39. IF IsNull(arg_fp.storageid) THEN arg_fp.storageid = 0
  40. IF IsNull(arg_fp.taskid) THEN arg_fp.taskid = 0
  41. IF IsNull(arg_fp.printid) THEN arg_fp.printid = 0
  42. IF IsNull(arg_fp.assignid) THEN arg_fp.assignid = 0
  43. IF IsNull(arg_fp.mtrlwareid) THEN arg_fp.mtrlwareid = 0
  44. IF IsNull(arg_fp.billtype) THEN arg_fp.billtype = 0
  45. IF IsNull(arg_fp.fpgrade) THEN arg_fp.fpgrade = 2
  46. IF arg_fp.scid < 0 THEN
  47. arg_msg = '错误的分部id'
  48. rslt = 0
  49. GOTO ext
  50. END IF
  51. IF arg_fp.storageid = 0 THEN
  52. arg_msg = '没有选择仓库,请检查'
  53. rslt = 0
  54. GOTO ext
  55. END IF
  56. IF f_rst_storage_storagetype(arg_fp.storageid,li_storagetype) = 0 THEN
  57. arg_msg = '查询仓库库存策略失败,操作取消'
  58. rslt = 0
  59. GOTO ext
  60. END IF
  61. IF li_storagetype <> 1 THEN
  62. arg_msg = '仓库不是使用库存分配策略失败,不能使用本单据,操作取消'
  63. rslt = 0
  64. GOTO ext
  65. END IF
  66. IF f_rst_storage_outtype(arg_fp.storageid,li_outtype) = 0 THEN
  67. arg_msg = '查询仓库出仓策略失败,操作取消'
  68. rslt = 0
  69. GOTO ext
  70. END IF
  71. //IF arg_fp.mtrlwareid = 0 THEN
  72. // arg_msg = '错误的调货库存id,可能调入的订单不存在库存资料,请检查'
  73. // rslt = 0
  74. // GOTO ext
  75. //END IF
  76. //select mtrlid into :ll_mtrlid
  77. //from u_mtrlware
  78. //where scid = :arg_fp.scid
  79. //and mtrlwareid = :arg_fp.mtrlwareid;
  80. //if sqlca.sqlcode <> 0 then
  81. // arg_msg = '查询调入库存物料id失败,'+sqlca.sqlerrtext
  82. // rslt = 0
  83. // goto ext
  84. //end if
  85. //
  86. //IF arg_fp.transqty <= 0 THEN
  87. // arg_msg = '错误的调货数量,请检查'
  88. // rslt = 0
  89. // GOTO ext
  90. //END IF
  91. IF arg_fp.inrep = '' THEN
  92. arg_msg = '请输入经手人'
  93. rslt = 0
  94. GOTO ext
  95. END IF
  96. IF arg_fp.taskid = 0 THEN
  97. arg_msg = '没有选择调入订单,请检查'
  98. rslt = 0
  99. GOTO ext
  100. END IF
  101. SELECT mtrlid INTO :ll_mtrlid
  102. FROM u_saletaskmx
  103. WHERE scid = :arg_fp.scid
  104. AND taskid = :arg_fp.taskid
  105. And printid = :arg_fp.printid;
  106. IF sqlca.SQLCode <> 0 THEN
  107. arg_msg = '查询订单明细资料失败,操作取消,'+sqlca.SQLErrText
  108. rslt = 0
  109. GOTO ext
  110. END IF
  111. SELECT Top 1 getdate() Into :server_dt From u_user;
  112. IF sqlca.SQLCode <> 0 THEN
  113. rslt = 0
  114. arg_msg = "查询操作失败,日期 "
  115. GOTO ext
  116. END IF
  117. it_mxbt = UpperBound(arg_fp.arg_s_mx)
  118. IF it_mxbt <= 0 THEN
  119. rslt = 0
  120. arg_msg = "没有正确调货分配明细内容,请检查"
  121. GOTO ext
  122. END IF
  123. it_mxbt2 = UpperBound(arg_fp.arg_s_mx2)
  124. IF it_mxbt2 <= 0 THEN
  125. rslt = 0
  126. arg_msg = "没有正确调货明细内容,请检查"
  127. GOTO ext
  128. END IF
  129. FOR j = 1 To it_mxbt2
  130. ld_mxqty_sum = 0
  131. FOR i = 1 To it_mxbt
  132. IF arg_fp.arg_s_mx2[j].printid = arg_fp.arg_s_mx[i].mxprintid THEN
  133. ld_mxqty_sum += arg_fp.arg_s_mx[i].qty
  134. END IF
  135. NEXT
  136. IF arg_fp.arg_s_mx2[j].transqty <> ld_mxqty_sum THEN
  137. rslt = 0
  138. arg_msg = "单据调入明细行:"+String(j)+",调入数量:"+String(arg_fp.arg_s_mx2[j].transqty,'#0.##########')+",与调出明细调出数量总数:"+String(ld_mxqty_sum,'#0.##########')+",不相符,请检查"
  139. GOTO ext
  140. END IF
  141. NEXT
  142. IF arg_fp.billtype = 0 Or arg_fp.billtype = 1 THEN
  143. FOR i = 1 To it_mxbt
  144. IF arg_fp.arg_s_mx[i].transtype = 0 THEN
  145. arg_fp.arg_s_mx[i].assignid = 0
  146. arg_fp.arg_s_mx[i].taskid = 0
  147. arg_fp.arg_s_mx[i].taskprintid = 0
  148. ELSE
  149. SELECT Relbillid,relprintid
  150. INTO :ll_mx_taskid,:ll_mx_taskprintid
  151. FROM u_mtrlware_assign
  152. Where assignid = :arg_fp.arg_s_mx[i].assignid;
  153. IF sqlca.SQLCode <> 0 THEN
  154. arg_msg = '调出明细行:'+String(i)+',查询库存分配相关订单信息失败,'+sqlca.SQLErrText
  155. rslt = 0
  156. GOTO ext
  157. END IF
  158. arg_fp.arg_s_mx[i].taskid = ll_mx_taskid
  159. arg_fp.arg_s_mx[i].taskprintid = ll_mx_taskprintid
  160. END IF
  161. IF li_outtype = 2 Or li_outtype = 3 THEN
  162. SELECT u_mtrldef.ifbarcodefp
  163. INTO :li_ifbarcodefp
  164. FROM u_mtrldef,u_mtrlware
  165. WHERE u_mtrldef.mtrlid = u_mtrlware.mtrlid
  166. AND u_mtrlware.scid = :arg_fp.scid
  167. And u_mtrlware.mtrlwareid = :arg_fp.arg_s_mx[i].mtrlwareid;
  168. IF sqlca.SQLCode <> 0 THEN
  169. arg_msg = '调出明细行:'+String(i)+',查询库存对应物料属性<库存条码指定分配订单>失败,'+sqlca.SQLErrText
  170. rslt = 0
  171. GOTO ext
  172. END IF
  173. IF li_ifbarcodefp = 1 THEN
  174. IF arg_fp.arg_s_mx[i].barcode = '' THEN
  175. arg_msg = '调出明细行:'+String(i)+',库存对应物料设置了<库存条码指定分配订单>属性,但没有选择条码,请检查'
  176. rslt = 0
  177. GOTO ext
  178. END IF
  179. SELECT u_mtrlware_mx.qty*u_mtrlware_mx.packqty
  180. INTO :ld_barcodeqty
  181. FROM u_mtrlware_mx
  182. Where u_mtrlware_mx.barcode = :arg_fp.arg_s_mx[i].barcode;
  183. IF sqlca.SQLCode <> 0 THEN
  184. arg_msg = '调出明细行:'+String(i)+',查询条码:'+arg_fp.arg_s_mx[i].barcode+',库存信息失败,'+sqlca.SQLErrText
  185. rslt = 0
  186. GOTO ext
  187. END IF
  188. IF arg_fp.arg_s_mx[i].qty <> ld_barcodeqty THEN
  189. arg_msg = '调出明细行:'+String(i)+',条码:'+arg_fp.arg_s_mx[i].barcode+',代表库存数与调出数量不相符,请检查'
  190. rslt = 0
  191. GOTO ext
  192. END IF
  193. END IF
  194. END IF
  195. NEXT
  196. END IF
  197. IF arg_fp.billid = 0 THEN
  198. ll_billid = f_sys_scidentity(0,"u_mtrlware_trans_fp","billid",arg_msg,True,id_sqlca)
  199. IF ll_billid <= 0 THEN
  200. rslt = 0
  201. GOTO ext
  202. END IF
  203. IF f_get_sccode(arg_fp.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  204. rslt = 0
  205. GOTO ext
  206. END IF
  207. IF arg_fp.billtype = 0 THEN //调货单
  208. ls_billcode = getid(arg_fp.scid,ls_sccode + 'TP',Date(server_dt),False,sqlca)
  209. ELSEIF arg_fp.billtype = 1 THEN //借货单
  210. ls_billcode = getid(arg_fp.scid,ls_sccode + 'TB',Date(server_dt),False,sqlca)
  211. ELSEIF arg_fp.billtype = 2 THEN //还货单
  212. ls_billcode = getid(arg_fp.scid,ls_sccode + 'TR',Date(server_dt),False,sqlca)
  213. END IF
  214. IF ls_billcode = "err" THEN
  215. rslt = 0
  216. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  217. GOTO ext
  218. END IF
  219. INSERT INTO u_mtrlware_trans_fp
  220. (scid,
  221. billid,
  222. billcode,
  223. billdate,
  224. inrep,
  225. opdate,
  226. opemp,
  227. flag,
  228. part,
  229. dscrp,
  230. storageid,
  231. mtrlwareid,
  232. taskid,
  233. printid,
  234. transqty,
  235. billtype,
  236. mtrlid,
  237. fpgrade)
  238. VALUES (
  239. :arg_fp.scid,
  240. :ll_billid,
  241. :ls_billcode,
  242. :arg_fp.billdate,
  243. :arg_fp.inrep,
  244. getdate(),
  245. :arg_opemp,
  246. 0,
  247. :arg_fp.part,
  248. :arg_fp.dscrp,
  249. :arg_fp.storageid,
  250. :arg_fp.mtrlwareid,
  251. :arg_fp.taskid,
  252. :arg_fp.printid,
  253. :arg_fp.transqty,
  254. :arg_fp.billtype,
  255. :ll_mtrlid,
  256. :arg_fp.fpgrade) ;
  257. IF sqlca.SQLCode <> 0 THEN
  258. rslt = 0
  259. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  260. GOTO ext
  261. END IF
  262. FOR i = 1 To it_mxbt
  263. INSERT INTO u_mtrlware_transmx_fp
  264. (billid,
  265. printid,
  266. transtype,
  267. assignid,
  268. Qty,
  269. mxdscrp,
  270. taskid,
  271. taskprintid,
  272. mxprintid,
  273. relid,
  274. relprintid,
  275. mtrlwareid,
  276. rel_assignid,
  277. barcode,
  278. scid)
  279. VALUES (:ll_billid,
  280. :arg_fp.arg_s_mx[i].printid,
  281. :arg_fp.arg_s_mx[i].transtype,
  282. :arg_fp.arg_s_mx[i].assignid,
  283. :arg_fp.arg_s_mx[i].qty,
  284. :arg_fp.arg_s_mx[i].mxdscrp,
  285. :arg_fp.arg_s_mx[i].taskid,
  286. :arg_fp.arg_s_mx[i].taskprintid,
  287. :arg_fp.arg_s_mx[i].mxprintid,
  288. :arg_fp.arg_s_mx[i].relid,
  289. :arg_fp.arg_s_mx[i].relprintid,
  290. :arg_fp.arg_s_mx[i].mtrlwareid,
  291. :arg_fp.arg_s_mx[i].rel_assignid,
  292. :arg_fp.arg_s_mx[i].barcode,
  293. :arg_fp.scid);
  294. IF sqlca.SQLCode <> 0 THEN
  295. rslt = 0
  296. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  297. GOTO ext
  298. END IF
  299. NEXT
  300. FOR i = 1 To it_mxbt2
  301. INSERT INTO u_mtrlware_transmx_fp2
  302. (billid,
  303. printid,
  304. mtrlid,
  305. assignid,
  306. transqty,
  307. mtrlwareid,
  308. taskid,
  309. taskprintid,
  310. status,
  311. woodcode,
  312. pcode,
  313. sonscale,
  314. mxtype,
  315. scid)
  316. VALUES (:ll_billid,
  317. :arg_fp.arg_s_mx2[i].printid,
  318. :arg_fp.arg_s_mx2[i].mtrlid,
  319. :arg_fp.arg_s_mx2[i].assignid,
  320. :arg_fp.arg_s_mx2[i].transqty,
  321. :arg_fp.arg_s_mx2[i].mtrlwareid,
  322. :arg_fp.arg_s_mx2[i].taskid,
  323. :arg_fp.arg_s_mx2[i].taskprintid,
  324. :arg_fp.arg_s_mx2[i].status,
  325. :arg_fp.arg_s_mx2[i].woodcode,
  326. :arg_fp.arg_s_mx2[i].pcode,
  327. :arg_fp.arg_s_mx2[i].sonscale,
  328. :arg_fp.arg_s_mx2[i].mxtype,
  329. :arg_fp.scid);
  330. IF sqlca.SQLCode <> 0 THEN
  331. rslt = 0
  332. arg_msg = "因网络或其它原因导致插入明细2操作失败"+"~n"+sqlca.SQLErrText
  333. GOTO ext
  334. END IF
  335. NEXT
  336. uo_billid = ll_billid
  337. uo_billcode = ls_billcode
  338. ELSE
  339. UPDATE u_mtrlware_trans_fp
  340. SET billdate = :arg_fp.billdate,
  341. inrep = :arg_fp.inrep,
  342. moddate = getdate(),
  343. modemp = :arg_opemp,
  344. part = :arg_fp.part,
  345. storageid = :arg_fp.storageid,
  346. mtrlwareid = :arg_fp.mtrlwareid,
  347. taskid = :arg_fp.taskid,
  348. printid = :arg_fp.printid,
  349. transqty = :arg_fp.transqty,
  350. fpgrade = :arg_fp.fpgrade,
  351. dscrp = :arg_fp.dscrp,
  352. mtrlid = :ll_mtrlid
  353. WHERE billid = :arg_fp.billid
  354. And flag = 0;
  355. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  356. rslt = 0
  357. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  358. GOTO ext
  359. END IF
  360. DELETE FROM u_mtrlware_transmx_fp
  361. Where billid = :arg_fp.billid;
  362. IF sqlca.SQLCode <> 0 THEN
  363. rslt = 0
  364. arg_msg = "删除原明细操作失败"+"~n"+sqlca.SQLErrText
  365. GOTO ext
  366. END IF
  367. DELETE FROM u_mtrlware_transmx_fp2
  368. Where billid = :arg_fp.billid;
  369. IF sqlca.SQLCode <> 0 THEN
  370. rslt = 0
  371. arg_msg = "删除原明细2操作失败"+"~n"+sqlca.SQLErrText
  372. GOTO ext
  373. END IF
  374. FOR i = 1 To it_mxbt
  375. INSERT INTO u_mtrlware_transmx_fp
  376. (billid,
  377. printid,
  378. transtype,
  379. assignid,
  380. Qty,
  381. mxdscrp,
  382. taskid,
  383. taskprintid,
  384. mxprintid,
  385. relid,
  386. relprintid,
  387. mtrlwareid,
  388. rel_assignid,
  389. barcode,
  390. scid)
  391. VALUES (:arg_fp.billid,
  392. :arg_fp.arg_s_mx[i].printid,
  393. :arg_fp.arg_s_mx[i].transtype,
  394. :arg_fp.arg_s_mx[i].assignid,
  395. :arg_fp.arg_s_mx[i].qty,
  396. :arg_fp.arg_s_mx[i].mxdscrp,
  397. :arg_fp.arg_s_mx[i].taskid,
  398. :arg_fp.arg_s_mx[i].taskprintid,
  399. :arg_fp.arg_s_mx[i].mxprintid,
  400. :arg_fp.arg_s_mx[i].relid,
  401. :arg_fp.arg_s_mx[i].relprintid,
  402. :arg_fp.arg_s_mx[i].mtrlwareid,
  403. :arg_fp.arg_s_mx[i].rel_assignid,
  404. :arg_fp.arg_s_mx[i].barcode,
  405. :arg_fp.scid);
  406. IF sqlca.SQLCode <> 0 THEN
  407. rslt = 0
  408. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  409. GOTO ext
  410. END IF
  411. NEXT
  412. FOR i = 1 To it_mxbt2
  413. INSERT INTO u_mtrlware_transmx_fp2
  414. (billid,
  415. printid,
  416. mtrlid,
  417. assignid,
  418. transqty,
  419. mtrlwareid,
  420. taskid,
  421. taskprintid,
  422. status,
  423. woodcode,
  424. pcode,
  425. sonscale,
  426. mxtype,
  427. scid)
  428. VALUES (:arg_fp.billid,
  429. :arg_fp.arg_s_mx2[i].printid,
  430. :arg_fp.arg_s_mx2[i].mtrlid,
  431. :arg_fp.arg_s_mx2[i].assignid,
  432. :arg_fp.arg_s_mx2[i].transqty,
  433. :arg_fp.arg_s_mx2[i].mtrlwareid,
  434. :arg_fp.arg_s_mx2[i].taskid,
  435. :arg_fp.arg_s_mx2[i].taskprintid,
  436. :arg_fp.arg_s_mx2[i].status,
  437. :arg_fp.arg_s_mx2[i].woodcode,
  438. :arg_fp.arg_s_mx2[i].pcode,
  439. :arg_fp.arg_s_mx2[i].sonscale,
  440. :arg_fp.arg_s_mx2[i].mxtype,
  441. :arg_fp.scid);
  442. IF sqlca.SQLCode <> 0 THEN
  443. rslt = 0
  444. arg_msg = "因网络或其它原因导致插入明细2操作失败"+"~n"+sqlca.SQLErrText
  445. GOTO ext
  446. END IF
  447. NEXT
  448. uo_billid = arg_fp.billid
  449. END IF
  450. ext:
  451. IF rslt = 0 THEN
  452. ROLLBACK;
  453. ELSEIF arg_ifcommit And rslt = 1 THEN
  454. COMMIT;
  455. END IF
  456. RETURN rslt
  457. end function
  458. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);
  459. Int rslt = 1
  460. s_mtrlware_trans_fp arg_s_ref
  461. IF arg_newdescppart = '' THEN
  462. rslt = 0
  463. arG_MSG = "要添加内容为空,操作取消"
  464. GOTO ext
  465. END IF
  466. IF p_getinfo(arg_billid,arg_s_ref,arG_MSG) = 0 THEN
  467. rslt = 0
  468. GOTO ext
  469. END IF
  470. IF arg_s_ref.flag = 0 THEN
  471. rslt = 0
  472. arG_MSG = "待审核状态下不可用"
  473. GOTO ext
  474. END IF
  475. UPDATE u_mtrlware_trans_fp
  476. SET DSCRP = DSCRP+' '+:arg_newdescppart
  477. Where u_mtrlware_trans_fp.billid = :arg_billid;
  478. IF SQLCA.SQLCode <> 0 THEN
  479. rslt = 0
  480. arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  481. GOTO ext
  482. END IF
  483. ext:
  484. IF rslt = 1 THEN
  485. COMMIT;
  486. ELSE
  487. ROLLBACK;
  488. END IF
  489. Return (rslt)
  490. end function
  491. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  492. s_mtrlware_trans_fp arg_s_ref
  493. IF arg_billid <= 0 THEN
  494. rslt = 0
  495. arg_msg = '错误单据唯一码'
  496. GOTO ext
  497. END IF
  498. IF p_getinfo(arg_billid,arg_s_ref,arg_msg) = 0 THEN
  499. rslt = 0
  500. GOTO ext
  501. END IF
  502. IF arg_s_ref.affirmflag <> 0 THEN
  503. rslt = 0
  504. arg_msg = '单据不是在待初审状态,不可以删除'
  505. GOTO ext
  506. END IF
  507. DELETE FROM u_mtrlware_transmx_fp
  508. Where billid = :arg_billid;
  509. IF sqlca.SQLCode <> 0 THEN
  510. rslt = 0
  511. arg_msg = "删除单据调出明细操作失败"+"~n"+sqlca.SQLErrText
  512. GOTO ext
  513. END IF
  514. DELETE FROM u_mtrlware_transmx_fp2
  515. Where billid = :arg_billid;
  516. IF sqlca.SQLCode <> 0 THEN
  517. rslt = 0
  518. arg_msg = "删除单据调入明细操作失败"+"~n"+sqlca.SQLErrText
  519. GOTO ext
  520. END IF
  521. DELETE FROM u_mtrlware_trans_fp
  522. WHERE billid = :arg_billid
  523. And flag = 0;
  524. IF sqlca.SQLCode <> 0 THEN
  525. rslt = 0
  526. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  527. GOTO ext
  528. END IF
  529. ext:
  530. IF rslt = 0 THEN
  531. ROLLBACK;
  532. ELSEIF rslt = 1 And arg_ifcommit THEN
  533. COMMIT;
  534. END IF
  535. RETURN rslt
  536. end function
  537. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  538. s_mtrlware_trans_fp arg_s_ref
  539. Long cnt
  540. IF arg_billid <= 0 THEN
  541. rslt = 0
  542. arg_msg = '错误单据唯一码'
  543. GOTO ext
  544. END IF
  545. IF p_getinfo(arg_billid,arg_s_ref,arg_msg) = 0 THEN
  546. rslt = 0
  547. GOTO ext
  548. END IF
  549. IF arg_s_ref.flag = 1 THEN
  550. rslt = 0
  551. arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核'
  552. GOTO ext
  553. END IF
  554. IF arg_s_ref.affirmflag = 1 THEN
  555. rslt = 0
  556. ARG_MSG = '单据已经初审,不可以修改,要修改请先撤销审核'
  557. GOTO ext
  558. END IF
  559. ext:
  560. RETURN rslt
  561. end function
  562. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  563. Long ll_array,ll_array2,i,j,k,ll_ref_assiginid
  564. Decimal ld_qty_lend,ld_qty_return
  565. Decimal ld_notoutqty
  566. Decimal ld_sumoutqty_bill,ld_sumnotoutqty,ld_assign_outqty
  567. Long ll_row,ll_mtrlwareid
  568. Long ll_mxprintid
  569. Long ll_taskid,ll_taskprintid
  570. String ls_taskcode
  571. Int li_ifbarcodefp,li_outtype_storage
  572. Decimal ld_notallocqty
  573. s_mtrlware_trans_fp arg_s_ref
  574. s_mtrlware_trans_fpmx arg_ref_mx[]
  575. s_mtrlware_trans_fpmx2 arg_ref_mx2[]
  576. uo_mtrlware_assign uo_assign_bill
  577. uo_assign_bill = Create uo_mtrlware_assign
  578. uo_assign_bill.commit_transaction = sqlca
  579. uo_getbar uo_bar
  580. uo_bar = Create uo_getbar
  581. datastore ds_out_assign
  582. ds_out_assign = Create datastore
  583. ds_out_assign.DataObject = 'ds_outwaremx_assign'
  584. ds_out_assign.SetTransObject(sqlca)
  585. IF arg_billid <= 0 THEN
  586. rslt = 0
  587. ARG_MSG = '错误单据唯一码'
  588. GOTO ext
  589. END IF
  590. IF p_getinfo(arg_billid,arg_s_ref,ARG_MSG) = 0 THEN
  591. rslt = 0
  592. GOTO ext
  593. END IF
  594. IF arg_s_ref.affirmflag <> 1 THEN
  595. rslt = 0
  596. ARG_MSG = '单据没有初审,不可以终审'
  597. GOTO ext
  598. END IF
  599. IF arg_s_ref.flag <> 0 THEN
  600. rslt = 0
  601. ARG_MSG = '单据不是在待终审状态,不可以终审'
  602. GOTO ext
  603. END IF
  604. SELECT outtype INTO :li_outtype_storage
  605. FROM u_storage
  606. Where u_storage.storageid = :arg_s_ref.storageid;
  607. IF sqlca.SQLCode <> 0 THEN
  608. ARG_MSG = '查询仓库出仓策略失败,'+sqlca.SQLErrText
  609. rslt = 0
  610. GOTO ext
  611. END IF
  612. IF getinfo(arg_billid,arg_ref_mx,arg_ref_mx2,ll_array,ll_array2,ARG_MSG) = 0 THEN
  613. rslt = 0
  614. GOTO ext
  615. END IF
  616. //更新审核标记
  617. UPDATE u_mtrlware_trans_fp
  618. SET auditingrep = :arg_opemp,
  619. auditingdate = getdate(),
  620. flag = 1
  621. WHERE billid = :arg_billid
  622. And flag = 0;
  623. IF sqlca.SQLCode <> 0 THEN
  624. rslt = 0
  625. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  626. GOTO ext
  627. ELSEIF sqlca.SQLNRows = 0 THEN
  628. rslt = 0
  629. ARG_MSG = "单据正在审核,请稍后重试"
  630. GOTO ext
  631. END IF
  632. IF arg_s_ref.billtype = 0 Or arg_s_ref.billtype = 1 THEN
  633. //处理调出明细
  634. FOR i = 1 To ll_array
  635. IF arg_ref_mx[i].transtype = 0 THEN CONTINUE
  636. IF arg_s_ref.billtype = 0 And arg_ref_mx[i].barcode <> '' THEN
  637. uo_assign_bill.li_if_uo_mtrlware_trans_fp_deluse = 1
  638. ELSE
  639. uo_assign_bill.li_if_uo_mtrlware_trans_fp_deluse = 0
  640. END IF
  641. IF uo_assign_bill.uof_assign_del(arg_ref_mx[i].assignid,&
  642. arg_ref_mx[i].qty,ARG_MSG,False) = 0 THEN
  643. ARG_MSG = '明细行:'+String(i)+','+ARG_MSG
  644. rslt = 0
  645. GOTO ext
  646. END IF
  647. NEXT
  648. //处理调入明细
  649. FOR i = 1 To ll_array
  650. ll_taskid = 0
  651. ll_taskprintid = 0
  652. FOR j = 1 To ll_array2
  653. IF arg_ref_mx2[j].printid = arg_ref_mx[i].mxprintid THEN
  654. ll_taskid = arg_ref_mx2[j].taskid
  655. ll_taskprintid = arg_ref_mx2[j].taskprintid
  656. li_ifbarcodefp = arg_ref_mx2[j].ifbarcodefp
  657. ls_taskcode = arg_s_ref.taskcode
  658. EXIT
  659. END IF
  660. NEXT
  661. IF uo_assign_bill.uof_assign_add(arg_s_ref.scid,&
  662. arg_ref_mx[i].mtrlwareid,1,ll_taskid,&
  663. ll_taskprintid,arg_ref_mx[i].qty,0,'','','',&
  664. 0,arg_s_ref.fpgrade,arg_opemp,ARG_MSG,False) = 0 THEN
  665. rslt = 0
  666. GOTO ext
  667. END IF
  668. ll_ref_assiginid = uo_assign_bill.uo_assignid
  669. UPDATE u_mtrlware_transmx_fp
  670. SET rel_assignid = :ll_ref_assiginid
  671. WHERE billid = :arg_billid
  672. And printid = :arg_ref_mx[i].printid;
  673. IF sqlca.SQLCode <> 0 THEN
  674. rslt = 0
  675. ARG_MSG = "更新调入明细相关库存分配id操作失败"+"~n"+sqlca.SQLErrText
  676. GOTO ext
  677. END IF
  678. IF li_ifbarcodefp = 1 And &
  679. arg_s_ref.billtype = 0 And &
  680. arg_ref_mx[i].barcode <> '' And &
  681. ( li_outtype_storage = 2 Or li_outtype_storage = 3 ) THEN
  682. IF uo_bar.uof_barcode_fp(arg_ref_mx[i].barcode,ls_taskcode,ll_taskid,ll_taskprintid,ARG_MSG,False) = 0 THEN
  683. rslt = 0
  684. ARG_MSG = "更新调出明细行:"+String(i)+",条码相关调入订单信息失败"+"~n"+ARG_MSG
  685. GOTO ext
  686. END IF
  687. END IF
  688. NEXT
  689. // FOR i = 1 To ll_array2
  690. // IF uo_assign_bill.uof_assign_add(arg_s_ref.scid,&
  691. // arg_ref_mx2[i].mtrlwareid,1,arg_ref_mx2[i].taskid,&
  692. // arg_ref_mx2[i].taskprintid,arg_ref_mx2[i].transqty,0,'','','',&
  693. // 0,arg_s_ref.fpgrade,arg_opemp,ARG_MSG,False) = 0 THEN
  694. // rslt = 0
  695. // GOTO ext
  696. // END IF
  697. //
  698. // ll_ref_assiginid = uo_assign_bill.uo_assignid
  699. //
  700. // UPDATE u_mtrlware_transmx_fp2
  701. // SET assignid = :ll_ref_assiginid
  702. // WHERE billid = :arg_billid
  703. // And printid = :arg_ref_mx2[i].printid;
  704. // IF sqlca.SQLCode <> 0 THEN
  705. // rslt = 0
  706. // ARG_MSG = "更新调入明细相关库存分配id操作失败"+"~n"+sqlca.SQLErrText
  707. // GOTO ext
  708. // END IF
  709. // NEXT
  710. ELSEIF arg_s_ref.billtype = 2 THEN
  711. //扣减还货明细
  712. FOR i = 1 To ll_array
  713. FOR k = 1 To ll_array2
  714. IF arg_ref_mx2[k].printid = arg_ref_mx[i].mxprintid THEN
  715. IF arg_ref_mx2[k].mxtype = 0 THEN
  716. GOTO _next
  717. END IF
  718. ll_taskid = arg_ref_mx2[k].taskid
  719. ll_taskprintid = arg_ref_mx2[k].taskprintid
  720. EXIT
  721. END IF
  722. NEXT
  723. ll_row = ds_out_assign.Retrieve(arg_s_ref.scid,arg_ref_mx[i].mtrlwareid,ll_taskid,ll_taskprintid)
  724. ds_out_assign.AcceptText()
  725. IF ll_row <= 0 THEN
  726. ld_sumnotoutqty = 0
  727. ELSE
  728. ld_sumnotoutqty = ds_out_assign.Object.sumnotoutqty[1]
  729. END IF
  730. ld_sumoutqty_bill = 0
  731. ld_sumoutqty_bill = arg_ref_mx2[i].transqty
  732. IF ld_sumoutqty_bill > ld_sumnotoutqty THEN
  733. rslt = 0
  734. ARG_MSG = '第'+String(i)+'行,库存可还货数量只有:'+String(ld_sumnotoutqty,'#,##0.##########')+',不能还货:'+String(arg_ref_mx2[i].transqty,'#,##0.##########')
  735. GOTO ext
  736. ELSE
  737. ld_assign_outqty = 0
  738. FOR j = 1 To ds_out_assign.RowCount()
  739. IF ds_out_assign.Object.notoutqty[j] >= ld_sumoutqty_bill THEN
  740. ld_assign_outqty = ld_sumoutqty_bill
  741. IF uo_assign_bill.uof_assign_del(ds_out_assign.Object.assignid[j],&
  742. ld_assign_outqty,ARG_MSG,False) = 0 THEN
  743. ARG_MSG = '明细行:'+String(i)+','+ARG_MSG
  744. rslt = 0
  745. GOTO ext
  746. END IF
  747. EXIT
  748. ELSE
  749. ld_assign_outqty = ds_out_assign.Object.notoutqty[j]
  750. IF uo_assign_bill.uof_assign_del(ds_out_assign.Object.assignid[j],&
  751. ld_assign_outqty,ARG_MSG,False) = 0 THEN
  752. ARG_MSG = '明细行:'+String(i)+','+ARG_MSG
  753. rslt = 0
  754. GOTO ext
  755. END IF
  756. ld_sumoutqty_bill = ld_sumoutqty_bill - ld_assign_outqty
  757. END IF
  758. NEXT
  759. END IF
  760. _next:
  761. NEXT
  762. //增加调入明细
  763. FOR i = 1 To ll_array
  764. IF uo_assign_bill.uof_assign_add(arg_s_ref.scid,&
  765. arg_ref_mx[i].mtrlwareid,1,arg_ref_mx[i].taskid,&
  766. arg_ref_mx[i].taskprintid,arg_ref_mx[i].qty,0,'','','',&
  767. 0,arg_s_ref.fpgrade,arg_opemp,ARG_MSG,False) = 0 THEN
  768. rslt = 0
  769. GOTO ext
  770. END IF
  771. ll_ref_assiginid = uo_assign_bill.uo_assignid
  772. UPDATE u_mtrlware_transmx_fp
  773. SET assignid = :ll_ref_assiginid
  774. WHERE billid = :arg_billid
  775. And printid = :arg_ref_mx[i].printid;
  776. IF sqlca.SQLCode <> 0 THEN
  777. rslt = 0
  778. ARG_MSG = "更新调入明细相关库存分配id操作失败"+"~n"+sqlca.SQLErrText
  779. GOTO ext
  780. END IF
  781. NEXT
  782. END IF
  783. //还货单要更新借货单的已还货数
  784. IF arg_s_ref.billtype = 2 THEN
  785. FOR i = 1 To ll_array
  786. IF arg_ref_mx[i].relid > 0 And arg_ref_mx[i].Relprintid > 0 THEN
  787. SELECT qty,returnqty
  788. INTO :ld_qty_lend,:ld_qty_return
  789. FROM u_mtrlware_transmx_fp
  790. WHERE billid = :arg_ref_mx[i].relid
  791. And printid = :arg_ref_mx[i].Relprintid;
  792. IF sqlca.SQLCode <> 0 THEN
  793. rslt = 0
  794. ARG_MSG = '第'+String(i)+'行,查询相关借货单数量失败,'+sqlca.SQLErrText
  795. GOTO ext
  796. END IF
  797. IF arg_ref_mx[i].qty > ld_qty_lend - ld_qty_return THEN
  798. rslt = 0
  799. ARG_MSG = '第'+String(i)+'行,未还货数只有:'+String(ld_qty_lend - ld_qty_return,'#,##0.##########')+',不能还货:'+String(arg_ref_mx[i].qty,'#,##0.##########')
  800. GOTO ext
  801. END IF
  802. UPDATE u_mtrlware_transmx_fp
  803. SET returnqty = returnqty + :arg_ref_mx[i].qty
  804. WHERE billid = :arg_ref_mx[i].relid
  805. And printid = :arg_ref_mx[i].Relprintid;
  806. IF sqlca.SQLCode <> 0 THEN
  807. rslt = 0
  808. ARG_MSG = '第'+String(i)+'行,更新相关借货单已还货数失败,'+sqlca.SQLErrText
  809. GOTO ext
  810. END IF
  811. SELECT mxprintid
  812. INTO :ll_mxprintid
  813. FROM u_mtrlware_transmx_fp
  814. WHERE billid = :arg_ref_mx[i].relid
  815. And printid = :arg_ref_mx[i].Relprintid;
  816. IF sqlca.SQLCode <> 0 THEN
  817. rslt = 0
  818. ARG_MSG = '第'+String(i)+'行,查询相关借货单明细信息失败,'+sqlca.SQLErrText
  819. GOTO ext
  820. END IF
  821. UPDATE u_mtrlware_transmx_fp2
  822. SET returnqty = returnqty + :arg_ref_mx[i].qty
  823. WHERE billid = :arg_ref_mx[i].relid
  824. And printid = :ll_mxprintid;
  825. IF sqlca.SQLCode <> 0 THEN
  826. rslt = 0
  827. ARG_MSG = '第'+String(i)+'行,更新相关借货单调入明细已还货数失败,'+sqlca.SQLErrText
  828. GOTO ext
  829. END IF
  830. END IF
  831. NEXT
  832. END IF
  833. ext:
  834. IF rslt = 0 THEN
  835. ROLLBACK;
  836. ELSEIF rslt = 1 And arg_ifcommit THEN
  837. COMMIT;
  838. END IF
  839. Destroy uo_assign_bill
  840. Destroy ds_out_assign
  841. Destroy uo_bar
  842. RETURN rslt
  843. end function
  844. public function integer p_getinfo (long arg_billid, ref s_mtrlware_trans_fp arg_s_ref, ref string arg_msg);Int rslt = 1
  845. SELECT u_mtrlware_trans_fp.scid,
  846. u_mtrlware_trans_fp.billid,
  847. u_mtrlware_trans_fp.billdate,
  848. u_mtrlware_trans_fp.flag,
  849. u_mtrlware_trans_fp.inrep,
  850. u_mtrlware_trans_fp.part,
  851. u_mtrlware_trans_fp.dscrp,
  852. u_mtrlware_trans_fp.storageid,
  853. u_mtrlware_trans_fp.taskid,
  854. u_mtrlware_trans_fp.printid,
  855. u_mtrlware_trans_fp.transqty,
  856. u_mtrlware_trans_fp.assignid,
  857. u_mtrlware_trans_fp.mtrlwareid,
  858. u_mtrlware_trans_fp.billtype,
  859. u_mtrlware_trans_fp.fpgrade,
  860. isnull(u_saletask.taskcode,''),
  861. u_mtrlware_trans_fp.affirmflag,
  862. u_mtrlware_trans_fp.affirmrep,
  863. u_mtrlware_trans_fp.affirmdate
  864. INTO :arg_s_ref.scid,
  865. :arg_s_ref.billid,
  866. :arg_s_ref.billdate,
  867. :arg_s_ref.flag,
  868. :arg_s_ref.inrep,
  869. :arg_s_ref.part,
  870. :arg_s_ref.dscrp,
  871. :arg_s_ref.storageid,
  872. :arg_s_ref.taskid,
  873. :arg_s_ref.printid,
  874. :arg_s_ref.transqty,
  875. :arg_s_ref.assignid,
  876. :arg_s_ref.mtrlwareid,
  877. :arg_s_ref.billtype,
  878. :arg_s_ref.fpgrade,
  879. :arg_s_ref.taskcode,
  880. :arg_s_ref.affirmflag,
  881. :arg_s_ref.affirmrep,
  882. :arg_s_ref.affirmdate
  883. FROM u_mtrlware_trans_fp left outer join u_saletask
  884. on u_mtrlware_trans_fp.scid = u_saletask.scid
  885. and u_mtrlware_trans_fp.taskid = u_saletask.taskid
  886. Where billid = :arg_billid;
  887. IF sqlca.SQLCode <> 0 THEN
  888. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  889. rslt = 0
  890. GOTO ext
  891. END IF
  892. ext:
  893. RETURN rslt
  894. end function
  895. public function integer caudit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  896. Long cnt,ll_array,ll_array2,i,j,k
  897. Decimal ld_qty_return
  898. Long ll_mtrlwareid,ll_mxprintid
  899. Long ll_taskid,ll_taskprintid,ll_assiginid
  900. s_mtrlware_trans_fp arg_s_ref
  901. s_mtrlware_trans_fpmx arg_ref_mx[]
  902. s_mtrlware_trans_fpmx2 arg_ref_mx2[]
  903. uo_mtrlware_assign uo_assign_bill
  904. uo_assign_bill = Create uo_mtrlware_assign
  905. uo_assign_bill.commit_transaction = sqlca
  906. uo_getbar uo_bar
  907. uo_bar = Create uo_getbar
  908. DateTime null_dt
  909. SetNull(null_dt)
  910. IF arg_billid <= 0 THEN
  911. rslt = 0
  912. ARG_MSG = '错误单据唯一码'
  913. GOTO ext
  914. END IF
  915. IF p_getinfo(arg_billid,arg_s_ref,ARG_MSG) = 0 THEN
  916. rslt = 0
  917. GOTO ext
  918. END IF
  919. IF arg_s_ref.flag <> 1 THEN
  920. rslt = 0
  921. ARG_MSG = '单据不是在已审状态,不可以撤审'
  922. GOTO ext
  923. END IF
  924. IF getinfo(arg_billid,arg_ref_mx,arg_ref_mx2,ll_array,ll_array2,ARG_MSG) = 0 THEN
  925. rslt = 0
  926. GOTO ext
  927. END IF
  928. //如果是借货单,需求检查是否已开还货单
  929. IF arg_s_ref.billtype = 1 THEN
  930. SELECT count(*)
  931. INTO :cnt
  932. FROM u_mtrlware_transmx_fp
  933. Where relid = :arg_billid;
  934. IF sqlca.SQLCode <> 0 THEN
  935. rslt = 0
  936. ARG_MSG = '查询借货单是否已开还货单失败,'+sqlca.SQLErrText
  937. GOTO ext
  938. END IF
  939. IF cnt > 0 THEN
  940. ARG_MSG = '本借货单已开相关还货单,不能撤审,请检查'
  941. rslt = 0
  942. GOTO ext
  943. END IF
  944. END IF
  945. //更新审核标记
  946. UPDATE u_mtrlware_trans_fp
  947. SET auditingrep = '',
  948. auditingdate = :null_dt,
  949. flag = 0,
  950. assignid = 0
  951. WHERE billid = :arg_billid
  952. And flag = 1;
  953. IF sqlca.SQLCode <> 0 THEN
  954. rslt = 0
  955. ARG_MSG = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText
  956. GOTO ext
  957. ELSEIF sqlca.SQLNRows = 0 THEN
  958. rslt = 0
  959. ARG_MSG = "单据正在撤审,请稍后重试"
  960. GOTO ext
  961. END IF
  962. IF arg_s_ref.billtype = 0 Or arg_s_ref.billtype = 1 THEN
  963. //处理调入明细
  964. FOR i = 1 To ll_array
  965. IF arg_s_ref.billtype = 0 And arg_ref_mx[i].barcode <> '' THEN
  966. uo_assign_bill.li_if_uo_mtrlware_trans_fp_deluse = 1
  967. ELSE
  968. uo_assign_bill.li_if_uo_mtrlware_trans_fp_deluse = 0
  969. END IF
  970. IF uo_assign_bill.uof_assign_del(arg_ref_mx[i].rel_assignid,&
  971. arg_ref_mx[i].qty,ARG_MSG,False) = 0 THEN
  972. rslt = 0
  973. GOTO ext
  974. END IF
  975. NEXT
  976. //处理调出明细
  977. FOR i = 1 To ll_array
  978. IF arg_ref_mx[i].transtype = 0 THEN CONTINUE
  979. cnt = 0
  980. SELECT count(*) INTO :cnt
  981. FROM u_mtrlware_assign
  982. Where assignid = :arg_ref_mx[i].assignid;
  983. IF sqlca.SQLCode <> 0 THEN cnt = 0
  984. IF cnt = 1 THEN
  985. IF uo_assign_bill.uof_assign_del(arg_ref_mx[i].assignid,&
  986. 0 - arg_ref_mx[i].qty,ARG_MSG,False) = 0 THEN
  987. rslt = 0
  988. GOTO ext
  989. END IF
  990. ELSE
  991. // SELECT mtrlwareid
  992. // INTO :ll_mtrlwareid
  993. // FROM u_mtrlware_transmx_fp
  994. // WHERE billid = :arg_billid
  995. // And printid = :arg_ref_mx[i].printid;
  996. // IF sqlca.SQLCode <> 0 THEN
  997. // rslt = 0
  998. // ARG_MSG = '调出明细第'+String(i)+'行,查询库存信息失败,'+sqlca.SQLErrText
  999. // GOTO ext
  1000. // END IF
  1001. IF uo_assign_bill.uof_assign_add(arg_s_ref.scid,&
  1002. arg_ref_mx[i].mtrlwareid,1,arg_ref_mx[i].taskid,&
  1003. arg_ref_mx[i].taskprintid,arg_ref_mx[i].qty,0,'','','',&
  1004. 0,arg_s_ref.fpgrade,arg_opemp,ARG_MSG,False) = 0 THEN
  1005. rslt = 0
  1006. GOTO ext
  1007. END IF
  1008. ll_assiginid = uo_assign_bill.uo_assignid
  1009. UPDATE u_mtrlware_transmx_fp
  1010. SET assignid = :ll_assiginid
  1011. WHERE billid = :arg_billid
  1012. And printid = :arg_ref_mx[i].printid;
  1013. IF sqlca.SQLCode <> 0 THEN
  1014. rslt = 0
  1015. ARG_MSG = "更新调入明细库存分配id操作失败"+"~n"+sqlca.SQLErrText
  1016. GOTO ext
  1017. END IF
  1018. IF arg_ref_mx[i].barcode <> '' And arg_s_ref.billtype = 0 THEN
  1019. IF uo_bar.uof_barcode_fp(arg_ref_mx[i].barcode,arg_ref_mx[i].taskcode,arg_ref_mx[i].taskid,arg_ref_mx[i].taskprintid,ARG_MSG,False) = 0 THEN
  1020. rslt = 0
  1021. ARG_MSG = "更新调出明细行:"+String(i)+",条码相关调入订单信息失败"+"~n"+ARG_MSG
  1022. GOTO ext
  1023. END IF
  1024. END IF
  1025. END IF
  1026. NEXT
  1027. ELSEIF arg_s_ref.billtype = 2 THEN
  1028. //扣减调入明细_mx
  1029. FOR i = 1 To ll_array
  1030. IF uo_assign_bill.uof_assign_del(arg_ref_mx[i].assignid,&
  1031. arg_ref_mx[i].qty,ARG_MSG,False) = 0 THEN
  1032. rslt = 0
  1033. GOTO ext
  1034. END IF
  1035. NEXT
  1036. //增加还货明细_mx2
  1037. FOR i = 1 To ll_array
  1038. FOR k = 1 To ll_array2
  1039. IF arg_ref_mx2[k].printid = arg_ref_mx[i].mxprintid THEN
  1040. IF arg_ref_mx2[k].mxtype = 0 THEN
  1041. GOTO _next
  1042. END IF
  1043. ll_taskid = arg_ref_mx2[k].taskid
  1044. ll_taskprintid = arg_ref_mx2[k].taskprintid
  1045. EXIT
  1046. END IF
  1047. NEXT
  1048. IF uo_assign_bill.uof_assign_add(arg_s_ref.scid,&
  1049. arg_ref_mx[i].mtrlwareid,1,ll_taskid,&
  1050. ll_taskprintid,arg_ref_mx[i].qty,0,'','','',&
  1051. 0,arg_s_ref.fpgrade,arg_opemp,ARG_MSG,False) = 0 THEN
  1052. rslt = 0
  1053. GOTO ext
  1054. END IF
  1055. _next:
  1056. NEXT
  1057. END IF
  1058. IF arg_s_ref.billtype = 2 THEN
  1059. FOR i = 1 To ll_array
  1060. IF arg_ref_mx[i].relid > 0 And arg_ref_mx[i].Relprintid > 0 THEN
  1061. SELECT returnqty
  1062. INTO :ld_qty_return
  1063. FROM u_mtrlware_transmx_fp
  1064. WHERE billid = :arg_ref_mx[i].relid
  1065. And printid = :arg_ref_mx[i].Relprintid;
  1066. IF sqlca.SQLCode <> 0 THEN
  1067. rslt = 0
  1068. ARG_MSG = '第'+String(i)+'行,查询相关借货单数量失败,'+sqlca.SQLErrText
  1069. GOTO ext
  1070. END IF
  1071. IF arg_ref_mx[i].qty > ld_qty_return THEN
  1072. rslt = 0
  1073. ARG_MSG = '第'+String(i)+'行,已还货数只有:'+String(ld_qty_return,'#,##0.##########')+',不能撤消还货:'+String(arg_ref_mx[i].qty,'#,##0.##########')
  1074. GOTO ext
  1075. END IF
  1076. UPDATE u_mtrlware_transmx_fp
  1077. SET returnqty = returnqty - :arg_ref_mx[i].qty
  1078. WHERE billid = :arg_ref_mx[i].relid
  1079. And printid = :arg_ref_mx[i].Relprintid;
  1080. IF sqlca.SQLCode <> 0 THEN
  1081. rslt = 0
  1082. ARG_MSG = '第'+String(i)+'行,更新相关借货单已还货数失败,'+sqlca.SQLErrText
  1083. GOTO ext
  1084. END IF
  1085. SELECT mxprintid
  1086. INTO :ll_mxprintid
  1087. FROM u_mtrlware_transmx_fp
  1088. WHERE billid = :arg_ref_mx[i].relid
  1089. And printid = :arg_ref_mx[i].Relprintid;
  1090. IF sqlca.SQLCode <> 0 THEN
  1091. rslt = 0
  1092. ARG_MSG = '第'+String(i)+'行,查询相关借货单明细信息失败,'+sqlca.SQLErrText
  1093. GOTO ext
  1094. END IF
  1095. UPDATE u_mtrlware_transmx_fp2
  1096. SET returnqty = returnqty - :arg_ref_mx[i].qty
  1097. WHERE billid = :arg_ref_mx[i].relid
  1098. And printid = :ll_mxprintid;
  1099. IF sqlca.SQLCode <> 0 THEN
  1100. rslt = 0
  1101. ARG_MSG = '第'+String(i)+'行,更新相关借货单调入明细已还货数失败,'+sqlca.SQLErrText
  1102. GOTO ext
  1103. END IF
  1104. END IF
  1105. NEXT
  1106. END IF
  1107. ext:
  1108. IF rslt = 0 THEN
  1109. ROLLBACK;
  1110. ELSEIF rslt = 1 And arg_ifcommit THEN
  1111. COMMIT;
  1112. END IF
  1113. Destroy uo_assign_bill
  1114. Destroy uo_bar
  1115. RETURN rslt
  1116. end function
  1117. public function integer getinfo (long arg_billid, ref s_mtrlware_trans_fpmx arg_ref_mx[], ref s_mtrlware_trans_fpmx2 arg_ref_mx2[], ref long arg_arr_cnt, ref long arg_arr_cnt2, ref string arg_msg);Int rslt = 1
  1118. Long i = 1,no_mxcheck = 0
  1119. Long j = 1,no_mxcheck2 = 0
  1120. IF arg_billid <= 0 THEN
  1121. rslt = 0
  1122. arg_msg = '错误单据唯一码'
  1123. GOTO ext
  1124. END IF
  1125. //用游标读取明细
  1126. DECLARE cur_mx CURSOR FOR
  1127. SELECT u_mtrlware_transmx_fp.transtype,
  1128. u_mtrlware_transmx_fp.assignid,
  1129. u_mtrlware_transmx_fp.qty,
  1130. u_mtrlware_transmx_fp.mxDscrp,
  1131. u_mtrlware_transmx_fp.taskid,
  1132. u_mtrlware_transmx_fp.taskprintid,
  1133. u_mtrlware_transmx_fp.mxprintid,
  1134. u_mtrlware_transmx_fp.relid,
  1135. u_mtrlware_transmx_fp.relprintid,
  1136. u_mtrlware_transmx_fp.printid,
  1137. u_mtrlware_transmx_fp.mtrlwareid,
  1138. u_mtrlware_transmx_fp.rel_assignid,
  1139. u_mtrlware_transmx_fp.barcode,
  1140. isnull(u_saletask.taskcode,'')
  1141. FROM u_mtrlware_transmx_fp INNER join u_mtrlware_trans_fp on
  1142. u_mtrlware_transmx_fp.billid = u_mtrlware_trans_fp.billid left OUTER join u_saletask on
  1143. u_mtrlware_transmx_fp.taskid = u_saletask.taskid AND
  1144. u_mtrlware_trans_fp.scid = u_saletask.scid
  1145. WHERE u_mtrlware_transmx_fp.billid = :arg_billid
  1146. Order By u_mtrlware_transmx_fp.printid;
  1147. OPEN cur_mx;
  1148. FETCH cur_mx INTO :arg_ref_mx[i].transtype,
  1149. :arg_ref_mx[i].assignid,:arg_ref_mx[i].qty,:arg_ref_mx[i].mxDscrp,&
  1150. :arg_ref_mx[i].taskid,:arg_ref_mx[i].taskprintid,:arg_ref_mx[i].mxprintid,&
  1151. :arg_ref_mx[i].relid,:arg_ref_mx[i].relprintid,:arg_ref_mx[i].printid,&
  1152. :arg_ref_mx[i].mtrlwareid,:arg_ref_mx[i].rel_assignid,:arg_ref_mx[i].barcode,:arg_ref_mx[i].taskcode;
  1153. DO WHILE sqlca.SQLCode = 0
  1154. i++
  1155. FETCH cur_mx INTO :arg_ref_mx[i].transtype,
  1156. :arg_ref_mx[i].assignid,:arg_ref_mx[i].qty,:arg_ref_mx[i].mxDscrp,&
  1157. :arg_ref_mx[i].taskid,:arg_ref_mx[i].taskprintid,:arg_ref_mx[i].mxprintid,&
  1158. :arg_ref_mx[i].relid,:arg_ref_mx[i].relprintid,:arg_ref_mx[i].printid,&
  1159. :arg_ref_mx[i].mtrlwareid,:arg_ref_mx[i].rel_assignid,:arg_ref_mx[i].barcode,:arg_ref_mx[i].taskcode;
  1160. LOOP
  1161. CLOSE cur_mx;
  1162. //检验明细是否读入完整
  1163. SELECT count(*) INTO :no_mxcheck
  1164. FROM u_mtrlware_transmx_fp
  1165. Where billid = :arg_billid;
  1166. IF sqlca.SQLCode <> 0 THEN
  1167. rslt = 0
  1168. arg_msg = "查询操作失败,单据明细数量"
  1169. GOTO ext
  1170. END IF
  1171. IF i <> (no_mxcheck + 1) THEN
  1172. rslt = 0
  1173. arg_msg = "查询操作失败,单据明细内容"
  1174. GOTO ext
  1175. END IF
  1176. //2
  1177. //用游标读取明细
  1178. DECLARE cur_mx2 CURSOR FOR
  1179. SELECT u_mtrlware_transmx_fp2.mtrlwareid,
  1180. u_mtrlware_transmx_fp2.assignid,
  1181. u_mtrlware_transmx_fp2.transqty,
  1182. u_mtrlware_transmx_fp2.mtrlid,
  1183. u_mtrlware_transmx_fp2.taskid,
  1184. u_mtrlware_transmx_fp2.taskprintid,
  1185. u_mtrlware_transmx_fp2.printid,
  1186. u_mtrlware_transmx_fp2.mxtype,
  1187. u_mtrldef.ifbarcodefp
  1188. FROM u_mtrlware_transmx_fp2 INNER join u_mtrldef
  1189. on u_mtrlware_transmx_fp2.mtrlid = u_mtrldef.mtrlid
  1190. WHERE u_mtrlware_transmx_fp2.billid = :arg_billid
  1191. Order By u_mtrlware_transmx_fp2.printid;
  1192. OPEN cur_mx2;
  1193. FETCH cur_mx2 INTO :arg_ref_mx2[j].mtrlwareid,
  1194. :arg_ref_mx2[j].assignid,:arg_ref_mx2[j].transqty,:arg_ref_mx2[j].mtrlid,&
  1195. :arg_ref_mx2[j].taskid,:arg_ref_mx2[j].taskprintid,:arg_ref_mx2[j].printid,&
  1196. :arg_ref_mx2[j].mxtype,:arg_ref_mx2[j].ifbarcodefp;
  1197. DO WHILE sqlca.SQLCode = 0
  1198. j++
  1199. FETCH cur_mx2 INTO :arg_ref_mx2[j].mtrlwareid,
  1200. :arg_ref_mx2[j].assignid,:arg_ref_mx2[j].transqty,:arg_ref_mx2[j].mtrlid,&
  1201. :arg_ref_mx2[j].taskid,:arg_ref_mx2[j].taskprintid,:arg_ref_mx2[j].printid,&
  1202. :arg_ref_mx2[j].mxtype,:arg_ref_mx2[j].ifbarcodefp;
  1203. LOOP
  1204. CLOSE cur_mx2;
  1205. //检验明细是否读入完整
  1206. SELECT count(*) INTO :no_mxcheck2
  1207. FROM u_mtrlware_transmx_fp2
  1208. Where billid = :arg_billid;
  1209. IF sqlca.SQLCode <> 0 THEN
  1210. rslt = 0
  1211. arg_msg = "查询操作失败,单据明细2数量"
  1212. GOTO ext
  1213. END IF
  1214. IF j <> (no_mxcheck2 + 1) THEN
  1215. rslt = 0
  1216. arg_msg = "查询操作失败,单据明细内容2"
  1217. GOTO ext
  1218. END IF
  1219. arg_arr_cnt = i - 1
  1220. arg_arr_cnt2 = j - 1
  1221. ext:
  1222. RETURN rslt
  1223. end function
  1224. public function integer affirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1225. s_mtrlware_trans_fp arg_s_ref
  1226. IF arg_billid <= 0 THEN
  1227. rslt = 0
  1228. ARG_MSG = '错误单据唯一码'
  1229. GOTO ext
  1230. END IF
  1231. IF p_getinfo(arg_billid,arg_s_ref,ARG_MSG) = 0 THEN
  1232. rslt = 0
  1233. GOTO ext
  1234. END IF
  1235. IF arg_s_ref.affirmflag <> 0 THEN
  1236. rslt = 0
  1237. ARG_MSG = '单据不是在待初审状态,不可以初审'
  1238. GOTO ext
  1239. END IF
  1240. //更新审核标记
  1241. UPDATE u_mtrlware_trans_fp
  1242. SET affirmrep = :arg_opemp,
  1243. affirmdate = getdate(),
  1244. affirmflag = 1
  1245. WHERE billid = :arg_billid
  1246. And affirmflag = 0;
  1247. IF sqlca.SQLCode <> 0 THEN
  1248. rslt = 0
  1249. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  1250. GOTO ext
  1251. ELSEIF sqlca.SQLNRows = 0 THEN
  1252. rslt = 0
  1253. ARG_MSG = "单据正在审核,请稍后重试"
  1254. GOTO ext
  1255. END IF
  1256. ext:
  1257. IF rslt = 0 THEN
  1258. ROLLBACK;
  1259. ELSEIF rslt = 1 And arg_ifcommit THEN
  1260. COMMIT;
  1261. END IF
  1262. RETURN rslt
  1263. end function
  1264. public function integer caffirm (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1265. datetime ldt_null
  1266. setnull(ldt_null)
  1267. s_mtrlware_trans_fp arg_s_ref
  1268. IF arg_billid <= 0 THEN
  1269. rslt = 0
  1270. ARG_MSG = '错误单据唯一码'
  1271. GOTO ext
  1272. END IF
  1273. IF p_getinfo(arg_billid,arg_s_ref,ARG_MSG) = 0 THEN
  1274. rslt = 0
  1275. GOTO ext
  1276. END IF
  1277. IF arg_s_ref.affirmflag <> 1 THEN
  1278. rslt = 0
  1279. ARG_MSG = '单据不是在待终审状态,不可以初撤'
  1280. GOTO ext
  1281. END IF
  1282. IF arg_s_ref.flag <> 0 THEN
  1283. rslt = 0
  1284. ARG_MSG = '单据不是在待终审状态,不可以初撤'
  1285. GOTO ext
  1286. END IF
  1287. //更新审核标记
  1288. UPDATE u_mtrlware_trans_fp
  1289. SET affirmrep = '',
  1290. affirmdate = :ldt_null,
  1291. affirmflag = 0
  1292. WHERE billid = :arg_billid
  1293. And affirmflag = 1;
  1294. IF sqlca.SQLCode <> 0 THEN
  1295. rslt = 0
  1296. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  1297. GOTO ext
  1298. ELSEIF sqlca.SQLNRows = 0 THEN
  1299. rslt = 0
  1300. ARG_MSG = "单据正在审核,请稍后重试"
  1301. GOTO ext
  1302. END IF
  1303. ext:
  1304. IF rslt = 0 THEN
  1305. ROLLBACK;
  1306. ELSEIF rslt = 1 And arg_ifcommit THEN
  1307. COMMIT;
  1308. END IF
  1309. RETURN rslt
  1310. end function
  1311. on uo_mtrlware_trans_fp.create
  1312. call super::create
  1313. TriggerEvent( this, "constructor" )
  1314. end on
  1315. on uo_mtrlware_trans_fp.destroy
  1316. TriggerEvent( this, "destructor" )
  1317. call super::destroy
  1318. end on