uo_cust_exchange.sru 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998
  1. $PBExportHeader$uo_cust_exchange.sru
  2. forward
  3. global type uo_cust_exchange from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_cust_exchange from nonvisualobject
  7. end type
  8. global uo_cust_exchange uo_cust_exchange
  9. type variables
  10. PUBLIC PROTECTEDWRITE Long scid = 0 //分部id
  11. PUBLIC PROTECTEDWRITE Long billid //进仓单表自动增量id
  12. PUBLIC PROTECTEDWRITE String billcode //单据的唯一编号
  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 DateTime auditingdate //审核时间
  19. PUBLIC PROTECTEDWRITE long relid
  20. Long storageid = 0 //进仓仓库
  21. DateTime outdate //进仓发生时间
  22. String rep = '' //经手人
  23. String part = '' //相关号码
  24. String dscrp = '' //备注
  25. Long cusid = 0 //客户id
  26. Decimal sum_amt = 0 //单据总金额
  27. Boolean if_getid_ture = TRUE
  28. Transaction commit_transaction //数据commit事务
  29. s_cust_exchangemx exchangemx[] //明细结构数组
  30. Long it_mxbt = 0 //明细结构数组末指针
  31. Boolean it_newbegin = FALSE //新建标志
  32. Boolean it_updatebegin = FALSE //修改标志
  33. end variables
  34. forward prototypes
  35. public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg)
  36. public function integer save (boolean arg_ifcommit, ref string arg_msg)
  37. public function integer auditing (boolean arg_ifcommit, ref string arg_msg)
  38. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg)
  39. public function integer p_clearmx ()
  40. public function integer p_reset ()
  41. public function integer acceptmx (long arg_mtrlwareid, long arg_mtrlid, string arg_mtrlcode, decimal arg_qty, decimal arg_addqty, decimal arg_fprice, string arg_mxdscrp, long arg_printid, ref string arg_msg)
  42. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg)
  43. public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg)
  44. public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  45. public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg)
  46. public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg)
  47. end prototypes
  48. public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg);//====================================================================
  49. // Function: newbegin(long arg_scid,int arg_billtype,ref string arg_msg)
  50. //--------------------------------------------------------------------
  51. // Description: 从置对象,设定业务类型,准备建立新进仓单
  52. //--------------------------------------------------------------------
  53. // Arguments:
  54. // value long arg_scid
  55. // value integer arg_billtype
  56. // reference string arg_msg
  57. //--------------------------------------------------------------------
  58. // Returns: integer
  59. //--------------------------------------------------------------------
  60. // Author: yyx Date: 2003.11.12
  61. //--------------------------------------------------------------------
  62. // Modify History:
  63. //
  64. //====================================================================
  65. int rslt=1
  66. if arg_scid < 0 then
  67. arg_msg = '请选择分部'
  68. rslt = 0
  69. goto ext
  70. end if
  71. p_reset()
  72. scid=arg_scid
  73. it_newbegin=true
  74. it_updatebegin=false
  75. ext:
  76. if rslt=0 then p_reset()
  77. return rslt
  78. end function
  79. public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i
  80. DateTime server_dt
  81. Long ls_newid
  82. String ls_sccode
  83. IF IsNull(storageid) THEN storageid = 0
  84. IF IsNull(rep) THEN rep = ''
  85. IF IsNull(dscrp) THEN dscrp = ''
  86. IF IsNull(part) THEN part = ''
  87. IF IsNull(cusid) THEN cusid = 0
  88. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  89. rslt = 0
  90. arg_msg = "非编辑状态不可以提交"
  91. GOTO ext
  92. END IF
  93. SELECT Top 1 getdate() INTO :server_dt FROM u_user USING commit_transaction ;
  94. //取得系统时间,借用操作员表
  95. IF commit_transaction.SQLCode <> 0 THEN
  96. rslt = 0
  97. arg_msg = "查询操作失败,日期 "
  98. GOTO ext
  99. END IF
  100. //IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空
  101. // rslt = 0
  102. // arg_msg = "没有正确进仓内容"
  103. // GOTO ext
  104. //END IF
  105. cnt = 0
  106. //检查仓库
  107. SELECT count(*)
  108. INTO :cnt
  109. FROM u_storage
  110. Where u_storage.storageid = :storageid USING commit_transaction ;
  111. IF commit_transaction.SQLCode <> 0 THEN
  112. rslt = 0
  113. arg_msg = "查询操作失败,仓库"
  114. GOTO ext
  115. END IF
  116. IF cnt = 0 THEN
  117. rslt = 0
  118. arg_msg = "错误的仓库编号: "+String(storageid)
  119. GOTO ext
  120. END IF
  121. IF Year(Date(outdate)) < 2000 OR IsNull(outdate) THEN
  122. rslt = 0
  123. arg_msg = "缺少出仓发生时间或不合理"
  124. GOTO ext
  125. END IF
  126. IF DaysAfter(Date(String(server_dt,'yyyy-mm-dd')),Date(String(outdate,'yyyy-mm-dd'))) > sys_option_input_days THEN
  127. rslt = 0
  128. arg_msg = '出仓日期错误,日期不能超前系统日期'
  129. GOTO ext
  130. END IF
  131. IF DaysAfter(Date(String(outdate,'yyyy-mm-dd')),Date(String(server_dt,'yyyy-mm-dd'))) > sys_option_input_days THEN
  132. rslt = 0
  133. arg_msg = '出仓日期错误,日期不能落后系统日期'
  134. GOTO ext
  135. END IF
  136. IF f_check_inoutdate(storageid,outdate,true,arg_msg) = 0 THEN
  137. rslt = 0
  138. GOTO ext
  139. END IF
  140. //====================================================================
  141. ////////////////////////////////////////////////开始区分:新建/更新 处理
  142. IF billid = 0 THEN //新建
  143. ls_newid = f_sys_scidentity(scid,"u_cust_exchange","billid",arg_msg,if_getid_ture,commit_transaction)
  144. IF ls_newid <= 0 THEN
  145. rslt = 0
  146. GOTO ext
  147. END IF
  148. //取分部代号
  149. IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN
  150. rslt = 0
  151. GOTO ext
  152. END IF
  153. //取得新单据编号
  154. billcode = getid(scid,ls_sccode + 'DH',Date(server_dt),if_getid_ture,commit_transaction)
  155. IF billcode = "err" THEN
  156. billcode = ''
  157. rslt = 0
  158. arg_msg = "无法获取进仓单编号"+"~n"+commit_transaction.SQLErrText
  159. GOTO ext
  160. END IF
  161. INSERT INTO u_cust_exchange
  162. ( scid,
  163. billid,
  164. billcode,
  165. cusid,
  166. billdate,
  167. rep,
  168. part,
  169. dscrp,
  170. opemp,
  171. opdate,
  172. exchangeamt,
  173. storageid )
  174. VALUES ( :scid,
  175. :ls_newid,
  176. :billcode,
  177. :cusid,
  178. :outdate,
  179. :rep,
  180. :part,
  181. :dscrp,
  182. :publ_operator,
  183. :server_dt ,
  184. :sum_amt,
  185. :storageid)
  186. USING commit_transaction ;
  187. IF commit_transaction.SQLCode <> 0 THEN
  188. rslt = 0
  189. arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText
  190. GOTO ext
  191. END IF
  192. //读取新outwareid
  193. billid = ls_newid
  194. FOR i = 1 TO it_mxbt
  195. INSERT INTO u_cust_exchangemx
  196. ( scid,
  197. billid,
  198. printid,
  199. mtrlwareid,
  200. mtrlid,
  201. qty,
  202. addqty,
  203. price,
  204. Mxdscrp )
  205. VALUES ( :scid,
  206. :billid,
  207. :exchangemx[i].printid,
  208. :exchangemx[i].mtrlwareid,
  209. :exchangemx[i].mtrlid,
  210. :exchangemx[i].qty,
  211. :exchangemx[i].addqty,
  212. :exchangemx[i].price,
  213. :exchangemx[i].Mxdscrp) USING commit_transaction;
  214. IF commit_transaction.SQLCode <> 0 THEN
  215. billid = 0
  216. rslt = 0
  217. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText
  218. GOTO ext
  219. END IF
  220. NEXT
  221. ELSE //////////////////////////////////////////////////更新
  222. UPDATE u_cust_exchange
  223. SET cusid = :cusid,
  224. billdate = :outdate,
  225. rep = :rep,
  226. part = :part,
  227. dscrp = :dscrp,
  228. modemp = :publ_operator,
  229. moddate = :server_dt,
  230. exchangeamt = :sum_amt,
  231. storageid = :storageid
  232. WHERE u_cust_exchange.billid = :billid
  233. AND u_cust_exchange.scid = :scid
  234. AND u_cust_exchange.flag = 0 USING commit_transaction;
  235. IF commit_transaction.SQLCode <> 0 OR commit_transaction.SQLNRows <= 0 THEN
  236. rslt = 0
  237. arg_msg = "因网络或其它原因导致更新单据操作失败(1)"+"~n"+commit_transaction.SQLErrText
  238. GOTO ext
  239. END IF
  240. //删除原有明细
  241. DELETE FROM u_cust_exchangemx
  242. WHERE u_cust_exchangemx.billid = :billid
  243. AND u_cust_exchangemx.scid = :scid USING commit_transaction;
  244. IF commit_transaction.SQLCode <> 0 THEN
  245. rslt = 0
  246. arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText
  247. GOTO ext
  248. END IF
  249. FOR i = 1 TO it_mxbt
  250. INSERT INTO u_cust_exchangemx
  251. ( scid,
  252. billid,
  253. printid,
  254. mtrlwareid,
  255. mtrlid,
  256. qty,
  257. addqty,
  258. price,
  259. Mxdscrp )
  260. VALUES ( :scid,
  261. :billid,
  262. :exchangemx[i].printid,
  263. :exchangemx[i].mtrlwareid,
  264. :exchangemx[i].mtrlid,
  265. :exchangemx[i].qty,
  266. :exchangemx[i].addqty,
  267. :exchangemx[i].price,
  268. :exchangemx[i].Mxdscrp) USING commit_transaction;
  269. IF commit_transaction.SQLCode <> 0 THEN
  270. rslt = 0
  271. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText
  272. GOTO ext
  273. END IF
  274. NEXT
  275. END IF
  276. it_newbegin = FALSE
  277. it_updatebegin = FALSE
  278. ext:
  279. IF rslt = 0 THEN
  280. ROLLBACK USING commit_transaction;
  281. p_clearmx()
  282. ELSEIF rslt = 1 AND arg_ifcommit THEN
  283. COMMIT USING commit_transaction;
  284. END IF
  285. RETURN rslt
  286. end function
  287. public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i
  288. Dec new_noallocqty = 0
  289. Long ls_newid
  290. IF billid = 0 THEN
  291. rslt = 0
  292. arg_msg = "没有审核对象"
  293. GOTO ext
  294. END IF
  295. IF it_newbegin OR it_updatebegin THEN
  296. rslt = 0
  297. arg_msg = "编辑状态下不可以执行审核"
  298. GOTO ext
  299. END IF
  300. IF flag = 1 THEN
  301. rslt = 0
  302. arg_msg = "单据已经审核"
  303. GOTO ext
  304. END IF
  305. uo_outware uo_out
  306. uo_out = CREATE uo_outware
  307. uo_out.commit_transaction = commit_transaction
  308. uo_out.if_getid_ture = FALSE
  309. uo_custdef uo_cust
  310. uo_cust = CREATE uo_custdef
  311. uo_cust.commit_transaction = commit_transaction
  312. uo_cust.if_getid_ture = FALSE
  313. IF uo_cust.uof_cust_score(cusid,0 - sum_amt,arg_msg,FALSE) = 0 THEN
  314. rslt = 0
  315. GOTO ext
  316. END IF
  317. IF it_mxbt > 0 THEN
  318. //2.原事务生成其他出仓单
  319. IF uo_out.newbegin(scid,8,arg_msg) = 0 THEN
  320. rslt = 0
  321. GOTO ext
  322. END IF
  323. uo_out.relid = billid
  324. uo_out.outdate = outdate
  325. uo_out.outrep = rep
  326. uo_out.part = billcode
  327. uo_out.dscrp = dscrp
  328. uo_out.cusname = '客户积分换礼品'
  329. uo_out.storageid = storageid
  330. FOR i = 1 TO it_mxbt
  331. IF uo_out.acceptmx(exchangemx[i].mtrlwareid,&
  332. exchangemx[i].qty,exchangemx[i].addqty,exchangemx[i].price,1,&
  333. exchangemx[i].mxdscrp,exchangemx[i].printid,arg_msg,0,0,0,0,0,0,0,exchangemx[i].unit,1,'','') = 0 THEN
  334. rslt = 0
  335. GOTO ext
  336. END IF
  337. NEXT
  338. IF uo_out.Save(FALSE,arg_msg) = 0 THEN
  339. rslt = 0
  340. GOTO ext
  341. END IF
  342. relid = uo_out.outwareid
  343. //4.原事务审核出仓单
  344. IF uo_out.getinfo(scid,relid,arg_msg) = 0 THEN
  345. rslt = 0
  346. GOTO ext
  347. END IF
  348. IF uo_out.auditing(FALSE,arg_msg) = 0 THEN
  349. rslt = 0
  350. GOTO ext
  351. END IF
  352. END IF
  353. UPDATE u_cust_exchange
  354. SET flag = 1,
  355. relid = :relid,
  356. auditemp = :publ_operator,
  357. auditdate = getdate() USING commit_transaction;
  358. IF commit_transaction.SQLCode <> 0 THEN
  359. rslt = 0
  360. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  361. GOTO ext
  362. ELSEIF commit_transaction.SQLNRows = 0 THEN
  363. rslt = 0
  364. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  365. GOTO ext
  366. END IF
  367. flag = 1
  368. ext:
  369. IF rslt = 0 THEN
  370. ROLLBACK USING commit_transaction;
  371. ELSEIF rslt = 1 AND arg_ifcommit THEN
  372. COMMIT USING commit_transaction;
  373. END IF
  374. DESTROY uo_out
  375. DESTROY uo_cust
  376. RETURN rslt
  377. end function
  378. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);
  379. Long rslt = 1,cnt = 0,i
  380. Long ls_newid
  381. DateTime null_dt
  382. SetNull(null_dt)
  383. IF billid = 0 THEN
  384. rslt = 0
  385. arg_msg = "没有审核对象"
  386. GOTO ext
  387. END IF
  388. IF it_newbegin OR it_updatebegin THEN
  389. rslt = 0
  390. arg_msg = "编辑状态下不可以执行审核"
  391. GOTO ext
  392. END IF
  393. IF flag = 0 THEN
  394. rslt = 0
  395. arg_msg = "单据还未审核"
  396. GOTO ext
  397. END IF
  398. ////////////////////自动删除出仓单
  399. uo_outware uo_out
  400. uo_out = CREATE uo_outware
  401. uo_out.commit_transaction = sqlca
  402. uo_out.if_getid_ture = FALSE
  403. uo_custdef uo_cust
  404. uo_cust = CREATE uo_custdef
  405. uo_cust.commit_transaction = commit_transaction
  406. uo_cust.if_getid_ture = FALSE
  407. IF uo_cust.uof_cust_score(cusid,sum_amt,arg_msg,FALSE) = 0 THEN
  408. rslt = 0
  409. GOTO ext
  410. END IF
  411. IF it_mxbt > 0 THEN
  412. //撤审出仓单,再删除
  413. IF uo_out.getinfo(scid,relid,arg_msg) = 0 THEN
  414. rslt = 0
  415. GOTO ext
  416. END IF
  417. IF uo_out.c_auditing(FALSE,arg_msg) = 0 THEN
  418. rslt = 0
  419. GOTO ext
  420. END IF
  421. IF uo_out.del(scid,relid,arg_msg,FALSE) = 0 THEN
  422. rslt = 0
  423. GOTO ext
  424. END IF
  425. END IF
  426. UPDATE u_cust_exchange
  427. SET Auditemp = '',
  428. Auditdate = :null_dt,
  429. flag = 0,
  430. relid = 0
  431. WHERE u_cust_exchange.billid = :billid
  432. AND flag = 1
  433. AND scid = :scid USING commit_transaction;
  434. IF commit_transaction.SQLCode <> 0 THEN
  435. rslt = 0
  436. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  437. GOTO ext
  438. ELSEIF commit_transaction.SQLNRows = 0 THEN
  439. rslt = 0
  440. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  441. GOTO ext
  442. END IF
  443. flag = 0
  444. ext:
  445. IF rslt = 0 THEN
  446. ROLLBACK USING commit_transaction;
  447. ELSEIF rslt = 1 AND arg_ifcommit THEN
  448. COMMIT USING commit_transaction;
  449. END IF
  450. DESTROY uo_out
  451. DESTROY uo_cust
  452. RETURN rslt
  453. end function
  454. public function integer p_clearmx ();//int p_clearmx()
  455. //清除明细
  456. it_mxbt=0
  457. return 1
  458. end function
  459. public function integer p_reset ();//int p_reset()
  460. //清除对象及其明细
  461. scid = 0
  462. billid = 0
  463. billcode = ''
  464. opemp = ''
  465. modemp = ''
  466. flag = 0
  467. storageid = 0
  468. rep = ''
  469. part = ''
  470. dscrp = ''
  471. cusid = 0
  472. it_newbegin = FALSE
  473. it_updatebegin = FALSE
  474. //清除明细
  475. p_clearmx()
  476. RETURN 1
  477. end function
  478. public function integer acceptmx (long arg_mtrlwareid, long arg_mtrlid, string arg_mtrlcode, decimal arg_qty, decimal arg_addqty, decimal arg_fprice, string arg_mxdscrp, long arg_printid, ref string arg_msg);Long rslt = 1,cnt = 0,LS_i
  479. Long i_mtrlid,i_storageid,i_sptid
  480. Int i_dxflag,li_mtrlkind
  481. String i_plancode,i_mtrlcode,i_status,i_woodcode,i_pcode,i_mtrlname
  482. Decimal i_planprice,ld_dftsaleprice
  483. Double i_cost,i_newprice
  484. Decimal i_notauditqty,i_allouseqty,i_noallocaddqty
  485. String ls_relcode
  486. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  487. rslt = 0
  488. arg_msg = "非编辑状态不可以使用,操作取消"
  489. GOTO ext
  490. END IF
  491. //清除空值
  492. IF IsNull(arg_mtrlwareid) THEN arg_mtrlwareid = 0
  493. IF IsNull(arg_printid) THEN arg_printid = 0
  494. IF IsNull(arg_qty) THEN arg_qty = 0
  495. IF IsNull(arg_addqty) THEN arg_addqty = 0
  496. IF IsNull(arg_fprice) THEN arg_fprice = 0
  497. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  498. // 如果出仓数量为 0,或物料编号为空,则不作任何处理
  499. IF arg_mtrlwareid = 0 OR (arg_qty = 0 and arg_addqty=0) THEN
  500. rslt = 1
  501. GOTO ext
  502. END IF
  503. //检查物料库存ID
  504. SELECT u_mtrlware.mtrlid,
  505. u_mtrlware.storageid,
  506. u_mtrlware.plancode,
  507. u_mtrlware.status,
  508. u_mtrlware.cost,
  509. u_mtrldef.planprice,
  510. u_mtrldef.mtrlcode,
  511. u_mtrldef.mtrlname,
  512. u_mtrlware.sptid,
  513. u_mtrlware.dxflag,
  514. u_mtrlware.woodcode,
  515. u_mtrlware.pcode,
  516. isnull(uv_mtrlware_noauditingqty.noauditingqty,0),
  517. u_mtrlware.noallocqty,
  518. u_mtrlware.noallocaddqty
  519. INTO :i_mtrlid,
  520. :i_storageid,
  521. :i_plancode,
  522. :i_status,
  523. :i_cost,
  524. :i_planprice,
  525. :i_mtrlcode,
  526. :i_mtrlname,
  527. :i_sptid,
  528. :i_dxflag,
  529. :i_woodcode,
  530. :i_pcode,
  531. :i_notauditqty,
  532. :i_allouseqty,
  533. :i_noallocaddqty
  534. FROM u_mtrlware left OUTER join uv_mtrlware_noauditingqty
  535. on ( u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid)
  536. AND ( u_mtrlware.scid = uv_mtrlware_noauditingqty.scid),u_mtrldef
  537. WHERE ( u_mtrlware.mtrlwareid = :arg_mtrlwareid )
  538. AND ( u_mtrlware.mtrlid = u_mtrldef.mtrlid )
  539. And ( u_mtrlware.scid = :scid ) USING commit_transaction;
  540. IF commit_transaction.SQLCode <> 0 THEN
  541. rslt = 0
  542. arg_msg = "查询操作失败,库存编号错误"
  543. GOTO ext
  544. END IF
  545. IF IsNull(ld_dftsaleprice) THEN ld_dftsaleprice = 0
  546. IF IsNull(i_cost) THEN i_cost = 0
  547. IF IsNull(i_plancode) THEN i_plancode = ''
  548. IF IsNull(i_status) THEN i_status = ''
  549. IF IsNull(i_mtrlid) THEN i_mtrlid = 0
  550. IF IsNull(i_storageid) THEN i_storageid = 0
  551. IF IsNull(i_planprice) THEN i_planprice = 0
  552. IF IsNull(i_sptid) THEN i_sptid = 0
  553. IF IsNull(i_dxflag) THEN i_dxflag = 0
  554. IF IsNull(i_woodcode) THEN i_woodcode = ''
  555. IF IsNull(i_pcode) THEN i_pcode = ''
  556. if sys_option_addqty=1 and i_noallocaddqty <> 0 then //辅数限制
  557. if arg_addqty= 0 then
  558. rslt=0
  559. arg_msg='['+i_mtrlcode+' '+i_mtrlname+']在库存中使用了辅数,出仓时必须录入辅数。'
  560. goto ext
  561. end if
  562. if (i_noallocaddqty = arg_addqty) and (i_allouseqty <> arg_qty) then
  563. rslt = 0
  564. arg_msg = '['+i_mtrlcode+' '+i_mtrlname+']在库存中使用了辅数,当库存辅数全部出仓时,库存数量应全部出仓.'
  565. goto ext
  566. end if
  567. if (i_allouseqty = arg_qty) and (i_noallocaddqty <> arg_addqty) then
  568. rslt = 0
  569. arg_msg = '['+i_mtrlcode+' '+i_mtrlname+']在库存中使用了辅数,当库存数量全部出仓时,库存辅数应全部出仓.'
  570. goto ext
  571. end if
  572. end if
  573. //写入内容
  574. it_mxbt++
  575. exchangemx[it_mxbt].mtrlwareid = arg_mtrlwareid
  576. exchangemx[it_mxbt].mtrlid = arg_mtrlid
  577. exchangemx[it_mxbt].qty = arg_qty
  578. exchangemx[it_mxbt].price = arg_fprice
  579. exchangemx[it_mxbt].mxdscrp = arg_mxdscrp
  580. exchangemx[it_mxbt].printid = arg_printid
  581. exchangemx[it_mxbt].mtrlcode = arg_mtrlcode
  582. exchangemx[it_mxbt].addqty = arg_addqty
  583. ext:
  584. IF rslt = 0 THEN p_clearmx()
  585. RETURN rslt
  586. end function
  587. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);//====================================================================
  588. // Function: updatebegin(arg_scid,arg_inwareid,arg_billtype,arg_msg)
  589. //--------------------------------------------------------------------
  590. // Description: 从置对象,设定业务类型与关联ID,准备更新进仓单
  591. //--------------------------------------------------------------------
  592. // Arguments:
  593. // value long arg_scid
  594. // value long arg_inwareid
  595. // value integer arg_billtype
  596. // reference string arg_msg
  597. //--------------------------------------------------------------------
  598. // Returns: integer
  599. //--------------------------------------------------------------------
  600. // Author: yyx Date: 2003.11.12
  601. //--------------------------------------------------------------------
  602. // Modify History:
  603. //
  604. //====================================================================
  605. long rslt=1
  606. if arg_scid < 0 then
  607. arg_msg = '请选择分部'
  608. rslt = 0
  609. goto ext
  610. end if
  611. if arg_billid<=0 then
  612. rslt=0
  613. goto ext
  614. end if
  615. rslt=p_getinfo(arg_scid,arg_billid,arg_msg)
  616. if rslt=0 then goto ext
  617. if flag=1 then
  618. rslt=0
  619. arg_msg='单据已经审核,不可以修改'
  620. goto ext
  621. end if
  622. billid=arg_billid
  623. scid=arg_scid
  624. it_newbegin=false
  625. it_updatebegin=true
  626. p_clearmx() //清除明细
  627. ext:
  628. if rslt=0 then p_reset()
  629. return rslt
  630. end function
  631. public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1,i = 1,no_mxcheck = 0
  632. sum_amt = 0
  633. IF arg_billid <= 0 THEN
  634. rslt = 0
  635. arg_msg = "非法出仓单唯一码"
  636. GOTO ext
  637. END IF
  638. rslt = p_getinfo(arg_scid,arg_billid,arg_msg)
  639. IF rslt = 0 THEN GOTO ext
  640. DECLARE cur_inwaermx CURSOR FOR
  641. SELECT u_cust_exchangemx.scid,
  642. u_cust_exchangemx.billid,
  643. u_cust_exchangemx.printid,
  644. u_cust_exchangemx.mtrlwareid,
  645. u_cust_exchangemx.mtrlid,
  646. u_cust_exchangemx.qty,
  647. u_cust_exchangemx.addqty,
  648. u_cust_exchangemx.price,
  649. u_cust_exchangemx.Mxdscrp,
  650. u_mtrldef.mtrlcode,
  651. u_mtrldef.unit
  652. FROM u_cust_exchangemx,u_mtrldef
  653. WHERE u_cust_exchangemx.billid = :arg_billid AND
  654. u_cust_exchangemx.mtrlid = u_mtrldef.mtrlid AND
  655. u_cust_exchangemx.scid = :arg_scid USING commit_transaction;
  656. OPEN cur_inwaermx;
  657. FETCH cur_inwaermx INTO :exchangemx[i].scid,
  658. :exchangemx[i].billid,
  659. :exchangemx[i].printid,
  660. :exchangemx[i].mtrlwareid,
  661. :exchangemx[i].mtrlid,
  662. :exchangemx[i].qty,
  663. :exchangemx[i].addqty,
  664. :exchangemx[i].price,
  665. :exchangemx[i].Mxdscrp,
  666. :exchangemx[i].mtrlcode,
  667. :exchangemx[i].unit;
  668. DO WHILE commit_transaction.SQLCode = 0
  669. i ++
  670. FETCH cur_inwaermx INTO :exchangemx[i].scid,
  671. :exchangemx[i].billid,
  672. :exchangemx[i].printid,
  673. :exchangemx[i].mtrlwareid,
  674. :exchangemx[i].mtrlid,
  675. :exchangemx[i].qty,
  676. :exchangemx[i].addqty,
  677. :exchangemx[i].price,
  678. :exchangemx[i].Mxdscrp,
  679. :exchangemx[i].mtrlcode,
  680. :exchangemx[i].unit;
  681. LOOP
  682. CLOSE cur_inwaermx;
  683. //检验明细是否读入完整
  684. SELECT count(*) INTO :no_mxcheck
  685. FROM u_cust_exchangemx
  686. WHERE u_cust_exchangemx.billid = :arg_billid
  687. AND u_cust_exchangemx.scid = :arg_scid USING commit_transaction;
  688. IF commit_transaction.SQLCode <> 0 THEN
  689. rslt = 0
  690. arg_msg = "查询操作失败,出仓单明细数量"
  691. GOTO ext
  692. END IF
  693. IF i <> (no_mxcheck+1) THEN
  694. rslt = 0
  695. arg_msg = "查询操作失败,出仓单明细"
  696. GOTO ext
  697. END IF
  698. billid = arg_billid
  699. scid = arg_scid
  700. it_mxbt = i - 1
  701. it_newbegin = FALSE
  702. it_updatebegin = FALSE
  703. ext:
  704. IF rslt = 0 THEN p_reset()
  705. RETURN rslt
  706. end function
  707. public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);//如果单据还没有审核删除单据极其明细
  708. //0 FAIL, 1 SUCCESS
  709. Int rslt = 1
  710. IF arg_billid <= 0 THEN
  711. rslt = 0
  712. arG_MSG = "没有删除对象,操作取消"
  713. GOTO ext
  714. END IF
  715. IF p_getinfo(arg_scid,arg_billid,arG_MSG) = 0 THEN
  716. rslt = 0
  717. GOTO ext
  718. END IF
  719. IF flag = 1 THEN
  720. rslt = 0
  721. arG_MSG = "单据已经审核,不可以删除"
  722. GOTO ext
  723. END IF
  724. DELETE FROM u_cust_exchange
  725. WHERE u_cust_exchange.billid = :arg_billid
  726. AND u_cust_exchange.scid = :arg_scid USING commit_transaction;
  727. IF commit_transaction.SQLCode <> 0 THEN
  728. rslt = 0
  729. arG_MSG = "删除进仓单操作失败"+"~n"+commit_transaction.SQLErrText
  730. GOTO ext
  731. END IF
  732. DELETE FROM u_cust_exchangemx
  733. WHERE u_cust_exchangemx.billid = :arg_billid
  734. AND u_cust_exchangemx.scid = :arg_scid USING commit_transaction;
  735. IF commit_transaction.SQLCode <> 0 THEN
  736. rslt = 0
  737. arG_MSG = "删除进仓单明细操作失败"+"~n"+commit_transaction.SQLErrText
  738. GOTO ext
  739. END IF
  740. it_newbegin = FALSE
  741. it_updatebegin = FALSE
  742. ext:
  743. IF rslt = 0 THEN
  744. ROLLBACK USING commit_transaction;
  745. p_reset()
  746. ELSEIF rslt = 1 AND arg_ifcommit THEN
  747. COMMIT USING commit_transaction;
  748. END IF
  749. RETURN (rslt)
  750. end function
  751. public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg);//add_dscrp(string arg_newdescppart)
  752. //0 fail 1 success
  753. int rslt=1
  754. arg_newdescppart=trim(arg_newdescppart)
  755. if it_updatebegin or it_newbegin then
  756. rslt=0
  757. arg_msg="编辑状态下不可用"
  758. goto ext
  759. end if
  760. if arg_newdescppart='' then
  761. rslt=0
  762. arg_msg="要添加内容为空,操作取消"
  763. goto ext
  764. end if
  765. rslt=p_getinfo(arg_scid,arg_billid,arg_msg)
  766. if rslt=0 then goto ext
  767. if flag=0 then
  768. rslt=0
  769. arg_msg="非审核状态下不可用"
  770. goto ext
  771. end if
  772. update u_cust_exchange
  773. set dscrp = dscrp+' '+:arg_newdescppart
  774. where u_cust_exchange.billid = :arg_billid
  775. and scid=:scid using commit_transaction;
  776. if commit_transaction.sqlcode<>0 then
  777. rollback ;
  778. rslt=0
  779. arg_msg="因网络或其它原因导致添加单据备注操作失败"+"~n"+commit_transaction.sqlerrtext
  780. goto ext
  781. end if
  782. commit using commit_transaction;
  783. dscrp = dscrp+' '+arg_newdescppart
  784. ext: return (rslt)
  785. end function
  786. public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg);//p_getinfo(arg_scid,arg_outwareid,arg_msg)
  787. //0 失败 1成功
  788. Int rslt = 1
  789. IF arg_billid <= 0 THEN
  790. rslt = 0
  791. arG_MSG = "非法出仓单唯一码"
  792. GOTO ext
  793. END IF
  794. SELECT u_cust_exchange.billcode,
  795. u_cust_exchange.cusid,
  796. u_cust_exchange.billdate,
  797. u_cust_exchange.rep,
  798. u_cust_exchange.part,
  799. u_cust_exchange.dscrp,
  800. u_cust_exchange.flag,
  801. u_cust_exchange.exchangeamt,
  802. u_cust_exchange.storageid ,
  803. u_cust_exchange.relid
  804. INTO :billcode,
  805. :cusid,
  806. :outdate,
  807. :rep,
  808. :part,
  809. :dscrp,
  810. :flag,
  811. :sum_amt,
  812. :storageid ,
  813. :relid
  814. FROM u_cust_exchange
  815. WHERE u_cust_exchange.billid = :arg_billid
  816. AND u_cust_exchange.scid = :arg_scid
  817. USING commit_transaction;
  818. IF commit_transaction.SQLCode <> 0 THEN
  819. rslt = 0
  820. arG_MSG = "查询操作失败(错误出仓单唯一码),出仓单"+commit_transaction.SQLErrText
  821. GOTO ext
  822. END IF
  823. billid = arg_billid
  824. scid = arg_scid
  825. ext:
  826. IF rslt = 0 THEN p_reset()
  827. RETURN rslt
  828. end function
  829. on uo_cust_exchange.create
  830. call super::create
  831. TriggerEvent( this, "constructor" )
  832. end on
  833. on uo_cust_exchange.destroy
  834. TriggerEvent( this, "destructor" )
  835. call super::destroy
  836. end on