uo_buybill.sru 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292
  1. $PBExportHeader$uo_buybill.sru
  2. forward
  3. global type uo_buybill from nonvisualobject
  4. end type
  5. type s_bmsttakemx from structure within uo_buybill
  6. end type
  7. end forward
  8. type s_bmsttakemx 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. end type
  26. global type uo_buybill from nonvisualobject
  27. end type
  28. global uo_buybill uo_buybill
  29. type variables
  30. PUBLIC PROTECTEDWRITE Long scid=0
  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. int billtype
  50. int buildtype
  51. long moneyid=0
  52. PRIVATE:
  53. S_BmsttakeMX mx[]
  54. Long it_MXBT = 0
  55. Boolean IT_NEWBEGIN = FALSE
  56. Boolean IT_UPDATEBEGIN = FALSE
  57. end variables
  58. forward prototypes
  59. public function integer p_clearmx ()
  60. public function integer p_reset ()
  61. public function integer newbegin ()
  62. public function integer save (ref string arg_msg, boolean arg_ifcommt)
  63. public function integer auditing (long arg_salebillid, string arg_auditrep, ref string arg_msg, boolean arg_ifcommit)
  64. public function integer getinfo (long arg_buybillid, ref string arg_msg)
  65. public function integer updatebegin (long arg_buybillid, ref string arg_msg)
  66. public function integer add_dscrp (long arg_buybillid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  67. public function integer c_auditing (long arg_buybillid, string arg_auditrep, ref string arg_msg, boolean arg_ifcommit)
  68. public function integer del (long arg_buybillid, ref string arg_msg, boolean arg_ifcommit)
  69. 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, ref string arg_msg)
  70. public function integer save_ds (ref string arg_msg, boolean arg_ifcommt)
  71. end prototypes
  72. public function integer p_clearmx ();//INT p_clearmx()
  73. //清除明细
  74. it_mxbt=0
  75. RETURN 1
  76. end function
  77. public function integer p_reset ();//INT p_RESET()
  78. //清除对象及其明细
  79. buybillid=0
  80. buybillcode=''
  81. opemp=''
  82. flag=0
  83. it_newbegin=FALSE
  84. it_updatebegin=FALSE
  85. //清除明细
  86. P_CLEARMX()
  87. RETURN 1
  88. end function
  89. public function integer newbegin ();//newbegin()
  90. //从置对象,设定业务类型,准备建立新单
  91. //0 fail 1 success
  92. LONG RSLT=1
  93. p_reset()
  94. it_newbegin=TRUE
  95. it_updatebegin=FALSE
  96. return RSLT
  97. end function
  98. public function integer save (ref string arg_msg, boolean arg_ifcommt);
  99. uo_mustpay uo_pay
  100. uo_pay = CREATE uo_mustpay
  101. Integer rslt = 1,cnt = 0,i
  102. DateTime server_datetime
  103. Long ls_newid
  104. Long ref_dateint
  105. String ls_sptname
  106. Decimal ls_mstpayamt
  107. Decimal ls_payamt
  108. Long ll_itemid
  109. Long ll_dateint
  110. DateTime ld_paydate
  111. IF IsNull(dscrp) THEN dscrp = ''
  112. IF IsNull(relcode) THEN relcode = ''
  113. IF IsNull(inrep) THEN inrep = ''
  114. IF IsNull(banktypeid) THEN banktypeid = 0
  115. IF IsNull(accountsid) THEN accountsid = 0
  116. IF IsNull(itemid) THEN itemid = 0
  117. IF IsNull(moneyid) THEN moneyid = 0
  118. IF moneyid <= 0 THEN
  119. rslt = 0
  120. arg_msg = '请选择币种!'
  121. GOTO ext
  122. END IF
  123. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  124. rslt = 0
  125. arg_msg = "非编辑状态不可以提交"
  126. GOTO ext
  127. END IF
  128. SELECT Top 1 getdate() INTO :server_datetime FROM u_user ;
  129. //取得系统时间,借用操作员表
  130. IF sqlca.SQLCode <> 0 THEN
  131. rslt = 0
  132. arg_msg = "查询操作失败,日期 "
  133. GOTO ext
  134. END IF
  135. IF it_mxbt = 0 THEN //如果输入库存物料资料错则已经清空
  136. rslt = 0
  137. arg_msg = "没有正确单据内容"
  138. GOTO ext
  139. END IF
  140. IF Year(Date(paydate)) < 2000 OR IsNull(paydate) THEN
  141. rslt = 0
  142. arg_msg = "缺少出仓发生时间或不合理"
  143. GOTO ext
  144. END IF
  145. cnt = 0
  146. SELECT count(*) INTO :cnt
  147. FROM cw_banktype
  148. Where banktypeid = :banktypeid;
  149. IF sqlca.SQLCode <> 0 THEN
  150. rslt = 0
  151. arg_msg = "查询操作失败,结算方式!"
  152. GOTO ext
  153. END IF
  154. IF cnt = 0 THEN
  155. rslt = 0
  156. arg_msg = "结算方式未登记或已取消!"
  157. GOTO ext
  158. END IF
  159. cnt = 0
  160. SELECT count(*) INTO :cnt
  161. FROM u_spt
  162. Where sptid = :sptid ;
  163. IF sqlca.SQLCode <> 0 THEN
  164. rslt = 0
  165. arg_msg = "查询操作失败,供应商资料"
  166. GOTO ext
  167. END IF
  168. IF cnt = 0 THEN
  169. rslt = 0
  170. arg_msg = "供应商未定义或错误"
  171. GOTO ext
  172. END IF
  173. SELECT name
  174. INTO :ls_sptname
  175. FROM u_spt
  176. Where u_spt.sptid = :sptid ;
  177. IF sqlca.SQLCode <> 0 THEN
  178. arg_msg = '查询操作失败,供应商唯一码'
  179. rslt = 0
  180. GOTO ext
  181. END IF
  182. cnt = 0
  183. SELECT count(*) INTO :cnt
  184. FROM u_user
  185. Where username = :opemp ;
  186. IF sqlca.SQLCode <> 0 THEN
  187. rslt = 0
  188. arg_msg = "查询操作失败,操作员"
  189. GOTO ext
  190. END IF
  191. IF cnt = 0 THEN
  192. rslt = 0
  193. arg_msg = "操作员姓名未登记或已取消"
  194. GOTO ext
  195. END IF
  196. opdate = server_datetime
  197. IF buybillid = 0 THEN //新建
  198. ls_newid = f_sys_scidentity(0,"U_buybill","buybillid",arg_msg,TRUE,sqlca)
  199. IF ls_newid <= 0 THEN
  200. rslt = 0
  201. GOTO ext
  202. END IF
  203. buybillcode = getid(0,"BB",Date(server_datetime),TRUE,sqlca) //取得新单据编号
  204. IF buybillcode = "err" THEN
  205. buybillcode = ''
  206. rslt = 0
  207. arg_msg = "无法获取收入单编号"
  208. GOTO ext
  209. END IF
  210. //生成相关号
  211. Long ll_pay_i
  212. String ls_pay_i_billcode,ls_not_pay_i_billcode
  213. Dec ld_mstpayamt,ld_payamt
  214. FOR i = 1 TO it_mxbt
  215. IF mx[i].mainmstpayamt = 0 AND mx[i].mainpayamt <> 0 THEN
  216. ls_pay_i_billcode = mx[i].billcode
  217. ELSE
  218. ll_pay_i = i
  219. ls_not_pay_i_billcode = ls_not_pay_i_billcode + Trim(mx[i].billcode )+','
  220. END IF
  221. NEXT
  222. ls_not_pay_i_billcode = Left(ls_not_pay_i_billcode,Len(ls_not_pay_i_billcode) - 1 )
  223. FOR i = 1 TO it_mxbt
  224. IF i = ll_pay_i THEN
  225. mx[i].relbillcode = ls_not_pay_i_billcode
  226. ELSE
  227. mx[i].relbillcode = ls_pay_i_billcode
  228. END IF
  229. ld_mstpayamt = ld_mstpayamt - mx[i].Mstpayamt
  230. ld_payamt = ld_payamt - mx[i].payamt
  231. NEXT
  232. IF uo_pay.add_payrec(scid,sptid,paydate,inrep,Mstpayamt - payamt ,Mstpayamt,payamt,&
  233. dscrp,buybillcode,banktypeid,1,opemp,0,ls_newid,arg_msg,FALSE,paydate,accountsid,itemid,moneyid,'') = 0 THEN
  234. rslt = 0
  235. GOTO ext
  236. END IF
  237. Long ref_payid
  238. ref_payid = uo_pay.ref_payid
  239. SELECT rapmoneyid INTO :ref_dateint FROM u_bmstpay Where payid = :ref_payid;
  240. IF sqlca.SQLCode <> 0 THEN
  241. rslt = 0
  242. arg_msg = '查询应付帐(收支帐ID)失败!'
  243. GOTO ext
  244. END IF
  245. IF uo_pay.add_payrecmx(scid,ref_payid,ls_not_pay_i_billcode, paydate, banktypeid,ld_mstpayamt,&
  246. ld_payamt, opemp, dscrp, inrep,2,ls_newid,itemid,sptid,arg_msg,FALSE,moneyid,'') = 0 THEN
  247. rslt = 0
  248. GOTO ext
  249. END IF
  250. INSERT INTO U_buybill (
  251. buybillid,
  252. buybillcode,
  253. paydate,
  254. Relcode,
  255. Mstpayamt,
  256. payamt,
  257. sptid,
  258. dscrp,
  259. banktypeid,
  260. inrep,
  261. opdate,
  262. opemp,
  263. rapmoneyid ,
  264. accountsid,
  265. itemid,
  266. billtype,
  267. buildtype,
  268. moneyid)
  269. VALUES (
  270. :ls_newid,
  271. :buybillcode,
  272. :paydate,
  273. :Relcode,
  274. :Mstpayamt,
  275. :payamt,
  276. :sptid,
  277. :dscrp,
  278. :banktypeid,
  279. :inrep,
  280. :opdate,
  281. :opemp,
  282. :ref_dateint ,
  283. :accountsid,
  284. :itemid,
  285. :billtype,
  286. :buildtype,
  287. :moneyid) ;
  288. IF sqlca.SQLCode <> 0 THEN
  289. rslt = 0
  290. IF Pos(Lower(sqlca.SQLErrText),'pk_u_buybill') > 0 THEN
  291. arg_msg = '插入供应商对数单操作失败,关键字单据ID重复'
  292. ELSEIF Pos(Lower(sqlca.SQLErrText),'ix_u_buybill') > 0 THEN
  293. arg_msg = '插入供应商对数单操作失败,单据编号重复'
  294. ELSE
  295. arg_msg = "插入供应商对数单操作失败"+"~n"+sqlca.SQLErrText
  296. END IF
  297. GOTO ext
  298. END IF
  299. FOR i = 1 TO it_mxbt
  300. IF mx[i].relbillcode = '' THEN mx[i].relbillcode = buybillcode
  301. IF uo_pay.add_payrecmx(mx[i].scid,mx[i].payid,mx[i].relbillcode,mx[i].paydate,mx[i].banktypeid,mx[i].Mstpayamt,&
  302. mx[i].payamt,mx[i].opemp,mx[i].dscrp,mx[i].inrep,2,ls_newid,0,sptid,arg_msg,FALSE,moneyid,'') = 0 THEN
  303. rslt = 0
  304. GOTO ext
  305. END IF
  306. NEXT
  307. buybillid = ls_newid
  308. FOR i = 1 TO it_mxbt
  309. INSERT INTO u_buybillmx
  310. (scid,
  311. buybillid,
  312. payid,
  313. paydate,
  314. mstpayamt,
  315. payamt,
  316. billcode,
  317. relbillcode,
  318. oriamt,
  319. mainmstpayamt,
  320. mainpayamt
  321. )
  322. VALUES
  323. (:mx[i].scid,
  324. :ls_newid,
  325. :mx[i].payid,
  326. :mx[i].paydate,
  327. :mx[i].mstpayamt,
  328. :mx[i].payamt,
  329. :mx[i].billcode,
  330. :mx[i].relbillcode,
  331. :mx[i].oriamt,
  332. :mx[i].mainmstpayamt,
  333. :mx[i].mainpayamt
  334. );
  335. IF sqlca.SQLCode <> 0 THEN
  336. buybillid = 0
  337. rslt = 0
  338. IF Pos(Lower(sqlca.SQLErrText),'PK_u_buybillmx') > 0 THEN
  339. arg_msg = '插入供应商对数单明细操作失败,关键字单据ID重复'
  340. ELSE
  341. arg_msg = "插入供应商对数单明细操作失败"+"~n"+sqlca.SQLErrText
  342. END IF
  343. GOTO ext
  344. END IF
  345. NEXT
  346. ELSE //////////////////////////////////////////////////更新
  347. SELECT mstpayamt,
  348. payamt,
  349. itemid,
  350. rapmoneyid,
  351. paydate
  352. INTO :ls_mstpayamt,
  353. :ls_payamt,
  354. :ll_itemid,
  355. :ll_dateint,
  356. :ld_paydate
  357. FROM u_buybill
  358. Where U_buybill.buybillid = :buybillid;
  359. IF sqlca.SQLCode <> 0 THEN
  360. arg_msg = "查询应付帐建立类型失败,请重试!"+'~n'+sqlca.SQLErrText
  361. rslt = 0
  362. GOTO ext
  363. END IF
  364. UPDATE U_buybill
  365. SET paydate = :paydate,
  366. Relcode = :Relcode,
  367. Mstpayamt = :Mstpayamt,
  368. payamt = :payamt,
  369. sptid = :sptid,
  370. dscrp = :dscrp,
  371. banktypeid = :banktypeid,
  372. inrep = :inrep,
  373. opdate = :opdate,
  374. opemp = :opemp,
  375. rapmoneyid = :ref_dateint,
  376. accountsid = :accountsid,
  377. itemid = :itemid,
  378. billtype = :billtype
  379. Where U_buybill.buybillid = :buybillid;
  380. IF sqlca.SQLCode <> 0 THEN
  381. rslt = 0
  382. arg_msg = "更新单据操作失败"+"~n"+sqlca.SQLErrText
  383. GOTO ext
  384. END IF
  385. //删除原有明细
  386. DELETE FROM U_buybillmx
  387. Where u_buybillmx.buybillid = :buybillid USING sqlca;
  388. IF sqlca.SQLCode <> 0 THEN
  389. rslt = 0
  390. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  391. GOTO ext
  392. END IF
  393. FOR i = 1 TO it_mxbt
  394. INSERT INTO u_buybillmx
  395. (scid,
  396. buybillid,
  397. payid,
  398. paydate,
  399. mstpayamt,
  400. payamt,
  401. billcode,
  402. relbillcode,
  403. oriamt,
  404. mainmstpayamt,
  405. mainpayamt
  406. )
  407. VALUES
  408. (:mx[i].scid,
  409. :ls_newid,
  410. :mx[i].payid,
  411. :mx[i].paydate,
  412. :mx[i].mstpayamt,
  413. :mx[i].payamt,
  414. :mx[i].billcode,
  415. :mx[i].relbillcode,
  416. :mx[i].oriamt,
  417. :mx[i].mainmstpayamt,
  418. :mx[i].mainpayamt
  419. );
  420. IF sqlca.SQLCode <> 0 THEN
  421. rslt = 0
  422. IF Pos(Lower(sqlca.SQLErrText),'PK_u_buybillmx') > 0 THEN
  423. arg_msg = '插入供应商对数单明细操作失败,关键字单据ID重复'
  424. ELSE
  425. arg_msg = "插入供应商对数单明细操作失败"+"~n"+sqlca.SQLErrText
  426. END IF
  427. GOTO ext
  428. END IF
  429. NEXT
  430. IF uo_pay.buybill_del_mx(buybillid,arg_msg,FALSE) = 0 THEN
  431. rslt = 0
  432. GOTO ext
  433. END IF
  434. FOR i = 1 TO it_mxbt
  435. IF uo_pay.add_payrecmx(mx[i].scid,mx[i].payid,mx[i].billcode,mx[i].paydate,mx[i].banktypeid,mx[i].Mstpayamt,&
  436. mx[i].payamt,mx[i].opemp,mx[i].dscrp,mx[i].inrep,2,buybillid,0,sptid,arg_msg,FALSE,moneyid,'') = 0 THEN
  437. rslt = 0
  438. GOTO ext
  439. END IF
  440. NEXT
  441. END IF
  442. it_newbegin = FALSE
  443. it_updatebegin = FALSE
  444. ext:
  445. DESTROY uo_pay
  446. IF rslt = 0 THEN
  447. ROLLBACK;
  448. p_clearmx()
  449. ELSEIF rslt = 1 AND arg_ifcommt THEN
  450. COMMIT;
  451. END IF
  452. RETURN rslt
  453. end function
  454. public function integer auditing (long arg_salebillid, string arg_auditrep, ref string arg_msg, boolean arg_ifcommit);//auditing()
  455. //0 fail 1 success
  456. //仓库审核
  457. Long rslt = 1,cnt = 0
  458. IF arg_salebillid = 0 THEN
  459. rslt = 0
  460. arG_MSG = "没有审核对象"
  461. GOTO ext
  462. END IF
  463. IF it_newbegin OR it_updatebegin THEN
  464. rslt = 0
  465. arG_MSG = "编辑状态下不可以执行审核"
  466. GOTO ext
  467. END IF
  468. IF getinfo(arg_salebillid,arG_MSG) = 0 THEN
  469. rslt = 0
  470. GOTO ext
  471. END IF
  472. IF flag = 1 THEN
  473. rslt = 0
  474. arG_MSG = "单据已经过审核"
  475. GOTO ext
  476. END IF
  477. SELECT count(*) INTO :cnt
  478. FROM u_user
  479. Where username = :arg_auditrep;
  480. IF sqlca.SQLCode <> 0 THEN
  481. rslt = 0
  482. arG_MSG = "查询操作失败,操作员"
  483. GOTO ext
  484. END IF
  485. IF cnt = 0 THEN
  486. rslt = 0
  487. arG_MSG = "操作员姓名未登记或已取消"
  488. GOTO ext
  489. END IF
  490. UPDATE u_buybill
  491. SET Auditrep = :arg_auditrep,
  492. Auditdate = getdate(),
  493. flag = 1
  494. Where u_buybill.buybillid = :arg_salebillid AND flag = 0 ;
  495. IF sqlca.SQLCode <> 0 THEN
  496. rslt = 0
  497. arG_MSG = "因网络或其它原因导致审核单据操作失败"+"~n"+sqlca.SQLErrText
  498. GOTO ext
  499. ELSEIF sqlca.SQLNRows = 0 THEN
  500. rslt = 0
  501. arG_MSG = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  502. GOTO ext
  503. END IF
  504. flag = 1
  505. ext:
  506. IF rslt = 0 THEN
  507. ROLLBACK ;
  508. ELSEIF rslt = 1 AND arg_ifcommit THEN
  509. COMMIT;
  510. END IF
  511. RETURN rslt
  512. end function
  513. public function integer getinfo (long arg_buybillid, ref string arg_msg);int rslt=1
  514. SELECT
  515. U_buybill.buybillcode,
  516. U_buybill.paydate,
  517. U_buybill.Relcode,
  518. U_buybill.Mstpayamt,
  519. U_buybill.payamt,
  520. U_buybill.sptid,
  521. U_buybill.dscrp,
  522. U_buybill.banktypeid,
  523. U_buybill.inrep,
  524. U_buybill.opdate,
  525. U_buybill.opemp,
  526. U_buybill.auditdate,
  527. U_buybill.auditrep,
  528. U_buybill.flag,
  529. U_buybill.rapmoneyid,
  530. U_buybill.accountsid,
  531. U_buybill.itemid,
  532. U_buybill.billtype,
  533. U_buybill.buildtype
  534. INTO
  535. :buybillcode,
  536. :paydate,
  537. :Relcode,
  538. :Mstpayamt,
  539. :payamt,
  540. :sptid,
  541. :dscrp,
  542. :banktypeid,
  543. :inrep,
  544. :opdate,
  545. :opemp,
  546. :auditdate,
  547. :auditrep,
  548. :flag,
  549. :rapmoneyid ,
  550. :accountsid,
  551. :itemid,
  552. :billtype,
  553. :buildtype
  554. FROM U_buybill
  555. WHERE U_buybill.buybillid = :arg_buybillid ;
  556. if sqlca.sqlcode<>0 then
  557. rslt=0
  558. ARG_MSG='查询数据操作失败,收入单'
  559. goto ext
  560. end if
  561. ext:
  562. return rslt
  563. end function
  564. public function integer updatebegin (long arg_buybillid, ref string arg_msg);//UPDATEbegin(arg_buybillid,arg_msg)
  565. //从置对象,设定业务类型,准备更新单
  566. //0 fail 1 success
  567. int rslt=1,CNT=0
  568. IF arg_buybillid<=0 THEN
  569. rslt=0
  570. buybillid=0
  571. goto ext
  572. end if
  573. if getinfo(arg_buybillid,arg_msg)=0 then
  574. rslt=0
  575. goto ext
  576. end if
  577. if buildtype=1 then
  578. rslt=0
  579. ARG_MSG='单据是系统自动建立,不可以修改'
  580. goto ext
  581. end if
  582. if flag=1 then
  583. rslt=0
  584. ARG_MSG='单据已经审核,不可以修改'
  585. goto ext
  586. end if
  587. buybillid=arg_buybillid
  588. if flag=0 then p_CLEARMX()
  589. it_newbegin=FALSE
  590. it_updatebegin=TRUE
  591. ext:
  592. IF rslt=0 THEN p_RESET()
  593. return rslt
  594. end function
  595. public function integer add_dscrp (long arg_buybillid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart)
  596. //0 fail 1 SUCCESS
  597. INT rslt=1
  598. arg_newdescppart=TRIM(arg_newdescppart)
  599. IF it_updatebegin OR it_newbegin THEN
  600. rslt=0
  601. arG_MSG="编辑状态下不可用"
  602. goto ext
  603. END IF
  604. if getinfo(arg_buybillid,arg_msg)=0 then
  605. rslt=0
  606. goto ext
  607. end if
  608. IF flag=0 THEN
  609. rslt=0
  610. arG_MSG="非审核状态下不可用"
  611. goto ext
  612. END IF
  613. UPDATE u_buybill
  614. SET DSCRP = DSCRP+' '+:arg_newdescppart
  615. WHERE u_buybill.buybillid = :arg_buybillid;
  616. if SQLCA.SQLCode<>0 then
  617. rslt=0
  618. arG_MSG="因网络或其它原因导致添加单据备注操作失败"+"~n"+SQLCA.SQLErrText
  619. goto ext
  620. end if
  621. DSCRP = DSCRP+' '+arg_newdescppart
  622. ext:
  623. if rslt=0 then
  624. rollback;
  625. elseif rslt=1 and arg_ifcommit then
  626. commit;
  627. end if
  628. return (rslt)
  629. end function
  630. public function integer c_auditing (long arg_buybillid, string arg_auditrep, ref string arg_msg, boolean arg_ifcommit);//c_auditing()
  631. //0 fail 1 success
  632. //仓库审核
  633. long rslt=1,cnt=0
  634. IF arg_buybillid=0 THEN
  635. rslt=0
  636. arG_MSG="没有撤审对象"
  637. goto ext
  638. END IF
  639. IF it_newbegin OR it_updatebegin THEN
  640. rslt=0
  641. arG_MSG="编辑状态下不可以执行撤审"
  642. goto ext
  643. END IF
  644. if getinfo(arg_buybillid,arg_msg)=0 then
  645. rslt=0
  646. goto ext
  647. end if
  648. IF flag=0 THEN
  649. rslt=0
  650. arG_MSG="单据未被审核,不能撤审"
  651. goto ext
  652. END IF
  653. SELECT count(*) INTO :cnt
  654. FROM u_user
  655. WHERE username=:arg_auditrep;
  656. if sqlca.sqlcode<>0 then
  657. rslt=0
  658. arG_MSG="查询操作失败,操作员"
  659. goto ext
  660. end if
  661. if cnt=0 then
  662. rslt=0
  663. arG_MSG="操作员姓名未登记或已取消"
  664. goto ext
  665. end if
  666. datetime null_datetime
  667. setnull(null_datetime)
  668. UPDATE u_buybill
  669. SET Auditrep = '',
  670. Auditdate = :null_datetime,
  671. flag = 0
  672. WHERE u_buybill.buybillid = :arg_buybillid and flag = 1 ;
  673. if SQLCA.SQLCode<>0 then
  674. rslt=0
  675. arG_MSG="因网络或其它原因导致审核单据操作失败"+"~n"+SQLCA.SQLErrText
  676. goto ext
  677. elseif SQLCA.SQLnrows=0 then
  678. rslt=0
  679. arG_MSG="单据正在审核,请稍后查询。"+"~n"+SQLCA.SQLErrText
  680. goto ext
  681. end if
  682. flag=0
  683. ext:
  684. if rslt=0 then
  685. ROLLBACK ;
  686. elseif rslt=1 and arg_ifcommit then
  687. commit;
  688. end if
  689. return rslt
  690. end function
  691. public function integer del (long arg_buybillid, ref string arg_msg, boolean arg_ifcommit);//cancel()
  692. //如果单据还没有审核删除单据极其明细
  693. //0 FAIL, 1 SUCCESS
  694. Int rslt = 1
  695. Decimal ls_mstpayamt
  696. Decimal ls_payamt
  697. Long ll_itemid
  698. Long ll_dateint
  699. Long ll_payid
  700. Long ll_scid
  701. Long ll_sptid
  702. DateTime ld_paydate
  703. uo_mustpay uo_pay
  704. uo_pay = Create uo_mustpay
  705. IF arg_buybillid <= 0 THEN
  706. rslt = 0
  707. arG_MSG = "没有删除对象,操作取消"
  708. GOTO ext
  709. END IF
  710. IF getinfo(arg_buybillid,arG_MSG) = 0 THEN
  711. rslt = 0
  712. GOTO ext
  713. END IF
  714. IF flag = 1 THEN
  715. rslt = 0
  716. arG_MSG = "单据已经审核,不可以删除"
  717. GOTO ext
  718. END IF
  719. IF uo_pay.buybill_del_mx(arg_buybillid,arG_MSG,False) = 0 THEN
  720. rslt = 0
  721. GOTO ext
  722. END IF
  723. SELECT payid,sptid,scid Into :ll_payid,:ll_sptid,:ll_scid From u_Bmstpay Where buybillid = :arg_buybillid;
  724. IF sqlca.SQLCode = 0 THEN
  725. IF uo_pay.del_payrec(ll_scid,1,ll_payid,ll_sptid,arG_MSG,False) = 0 THEN
  726. rslt = 0
  727. GOTO ext
  728. END IF
  729. ELSEIF sqlca.SQLCode = -1 THEN
  730. rslt = 0
  731. arG_MSG = '查询应付帐失败!'+"~n"+sqlca.SQLErrText
  732. GOTO ext
  733. END IF
  734. DELETE FROM u_buybill
  735. Where u_buybill.buybillid = :arg_buybillid;
  736. IF sqlca.SQLCode <> 0 THEN
  737. rslt = 0
  738. arG_MSG = "删除采购支出单操作失败"+"~n"+sqlca.SQLErrText
  739. GOTO ext
  740. END IF
  741. DELETE FROM u_buybillmx
  742. Where u_buybillmx.buybillid = :arg_buybillid Using sqlca;
  743. IF sqlca.SQLCode <> 0 THEN
  744. rslt = 0
  745. arG_MSG = "删除采购支出单明细操作失败"+"~n"+sqlca.SQLErrText
  746. ROLLBACK Using sqlca;
  747. GOTO ext
  748. END IF
  749. it_newbegin = False
  750. it_updatebegin = False
  751. ext:
  752. Destroy uo_pay
  753. IF rslt = 0 THEN
  754. ROLLBACK;
  755. p_reset()
  756. ELSEIF rslt = 1 And arg_ifcommit THEN
  757. COMMIT;
  758. END IF
  759. Return (rslt)
  760. end function
  761. 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, ref string arg_msg);Long rslt = 1
  762. Long ll_scid
  763. IF it_newbegin = False And it_updatebegin = False THEN
  764. rslt = 0
  765. arG_MSG = "非编辑状态不可以使用,操作取消"
  766. GOTO ext
  767. END IF
  768. //清除空值
  769. IF IsNull(arg_payid) THEN arg_payid = 0
  770. IF IsNull(arg_billcode) THEN arg_billcode = ''
  771. IF IsNull(arg_relbillcode) THEN arg_relbillcode = ''
  772. IF IsNull(arg_mstpayamt) THEN arg_mstpayamt = 0
  773. IF IsNull(arg_payamt) THEN arg_payamt = 0
  774. IF IsNull(arg_mainmstpayamt) THEN arg_mainmstpayamt = 0
  775. IF IsNull(arg_mainpayamt) THEN arg_mainpayamt = 0
  776. IF IsNull(arg_oriamt) THEN arg_oriamt = 0
  777. SELECT scid INTO :ll_scid
  778. FROM u_bmstpay
  779. Where payid = :arg_payid;
  780. IF sqlca.SQLCode <> 0 THEN
  781. arG_MSG = '查询单据所属分部失败:'+arg_billcode+' '+sqlca.SQLErrText
  782. rslt = 0
  783. GOTO ext
  784. END IF
  785. //写入内容
  786. it_mxbt++
  787. mx[it_mxbt].scid = ll_scid
  788. mx[it_mxbt].payid = arg_payid
  789. mx[it_mxbt].billcode = arg_billcode
  790. mx[it_mxbt].relbillcode = arg_relbillcode
  791. mx[it_mxbt].paydate = paydate
  792. mx[it_mxbt].banktypeid = banktypeid
  793. mx[it_mxbt].mstpayamt = arg_mstpayamt
  794. mx[it_mxbt].payamt = arg_payamt
  795. mx[it_mxbt].mainmstpayamt = arg_mainmstpayamt
  796. mx[it_mxbt].mainpayamt = arg_mainpayamt
  797. mx[it_mxbt].oriamt = arg_oriamt
  798. mx[it_mxbt].opemp = publ_operator
  799. mx[it_mxbt].dscrp = relcode
  800. mx[it_mxbt].inrep = inrep
  801. mx[it_mxbt].buildtype = 2
  802. ext:
  803. IF rslt = 0 THEN p_clearmx()
  804. Return(rslt)
  805. end function
  806. public function integer save_ds (ref string arg_msg, boolean arg_ifcommt);
  807. uo_mustpay uo_pay
  808. uo_pay = Create uo_mustpay
  809. Integer rslt = 1,cnt = 0,i
  810. DateTime server_datetime
  811. Long ls_newid
  812. Long ref_dateint
  813. String ls_sptname
  814. Decimal ls_mstpayamt
  815. Decimal ls_payamt
  816. Long ll_itemid
  817. Long ll_dateint
  818. DateTime ld_paydate
  819. IF IsNull(dscrp) THEN dscrp = ''
  820. IF IsNull(relcode) THEN relcode = ''
  821. IF IsNull(inrep) THEN inrep = ''
  822. IF IsNull(banktypeid) THEN banktypeid = 0
  823. IF IsNull(accountsid) THEN accountsid = 0
  824. IF IsNull(itemid) THEN itemid = 0
  825. IF IsNull(moneyid) THEN moneyid = 0
  826. IF moneyid <= 0 THEN
  827. rslt = 0
  828. arg_msg = '请选择币种!'
  829. GOTO ext
  830. END IF
  831. IF it_newbegin = False And it_updatebegin = False THEN
  832. rslt = 0
  833. arg_msg = "非编辑状态不可以提交"
  834. GOTO ext
  835. END IF
  836. SELECT Top 1 getdate() Into :server_datetime From u_user ;
  837. //取得系统时间,借用操作员表
  838. IF sqlca.SQLCode <> 0 THEN
  839. rslt = 0
  840. arg_msg = "查询操作失败,日期 "
  841. GOTO ext
  842. END IF
  843. IF it_mxbt = 0 THEN //如果输入库存物料资料错则已经清空
  844. rslt = 0
  845. arg_msg = "没有正确单据内容"
  846. GOTO ext
  847. END IF
  848. IF Year(Date(paydate)) < 2000 Or IsNull(paydate) THEN
  849. rslt = 0
  850. arg_msg = "缺少出仓发生时间或不合理"
  851. GOTO ext
  852. END IF
  853. //cnt = 0
  854. //SELECT count(*) INTO :cnt
  855. // FROM cw_banktype
  856. // Where banktypeid = :banktypeid;
  857. //IF sqlca.SQLCode <> 0 THEN
  858. // rslt = 0
  859. // arg_msg = "查询操作失败,结算方式!"
  860. // GOTO ext
  861. //END IF
  862. //IF cnt = 0 THEN
  863. // rslt = 0
  864. // arg_msg = "结算方式未登记或已取消!"
  865. // GOTO ext
  866. //END IF
  867. cnt = 0
  868. SELECT count(*) INTO :cnt
  869. FROM u_spt
  870. Where sptid = :sptid ;
  871. IF sqlca.SQLCode <> 0 THEN
  872. rslt = 0
  873. arg_msg = "查询操作失败,供应商资料"
  874. GOTO ext
  875. END IF
  876. IF cnt = 0 THEN
  877. rslt = 0
  878. arg_msg = "供应商未定义或错误"
  879. GOTO ext
  880. END IF
  881. SELECT name
  882. INTO :ls_sptname
  883. FROM u_spt
  884. Where u_spt.sptid = :sptid ;
  885. IF sqlca.SQLCode <> 0 THEN
  886. arg_msg = '查询操作失败,供应商唯一码'
  887. rslt = 0
  888. GOTO ext
  889. END IF
  890. cnt = 0
  891. SELECT count(*) INTO :cnt
  892. FROM u_user
  893. Where username = :opemp ;
  894. IF sqlca.SQLCode <> 0 THEN
  895. rslt = 0
  896. arg_msg = "查询操作失败,操作员"
  897. GOTO ext
  898. END IF
  899. IF cnt = 0 THEN
  900. rslt = 0
  901. arg_msg = "操作员姓名未登记或已取消"
  902. GOTO ext
  903. END IF
  904. opdate = server_datetime
  905. IF buybillid = 0 THEN //新建
  906. ls_newid = f_sys_scidentity(0,"U_buybill","buybillid",arg_msg,false,sqlca)
  907. IF ls_newid <= 0 THEN
  908. rslt = 0
  909. GOTO ext
  910. END IF
  911. buybillcode = getid(0,"BB",Date(server_datetime),false,sqlca) //取得新单据编号
  912. IF buybillcode = "err" THEN
  913. buybillcode = ''
  914. rslt = 0
  915. arg_msg = "无法获取收入单编号"
  916. GOTO ext
  917. END IF
  918. INSERT INTO U_buybill (
  919. buybillid,
  920. buybillcode,
  921. paydate,
  922. Relcode,
  923. Mstpayamt,
  924. payamt,
  925. sptid,
  926. dscrp,
  927. banktypeid,
  928. inrep,
  929. opdate,
  930. opemp,
  931. rapmoneyid ,
  932. accountsid,
  933. itemid,
  934. billtype,
  935. buildtype,
  936. moneyid)
  937. VALUES (
  938. :ls_newid,
  939. :buybillcode,
  940. :paydate,
  941. :Relcode,
  942. :Mstpayamt,
  943. :payamt,
  944. :sptid,
  945. :dscrp,
  946. :banktypeid,
  947. :inrep,
  948. :opdate,
  949. :opemp,
  950. :ref_dateint ,
  951. :accountsid,
  952. :itemid,
  953. :billtype,
  954. :buildtype,
  955. :moneyid) ;
  956. IF sqlca.SQLCode <> 0 THEN
  957. rslt = 0
  958. arg_msg = "插入操作失败"+"~n"+sqlca.SQLErrText
  959. GOTO ext
  960. END IF
  961. FOR i = 1 To it_mxbt
  962. IF mx[i].relbillcode = '' THEN mx[i].relbillcode = buybillcode
  963. IF uo_pay.add_payrecmx(mx[i].scid,mx[i].payid,mx[i].relbillcode,datetime(string(today()) + ' ' + string(now())),mx[i].banktypeid,mx[i].Mstpayamt,&
  964. mx[i].payamt,mx[i].opemp,mx[i].dscrp,mx[i].inrep,2,ls_newid,0,sptid,arg_msg,False,moneyid,'') = 0 THEN
  965. rslt = 0
  966. GOTO ext
  967. END IF
  968. NEXT
  969. buybillid = ls_newid
  970. FOR i = 1 To it_mxbt
  971. INSERT INTO u_buybillmx
  972. (scid,
  973. buybillid,
  974. payid,
  975. paydate,
  976. mstpayamt,
  977. payamt,
  978. billcode,
  979. relbillcode,
  980. oriamt,
  981. mainmstpayamt,
  982. mainpayamt
  983. )
  984. VALUES
  985. (:mx[i].scid,
  986. :ls_newid,
  987. :mx[i].payid,
  988. :mx[i].paydate,
  989. :mx[i].mstpayamt,
  990. :mx[i].payamt,
  991. :mx[i].billcode,
  992. :mx[i].relbillcode,
  993. :mx[i].oriamt,
  994. :mx[i].mainmstpayamt,
  995. :mx[i].mainpayamt
  996. );
  997. IF sqlca.SQLCode <> 0 THEN
  998. buybillid = 0
  999. rslt = 0
  1000. arg_msg = "插入明细操作失败"+"~n"+sqlca.SQLErrText
  1001. ROLLBACK Using sqlca;
  1002. GOTO ext
  1003. END IF
  1004. NEXT
  1005. ELSE //////////////////////////////////////////////// //更新
  1006. SELECT mstpayamt,
  1007. payamt,
  1008. itemid,
  1009. rapmoneyid,
  1010. paydate
  1011. INTO :ls_mstpayamt,
  1012. :ls_payamt,
  1013. :ll_itemid,
  1014. :ll_dateint,
  1015. :ld_paydate
  1016. FROM u_buybill
  1017. Where U_buybill.buybillid = :buybillid;
  1018. IF sqlca.SQLCode <> 0 THEN
  1019. arg_msg = "查询应付帐建立类型失败,请重试!"+'~n'+sqlca.SQLErrText
  1020. rslt = 0
  1021. GOTO ext
  1022. END IF
  1023. UPDATE U_buybill
  1024. SET paydate = :paydate,
  1025. Relcode = :Relcode,
  1026. Mstpayamt = :Mstpayamt,
  1027. payamt = :payamt,
  1028. sptid = :sptid,
  1029. dscrp = :dscrp,
  1030. banktypeid = :banktypeid,
  1031. inrep = :inrep,
  1032. opdate = :opdate,
  1033. opemp = :opemp,
  1034. rapmoneyid = :ref_dateint,
  1035. accountsid = :accountsid,
  1036. itemid = :itemid,
  1037. billtype = :billtype,
  1038. moneyid = :moneyid
  1039. Where U_buybill.buybillid = :buybillid;
  1040. IF sqlca.SQLCode <> 0 THEN
  1041. rslt = 0
  1042. arg_msg = "更新单据操作失败"+"~n"+sqlca.SQLErrText
  1043. GOTO ext
  1044. END IF
  1045. //删除原有明细
  1046. DELETE FROM U_buybillmx
  1047. Where u_buybillmx.buybillid = :buybillid Using sqlca;
  1048. IF sqlca.SQLCode <> 0 THEN
  1049. rslt = 0
  1050. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  1051. ROLLBACK Using sqlca;
  1052. GOTO ext
  1053. END IF
  1054. FOR i = 1 To it_mxbt
  1055. INSERT INTO u_buybillmx
  1056. (scid,
  1057. buybillid,
  1058. payid,
  1059. paydate,
  1060. mstpayamt,
  1061. payamt,
  1062. billcode,
  1063. relbillcode,
  1064. oriamt,
  1065. mainmstpayamt,
  1066. mainpayamt
  1067. )
  1068. VALUES
  1069. (:mx[i].scid,
  1070. :ls_newid,
  1071. :mx[i].payid,
  1072. :mx[i].paydate,
  1073. :mx[i].mstpayamt,
  1074. :mx[i].payamt,
  1075. :mx[i].billcode,
  1076. :mx[i].relbillcode,
  1077. :mx[i].oriamt,
  1078. :mx[i].mainmstpayamt,
  1079. :mx[i].mainpayamt
  1080. );
  1081. IF sqlca.SQLCode <> 0 THEN
  1082. rslt = 0
  1083. arg_msg = "插入明细操作失败"+"~n"+sqlca.SQLErrText
  1084. ROLLBACK Using sqlca;
  1085. GOTO ext
  1086. END IF
  1087. NEXT
  1088. IF uo_pay.buybill_del_mx(buybillid,arg_msg,False) = 0 THEN
  1089. rslt = 0
  1090. GOTO ext
  1091. END IF
  1092. FOR i = 1 To it_mxbt
  1093. IF uo_pay.add_payrecmx(mx[i].scid,mx[i].payid,mx[i].billcode,datetime(string(today()) + ' ' + string(now())),mx[i].banktypeid,mx[i].Mstpayamt,&
  1094. mx[i].payamt,mx[i].opemp,mx[i].dscrp,mx[i].inrep,2,buybillid,0,sptid,arg_msg,False,moneyid,'') = 0 THEN
  1095. rslt = 0
  1096. GOTO ext
  1097. END IF
  1098. NEXT
  1099. END IF
  1100. it_newbegin = False
  1101. it_updatebegin = False
  1102. ext:
  1103. Destroy uo_pay
  1104. IF rslt = 0 THEN
  1105. ROLLBACK;
  1106. p_clearmx()
  1107. ELSEIF rslt = 1 And arg_ifcommt THEN
  1108. COMMIT;
  1109. END IF
  1110. RETURN rslt
  1111. end function
  1112. on uo_buybill.create
  1113. call super::create
  1114. TriggerEvent( this, "constructor" )
  1115. end on
  1116. on uo_buybill.destroy
  1117. TriggerEvent( this, "destructor" )
  1118. call super::destroy
  1119. end on