uo_wfjg_waste.sru 33 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285
  1. $PBExportHeader$uo_wfjg_waste.sru
  2. forward
  3. global type uo_wfjg_waste from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_wfjg_waste from nonvisualobject
  7. end type
  8. global uo_wfjg_waste uo_wfjg_waste
  9. type variables
  10. public protectedwrite long scid =0 //分部id
  11. public protectedwrite long wasteid //进仓单表自动增量id
  12. public protectedwrite string wastecode //单据的唯一编号
  13. public protectedwrite datetime opdate //建立时间,自动
  14. public protectedwrite string opemp //建立操作员
  15. public protectedwrite datetime moddate //修改时间,自动
  16. public protectedwrite string modemp //修改操作员
  17. public protectedwrite int flag=0 //仓库审核标志
  18. public protectedwrite int balcflag=0 //仓库结存标志
  19. public protectedwrite datetime auditingdate //审核时间
  20. public protectedwrite string auditingrep //审核操作员
  21. long relid=0 //关联id
  22. datetime waste_date //进仓发生时间
  23. string waste_rep='' //经手人
  24. string relcode='' //相关号码
  25. string dscrp='' //备注
  26. long sptid=0 //供应商id
  27. string sptname='' //供应商名称(不记帐模式使用)
  28. boolean if_getid_ture=true
  29. transaction commit_transaction //数据commit事务
  30. s_waste inwaremx_waste[] //明细结构数组
  31. long it_mxbt=0 //明细结构数组末指针
  32. s_waste_spt s_waste_mx_spt[]
  33. Long it_mxbt_spt = 0
  34. boolean it_newbegin=false //新建标志
  35. boolean it_updatebegin=false //修改标志
  36. end variables
  37. forward prototypes
  38. public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg)
  39. public function integer save (boolean arg_ifcommit, ref string arg_msg)
  40. public function integer auditing (boolean arg_ifcommit, ref string arg_msg)
  41. public function integer del (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit)
  42. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg)
  43. public function integer p_clearmx ()
  44. public function integer p_reset ()
  45. public function integer p_getinfo (long arg_scid, long arg_wasteid, ref string arg_msg)
  46. public function integer updatebegin (long arg_scid, long arg_wasteid, ref string arg_msg)
  47. public function integer add_dscrp (long arg_scid, long arg_wasteid, string arg_newdescrppart, ref string arg_msg)
  48. public function integer getinfo (long arg_scid, long arg_wasteid, ref string arg_msg)
  49. public function integer acceptmx_bef (long arg_mtrlwareid, decimal arg_qty, string arg_mxdscrp, long arg_printid, ref string arg_msg)
  50. public function integer acceptmx (long arg_printid, integer arg_ifrel, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, string arg_mxdscrp, ref string arg_msg, decimal arg_jgprice, long arg_relid, long arg_orderid, string arg_plancode)
  51. end prototypes
  52. public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg);//====================================================================
  53. // Function: newbegin(long arg_scid,int arg_billtype,ref string arg_msg)
  54. //--------------------------------------------------------------------
  55. // Description: 从置对象,设定业务类型,准备建立新进仓单
  56. //--------------------------------------------------------------------
  57. // Arguments:
  58. // value long arg_scid
  59. // value integer arg_billtype
  60. // reference string arg_msg
  61. //--------------------------------------------------------------------
  62. // Returns: integer
  63. //--------------------------------------------------------------------
  64. // Author: yyx Date: 2003.11.12
  65. //--------------------------------------------------------------------
  66. // Modify History:
  67. //
  68. //====================================================================
  69. int rslt=1
  70. if arg_scid < 0 then
  71. arg_msg = '请选择分部'
  72. rslt = 0
  73. goto ext
  74. end if
  75. //if not (arg_billtype=1 or arg_billtype=2 or arg_billtype=3 or arg_billtype=4 or arg_billtype=8 or arg_billtype=9 or arg_billtype=12 or arg_billtype=15) then
  76. // rslt=0
  77. // arg_msg='此单据类型必须为:'
  78. // arg_msg=arg_msg+'1-采购进仓[记帐模式],'
  79. // arg_msg=arg_msg+'2-采购进仓[不记帐模式],'
  80. // arg_msg=arg_msg+'3-成品进仓,'
  81. // arg_msg=arg_msg+'4-外发加工进仓,'
  82. // arg_msg=arg_msg+'8-其他进仓,'
  83. // arg_msg=arg_msg+'9-盘盈进仓,'
  84. // arg_msg=arg_msg+'12-调拨进仓'
  85. // arg_msg=arg_msg+'15-拆装进仓'
  86. // goto ext
  87. //end if
  88. p_reset()
  89. //billtype=arg_billtype
  90. scid=arg_scid
  91. it_newbegin=true
  92. it_updatebegin=false
  93. ext:
  94. if rslt=0 then p_reset()
  95. return rslt
  96. end function
  97. public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i
  98. DateTime server_dt
  99. Long ls_newid
  100. String ls_sccode
  101. IF IsNull(relid) THEN relid = 0
  102. IF IsNull(waste_rep) THEN waste_rep = ''
  103. IF IsNull(dscrp) THEN dscrp = ''
  104. IF IsNull(sptid) THEN sptid = 0
  105. IF IsNull(sptname) THEN sptname = ''
  106. IF IsNull(relcode) THEN relcode = ''
  107. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  108. rslt = 0
  109. arg_msg = "非编辑状态不可以提交"
  110. GOTO ext
  111. END IF
  112. SELECT Top 1 getdate() INTO :server_dt FROM u_user USING commit_transaction ;
  113. //取得系统时间,借用操作员表
  114. IF commit_transaction.SQLCode <> 0 THEN
  115. rslt = 0
  116. arg_msg = "查询操作失败,日期 "
  117. GOTO ext
  118. END IF
  119. IF it_mxbt = 0 THEN
  120. rslt = 0
  121. arg_msg = "没有明细内容"
  122. GOTO ext
  123. END IF
  124. cnt = 0
  125. //检查供应商
  126. SELECT count(*)
  127. INTO :cnt
  128. FROM u_spt
  129. Where u_spt.sptid = :sptid USING commit_transaction ;
  130. IF commit_transaction.SQLCode <> 0 THEN
  131. rslt = 0
  132. arg_msg = "查询操作失败,供应商"
  133. GOTO ext
  134. END IF
  135. IF cnt = 0 THEN
  136. rslt = 0
  137. arg_msg = "供应商资料错误!"
  138. GOTO ext
  139. END IF
  140. IF Year(Date(waste_date)) < 2000 OR IsNull(waste_date) THEN
  141. rslt = 0
  142. arg_msg = "缺少进仓发生时间或不合理"
  143. GOTO ext
  144. END IF
  145. //====================================================================
  146. // Script - save ( boolean arg_ifcommit, ref string arg_msg )
  147. // Reason:
  148. //--------------------------------------------------------------------
  149. // Modified By: yyx Date: 2004.01.02
  150. //--------------------------------------------------------------------
  151. IF DaysAfter(Date(String(server_dt,'yyyy-mm-dd')),Date(String(waste_date,'yyyy-mm-dd'))) > 30 THEN
  152. rslt = 0
  153. arg_msg = '进仓日期错误,日期不能超前系统日期'
  154. GOTO ext
  155. END IF
  156. IF DaysAfter(Date(String(waste_date,'yyyy-mm-dd')),Date(String(server_dt,'yyyy-mm-dd'))) > 30 THEN
  157. rslt = 0
  158. arg_msg = '进仓日期错误,日期不能落后系统日期'
  159. GOTO ext
  160. END IF
  161. //====================================================================
  162. ////////////////////////////////////////////////开始区分:新建/更新 处理
  163. IF wasteid = 0 THEN //新建
  164. ls_newid = f_sys_scidentity(scid,"u_order_wfjg_waste","wasteid",arg_msg,if_getid_ture,commit_transaction)
  165. IF ls_newid <= 0 THEN
  166. rslt = 0
  167. GOTO ext
  168. END IF
  169. //取分部代号
  170. IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN
  171. rslt = 0
  172. GOTO ext
  173. END IF
  174. //取得新单据编号
  175. wastecode = getid(scid,ls_sccode + 'SH',Date(server_dt),if_getid_ture,commit_transaction)
  176. IF wastecode = "err" THEN
  177. wastecode = ''
  178. rslt = 0
  179. arg_msg = "无法获取损耗单编号"+"~n"+commit_transaction.SQLErrText
  180. GOTO ext
  181. END IF
  182. INSERT INTO u_order_wfjg_waste (
  183. scid,
  184. wasteid,
  185. wastecode,
  186. sptid,
  187. wastedate,
  188. assign_emp,
  189. relcode,
  190. dscrp,
  191. opemp,
  192. opdate
  193. )
  194. VALUES (
  195. :scid,
  196. :ls_newid,
  197. :wastecode,
  198. :sptid,
  199. :waste_date,
  200. :waste_rep,
  201. :relcode,
  202. :dscrp,
  203. :publ_operator,
  204. :server_dt
  205. ) USING commit_transaction ;
  206. IF commit_transaction.SQLCode <> 0 THEN
  207. rslt = 0
  208. if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg_waste') > 0 then
  209. arg_msg = '插入操作失败,关键字分部ID、单据ID重复'
  210. elseif pos(lower(commit_transaction.SQLErrText),'ix_u_order_wfjg_waste') > 0 then
  211. arg_msg = '插入操作失败,单据编号重复'
  212. else
  213. arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText
  214. end if
  215. GOTO ext
  216. END IF
  217. //读取新inwareid
  218. wasteid = ls_newid
  219. FOR i = 1 TO it_mxbt
  220. INSERT INTO u_order_wfjg_wastemx
  221. (scid,
  222. wasteid,
  223. ifrel,
  224. printid,
  225. mtrlid,
  226. status,
  227. woodcode,
  228. pcode,
  229. qty,
  230. price,
  231. wastedscrp,
  232. wfjg_orderid,
  233. wfjg_ordercode,
  234. orderid,
  235. plancode)
  236. VALUES (
  237. :scid,
  238. :ls_newid,
  239. :inwaremx_waste[i].ifrel,
  240. :inwaremx_waste[i].printid,
  241. :inwaremx_waste[i].mtrlid,
  242. :inwaremx_waste[i].status,
  243. :inwaremx_waste[i].woodcode,
  244. :inwaremx_waste[i].pcode,
  245. :inwaremx_waste[i].qty,
  246. :inwaremx_waste[i].jgprice,
  247. :inwaremx_waste[i].mxdscrp,
  248. :inwaremx_waste[i].relid,
  249. :inwaremx_waste[i].relcode,
  250. :inwaremx_waste[i].orderid,
  251. :inwaremx_waste[i].plancode
  252. ) USING commit_transaction;
  253. IF commit_transaction.SQLCode <> 0 THEN
  254. wasteid = 0 //还原inwareid
  255. rslt = 0
  256. if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg_wastemx') > 0 then
  257. arg_msg = '插入计划明细操作失败,关键字分部ID、单据ID、明细ID重复'
  258. else
  259. arg_msg = "因网络或其它原因导致插入计划明细操作失败"+"~n"+commit_transaction.SQLErrText
  260. end if
  261. GOTO ext
  262. END IF
  263. NEXT
  264. FOR i = 1 TO it_mxbt_spt
  265. INSERT INTO u_order_wfjg_wasteMx_spt
  266. (scid,
  267. wasteid,
  268. mtrlwareid,
  269. mtrlid,
  270. status,
  271. woodcode,
  272. pcode,
  273. plancode,
  274. qty,
  275. fprice,
  276. printid,
  277. mxdscrp)
  278. VALUES (
  279. :scid,
  280. :ls_newid,
  281. :s_waste_mx_spt[i].mtrlwareid,
  282. :s_waste_mx_spt[i].mtrlid,
  283. :s_waste_mx_spt[i].status,
  284. :s_waste_mx_spt[i].woodcode,
  285. :s_waste_mx_spt[i].pcode,
  286. :s_waste_mx_spt[i].plancode,
  287. :s_waste_mx_spt[i].qty,
  288. :s_waste_mx_spt[i].fprice,
  289. :s_waste_mx_spt[i].printid,
  290. :s_waste_mx_spt[i].mxdscrp
  291. ) USING commit_transaction;
  292. IF commit_transaction.SQLCode <> 0 THEN
  293. wasteid = 0 //还原inwareid
  294. rslt = 0
  295. if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg_wastemx_spt') > 0 then
  296. arg_msg = '插入外协商明细操作失败,关键字分部ID、单据ID、明细ID重复'
  297. else
  298. arg_msg = "因网络或其它原因导致插入外协商明细操作失败"+"~n"+commit_transaction.SQLErrText
  299. end if
  300. GOTO ext
  301. END IF
  302. NEXT
  303. ELSE //////////////////////////////////////////////////更新
  304. UPDATE u_order_wfjg_waste
  305. SET sptid = :sptid,
  306. wastedate = :waste_date,
  307. assign_emp = :waste_rep,
  308. relcode = :relcode,
  309. dscrp = :dscrp,
  310. moddate = :server_dt,
  311. modemp = :publ_operator
  312. WHERE u_order_wfjg_waste.wasteid = :wasteid
  313. AND u_order_wfjg_waste.scid = :scid
  314. AND u_order_wfjg_waste.flag = 0 USING commit_transaction;
  315. IF commit_transaction.SQLCode <> 0 OR commit_transaction.SQLNRows <= 0 THEN
  316. rslt = 0
  317. if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg_waste') > 0 then
  318. arg_msg = '插入操作失败,关键字分部ID、单据ID重复'
  319. elseif pos(lower(commit_transaction.SQLErrText),'ix_u_order_wfjg_waste') > 0 then
  320. arg_msg = '插入操作失败,单据编号重复'
  321. else
  322. arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText
  323. end if
  324. GOTO ext
  325. END IF
  326. //删除原有明细
  327. DELETE FROM u_order_wfjg_wastemx
  328. WHERE u_order_wfjg_wastemx.wasteid = :wasteid
  329. AND u_order_wfjg_wastemx.scid = :scid USING commit_transaction;
  330. IF commit_transaction.SQLCode <> 0 THEN
  331. rslt = 0
  332. arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText
  333. GOTO ext
  334. END IF
  335. DELETE FROM u_order_wfjg_wastemx_spt
  336. WHERE u_order_wfjg_wastemx_spt.wasteid = :wasteid
  337. AND u_order_wfjg_wastemx_spt.scid = :scid USING commit_transaction;
  338. IF commit_transaction.SQLCode <> 0 THEN
  339. rslt = 0
  340. arg_msg = "删除旧有明细操作(外协库存)失败"+"~n"+commit_transaction.SQLErrText
  341. GOTO ext
  342. END IF
  343. FOR i = 1 TO it_mxbt
  344. INSERT INTO u_order_wfjg_wastemx
  345. (scid,
  346. wasteid,
  347. ifrel,
  348. printid,
  349. mtrlid,
  350. status,
  351. woodcode,
  352. pcode,
  353. qty,
  354. price,
  355. wastedscrp,
  356. wfjg_orderid,
  357. wfjg_ordercode,
  358. orderid,
  359. plancode)
  360. VALUES (
  361. :scid,
  362. :wasteid,
  363. :inwaremx_waste[i].ifrel,
  364. :inwaremx_waste[i].printid,
  365. :inwaremx_waste[i].mtrlid,
  366. :inwaremx_waste[i].status,
  367. :inwaremx_waste[i].woodcode,
  368. :inwaremx_waste[i].pcode,
  369. :inwaremx_waste[i].qty,
  370. :inwaremx_waste[i].jgprice,
  371. :inwaremx_waste[i].mxdscrp,
  372. :inwaremx_waste[i].relid,
  373. :inwaremx_waste[i].relcode,
  374. :inwaremx_waste[i].orderid,
  375. :inwaremx_waste[i].plancode
  376. ) USING commit_transaction;
  377. IF commit_transaction.SQLCode <> 0 THEN
  378. rslt = 0
  379. if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg_wastemx') > 0 then
  380. arg_msg = '插入计划明细操作失败,关键字分部ID、单据ID、明细ID重复'
  381. else
  382. arg_msg = "因网络或其它原因导致插入计划明细操作失败"+"~n"+commit_transaction.SQLErrText
  383. end if
  384. GOTO ext
  385. END IF
  386. NEXT
  387. FOR i = 1 TO it_mxbt_spt
  388. INSERT INTO u_order_wfjg_wasteMx_spt
  389. (scid,
  390. wasteid,
  391. mtrlwareid,
  392. mtrlid,
  393. status,
  394. woodcode,
  395. pcode,
  396. plancode,
  397. qty,
  398. fprice,
  399. printid,
  400. mxdscrp)
  401. VALUES (
  402. :scid,
  403. :wasteid,
  404. :s_waste_mx_spt[i].mtrlwareid,
  405. :s_waste_mx_spt[i].mtrlid,
  406. :s_waste_mx_spt[i].status,
  407. :s_waste_mx_spt[i].woodcode,
  408. :s_waste_mx_spt[i].pcode,
  409. :s_waste_mx_spt[i].plancode,
  410. :s_waste_mx_spt[i].qty,
  411. :s_waste_mx_spt[i].fprice,
  412. :s_waste_mx_spt[i].printid,
  413. :s_waste_mx_spt[i].mxdscrp
  414. ) USING commit_transaction;
  415. IF commit_transaction.SQLCode <> 0 THEN
  416. wasteid = 0 //还原inwareid
  417. rslt = 0
  418. if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg_wastemx_spt') > 0 then
  419. arg_msg = '插入外协商明细操作失败,关键字分部ID、单据ID、明细ID重复'
  420. else
  421. arg_msg = "因网络或其它原因导致插入外协商明细操作失败"+"~n"+commit_transaction.SQLErrText
  422. end if
  423. GOTO ext
  424. END IF
  425. NEXT
  426. END IF
  427. it_newbegin = FALSE
  428. it_updatebegin = FALSE
  429. ext:
  430. IF rslt = 0 THEN
  431. ROLLBACK USING commit_transaction;
  432. p_clearmx()
  433. ELSEIF rslt = 1 AND arg_ifcommit THEN
  434. COMMIT USING commit_transaction;
  435. END IF
  436. arg_msg = '外协损耗单,'+ arg_msg
  437. RETURN rslt
  438. end function
  439. public function integer auditing (boolean arg_ifcommit, ref string arg_msg);
  440. Long rslt = 1,cnt = 0,i
  441. Dec new_noallocqty = 0
  442. Long ls_newid
  443. IF wasteid = 0 THEN
  444. rslt = 0
  445. arg_msg = "没有审核对象"
  446. GOTO ext
  447. END IF
  448. IF it_newbegin OR it_updatebegin THEN
  449. rslt = 0
  450. arg_msg = "编辑状态下不可以执行审核"
  451. GOTO ext
  452. END IF
  453. uo_order_wfjg uo_wfjg
  454. uo_wfjg = CREATE uo_order_wfjg
  455. uo_wfjg.commit_transaction = commit_transaction
  456. IF flag = 1 THEN
  457. rslt = 0
  458. arg_msg = "单据已经审核"
  459. GOTO ext
  460. END IF
  461. UPDATE u_order_wfjg_waste
  462. SET auditingrep = :publ_operator,
  463. auditingdate = getdate(),
  464. flag = 1
  465. WHERE u_order_wfjg_waste.wasteid = :wasteid
  466. AND flag = 0 AND scid = :scid USING commit_transaction;
  467. IF commit_transaction.SQLCode <> 0 THEN
  468. rslt = 0
  469. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  470. GOTO ext
  471. ELSEIF commit_transaction.SQLNRows = 0 THEN
  472. rslt = 0
  473. arg_msg = "单据正在审核,请稍后查询。"
  474. GOTO ext
  475. END IF
  476. FOR i = 1 TO it_mxbt_spt
  477. IF f_update_mtrlware_spt_in(10,&
  478. 0,&
  479. s_waste_mx_spt[i].mtrlwareid,&
  480. s_waste_mx_spt[i].mtrlid,&
  481. s_waste_mx_spt[i].mtrlcode,&
  482. s_waste_mx_spt[i].plancode,&
  483. s_waste_mx_spt[i].status,&
  484. s_waste_mx_spt[i].qty,&
  485. s_waste_mx_spt[i].fprice,&
  486. sptid,&
  487. s_waste_mx_spt[i].woodcode,&
  488. s_waste_mx_spt[i].pcode,&
  489. arg_msg,FALSE,commit_transaction) = 0 THEN
  490. rslt = 0
  491. GOTO ext
  492. END IF
  493. NEXT
  494. FOR i = 1 TO it_mxbt
  495. if inwaremx_waste[i].relid=0 then continue
  496. IF uo_wfjg.wasteqty(scid,inwaremx_waste[i].qty,&
  497. inwaremx_waste[i].relid,&
  498. inwaremx_waste[i].mtrlid,&
  499. inwaremx_waste[i].orderid,&
  500. inwaremx_waste[i].status,&
  501. inwaremx_waste[i].woodcode,&
  502. inwaremx_waste[i].pcode,&
  503. inwaremx_waste[i].mtrlcode,&
  504. arg_msg,&
  505. FALSE) = 0 THEN
  506. rslt = 0
  507. GOTO ext
  508. END IF
  509. IF uo_wfjg.trycmplbuytask(scid,inwaremx_waste[i].relid,arg_msg,FALSE) = 0 THEN
  510. rslt = 0
  511. GOTO ext
  512. END IF
  513. NEXT
  514. flag = 1
  515. ext:
  516. IF rslt = 0 THEN
  517. ROLLBACK USING commit_transaction;
  518. ELSEIF rslt = 1 AND arg_ifcommit THEN
  519. COMMIT USING commit_transaction;
  520. END IF
  521. DESTROY uo_wfjg
  522. arg_msg = '外协损耗单,'+ arg_msg
  523. RETURN rslt
  524. end function
  525. public function integer del (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit);//del(arg_scid,arg_inwareid,arg_msg)
  526. //如果单据还没有审核删除单据极其明细
  527. //0 fail, 1 success
  528. Int rslt = 1
  529. IF arg_inwareid = 0 THEN
  530. rslt = 0
  531. arg_msg = "没有删除对象,操作取消"
  532. GOTO ext
  533. END IF
  534. rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg)
  535. IF rslt = 0 THEN GOTO ext
  536. IF flag = 1 THEN
  537. rslt = 0
  538. arg_msg = "单据已经审核,不可以删除"
  539. GOTO ext
  540. END IF
  541. DELETE FROM u_order_wfjg_wastemx
  542. WHERE u_order_wfjg_wastemx.wasteid = :arg_inwareid
  543. AND scid = :arg_scid USING commit_transaction;
  544. IF commit_transaction.SQLCode <> 0 THEN
  545. rslt = 0
  546. arg_msg = "删除损耗单明细操作失败"+"~n"+commit_transaction.SQLErrText
  547. GOTO ext
  548. END IF
  549. DELETE FROM u_order_wfjg_wastemx_spt
  550. WHERE wasteid = :arg_inwareid
  551. AND scid = :arg_scid USING commit_transaction;
  552. IF commit_transaction.SQLCode <> 0 THEN
  553. rslt = 0
  554. arg_msg = "删除损耗单明细(外协库存)操作失败"+"~n"+commit_transaction.SQLErrText
  555. GOTO ext
  556. END IF
  557. DELETE FROM u_order_wfjg_waste
  558. WHERE u_order_wfjg_waste.wasteid = :arg_inwareid
  559. AND scid = :arg_scid USING commit_transaction;
  560. IF commit_transaction.SQLCode <> 0 THEN
  561. rslt = 0
  562. arg_msg = "删除进仓单操作失败"+"~n"+commit_transaction.SQLErrText
  563. GOTO ext
  564. END IF
  565. it_newbegin = FALSE
  566. it_updatebegin = FALSE
  567. ext:
  568. IF rslt = 0 THEN
  569. ROLLBACK USING commit_transaction;
  570. ELSEIF rslt = 1 AND arg_ifcommit THEN
  571. COMMIT USING commit_transaction;
  572. END IF
  573. p_reset()
  574. arg_msg = '外协损耗单,'+ arg_msg
  575. RETURN rslt
  576. end function
  577. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i
  578. Dec new_noallocqty = 0
  579. Long ls_newid
  580. DateTime null_dt
  581. SetNull(null_dt)
  582. IF wasteid = 0 THEN
  583. rslt = 0
  584. arg_msg = "没有撤审对象"
  585. GOTO ext
  586. END IF
  587. IF it_newbegin OR it_updatebegin THEN
  588. rslt = 0
  589. arg_msg = "编辑状态下不可以执行撤核"
  590. GOTO ext
  591. END IF
  592. IF flag = 0 THEN
  593. rslt = 0
  594. arg_msg = "单据还未审核"
  595. GOTO ext
  596. END IF
  597. uo_order_wfjg uo_wfjg
  598. uo_wfjg = CREATE uo_order_wfjg
  599. uo_wfjg.commit_transaction = commit_transaction
  600. UPDATE u_order_wfjg_waste
  601. SET auditingrep = '',
  602. auditingdate = :null_dt,
  603. flag = 0
  604. WHERE u_order_wfjg_waste.wasteid = :wasteid
  605. AND flag = 1 AND scid = :scid USING commit_transaction;
  606. IF commit_transaction.SQLCode <> 0 THEN
  607. rslt = 0
  608. arg_msg = "因网络或其它原因导致撤核单据操作失败"+"~n"+commit_transaction.SQLErrText
  609. GOTO ext
  610. ELSEIF commit_transaction.SQLNRows = 0 THEN
  611. rslt = 0
  612. arg_msg = "单据正在撤审,请稍后查询。"
  613. GOTO ext
  614. END IF
  615. FOR i = 1 TO it_mxbt_spt
  616. IF f_update_mtrlware_spt_in(10,&
  617. 0,&
  618. s_waste_mx_spt[i].mtrlwareid,&
  619. s_waste_mx_spt[i].mtrlid,&
  620. s_waste_mx_spt[i].mtrlcode,&
  621. s_waste_mx_spt[i].plancode,&
  622. s_waste_mx_spt[i].status,&
  623. 0 - s_waste_mx_spt[i].qty,&
  624. s_waste_mx_spt[i].fprice,&
  625. sptid,&
  626. s_waste_mx_spt[i].woodcode,&
  627. s_waste_mx_spt[i].pcode,&
  628. arg_msg,false,commit_transaction) = 0 THEN
  629. rslt = 0
  630. GOTO ext
  631. END IF
  632. next
  633. FOR i = 1 TO it_mxbt
  634. if inwaremx_waste[i].relid=0 then continue
  635. IF uo_wfjg.wasteqty(scid,0 - inwaremx_waste[i].qty,&
  636. inwaremx_waste[i].relid,&
  637. inwaremx_waste[i].mtrlid,&
  638. inwaremx_waste[i].orderid,&
  639. inwaremx_waste[i].status,&
  640. inwaremx_waste[i].woodcode,&
  641. inwaremx_waste[i].pcode,&
  642. inwaremx_waste[i].mtrlcode,&
  643. arg_msg,&
  644. false) = 0 THEN
  645. rslt = 0
  646. GOTO ext
  647. END IF
  648. IF uo_wfjg.trycmplbuytask(scid,inwaremx_waste[i].relid,arg_msg,FALSE) = 0 THEN
  649. rslt = 0
  650. GOTO ext
  651. END IF
  652. NEXT
  653. flag = 0
  654. ext:
  655. IF rslt = 0 THEN
  656. ROLLBACK USING commit_transaction;
  657. ELSEIF rslt = 1 AND arg_ifcommit THEN
  658. COMMIT USING commit_transaction;
  659. END IF
  660. DESTROY uo_wfjg
  661. arg_msg = '外协损耗单,'+ arg_msg
  662. RETURN rslt
  663. end function
  664. public function integer p_clearmx ();//int p_clearmx()
  665. //清除明细
  666. it_mxbt=0
  667. it_mxbt_spt=0
  668. return 1
  669. end function
  670. public function integer p_reset ();//int p_reset()
  671. //清除对象及其明细
  672. scid=0
  673. wasteid=0
  674. wastecode=''
  675. opemp=''
  676. modemp=''
  677. auditingrep=''
  678. flag=0
  679. relid=0
  680. relcode=''
  681. waste_rep=''
  682. dscrp=''
  683. sptid=0
  684. sptname=''
  685. it_newbegin=false
  686. it_updatebegin=false
  687. //清除明细
  688. p_clearmx()
  689. return 1
  690. end function
  691. public function integer p_getinfo (long arg_scid, long arg_wasteid, ref string arg_msg);//p_getinfo(arg_scid,arg_inwareid,arg_msg)
  692. //0 失败 1成功
  693. Int rslt = 1
  694. IF arg_wasteid <= 0 THEN
  695. rslt = 0
  696. arG_MSG = "非法进仓单唯一码"
  697. GOTO ext
  698. END IF
  699. SELECT wastecode,
  700. sptid,
  701. wastedate,
  702. assign_emp,
  703. relcode,
  704. dscrp,
  705. flag
  706. INTO :wastecode,
  707. :sptid,
  708. :waste_date,
  709. :waste_rep,
  710. :relcode,
  711. :dscrp,
  712. :flag
  713. FROM u_order_wfjg_waste
  714. WHERE u_order_wfjg_waste.wasteid = :arg_wasteid
  715. AND scid = :arg_scid
  716. USING commit_transaction;
  717. IF commit_transaction.SQLCode <> 0 THEN
  718. rslt = 0
  719. if pos(lower(commit_transaction.SQLErrText),'more than') > 0 then
  720. arg_msg = '查询单据资料操作失败,查询数据返回值多于一个'
  721. else
  722. arG_MSG = "查询操作失败(错误损耗单唯一码)"
  723. end if
  724. GOTO ext
  725. END IF
  726. wasteid = arg_wasteid
  727. scid = arg_scid
  728. ext:
  729. IF rslt = 0 THEN p_reset()
  730. RETURN rslt
  731. end function
  732. public function integer updatebegin (long arg_scid, long arg_wasteid, ref string arg_msg);long rslt=1
  733. if arg_scid < 0 then
  734. arg_msg = '请选择分部'
  735. rslt = 0
  736. goto ext
  737. end if
  738. if arg_wasteid<=0 then
  739. rslt=0
  740. goto ext
  741. end if
  742. rslt=p_getinfo(arg_scid,arg_wasteid,arg_msg)
  743. if rslt=0 then goto ext
  744. if flag=1 then
  745. rslt=0
  746. arg_msg='单据已经审核,不可以修改'
  747. goto ext
  748. end if
  749. wasteid=arg_wasteid
  750. scid=arg_scid
  751. it_newbegin=false
  752. it_updatebegin=true
  753. p_clearmx() //清除明细
  754. ext:
  755. if rslt=0 then p_reset()
  756. arg_msg = '外协损耗单,'+ arg_msg
  757. return rslt
  758. end function
  759. public function integer add_dscrp (long arg_scid, long arg_wasteid, string arg_newdescrppart, ref string arg_msg);//add_dscrp(string arg_newdescppart)
  760. //0 fail 1 success
  761. Int rslt = 1
  762. arg_newdescrppart = Trim(arg_newdescrppart)
  763. IF it_updatebegin OR it_newbegin THEN
  764. rslt = 0
  765. arg_msg = "编辑状态下不可用"
  766. GOTO ext
  767. END IF
  768. IF arg_newdescrppart = '' THEN
  769. rslt = 0
  770. arg_msg = "要添加内容为空,操作取消"
  771. GOTO ext
  772. END IF
  773. rslt = p_getinfo(arg_scid,arg_wasteid,arg_msg)
  774. IF rslt = 0 THEN GOTO ext
  775. IF flag = 0 THEN
  776. rslt = 0
  777. arg_msg = "非审核状态下不可用"
  778. GOTO ext
  779. END IF
  780. UPDATE u_order_wfjg_waste
  781. SET dscrp = dscrp+' '+:arg_newdescrppart
  782. WHERE u_order_wfjg_waste.wasteid = :arg_wasteid
  783. AND scid = :scid USING commit_transaction;
  784. IF commit_transaction.SQLCode <> 0 THEN
  785. ROLLBACK USING commit_transaction;
  786. rslt = 0
  787. arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+commit_transaction.SQLErrText
  788. GOTO ext
  789. END IF
  790. COMMIT USING commit_transaction;
  791. dscrp = dscrp+' '+arg_newdescrppart
  792. ext:
  793. arg_msg = '外协损耗单,'+ arg_msg
  794. Return (rslt)
  795. end function
  796. public function integer getinfo (long arg_scid, long arg_wasteid, ref string arg_msg);//getinfo(arg_scid,arg_inwareid,arg_msg)
  797. //0 失败 1成功
  798. Int rslt = 1,i = 1,j=1,no_mxcheck_bef = 0
  799. IF arg_wasteid <= 0 THEN
  800. rslt = 0
  801. arg_msg = "非法损耗单唯一码"
  802. GOTO ext
  803. END IF
  804. rslt = p_getinfo(arg_scid,arg_wasteid,arg_msg)
  805. IF rslt = 0 THEN GOTO ext
  806. //用游标读取明细
  807. DECLARE cur_wastemx CURSOR FOR
  808. SELECT u_order_wfjg_wastemx.printid,
  809. u_order_wfjg_wastemx.ifrel,
  810. u_order_wfjg_wastemx.mtrlid,
  811. u_order_wfjg_wastemx.status,
  812. u_order_wfjg_wastemx.woodcode,
  813. u_order_wfjg_wastemx.pcode,
  814. u_order_wfjg_wastemx.qty,
  815. u_order_wfjg_wastemx.wastedscrp,
  816. u_order_wfjg_wastemx.price,
  817. u_order_wfjg_wastemx.wfjg_orderid,
  818. u_order_wfjg_wastemx.wfjg_ordercode,
  819. u_order_wfjg_wastemx.orderid,
  820. u_order_wfjg_wastemx.plancode
  821. FROM u_order_wfjg_wastemx,u_mtrldef
  822. WHERE u_order_wfjg_wastemx.wasteid = :arg_wasteid AND
  823. u_order_wfjg_wastemx.mtrlid = u_mtrldef.mtrlid AND
  824. u_order_wfjg_wastemx.scid = :arg_scid USING commit_transaction;
  825. OPEN cur_wastemx;
  826. FETCH cur_wastemx INTO :inwaremx_waste[i].printid,:inwaremx_waste[i].ifrel,:inwaremx_waste[i].mtrlid,
  827. :inwaremx_waste[i].status,:inwaremx_waste[i].woodcode,:inwaremx_waste[i].pcode,:inwaremx_waste[i].qty,
  828. :inwaremx_waste[i].mxdscrp,:inwaremx_waste[i].jgprice,
  829. :inwaremx_waste[i].relid,
  830. :inwaremx_waste[i].relcode,:inwaremx_waste[i].orderid,:inwaremx_waste[i].plancode;
  831. DO WHILE commit_transaction.SQLCode = 0
  832. i++
  833. FETCH cur_wastemx INTO :inwaremx_waste[i].printid,:inwaremx_waste[i].ifrel,:inwaremx_waste[i].mtrlid,
  834. :inwaremx_waste[i].status,:inwaremx_waste[i].woodcode,:inwaremx_waste[i].pcode,:inwaremx_waste[i].qty,
  835. :inwaremx_waste[i].mxdscrp,:inwaremx_waste[i].jgprice,
  836. :inwaremx_waste[i].relid,
  837. :inwaremx_waste[i].relcode,:inwaremx_waste[i].orderid,:inwaremx_waste[i].plancode;
  838. LOOP
  839. CLOSE cur_wastemx;
  840. //用游标读取明细
  841. DECLARE cur_wastemx_spt CURSOR FOR
  842. SELECT u_order_wfjg_wasteMx_spt.mtrlwareid,
  843. u_order_wfjg_wasteMx_spt.printid,
  844. u_order_wfjg_wasteMx_spt.mtrlid,
  845. u_order_wfjg_wasteMx_spt.plancode,
  846. u_order_wfjg_wasteMx_spt.status,
  847. u_order_wfjg_wasteMx_spt.qty,
  848. u_order_wfjg_wasteMx_spt.fprice,
  849. u_order_wfjg_wasteMx_spt.mxdscrp,
  850. u_mtrldef.mtrlcode,
  851. u_order_wfjg_wasteMx_spt.woodcode,
  852. u_order_wfjg_wasteMx_spt.pcode,
  853. u_order_wfjg_wasteMx_spt.plancode
  854. FROM u_order_wfjg_wasteMx_spt,u_mtrldef,u_order_wfjg_waste
  855. WHERE u_order_wfjg_waste.wasteid = :arg_wasteid AND
  856. u_order_wfjg_wasteMx_spt.mtrlid = u_mtrldef.mtrlid AND
  857. u_order_wfjg_waste.scid = :arg_scid AND
  858. u_order_wfjg_waste.wasteid = u_order_wfjg_wasteMx_spt.wasteid AND
  859. u_order_wfjg_waste.scid = u_order_wfjg_wasteMx_spt.scid
  860. USING commit_transaction;
  861. OPEN cur_wastemx_spt;
  862. FETCH cur_wastemx_spt INTO :s_waste_mx_spt[j].mtrlwareid,
  863. :s_waste_mx_spt[j].printid,
  864. :s_waste_mx_spt[j].mtrlid,:s_waste_mx_spt[j].plancode,
  865. :s_waste_mx_spt[j].status,:s_waste_mx_spt[j].qty,:s_waste_mx_spt[j].fprice,
  866. :s_waste_mx_spt[j].mxdscrp,
  867. :s_waste_mx_spt[j].mtrlcode,:s_waste_mx_spt[j].woodcode,
  868. :s_waste_mx_spt[j].pcode,:s_waste_mx_spt[j].plancode;
  869. DO WHILE commit_transaction.SQLCode = 0
  870. j++
  871. FETCH cur_wastemx_spt INTO :s_waste_mx_spt[j].mtrlwareid,
  872. :s_waste_mx_spt[j].printid,
  873. :s_waste_mx_spt[j].mtrlid,:s_waste_mx_spt[j].plancode,
  874. :s_waste_mx_spt[j].status,:s_waste_mx_spt[j].qty,:s_waste_mx_spt[j].fprice,
  875. :s_waste_mx_spt[j].mxdscrp,
  876. :s_waste_mx_spt[j].mtrlcode,:s_waste_mx_spt[j].woodcode,
  877. :s_waste_mx_spt[j].pcode,:s_waste_mx_spt[j].plancode;
  878. LOOP
  879. CLOSE cur_wastemx_spt;
  880. //检验明细是否读入完整
  881. SELECT count(*) INTO :no_mxcheck_bef
  882. FROM u_order_wfjg_wasteMx_spt
  883. WHERE u_order_wfjg_wasteMx_spt.wasteid = :arg_wasteid
  884. AND scid = :arg_scid USING commit_transaction;
  885. IF commit_transaction.SQLCode <> 0 THEN
  886. rslt = 0
  887. arg_msg = "查询操作失败,外协收货单相关发外明细数量"
  888. GOTO ext
  889. END IF
  890. IF j <> (no_mxcheck_bef+1) THEN
  891. rslt = 0
  892. arg_msg = "查询操作失败,外协收货单相关发外明细"
  893. GOTO ext
  894. END IF
  895. wasteid = arg_wasteid
  896. scid = arg_scid
  897. it_mxbt = i - 1
  898. it_mxbt_spt = j - 1
  899. it_newbegin = FALSE
  900. it_updatebegin = FALSE
  901. ext:
  902. IF rslt = 0 THEN p_reset()
  903. RETURN rslt
  904. end function
  905. public function integer acceptmx_bef (long arg_mtrlwareid, decimal arg_qty, string arg_mxdscrp, long arg_printid, ref string arg_msg);Long rslt = 1,cnt = 0,LS_i
  906. Long i_mtrlid,i_sptid
  907. String i_plancode,i_mtrlcode,i_status,i_woodcode,i_pcode
  908. Double i_cost,i_newprice
  909. Decimal i_allouseqty
  910. String ls_relcode
  911. Decimal ld_rate = 1
  912. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  913. rslt = 0
  914. arg_msg = "非编辑状态不可以使用,操作取消"
  915. GOTO ext
  916. END IF
  917. IF IsNull(arg_mtrlwareid) THEN arg_mtrlwareid = 0
  918. IF IsNull(arg_printid) THEN arg_printid = 0
  919. IF IsNull(arg_qty) THEN arg_qty = 0
  920. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  921. IF arg_mtrlwareid = 0 OR arg_qty = 0 THEN
  922. rslt = 1
  923. GOTO ext
  924. END IF
  925. SELECT ow_wfjgware.mtrlid,
  926. ow_wfjgware.sptid,
  927. ow_wfjgware.plancode,
  928. ow_wfjgware.status,
  929. ow_wfjgware.cost,
  930. u_mtrldef.mtrlcode,
  931. ow_wfjgware.woodcode,
  932. ow_wfjgware.pcode,
  933. ow_wfjgware.noallocqty
  934. INTO :i_mtrlid,
  935. :i_sptid,
  936. :i_plancode,
  937. :i_status,
  938. :i_cost,
  939. :i_mtrlcode,
  940. :i_woodcode,
  941. :i_pcode,
  942. :i_allouseqty
  943. FROM ow_wfjgware ,u_mtrldef
  944. WHERE ( ow_wfjgware.mtrlwareid = :arg_mtrlwareid )
  945. AND ( ow_wfjgware.mtrlid = u_mtrldef.mtrlid )
  946. And ( ow_wfjgware.scid = :scid ) USING commit_transaction;
  947. IF commit_transaction.SQLCode <> 0 THEN
  948. rslt = 0
  949. if pos(lower(commit_transaction.SQLErrText),'more than') > 0 then
  950. arg_msg = '查询库存操作失败,查询数据返回值多于一个'
  951. else
  952. arg_msg = "查询操作失败,库存编号错误"
  953. end if
  954. GOTO ext
  955. END IF
  956. IF IsNull(i_cost) THEN i_cost = 0
  957. IF IsNull(i_plancode) THEN i_plancode = ''
  958. IF IsNull(i_status) THEN i_status = ''
  959. IF IsNull(i_mtrlid) THEN i_mtrlid = 0
  960. IF IsNull(i_sptid) THEN i_sptid = 0
  961. IF IsNull(i_woodcode) THEN i_woodcode = ''
  962. IF IsNull(i_pcode) THEN i_pcode = ''
  963. IF sptid <> i_sptid THEN
  964. arg_msg = "物料:" + String(i_mtrlcode) + '所属加工商资料不对应'
  965. rslt = 0
  966. GOTO ext
  967. END IF
  968. IF i_cost < 0 THEN //检查进仓价
  969. rslt = 0
  970. arg_msg = "物料:" + String(i_mtrlcode)+" 单价错误"
  971. GOTO ext
  972. END IF
  973. //写入内容
  974. it_mxbt_spt++
  975. s_waste_mx_spt[it_mxbt_spt].mtrlwareid = arg_mtrlwareid
  976. s_waste_mx_spt[it_mxbt_spt].mtrlid = i_mtrlid
  977. s_waste_mx_spt[it_mxbt_spt].status = i_status
  978. s_waste_mx_spt[it_mxbt_spt].qty = arg_qty
  979. s_waste_mx_spt[it_mxbt_spt].sptid = i_sptid
  980. s_waste_mx_spt[it_mxbt_spt].cost = i_cost
  981. s_waste_mx_spt[it_mxbt_spt].costamt = Round(i_cost * arg_qty,2)
  982. s_waste_mx_spt[it_mxbt_spt].plancode = i_plancode
  983. s_waste_mx_spt[it_mxbt_spt].mtrlcode = i_mtrlcode
  984. s_waste_mx_spt[it_mxbt_spt].mxdscrp = arg_mxdscrp
  985. s_waste_mx_spt[it_mxbt_spt].printid = arg_printid
  986. s_waste_mx_spt[it_mxbt_spt].fprice = i_cost
  987. s_waste_mx_spt[it_mxbt_spt].woodcode = i_woodcode
  988. s_waste_mx_spt[it_mxbt_spt].pcode = i_pcode
  989. ext:
  990. IF rslt = 0 THEN p_clearmx()
  991. arg_msg = '外协损耗单,'+ arg_msg
  992. RETURN rslt
  993. end function
  994. public function integer acceptmx (long arg_printid, integer arg_ifrel, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, string arg_mxdscrp, ref string arg_msg, decimal arg_jgprice, long arg_relid, long arg_orderid, string arg_plancode);Long rslt = 1,cnt = 0,ls_i
  995. Decimal ls_planprice
  996. String ls_relcode
  997. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  998. rslt = 0
  999. arg_msg = "非编辑状态不可以使用,操作取消"
  1000. GOTO ext
  1001. END IF
  1002. //清除空值
  1003. IF IsNull(arg_printid) THEN arg_printid = 0
  1004. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  1005. IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = ''
  1006. IF IsNull(arg_status) THEN arg_status = ''
  1007. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  1008. IF IsNull(arg_pcode) THEN arg_pcode = ''
  1009. IF IsNull(arg_qty) THEN arg_qty = 0
  1010. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  1011. IF IsNull(arg_jgprice) THEN arg_jgprice = 0
  1012. IF IsNull(arg_relid) THEN arg_relid = 0
  1013. IF IsNull(arg_orderid) THEN arg_orderid = 0
  1014. IF IsNull(arg_plancode) THEN arg_plancode = ''
  1015. IF arg_mtrlid = 0 OR arg_qty = 0 THEN
  1016. rslt = 1
  1017. GOTO ext
  1018. END IF
  1019. //检查外加工计划ID
  1020. IF arg_ifrel = 1 THEN
  1021. SELECT count(*)
  1022. INTO :cnt
  1023. FROM u_order_wfjg
  1024. Where u_order_wfjg.wfjgID = :arg_relid AND u_order_wfjg.scid = :scid USING commit_transaction;
  1025. IF commit_transaction.SQLCode <> 0 THEN
  1026. rslt = 0
  1027. arg_msg = "查询操作失败,外加工计划编号:在编码"+String(arg_mtrlcode)
  1028. GOTO ext
  1029. END IF
  1030. IF cnt = 0 THEN
  1031. rslt = 0
  1032. arg_msg = "错误的外加工计划编号:在编码 "+String(arg_mtrlcode)
  1033. GOTO ext
  1034. END IF
  1035. END IF
  1036. cnt = 0
  1037. //检查物料id
  1038. SELECT COUNT(*)
  1039. INTO :cnt
  1040. FROM u_mtrldef
  1041. Where u_mtrldef.mtrlid = :arg_mtrlid USING commit_transaction ;
  1042. IF commit_transaction.SQLCode <> 0 THEN
  1043. rslt = 0
  1044. arg_msg = "查询操作失败,编码"+String(arg_mtrlcode)
  1045. GOTO ext
  1046. END IF
  1047. IF cnt = 0 THEN
  1048. rslt = 0
  1049. arg_msg = "错误的编码: "+String(arg_mtrlcode)
  1050. GOTO ext
  1051. END IF
  1052. cnt = 0
  1053. IF f_check_status(1, arg_status) = 0 THEN
  1054. rslt = 0
  1055. arg_msg = "查询操作失败,可能颜色未定义,编码:"+arg_mtrlcode+",颜色:"+arg_status
  1056. GOTO ext
  1057. END IF
  1058. //检查外加工计划明细,该物料记录是否存在
  1059. IF arg_relid = 0 AND arg_ifrel = 1 THEN
  1060. arg_msg = '请先择相应的加工计划'
  1061. rslt = 0
  1062. GOTO ext
  1063. END IF
  1064. IF arg_ifrel = 1 THEN
  1065. SELECT taskcode INTO :ls_relcode
  1066. FROM u_order_wfjgmx,u_order_wfjg
  1067. WHERE u_order_wfjgmx.wfjgid = :arg_relid
  1068. AND u_order_wfjgmx.mtrlid = :arg_mtrlid
  1069. AND u_order_wfjgmx.wfjgid = u_order_wfjg.wfjgid
  1070. AND u_order_wfjgmx.scid = u_order_wfjg.scid
  1071. AND u_order_wfjgmx.scid = :scid
  1072. USING commit_transaction;
  1073. IF commit_transaction.SQLCode <> 0 THEN
  1074. arg_msg = '查询加工计划是否有加工产品:'+arg_mtrlcode+'失败'
  1075. rslt = 0
  1076. GOTO ext
  1077. END IF
  1078. IF ls_relcode = '' THEN
  1079. rslt = 0
  1080. arg_msg = "错误的外加工产品编码 "
  1081. GOTO ext
  1082. END IF
  1083. END IF
  1084. //写入内容
  1085. it_mxbt++
  1086. inwaremx_waste[it_mxbt].printid = arg_printid
  1087. inwaremx_waste[it_mxbt].mtrlid = arg_mtrlid
  1088. inwaremx_waste[it_mxbt].status = arg_status
  1089. inwaremx_waste[it_mxbt].woodcode = arg_woodcode
  1090. inwaremx_waste[it_mxbt].pcode = arg_pcode
  1091. inwaremx_waste[it_mxbt].qty = arg_qty
  1092. inwaremx_waste[it_mxbt].mxdscrp = arg_mxdscrp
  1093. inwaremx_waste[it_mxbt].jgprice = arg_jgprice
  1094. inwaremx_waste[it_mxbt].relid = arg_relid
  1095. inwaremx_waste[it_mxbt].relcode = ls_relcode
  1096. inwaremx_waste[it_mxbt].orderid = arg_orderid //生产计划ID
  1097. inwaremx_waste[it_mxbt].ifrel = arg_ifrel
  1098. inwaremx_waste[it_mxbt].plancode = arg_plancode
  1099. ext:
  1100. IF rslt = 0 THEN p_clearmx()
  1101. arg_msg = '外协损耗单,'+ arg_msg
  1102. RETURN(rslt)
  1103. end function
  1104. on uo_wfjg_waste.create
  1105. call super::create
  1106. TriggerEvent( this, "constructor" )
  1107. end on
  1108. on uo_wfjg_waste.destroy
  1109. TriggerEvent( this, "destructor" )
  1110. call super::destroy
  1111. end on