uo_invoice.sru 24 KB

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