uo_salebill.sru 21 KB

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