uo_buybill.sru 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884
  1. $PBExportHeader$uo_buybill.sru
  2. forward
  3. global type uo_buybill from nonvisualobject
  4. end type
  5. type s_bmstpaymx_bill from structure within uo_buybill
  6. end type
  7. end forward
  8. type s_bmstpaymx_bill from structure
  9. long payid
  10. string billcode
  11. datetime paydate
  12. long banktypeid
  13. decimal { 2 } mstpayamt
  14. decimal { 2 } payamt
  15. decimal { 2 } oriamt
  16. decimal { 2 } mainmstpayamt
  17. decimal { 2 } mainpayamt
  18. string opemp
  19. string dscrp
  20. string inrep
  21. integer buildtype
  22. long long
  23. long scid
  24. string relbillcode
  25. long moneyid
  26. end type
  27. global type uo_buybill from nonvisualobject
  28. end type
  29. global uo_buybill uo_buybill
  30. type variables
  31. PUBLIC PROTECTEDWRITE Long buybillid
  32. PUBLIC PROTECTEDWRITE String buybillcode
  33. PUBLIC PROTECTEDWRITE DateTime opdate
  34. PUBLIC PROTECTEDWRITE Int flag = 0
  35. PUBLIC PROTECTEDWRITE DateTime auditdate
  36. PUBLIC PROTECTEDWRITE String auditrep
  37. String relcode = ''
  38. String opemp
  39. DateTime paydate
  40. Long banktypeid
  41. String dscrp = ''
  42. Long sptid = 0
  43. Decimal mstpayamt
  44. Decimal payamt
  45. String inrep
  46. Long rapmoneyid
  47. Long accountsid
  48. Long itemid
  49. PRIVATE:
  50. s_bmstpaymx_bill mx[]
  51. Long it_mxbt = 0
  52. Boolean it_newbegin = FALSE
  53. Boolean it_updatebegin = FALSE
  54. end variables
  55. forward prototypes
  56. public function integer p_clearmx ()
  57. public function integer p_reset ()
  58. public function integer newbegin ()
  59. public function integer save (ref string arg_msg, boolean arg_ifcommt)
  60. public function integer auditing (long arg_salebillid, string arg_auditrep, ref string arg_msg, boolean arg_ifcommit)
  61. public function integer getinfo (long arg_buybillid, ref string arg_msg)
  62. public function integer updatebegin (long arg_buybillid, ref string arg_msg)
  63. public function integer add_dscrp (long arg_buybillid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  64. public function integer c_auditing (long arg_buybillid, string arg_auditrep, ref string arg_msg, boolean arg_ifcommit)
  65. public function integer del (long arg_buybillid, ref string arg_msg, boolean arg_ifcommit)
  66. public function integer acceptmx (long arg_payid, string arg_billcode, decimal arg_mstpayamt, decimal arg_payamt, decimal arg_oriamt, decimal arg_mainmstpayamt, decimal arg_mainpayamt, string arg_relbillcode, string arg_mxdscrp, long arg_moneyid, ref string arg_msg)
  67. end prototypes
  68. public function integer p_clearmx ();//INT p_clearmx()
  69. //清除明细
  70. it_mxbt=0
  71. RETURN 1
  72. end function
  73. public function integer p_reset ();//INT p_RESET()
  74. //清除对象及其明细
  75. buybillid=0
  76. buybillcode=''
  77. opemp=''
  78. flag=0
  79. it_newbegin=FALSE
  80. it_updatebegin=FALSE
  81. //清除明细
  82. P_CLEARMX()
  83. RETURN 1
  84. end function
  85. public function integer newbegin ();//newbegin()
  86. //从置对象,设定业务类型,准备建立新单
  87. //0 fail 1 success
  88. LONG RSLT=1
  89. p_reset()
  90. it_newbegin=TRUE
  91. it_updatebegin=FALSE
  92. return RSLT
  93. end function
  94. public function integer save (ref string arg_msg, boolean arg_ifcommt);Integer rslt = 1,cnt = 0,i
  95. DateTime server_datetime
  96. Long ls_newid
  97. uo_mustpay uo_pay
  98. uo_pay = CREATE uo_mustpay
  99. Long ref_dateint
  100. String ls_sptname
  101. Decimal ls_mstpayamt
  102. Decimal ls_payamt
  103. Long ll_itemid
  104. Long ll_dateint
  105. DateTime ld_paydate
  106. s_bmstpaymx s_paymx
  107. uo_iteminput uo_item
  108. uo_item = CREATE uo_iteminput
  109. IF IsNull(dscrp) THEN dscrp = ''
  110. IF IsNull(relcode) THEN relcode = ''
  111. IF IsNull(inrep) THEN inrep = ''
  112. IF IsNull(banktypeid) THEN banktypeid = 0
  113. IF IsNull(accountsid) THEN accountsid = 0
  114. IF IsNull(itemid) THEN itemid = 0
  115. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  116. rslt = 0
  117. arG_MSG = "非编辑状态不可以提交"
  118. GOTO ext
  119. END IF
  120. SELECT Top 1 getdate() INTO :server_datetime FROM u_user ;
  121. //取得系统时间,借用操作员表
  122. IF sqlca.SQLCode <> 0 THEN
  123. rslt = 0
  124. arG_MSG = "查询操作失败,日期 "
  125. GOTO ext
  126. END IF
  127. IF it_mxbt = 0 THEN //如果输入库存物料资料错则已经清空
  128. rslt = 0
  129. arG_MSG = "没有正确单据内容"
  130. GOTO ext
  131. END IF
  132. IF Year(Date(paydate)) < 2000 OR IsNull(paydate) THEN
  133. rslt = 0
  134. arG_MSG = "缺少出仓发生时间或不合理"
  135. GOTO ext
  136. END IF
  137. cnt = 0
  138. SELECT count(*) INTO :cnt
  139. FROM cw_banktype
  140. Where banktypeid = :banktypeid;
  141. IF sqlca.SQLCode <> 0 THEN
  142. rslt = 0
  143. arG_MSG = "查询操作失败,结算方式!"
  144. GOTO ext
  145. END IF
  146. IF cnt = 0 THEN
  147. rslt = 0
  148. arG_MSG = "结算方式未登记或已取消!"
  149. GOTO ext
  150. END IF
  151. cnt = 0
  152. SELECT count(*) INTO :cnt
  153. FROM u_spt
  154. Where sptid = :sptid ;
  155. IF sqlca.SQLCode <> 0 THEN
  156. rslt = 0
  157. arG_MSG = "查询操作失败,供应商资料"
  158. GOTO ext
  159. END IF
  160. IF cnt = 0 THEN
  161. rslt = 0
  162. arG_MSG = "供应商未定义或错误"
  163. GOTO ext
  164. END IF
  165. SELECT name
  166. INTO :ls_sptname
  167. FROM u_spt
  168. Where u_spt.sptid = :sptid ;
  169. IF sqlca.SQLCode <> 0 THEN
  170. arG_MSG = '查询操作失败,供应商唯一码'
  171. rslt = 0
  172. GOTO ext
  173. END IF
  174. cnt = 0
  175. SELECT count(*) INTO :cnt
  176. FROM u_user
  177. Where username = :opemp ;
  178. IF sqlca.SQLCode <> 0 THEN
  179. rslt = 0
  180. arG_MSG = "查询操作失败,操作员"
  181. GOTO ext
  182. END IF
  183. IF cnt = 0 THEN
  184. rslt = 0
  185. arG_MSG = "操作员姓名未登记或已取消"
  186. GOTO ext
  187. END IF
  188. opdate = server_datetime
  189. IF buybillid = 0 THEN //新建
  190. ls_newid = f_sys_scidentity(0,"U_buybill","buybillid",arG_MSG,TRUE,id_sqlca)
  191. IF ls_newid <= 0 THEN
  192. rslt = 0
  193. GOTO ext
  194. END IF
  195. buybillcode = getid(0,"BB",Date(server_datetime),TRUE,sqlca) //取得新单据编号
  196. IF buybillcode = "err" THEN
  197. buybillcode = ''
  198. rslt = 0
  199. arG_MSG = "无法获取收入单编号"
  200. GOTO ext
  201. END IF
  202. INSERT INTO U_buybill (
  203. buybillid,
  204. buybillcode,
  205. paydate,
  206. Relcode,
  207. Mstpayamt,
  208. payamt,
  209. sptid,
  210. dscrp,
  211. banktypeid,
  212. inrep,
  213. opdate,
  214. opemp,
  215. rapmoneyid ,
  216. accountsid,
  217. itemid)
  218. VALUES (
  219. :ls_newid,
  220. :buybillcode,
  221. :paydate,
  222. :Relcode,
  223. :Mstpayamt,
  224. :payamt,
  225. :sptid,
  226. :dscrp,
  227. :banktypeid,
  228. :inrep,
  229. :opdate,
  230. :opemp,
  231. :ref_dateint ,
  232. :accountsid,
  233. :itemid) ;
  234. IF sqlca.SQLCode <> 0 THEN
  235. rslt = 0
  236. arG_MSG = "因网络或其它原因导致插入操作失败"+"~n"+sqlca.SQLErrText
  237. GOTO ext
  238. END IF
  239. FOR i = 1 TO it_mxbt
  240. s_paymx.scid = mx[i].scid
  241. s_paymx.payid = mx[i].payid
  242. s_paymx.billcode = mx[i].relbillcode
  243. s_paymx.paydate = mx[i].paydate
  244. s_paymx.banktypeid = mx[i].banktypeid
  245. s_paymx.Mstpayamt = mx[i].Mstpayamt
  246. s_paymx.payamt = mx[i].payamt
  247. s_paymx.opemp = mx[i].opemp
  248. s_paymx.dscrp = mx[i].dscrp
  249. s_paymx.inrep = mx[i].inrep
  250. s_paymx.buildtype = 2
  251. s_paymx.buybillid = ls_newid
  252. s_paymx.itemid = 0
  253. s_paymx.sptid = sptid
  254. s_paymx.moneyid = mx[i].moneyid
  255. IF uo_pay.add_payrecmx(s_paymx,arG_MSG,FALSE) = 0 THEN
  256. rslt = 0
  257. GOTO ext
  258. END IF
  259. NEXT
  260. buybillid = ls_newid
  261. FOR i = 1 TO it_mxbt
  262. INSERT INTO u_buybillmx
  263. (scid,
  264. buybillid,
  265. payid,
  266. paydate,
  267. mstpayamt,
  268. payamt,
  269. billcode,
  270. relbillcode,
  271. oriamt,
  272. mainmstpayamt,
  273. mainpayamt,
  274. moneyid
  275. )
  276. VALUES
  277. (:mx[i].scid,
  278. :ls_newid,
  279. :mx[i].payid,
  280. :mx[i].paydate,
  281. :mx[i].mstpayamt,
  282. :mx[i].payamt,
  283. :mx[i].billcode,
  284. :mx[i].relbillcode,
  285. :mx[i].oriamt,
  286. :mx[i].mainmstpayamt,
  287. :mx[i].mainpayamt,
  288. :mx[i].moneyid
  289. );
  290. IF sqlca.SQLCode <> 0 THEN
  291. buybillid = 0
  292. rslt = 0
  293. arG_MSG = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  294. ROLLBACK USING sqlca;
  295. GOTO ext
  296. END IF
  297. NEXT
  298. ELSE //////////////////////////////////////////////////更新
  299. SELECT mstpayamt,
  300. payamt,
  301. itemid,
  302. rapmoneyid,
  303. paydate
  304. INTO :ls_mstpayamt,
  305. :ls_payamt,
  306. :ll_itemid,
  307. :ll_dateint,
  308. :ld_paydate
  309. FROM u_buybill
  310. Where U_buybill.buybillid = :buybillid;
  311. IF sqlca.SQLCode <> 0 THEN
  312. arG_MSG = "查询应付帐建立类型失败,请重试!"+'~n'+sqlca.SQLErrText
  313. rslt = 0
  314. GOTO ext
  315. END IF
  316. UPDATE U_buybill
  317. SET paydate = :paydate,
  318. Relcode = :Relcode,
  319. Mstpayamt = :Mstpayamt,
  320. payamt = :payamt,
  321. sptid = :sptid,
  322. dscrp = :dscrp,
  323. banktypeid = :banktypeid,
  324. inrep = :inrep,
  325. opdate = :opdate,
  326. opemp = :opemp,
  327. rapmoneyid = :ref_dateint,
  328. accountsid = :accountsid,
  329. itemid = :itemid
  330. Where U_buybill.buybillid = :buybillid;
  331. IF sqlca.SQLCode <> 0 THEN
  332. rslt = 0
  333. arG_MSG = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  334. GOTO ext
  335. END IF
  336. //删除原有明细
  337. DELETE FROM U_buybillmx
  338. Where u_buybillmx.buybillid = :buybillid USING sqlca;
  339. IF sqlca.SQLCode <> 0 THEN
  340. rslt = 0
  341. arG_MSG = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  342. ROLLBACK USING sqlca;
  343. GOTO ext
  344. END IF
  345. FOR i = 1 TO it_mxbt
  346. INSERT INTO u_buybillmx
  347. (scid,
  348. buybillid,
  349. payid,
  350. paydate,
  351. mstpayamt,
  352. payamt,
  353. billcode,
  354. relbillcode,
  355. oriamt,
  356. mainmstpayamt,
  357. mainpayamt,
  358. moneyid
  359. )
  360. VALUES
  361. (:mx[i].scid,
  362. :ls_newid,
  363. :mx[i].payid,
  364. :mx[i].paydate,
  365. :mx[i].mstpayamt,
  366. :mx[i].payamt,
  367. :mx[i].billcode,
  368. :mx[i].relbillcode,
  369. :mx[i].oriamt,
  370. :mx[i].mainmstpayamt,
  371. :mx[i].mainpayamt,
  372. :mx[i].moneyid
  373. );
  374. IF sqlca.SQLCode <> 0 THEN
  375. rslt = 0
  376. arG_MSG = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  377. ROLLBACK USING sqlca;
  378. GOTO ext
  379. END IF
  380. NEXT
  381. IF uo_pay.buybill_del_mx(buybillid,arG_MSG,FALSE) = 0 THEN
  382. rslt = 0
  383. GOTO ext
  384. END IF
  385. FOR i = 1 TO it_mxbt
  386. s_paymx.scid = mx[i].scid
  387. s_paymx.payid = mx[i].payid
  388. s_paymx.billcode = mx[i].relbillcode
  389. s_paymx.paydate = mx[i].paydate
  390. s_paymx.banktypeid = mx[i].banktypeid
  391. s_paymx.Mstpayamt = mx[i].Mstpayamt
  392. s_paymx.payamt = mx[i].payamt
  393. s_paymx.opemp = mx[i].opemp
  394. s_paymx.dscrp = mx[i].dscrp
  395. s_paymx.inrep = mx[i].inrep
  396. s_paymx.buildtype = 2
  397. s_paymx.buybillid = buybillid
  398. s_paymx.itemid = 0
  399. s_paymx.sptid = sptid
  400. s_paymx.moneyid = mx[i].moneyid
  401. IF uo_pay.add_payrecmx(s_paymx,arG_MSG,FALSE) = 0 THEN
  402. rslt = 0
  403. GOTO ext
  404. END IF
  405. NEXT
  406. END IF
  407. it_newbegin = FALSE
  408. it_updatebegin = FALSE
  409. ext:
  410. IF rslt = 0 THEN
  411. ROLLBACK;
  412. p_clearmx()
  413. ELSEIF rslt = 1 AND arg_ifcommt THEN
  414. COMMIT;
  415. END IF
  416. RETURN rslt
  417. end function
  418. public function integer auditing (long arg_salebillid, string arg_auditrep, ref string arg_msg, boolean arg_ifcommit);//auditing()
  419. //0 fail 1 success
  420. //仓库审核
  421. long rslt=1,cnt=0
  422. IF arg_salebillid=0 THEN
  423. rslt=0
  424. arG_MSG="没有审核对象"
  425. goto ext
  426. END IF
  427. if getinfo(arg_salebillid,arg_msg)=0 then
  428. rslt=0
  429. goto ext
  430. end if
  431. IF flag=1 THEN
  432. rslt=0
  433. arG_MSG="单据已经过审核"
  434. goto ext
  435. END IF
  436. SELECT count(*) INTO :cnt
  437. FROM u_user
  438. WHERE username=:arg_auditrep;
  439. if sqlca.sqlcode<>0 then
  440. rslt=0
  441. arG_MSG="查询操作失败,操作员"
  442. goto ext
  443. end if
  444. if cnt=0 then
  445. rslt=0
  446. arG_MSG="操作员姓名未登记或已取消"
  447. goto ext
  448. end if
  449. UPDATE u_buybill
  450. SET Auditrep = :arg_auditrep,
  451. Auditdate = getdate(),
  452. flag = 1
  453. WHERE u_buybill.buybillid = :arg_salebillid and flag = 0 ;
  454. if SQLCA.SQLCode<>0 then
  455. rslt=0
  456. arG_MSG="因网络或其它原因导致审核单据操作失败"+"~n"+SQLCA.SQLErrText
  457. goto ext
  458. elseif SQLCA.SQLnrows=0 then
  459. rslt=0
  460. arG_MSG="单据正在审核,请稍后查询。"+"~n"+SQLCA.SQLErrText
  461. goto ext
  462. end if
  463. flag=1
  464. ext:
  465. if rslt=0 then
  466. ROLLBACK ;
  467. elseif rslt=1 and arg_ifcommit then
  468. commit;
  469. end if
  470. return rslt
  471. end function
  472. public function integer getinfo (long arg_buybillid, ref string arg_msg);int rslt=1
  473. SELECT
  474. U_buybill.buybillcode,
  475. U_buybill.paydate,
  476. U_buybill.Relcode,
  477. U_buybill.Mstpayamt,
  478. U_buybill.payamt,
  479. U_buybill.sptid,
  480. U_buybill.dscrp,
  481. U_buybill.banktypeid,
  482. U_buybill.inrep,
  483. U_buybill.opdate,
  484. U_buybill.opemp,
  485. U_buybill.auditdate,
  486. U_buybill.auditrep,
  487. U_buybill.flag,
  488. U_buybill.rapmoneyid,
  489. U_buybill.accountsid,
  490. U_buybill.itemid
  491. INTO
  492. :buybillcode,
  493. :paydate,
  494. :Relcode,
  495. :Mstpayamt,
  496. :payamt,
  497. :sptid,
  498. :dscrp,
  499. :banktypeid,
  500. :inrep,
  501. :opdate,
  502. :opemp,
  503. :auditdate,
  504. :auditrep,
  505. :flag,
  506. :rapmoneyid ,
  507. : accountsid,
  508. : itemid
  509. FROM U_buybill
  510. WHERE U_buybill.buybillid = :arg_buybillid ;
  511. if sqlca.sqlcode<>0 then
  512. rslt=0
  513. ARG_MSG='查询数据操作失败,收入单'
  514. goto ext
  515. end if
  516. ext:
  517. return rslt
  518. end function
  519. public function integer updatebegin (long arg_buybillid, ref string arg_msg);//UPDATEbegin(arg_buybillid,arg_msg)
  520. //从置对象,设定业务类型,准备更新单
  521. //0 fail 1 success
  522. int rslt=1,CNT=0
  523. IF arg_buybillid<=0 THEN
  524. rslt=0
  525. buybillid=0
  526. goto ext
  527. end if
  528. if getinfo(arg_buybillid,arg_msg)=0 then
  529. rslt=0
  530. goto ext
  531. end if
  532. if flag=1 then
  533. rslt=0
  534. ARG_MSG='单据已经审核,不可以修改'
  535. goto ext
  536. end if
  537. buybillid=arg_buybillid
  538. if flag=0 then p_CLEARMX()
  539. it_newbegin=FALSE
  540. it_updatebegin=TRUE
  541. ext:
  542. IF rslt=0 THEN p_RESET()
  543. return rslt
  544. end function
  545. public function integer add_dscrp (long arg_buybillid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart)
  546. //0 fail 1 SUCCESS
  547. INT rslt=1
  548. arg_newdescppart=TRIM(arg_newdescppart)
  549. IF it_updatebegin OR it_newbegin THEN
  550. rslt=0
  551. arG_MSG="编辑状态下不可用"
  552. goto ext
  553. END IF
  554. if getinfo(arg_buybillid,arg_msg)=0 then
  555. rslt=0
  556. goto ext
  557. end if
  558. IF flag=0 THEN
  559. rslt=0
  560. arG_MSG="非审核状态下不可用"
  561. goto ext
  562. END IF
  563. UPDATE u_buybill
  564. SET DSCRP = DSCRP+' '+:arg_newdescppart
  565. WHERE u_buybill.buybillid = :arg_buybillid;
  566. if SQLCA.SQLCode<>0 then
  567. rslt=0
  568. arG_MSG="因网络或其它原因导致添加单据备注操作失败"+"~n"+SQLCA.SQLErrText
  569. goto ext
  570. end if
  571. DSCRP = DSCRP+' '+arg_newdescppart
  572. ext:
  573. if rslt=0 then
  574. rollback;
  575. elseif rslt=1 and arg_ifcommit then
  576. commit;
  577. end if
  578. return (rslt)
  579. end function
  580. public function integer c_auditing (long arg_buybillid, string arg_auditrep, ref string arg_msg, boolean arg_ifcommit);long rslt=1,cnt=0
  581. IF arg_buybillid=0 THEN
  582. rslt=0
  583. arG_MSG="没有撤审对象"
  584. goto ext
  585. END IF
  586. if getinfo(arg_buybillid,arg_msg)=0 then
  587. rslt=0
  588. goto ext
  589. end if
  590. IF flag=0 THEN
  591. rslt=0
  592. arG_MSG="单据未被审核,不能撤审"
  593. goto ext
  594. END IF
  595. SELECT count(*) INTO :cnt
  596. FROM u_user
  597. WHERE username=:arg_auditrep;
  598. if sqlca.sqlcode<>0 then
  599. rslt=0
  600. arG_MSG="查询操作失败,操作员"
  601. goto ext
  602. end if
  603. if cnt=0 then
  604. rslt=0
  605. arG_MSG="操作员姓名未登记或已取消"
  606. goto ext
  607. end if
  608. datetime null_datetime
  609. setnull(null_datetime)
  610. UPDATE u_buybill
  611. SET Auditrep = '',
  612. Auditdate = :null_datetime,
  613. flag = 0
  614. WHERE u_buybill.buybillid = :arg_buybillid and flag = 1 ;
  615. if SQLCA.SQLCode<>0 then
  616. rslt=0
  617. arG_MSG="因网络或其它原因导致审核单据操作失败"+"~n"+SQLCA.SQLErrText
  618. goto ext
  619. elseif SQLCA.SQLnrows=0 then
  620. rslt=0
  621. arG_MSG="单据正在审核,请稍后查询。"+"~n"+SQLCA.SQLErrText
  622. goto ext
  623. end if
  624. flag=0
  625. ext:
  626. if rslt=0 then
  627. ROLLBACK ;
  628. elseif rslt=1 and arg_ifcommit then
  629. commit;
  630. end if
  631. return rslt
  632. end function
  633. public function integer del (long arg_buybillid, ref string arg_msg, boolean arg_ifcommit);//cancel()
  634. //如果单据还没有审核删除单据极其明细
  635. //0 FAIL, 1 SUCCESS
  636. Int rslt = 1
  637. Decimal ls_mstpayamt
  638. Decimal ls_payamt
  639. Long ll_itemid
  640. Long ll_dateint
  641. DateTime ld_paydate
  642. uo_mustpay uo_pay
  643. uo_pay = CREATE uo_mustpay
  644. uo_iteminput uo_item
  645. uo_item = CREATE uo_iteminput
  646. IF arg_buybillid <= 0 THEN
  647. rslt = 0
  648. arG_MSG = "没有删除对象,操作取消"
  649. GOTO ext
  650. END IF
  651. IF getinfo(arg_buybillid,arG_MSG) = 0 THEN
  652. rslt = 0
  653. GOTO ext
  654. END IF
  655. IF flag = 1 THEN
  656. rslt = 0
  657. arG_MSG = "单据已经审核,不可以删除"
  658. GOTO ext
  659. END IF
  660. //********删除出纳帐
  661. SELECT mstpayamt,
  662. payamt,
  663. itemid,
  664. rapmoneyid,
  665. paydate
  666. INTO :ls_mstpayamt,
  667. :ls_payamt,
  668. :ll_itemid,
  669. :ll_dateint,
  670. :ld_paydate
  671. FROM u_buybill
  672. Where u_buybill.buybillid = :arg_buybillid;
  673. IF sqlca.SQLCode <> 0 THEN
  674. arG_MSG = "查询应付帐建立类型失败,请重试!"+'~n'+sqlca.SQLErrText
  675. rslt = 0
  676. GOTO ext
  677. END IF
  678. IF ls_payamt <> 0 THEN
  679. IF uo_item.del_iteminput(ll_itemid,ll_dateint,1,arG_MSG,FALSE) = 0 THEN
  680. arG_MSG = '删除出纳明细帐失败!~n' + arG_MSG
  681. rslt = 0
  682. GOTO ext
  683. END IF
  684. END IF
  685. IF uo_pay.buybill_del_mx(arg_buybillid,arG_MSG,FALSE) = 0 THEN
  686. rslt = 0
  687. GOTO ext
  688. END IF
  689. DELETE FROM u_buybill
  690. Where u_buybill.buybillid = :arg_buybillid;
  691. IF sqlca.SQLCode <> 0 THEN
  692. rslt = 0
  693. arG_MSG = "删除采购支出单操作失败"+"~n"+sqlca.SQLErrText
  694. GOTO ext
  695. END IF
  696. DELETE FROM u_buybillmx
  697. Where u_buybillmx.buybillid = :arg_buybillid USING sqlca;
  698. IF sqlca.SQLCode <> 0 THEN
  699. rslt = 0
  700. arG_MSG = "删除采购支出单明细操作失败"+"~n"+sqlca.SQLErrText
  701. ROLLBACK USING sqlca;
  702. GOTO ext
  703. END IF
  704. it_newbegin = FALSE
  705. it_updatebegin = FALSE
  706. IF rslt = 0 THEN
  707. ROLLBACK;
  708. p_reset()
  709. ELSEIF rslt = 1 AND arg_ifcommit THEN
  710. COMMIT;
  711. END IF
  712. ext:
  713. Return (rslt)
  714. end function
  715. public function integer acceptmx (long arg_payid, string arg_billcode, decimal arg_mstpayamt, decimal arg_payamt, decimal arg_oriamt, decimal arg_mainmstpayamt, decimal arg_mainpayamt, string arg_relbillcode, string arg_mxdscrp, long arg_moneyid, ref string arg_msg);Long rslt = 1
  716. long ll_scid
  717. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  718. rslt = 0
  719. arG_MSG = "非编辑状态不可以使用,操作取消"
  720. GOTO ext
  721. END IF
  722. //清除空值
  723. IF IsNull(arg_payid) THEN arg_payid = 0
  724. IF IsNull(arg_billcode) THEN arg_billcode = ''
  725. IF IsNull(arg_relbillcode) THEN arg_relbillcode = ''
  726. IF IsNull(arg_mstpayamt) THEN arg_mstpayamt = 0
  727. IF IsNull(arg_payamt) THEN arg_payamt = 0
  728. IF IsNull(arg_mainmstpayamt) THEN arg_mainmstpayamt = 0
  729. IF IsNull(arg_mainpayamt) THEN arg_mainpayamt = 0
  730. IF IsNull(arg_oriamt) THEN arg_oriamt = 0
  731. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  732. IF IsNull(arg_moneyid) THEN arg_moneyid = 0
  733. select scid into :ll_scid
  734. from u_bmstpay
  735. where payid = :arg_payid;
  736. if sqlca.sqlcode <> 0 then
  737. arg_msg = '查询单据所属分部失败:'+arg_billcode+' '+sqlca.sqlerrtext
  738. rslt = 0
  739. goto ext
  740. end if
  741. //写入内容
  742. it_mxbt++
  743. mx[it_mxbt].scid = ll_scid
  744. mx[it_mxbt].payid = arg_payid
  745. mx[it_mxbt].billcode = arg_billcode
  746. mx[it_mxbt].relbillcode = arg_relbillcode
  747. mx[it_mxbt].paydate = paydate
  748. mx[it_mxbt].banktypeid = banktypeid
  749. mx[it_mxbt].mstpayamt = arg_mstpayamt
  750. mx[it_mxbt].payamt = arg_payamt
  751. mx[it_mxbt].mainmstpayamt = arg_mainmstpayamt
  752. mx[it_mxbt].mainpayamt = arg_mainpayamt
  753. mx[it_mxbt].oriamt = arg_oriamt
  754. mx[it_mxbt].opemp = publ_operator
  755. mx[it_mxbt].dscrp = arg_mxdscrp
  756. mx[it_mxbt].inrep = inrep
  757. mx[it_mxbt].buildtype = 2
  758. mx[it_mxbt].moneyid = arg_moneyid
  759. ext:
  760. IF rslt = 0 THEN p_clearmx()
  761. Return(rslt)
  762. end function
  763. on uo_buybill.create
  764. call super::create
  765. TriggerEvent( this, "constructor" )
  766. end on
  767. on uo_buybill.destroy
  768. TriggerEvent( this, "destructor" )
  769. call super::destroy
  770. end on