uo_amerce.sru 22 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064
  1. $PBExportHeader$uo_amerce.sru
  2. forward
  3. global type uo_amerce from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_amerce from nonvisualobject
  7. end type
  8. global uo_amerce uo_amerce
  9. type variables
  10. PUBLIC PROTECTEDWRITE Long scid
  11. PUBLIC PROTECTEDWRITE Long billid
  12. PUBLIC PROTECTEDWRITE String billcode
  13. PUBLIC PROTECTEDWRITE DateTime opdate
  14. PUBLIC PROTECTEDWRITE String opemp
  15. PUBLIC PROTECTEDWRITE DateTime moddate
  16. PUBLIC PROTECTEDWRITE String modemp
  17. PUBLIC PROTECTEDWRITE Int flag
  18. PUBLIC PROTECTEDWRITE DateTime auditingdate
  19. PUBLIC PROTECTEDWRITE String auditingrep
  20. PUBLIC PROTECTEDWRITE Int affirmflag
  21. Long sptid
  22. DateTime billdate
  23. Decimal amerceamt
  24. String amercereason
  25. String relcode
  26. Long payid
  27. Long banktypeid
  28. String inrep
  29. long moneyid
  30. decimal mrate
  31. string dscrp
  32. Long deptid
  33. int uo_option_m_mstpay
  34. private:
  35. s_amercemx smx[]
  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_reset ()
  42. public function integer save (ref string arg_msg, boolean arg_ifcommit)
  43. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg)
  44. public function integer newbegin (long arg_scid, ref string arg_msg)
  45. public function integer del (long arg_scid, long arg_billid, ref string arg_msg)
  46. public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg)
  47. public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg)
  48. public function integer auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  49. public function integer c_auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  50. public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg)
  51. public function integer affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  52. public function integer c_affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  53. public function integer p_clearmx ()
  54. public function integer acceptmx (long arg_printid, long arg_mtrlid, decimal arg_fprice, decimal arg_rebate, decimal arg_qty, string arg_unit, integer arg_admtrlid, string arg_mxdscrp, long arg_taskid, long arg_relprintid, string arg_taskcode, datetime arg_requiredate, datetime arg_accomplishdate, ref string arg_msg)
  55. end prototypes
  56. public function integer p_reset ();//INT p_RESET()
  57. //清除对象及其明细
  58. billid=0
  59. billcode=''
  60. opemp=''
  61. auditingrep=''
  62. flag=0
  63. sptid=0
  64. amerceamt=0
  65. amercereason=''
  66. relcode=''
  67. moneyid = 0
  68. mrate = 0
  69. dscrp = ''
  70. //清除明细
  71. P_CLEARMX()
  72. it_newbegin=FALSE
  73. it_updatebegin=FALSE
  74. RETURN 1
  75. end function
  76. public function integer save (ref string arg_msg, boolean arg_ifcommit);//====================================================================
  77. // Function: save(arg_msg,arg_ifcommit)
  78. //--------------------------------------------------------------------
  79. // Description:
  80. //--------------------------------------------------------------------
  81. // Arguments:
  82. // reference string arg_msg
  83. // value boolean arg_ifcommit
  84. //--------------------------------------------------------------------
  85. // Returns: integer
  86. //--------------------------------------------------------------------
  87. // Author: yyx Date: 2003.11.21
  88. //--------------------------------------------------------------------
  89. // Modify History:
  90. //
  91. //====================================================================
  92. Integer rslt = 1,cnt = 0,i
  93. DateTime server_dt
  94. Long ls_newid
  95. String ls_sccode
  96. IF IsNull(sptid) THEN sptid = 0
  97. IF IsNull(amerceamt) THEN amerceamt = 0
  98. IF IsNull(banktypeid) THEN banktypeid = 0
  99. IF IsNull(amercereason) THEN amercereason = ''
  100. IF IsNull(relcode) THEN relcode = ''
  101. IF IsNull(inrep) THEN inrep = ''
  102. IF IsNull(dscrp) THEN dscrp = ''
  103. IF IsNull(moneyid) THEN moneyid = 0
  104. IF IsNull(mrate) THEN mrate = 0
  105. IF IsNull(deptid) THEN deptid = 0
  106. IF it_newbegin = False And it_updatebegin = False THEN
  107. rslt = 0
  108. arg_msg = "非编辑状态不可以提交"
  109. GOTO ext
  110. END IF
  111. SELECT count(*) INTO :cnt
  112. FROM u_spt
  113. Where sptid = :sptid;
  114. IF sqlca.SQLCode <> 0 THEN
  115. arg_msg = '查询供应商资料失败'
  116. rslt = 0
  117. GOTO ext
  118. END IF
  119. IF cnt > 1 THEN
  120. arg_msg = '供应商资料重复'
  121. rslt = 0
  122. GOTO ext
  123. END IF
  124. IF amerceamt = 0 THEN
  125. arg_msg = '请输入正确的罚款金额'
  126. rslt = 0
  127. GOTO ext
  128. END IF
  129. IF inrep = '' THEN
  130. arg_msg = '请输入经手人'
  131. rslt = 0
  132. GOTO ext
  133. END IF
  134. IF banktypeid = 0 THEN
  135. arg_msg = '请请选择结算方式'
  136. rslt = 0
  137. GOTO ext
  138. END IF
  139. cnt = 0
  140. SELECT count(*) INTO :cnt
  141. FROM cw_currency
  142. Where moneyid = :moneyid;
  143. IF sqlca.SQLCode <> 0 THEN
  144. arg_msg = '查询币种失败'
  145. rslt = 0
  146. GOTO ext
  147. END IF
  148. IF cnt = 0 THEN
  149. arg_msg = '币种资料不存在'
  150. rslt = 0
  151. GOTO ext
  152. END IF
  153. IF mrate = 0 THEN
  154. arg_msg = '币种汇率错误'
  155. rslt = 0
  156. GOTO ext
  157. END IF
  158. SELECT Top 1 getdate() Into :server_dt From u_user;
  159. //取得系统时间,借用操作员表
  160. IF sqlca.SQLCode <> 0 THEN
  161. rslt = 0
  162. arg_msg = "查询操作失败,日期 "
  163. GOTO ext
  164. END IF
  165. IF f_check_inoutdate(0,billdate,False,arg_msg) = 0 THEN
  166. rslt = 0
  167. GOTO ext
  168. END IF
  169. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  170. IF billid = 0 THEN //新建
  171. ls_newid = f_sys_scidentity(scid,"u_spt_amerce","billid",arg_msg,True,id_sqlca)
  172. IF ls_newid <= 0 THEN
  173. rslt = 0
  174. GOTO ext
  175. END IF
  176. //取分部代号
  177. IF f_get_sccode(scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  178. rslt = 0
  179. GOTO ext
  180. END IF
  181. billcode = getid(scid,ls_sccode + "KK",Date(server_dt),True,sqlca) //取得新单据编号
  182. IF billcode = "err" THEN
  183. billcode = ''
  184. rslt = 0
  185. arg_msg = "无法获取罚款单编号"
  186. GOTO ext
  187. END IF
  188. INSERT INTO u_spt_amerce (
  189. scid,
  190. billid,
  191. billcode,
  192. billdate,
  193. sptid,
  194. amerceamt,
  195. banktypeid,
  196. inrep,
  197. amercereason,
  198. relcode,
  199. opdate,
  200. opemp,
  201. moneyid,
  202. mrate,
  203. dscrp,
  204. deptid)
  205. VALUES (
  206. :scid,
  207. :ls_newid,
  208. :billcode,
  209. :billdate,
  210. :sptid,
  211. :amerceamt,
  212. :banktypeid,
  213. :inrep,
  214. :amercereason,
  215. :relcode,
  216. :server_dt,
  217. :publ_operator,
  218. :moneyid,
  219. :mrate,
  220. :dscrp,
  221. :deptid);
  222. IF sqlca.SQLCode <> 0 THEN
  223. rslt = 0
  224. arg_msg = "插入操作失败>>"+"~n"+sqlca.SQLErrText
  225. GOTO ext
  226. END IF
  227. billid = ls_newid
  228. ELSE //////////////////////////////////////////////// //更新
  229. UPDATE u_spt_amerce
  230. SET billdate = :billdate,
  231. sptid = :sptid,
  232. amerceamt = :amerceamt,
  233. amercereason = :amercereason,
  234. banktypeid = :banktypeid,
  235. inrep = :inrep,
  236. relcode = :relcode,
  237. moddate = :server_dt,
  238. modemp = :publ_operator,
  239. moneyid = :moneyid,
  240. mrate = :mrate,
  241. dscrp = :dscrp,
  242. deptid = :deptid
  243. WHERE u_spt_amerce.billid = :billid
  244. AND u_spt_amerce.scid = :scid
  245. And u_spt_amerce.flag = 0;
  246. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  247. rslt = 0
  248. arg_msg = "更新单据操作失败"+"~n"+sqlca.SQLErrText
  249. GOTO ext
  250. END IF
  251. DELETE FROM u_spt_amercemx
  252. WHERE billid = :billid
  253. And scid = :scid Using sqlca;
  254. IF sqlca.SQLCode <> 0 THEN
  255. rslt = 0
  256. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  257. GOTO ext
  258. END IF
  259. END IF
  260. FOR i = 1 To it_MXBT
  261. INSERT INTO u_spt_amercemx(scid,
  262. billid,
  263. printid,
  264. Qty,
  265. fprice,
  266. rebate,
  267. amt,
  268. mxdscrp,
  269. taskcode,
  270. taskid,
  271. relprintid,
  272. MtrlID,
  273. admtrlid,
  274. unit,
  275. accomplishdate,
  276. requiredate,
  277. ctmint)
  278. VALUES
  279. (:scid,
  280. :billid,
  281. :smx[i].printid,
  282. :smx[i].Qty,
  283. :smx[i].fprice,
  284. :smx[i].rebate,
  285. :smx[i].amt,
  286. :smx[i].mxdscrp,
  287. :smx[i].taskcode,
  288. :smx[i].taskid,
  289. :smx[i].relprintid,
  290. :smx[i].MtrlID,
  291. :smx[i].admtrlid,
  292. :smx[i].unit,
  293. :smx[i].accomplishdate,
  294. :smx[i].requiredate,
  295. 0
  296. );
  297. IF sqlca.SQLCode <> 0 THEN
  298. if it_newbegin then billid = 0
  299. rslt = 0
  300. arg_msg = "插入明细操作失败"+"~n"+sqlca.SQLErrText
  301. GOTO ext
  302. END IF
  303. NEXT
  304. it_newbegin = False
  305. it_updatebegin = False
  306. ext:
  307. IF rslt = 0 THEN
  308. p_clearmx()
  309. ROLLBACK;
  310. ELSEIF rslt = 1 And arg_ifcommit THEN
  311. COMMIT;
  312. END IF
  313. Return(rslt)
  314. end function
  315. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);//====================================================================
  316. // Function: updatebegin(arg_billid,arg_msg)
  317. //--------------------------------------------------------------------
  318. // Description:
  319. //--------------------------------------------------------------------
  320. // Arguments:
  321. // value long arg_billid
  322. // reference string arg_msg
  323. //--------------------------------------------------------------------
  324. // Returns: integer
  325. //--------------------------------------------------------------------
  326. // Author: yyx Date: 2003.11.21
  327. //--------------------------------------------------------------------
  328. // Modify History:
  329. //
  330. //====================================================================
  331. Int rslt = 1
  332. IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  333. rslt = 0
  334. GOTO ext
  335. END IF
  336. IF flag = 1 THEN
  337. rslt = 0
  338. arg_msg = '单据已经审核,不可以修改'
  339. GOTO ext
  340. END IF
  341. billid = arg_billid
  342. scid = arg_scid
  343. p_clearmx() //清除明细
  344. it_newbegin = False
  345. it_updatebegin = True
  346. ext:
  347. IF rslt = 0 THEN p_reset()
  348. RETURN rslt
  349. end function
  350. public function integer newbegin (long arg_scid, ref string arg_msg);Int rslt = 1
  351. IF arg_scid < 0 THEN
  352. arg_msg = '请选择分部'
  353. rslt = 0
  354. GOTO ext
  355. END IF
  356. p_reset()
  357. scid = arg_scid
  358. it_newbegin = True
  359. it_updatebegin = False
  360. ext:
  361. if rslt = 0 then p_reset()
  362. RETURN rslt
  363. end function
  364. public function integer del (long arg_scid, long arg_billid, ref string arg_msg);//====================================================================
  365. // Function: del(arg_billid,arg_msg)
  366. //--------------------------------------------------------------------
  367. // Description:
  368. //--------------------------------------------------------------------
  369. // Arguments:
  370. // value long arg_billid
  371. // reference string arg_msg
  372. //--------------------------------------------------------------------
  373. // Returns: integer
  374. //--------------------------------------------------------------------
  375. // Author: yyx Date: 2003.11.21
  376. //--------------------------------------------------------------------
  377. // Modify History:
  378. //
  379. //====================================================================
  380. Int rslt = 1
  381. IF arg_billid <= 0 THEN
  382. rslt = 0
  383. arg_msg = "没有删除对象,操作取消"
  384. GOTO ext
  385. END IF
  386. IF it_newbegin Or it_updatebegin THEN
  387. rslt = 0
  388. arg_msg = "编辑状态下不可以执行,操作取消"
  389. GOTO ext
  390. END IF
  391. SELECT u_spt_amerce.flag
  392. INTO :flag
  393. FROM u_spt_amerce
  394. Where u_spt_amerce.billid = :arg_billid;
  395. IF sqlca.SQLCode <> 0 THEN
  396. rslt = 0
  397. arg_msg = '查询单据操作失败'
  398. GOTO ext
  399. END IF
  400. IF flag = 1 THEN
  401. rslt = 0
  402. arg_msg = "单据已经审核,不可以删除"
  403. GOTO ext
  404. END IF
  405. DELETE FROM u_spt_amerce
  406. WHERE u_spt_amerce.billid = :arg_billid
  407. And u_spt_amerce.scid = :arg_scid;
  408. IF sqlca.SQLCode <> 0 THEN
  409. rslt = 0
  410. arg_msg = "删除罚款单操作失败"+"~n"+sqlca.SQLErrText
  411. GOTO ext
  412. END IF
  413. it_newbegin = False
  414. it_updatebegin = False
  415. ext:
  416. IF rslt = 1 THEN
  417. COMMIT;
  418. ELSEIF rslt = 0 THEN
  419. ROLLBACK;
  420. END IF
  421. p_reset()
  422. Return (rslt)
  423. end function
  424. public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg);//0 失败 1成功
  425. Int rslt = 1,I = 1,NO_MXCHECK = 0
  426. IF arg_billid <= 0 THEN
  427. rslt = 0
  428. arg_msg = '错误采购订单唯一码'
  429. GOTO ext
  430. END IF
  431. IF p_getinfo(arg_scid, arg_billid, arg_msg) = 0 THEN
  432. rslt = 0
  433. GOTO ext
  434. END IF
  435. //用游标读取明细
  436. DECLARE CUR_INWAERMX CURSOR FOR
  437. SELECT u_mtrldef.mtrlcode,
  438. u_mtrldef.mtrlname,
  439. u_spt_amercemx.Qty,
  440. u_spt_amercemx.fprice,
  441. u_spt_amercemx.rebate,
  442. u_spt_amercemx.amt,
  443. u_spt_amercemx.unit,
  444. u_spt_amercemx.admtrlid,
  445. u_spt_amercemx.mxdscrp,
  446. u_spt_amercemx.taskcode,
  447. u_spt_amercemx.billid,
  448. u_spt_amercemx.taskid,
  449. u_spt_amercemx.printid,
  450. u_spt_amercemx.relprintid,
  451. u_spt_amercemx.MtrlID,
  452. u_spt_amercemx.accomplishdate,
  453. u_spt_amercemx.requiredate
  454. FROM u_spt_amercemx INNER JOIN
  455. u_mtrldef ON u_spt_amercemx.MtrlID = u_mtrldef.mtrlid
  456. where u_spt_amercemx.billid=:arg_billid USING sqlca;
  457. OPEN CUR_INWAERMX;
  458. FETCH CUR_INWAERMX INTO :smx[i].mtrlcode,
  459. :smx[i].mtrlname,
  460. :smx[i].Qty,
  461. :smx[i].fprice,
  462. :smx[i].rebate,
  463. :smx[i].amt,
  464. :smx[i].unit,
  465. :smx[i].admtrlid,
  466. :smx[i].mxdscrp,
  467. :smx[i].taskcode,
  468. :smx[i].billid,
  469. :smx[i].taskid,
  470. :smx[i].printid,
  471. :smx[i].relprintid,
  472. :smx[i].MtrlID,
  473. :smx[i].accomplishdate,
  474. :smx[i].requiredate;
  475. DO WHILE sqlca.SQLCode = 0
  476. I++
  477. FETCH CUR_INWAERMX INTO :smx[i].mtrlcode,
  478. :smx[i].mtrlname,
  479. :smx[i].Qty,
  480. :smx[i].fprice,
  481. :smx[i].rebate,
  482. :smx[i].amt,
  483. :smx[i].unit,
  484. :smx[i].admtrlid,
  485. :smx[i].mxdscrp,
  486. :smx[i].taskcode,
  487. :smx[i].billid,
  488. :smx[i].taskid,
  489. :smx[i].printid,
  490. :smx[i].relprintid,
  491. :smx[i].MtrlID,
  492. :smx[i].accomplishdate,
  493. :smx[i].requiredate;
  494. LOOP
  495. CLOSE CUR_INWAERMX;
  496. //检验明细是否读入完整
  497. SELECT COUNT(*) INTO :NO_MXCHECK
  498. FROM u_spt_amercemx
  499. Where u_spt_amercemx.billid = :arg_billid USING sqlca;
  500. IF sqlca.SQLCode <> 0 THEN
  501. rslt = 0
  502. arg_msg = "查询操作失败,质量事故赔偿单明细数量"
  503. GOTO ext
  504. END IF
  505. IF i <> (NO_MXCHECK+1) THEN
  506. rslt = 0
  507. arg_msg = "查询操作失败,质量事故赔偿单单明细"
  508. GOTO ext
  509. END IF
  510. it_mxbt = i - 1
  511. it_newbegin = FALSE
  512. it_updatebegin = FALSE
  513. ext:
  514. IF rslt = 0 THEN p_reset()
  515. RETURN rslt
  516. end function
  517. public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1
  518. IF arg_billid <= 0 THEN
  519. billid = 0
  520. arg_msg = '错误的单据id'
  521. GOTO ext
  522. END IF
  523. SELECT u_spt_amerce.billcode,
  524. u_spt_amerce.billdate,
  525. u_spt_amerce.sptid,
  526. u_spt_amerce.amerceamt,
  527. u_spt_amerce.banktypeid,
  528. u_spt_amerce.inrep,
  529. u_spt_amerce.amercereason,
  530. u_spt_amerce.payid,
  531. u_spt_amerce.relcode,
  532. u_spt_amerce.flag,
  533. u_spt_amerce.affirmflag,
  534. u_spt_amerce.moneyid,
  535. u_spt_amerce.mrate
  536. INTO :billcode,
  537. :billdate,
  538. :sptid,
  539. :amerceamt,
  540. :banktypeid,
  541. :inrep,
  542. :amercereason,
  543. :payid,
  544. :relcode,
  545. :flag,
  546. :affirmflag,
  547. :moneyid,
  548. :mrate
  549. FROM u_spt_amerce
  550. WHERE u_spt_amerce.billid = :arg_billid
  551. And u_spt_amerce.scid = :arg_scid;
  552. IF sqlca.SQLCode <> 0 THEN
  553. rslt = 0
  554. arg_msg = '查询数据操作失败,罚款单'+sqlca.SQLErrText
  555. GOTO ext
  556. END IF
  557. scid = arg_scid
  558. billid = arg_billid
  559. ext:
  560. //IF rslt = 0 THEN p_reset()
  561. RETURN rslt
  562. end function
  563. public function integer auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  564. String ls_dscrp
  565. Long ll_moneyid_native
  566. Decimal ld_mstpayamt
  567. Long ll_moneyid
  568. IF uo_option_m_mstpay = -1000 THEN
  569. rslt = 0
  570. arg_msg = '选项:[241]系统使用多币种应付帐,读取初始默认值失败,操作取消!'
  571. GOTO ext
  572. END IF
  573. uo_mustpay uo_pay
  574. uo_pay = Create uo_mustpay
  575. IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  576. rslt = 0
  577. GOTO ext
  578. END IF
  579. IF flag = 1 THEN
  580. rslt = 0
  581. arg_msg = '单据已经审核,不可以再审核'
  582. GOTO ext
  583. END IF
  584. UPDATE u_spt_amerce
  585. SET auditrep = :publ_operator,
  586. auditdate = getdate(),
  587. flag = 1
  588. WHERE u_spt_amerce.billid = :arg_billid
  589. AND flag = 0
  590. And scid = :arg_scid;
  591. IF sqlca.SQLCode <> 0 THEN
  592. rslt = 0
  593. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+sqlca.SQLErrText
  594. GOTO ext
  595. ELSEIF sqlca.SQLNRows = 0 THEN
  596. rslt = 0
  597. arg_msg = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  598. GOTO ext
  599. END IF
  600. IF amerceamt <> 0 THEN
  601. Long ll_dft_itemid
  602. SELECT itemid INTO :ll_dft_itemid
  603. FROM u_itemdef
  604. Where dfttype = 7;
  605. IF sqlca.SQLCode <> 0 THEN
  606. arg_msg = '查询默认供应商赔偿单项目资料失败,'+sqlca.SQLErrText
  607. rslt = 0
  608. GOTO ext
  609. END IF
  610. SELECT moneyid INTO :ll_moneyid_native
  611. FROM cw_currency
  612. Where native = 1 ;
  613. IF sqlca.SQLCode <> 0 THEN
  614. arg_msg = '查询本位币资料失败'
  615. rslt = 0
  616. GOTO ext
  617. END IF
  618. IF uo_option_m_mstpay = 0 THEN
  619. ld_mstpayamt = amerceamt * mrate
  620. ll_moneyid = ll_moneyid_native
  621. ELSE
  622. ld_mstpayamt = amerceamt
  623. ll_moneyid = moneyid
  624. END IF
  625. ls_dscrp = billcode + "罚款"
  626. DateTime plandate
  627. SetNull(plandate)
  628. s_bmstpay s_pay
  629. s_pay.scid = scid
  630. s_pay.sptid = sptid
  631. s_pay.paydate = billdate
  632. s_pay.inrep = inrep
  633. s_pay.oriamt = 0 - ld_mstpayamt
  634. s_pay.mstpayamt = 0 - ld_mstpayamt
  635. s_pay.payamt = 0
  636. s_pay.payamt_cn = 0
  637. s_pay.dscrp = ls_dscrp
  638. s_pay.billcode = billcode
  639. s_pay.relcode = relcode
  640. s_pay.banktypeid = banktypeid
  641. s_pay.viewdate = plandate
  642. s_pay.opemp = publ_operator
  643. s_pay.buildtype = 1
  644. s_pay.inwareid = billid
  645. s_pay.accountsid = 0
  646. s_pay.itemid = ll_dft_itemid
  647. s_pay.moneyid = ll_moneyid
  648. s_pay.moneyid_cn = ll_moneyid
  649. IF uo_pay.add_payrec (s_pay,arg_msg,False) = 0 THEN
  650. rslt = 0
  651. GOTO ext
  652. END IF
  653. UPDATE u_spt_amerce
  654. SET payid = :uo_pay.ref_payid
  655. WHERE u_spt_amerce.billid = :arg_billid
  656. AND scid = :scid
  657. And flag = 1 ;
  658. IF sqlca.SQLCode <> 0 THEN
  659. arg_msg = '更新罚款单相关应付帐ID失败'
  660. rslt = 0
  661. GOTO ext
  662. END IF
  663. END IF
  664. flag = 1
  665. ext:
  666. IF rslt = 0 THEN
  667. ROLLBACK;
  668. p_reset()
  669. ELSEIF rslt = 1 And arg_ifcommit THEN
  670. COMMIT;
  671. END IF
  672. Destroy uo_pay
  673. RETURN rslt
  674. end function
  675. public function integer c_auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  676. DateTime null_dt
  677. SetNull(null_dt)
  678. uo_mustpay uo_pay
  679. uo_pay = CREATE uo_mustpay
  680. IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  681. rslt = 0
  682. GOTO ext
  683. END IF
  684. IF flag = 0 THEN
  685. rslt = 0
  686. arg_msg = '单据还未审核,不可以撤审'
  687. GOTO ext
  688. END IF
  689. IF affirmflag = 1 THEN
  690. rslt = 0
  691. arg_msg = '单据财务审核,不可以撤审'
  692. GOTO ext
  693. END IF
  694. UPDATE u_spt_amerce
  695. SET auditrep = '',
  696. auditdate = :null_dt,
  697. flag = 0
  698. WHERE u_spt_amerce.billid = :arg_billid
  699. AND flag = 1
  700. and affirmflag = 0
  701. AND scid = :arg_scid;
  702. IF sqlca.SQLCode <> 0 THEN
  703. rslt = 0
  704. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+sqlca.SQLErrText
  705. GOTO ext
  706. ELSEIF sqlca.SQLNRows = 0 THEN
  707. rslt = 0
  708. arg_msg = "单据正在撤消审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  709. GOTO ext
  710. END IF
  711. IF amerceamt <> 0 THEN
  712. IF uo_pay.del_payrec(scid,1,payid,sptid,arg_msg,FALSE) = 0 THEN
  713. rslt = 0
  714. GOTO ext
  715. END IF
  716. END IF
  717. flag = 0
  718. ext:
  719. IF rslt = 0 THEN
  720. ROLLBACK;
  721. p_reset()
  722. ELSEIF rslt = 1 AND arg_ifcommit THEN
  723. COMMIT;
  724. END IF
  725. DESTROY uo_pay
  726. RETURN rslt
  727. end function
  728. public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg);Int rslt = 1
  729. arg_newdescppart = Trim(arg_newdescppart)
  730. IF it_updatebegin OR it_newbegin THEN
  731. rslt = 0
  732. arg_msg = "编辑状态下不可用"
  733. GOTO ext
  734. END IF
  735. IF arg_newdescppart = '' THEN
  736. rslt = 0
  737. arg_msg = "要添加内容为空,操作取消"
  738. GOTO ext
  739. END IF
  740. rslt = getinfo(arg_scid,arg_billid,arg_msg)
  741. IF rslt = 0 THEN GOTO ext
  742. IF flag = 0 THEN
  743. rslt = 0
  744. arg_msg = "非审核状态下不可用"
  745. GOTO ext
  746. END IF
  747. UPDATE u_spt_amerce
  748. SET amercereason = amercereason+' '+:arg_newdescppart
  749. WHERE u_spt_amerce.billid = :arg_billid
  750. AND scid = :arg_scid;
  751. IF sqlca.SQLCode <> 0 THEN
  752. ROLLBACK ;
  753. rslt = 0
  754. arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+sqlca.SQLErrText
  755. GOTO ext
  756. END IF
  757. COMMIT ;
  758. amercereason = amercereason+' '+arg_newdescppart
  759. ext:
  760. Return (rslt)
  761. end function
  762. public function integer affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  763. IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  764. rslt = 0
  765. GOTO ext
  766. END IF
  767. IF flag = 0 THEN
  768. rslt = 0
  769. arg_msg = '单据还未审核,不可以财务审核'
  770. GOTO ext
  771. END IF
  772. IF affirmflag = 1 THEN
  773. rslt = 0
  774. arg_msg = '单据已财务审核,不可以财务审核'
  775. GOTO ext
  776. END IF
  777. UPDATE u_spt_amerce
  778. SET affirmemp = :publ_operator,
  779. affirmdate = getdate(),
  780. affirmflag = 1
  781. WHERE u_spt_amerce.billid = :arg_billid
  782. AND flag = 1
  783. AND affirmflag = 0
  784. AND scid = :arg_scid;
  785. IF sqlca.SQLCode <> 0 THEN
  786. rslt = 0
  787. arg_msg = "因网络或其它原因导致财务审核单据操作失败"+"~n"+sqlca.SQLErrText
  788. GOTO ext
  789. ELSEIF sqlca.SQLNRows = 0 THEN
  790. rslt = 0
  791. arg_msg = "单据正在财务审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  792. GOTO ext
  793. END IF
  794. affirmflag = 1
  795. ext:
  796. IF rslt = 0 THEN
  797. ROLLBACK;
  798. p_reset()
  799. ELSEIF rslt = 1 AND arg_ifcommit THEN
  800. COMMIT;
  801. END IF
  802. RETURN rslt
  803. end function
  804. public function integer c_affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  805. DateTime null_dt
  806. SetNull(null_dt)
  807. IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  808. rslt = 0
  809. GOTO ext
  810. END IF
  811. IF affirmflag = 0 THEN
  812. rslt = 0
  813. arg_msg = '单据未财务审核,不可以撤审'
  814. GOTO ext
  815. END IF
  816. UPDATE u_spt_amerce
  817. SET affirmemp = '',
  818. affirmdate = :null_dt,
  819. affirmflag = 0
  820. WHERE u_spt_amerce.billid = :arg_billid
  821. AND flag = 1
  822. and affirmflag = 1
  823. AND scid = :arg_scid;
  824. IF sqlca.SQLCode <> 0 THEN
  825. rslt = 0
  826. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+sqlca.SQLErrText
  827. GOTO ext
  828. ELSEIF sqlca.SQLNRows = 0 THEN
  829. rslt = 0
  830. arg_msg = "单据正在撤消审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  831. GOTO ext
  832. END IF
  833. affirmflag = 0
  834. ext:
  835. IF rslt = 0 THEN
  836. ROLLBACK;
  837. p_reset()
  838. ELSEIF rslt = 1 AND arg_ifcommit THEN
  839. COMMIT;
  840. END IF
  841. RETURN rslt
  842. end function
  843. public function integer p_clearmx ();//INT p_clearmx()
  844. //清除明细
  845. it_mxbt=0
  846. RETURN 1
  847. end function
  848. public function integer acceptmx (long arg_printid, long arg_mtrlid, decimal arg_fprice, decimal arg_rebate, decimal arg_qty, string arg_unit, integer arg_admtrlid, string arg_mxdscrp, long arg_taskid, long arg_relprintid, string arg_taskcode, datetime arg_requiredate, datetime arg_accomplishdate, ref string arg_msg);Int rslt = 1
  849. IF arg_qty = 0 Or arg_mtrlid = 0 THEN
  850. GOTO ext
  851. END IF
  852. it_MXBT++
  853. smx[it_MXBT].printid = arg_printid
  854. smx[it_MXBT].fprice = arg_fprice
  855. smx[it_MXBT].rebate = arg_rebate
  856. smx[it_MXBT].Qty = arg_qty
  857. smx[it_MXBT].amt = Round(arg_fprice*arg_rebate*arg_qty,2)
  858. smx[it_MXBT].mxdscrp = arg_mxdscrp
  859. smx[it_MXBT].taskcode = arg_taskcode
  860. smx[it_MXBT].taskid = arg_taskid
  861. smx[it_MXBT].relprintid = arg_relprintid
  862. smx[it_MXBT].MtrlID = arg_mtrlid
  863. smx[it_MXBT].admtrlid = arg_admtrlid
  864. smx[it_MXBT].unit = arg_unit
  865. smx[it_MXBT].accomplishdate = arg_accomplishdate
  866. smx[it_MXBT].requiredate = arg_requiredate
  867. ext:
  868. IF rslt = 0 THEN p_clearmx()
  869. RETURN rslt
  870. end function
  871. on uo_amerce.create
  872. call super::create
  873. TriggerEvent( this, "constructor" )
  874. end on
  875. on uo_amerce.destroy
  876. TriggerEvent( this, "destructor" )
  877. call super::destroy
  878. end on
  879. event constructor;String str_optionvalue,arg_msg
  880. f_get_sys_option_value('241',str_optionvalue,arg_msg)
  881. uo_option_m_mstpay = Long(str_optionvalue)
  882. end event