uo_bmstamt.sru 54 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635
  1. $PBExportHeader$uo_bmstamt.sru
  2. forward
  3. global type uo_bmstamt from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_bmstamt from nonvisualobject
  7. end type
  8. global uo_bmstamt uo_bmstamt
  9. type variables
  10. PUBLIC PROTECTEDWRITE Long Baid //自动增量id
  11. PUBLIC PROTECTEDWRITE String BaCode //罚款单的唯一编号
  12. PUBLIC PROTECTEDWRITE DateTime opdate //建立时间,自动
  13. PUBLIC PROTECTEDWRITE String opemp //建立人
  14. PUBLIC PROTECTEDWRITE DateTime moddate //修改时间,自动
  15. PUBLIC PROTECTEDWRITE String modemp //修改人
  16. PUBLIC PROTECTEDWRITE Int flag = 0 //审核标志
  17. PUBLIC PROTECTEDWRITE DateTime auditingdate //审核时间
  18. PUBLIC PROTECTEDWRITE String auditingrep //审核操作员
  19. PUBLIC PROTECTEDWRITE Int confirmflag = 0 //确认标志
  20. PUBLIC PROTECTEDWRITE DateTime confirmdate //确认时间
  21. PUBLIC PROTECTEDWRITE String confirmemp //确认人
  22. PUBLIC PROTECTEDWRITE Int secflag = 0 //审核标志
  23. PUBLIC PROTECTEDWRITE DateTime secdate //审核时间
  24. PUBLIC PROTECTEDWRITE String secemp //审核操作员
  25. Long banktypeid
  26. Long scid
  27. Long cusid
  28. Long accountid
  29. DateTime BaDate
  30. Decimal Bmstamt, Bmstamt_mxsum
  31. decimal Zqamt, Zqamt_mxsum
  32. String dscrp
  33. Int billtype //0-收客户款; 1-付供应商款; 2-退客户款; 3-供应商退款
  34. Long itemid
  35. Long relid //记录主表的应收帐相关takeid
  36. Long reldateint
  37. String BaRep
  38. Long moneyid
  39. Decimal mrate
  40. DateTime viewdate
  41. string relcode
  42. string fpcode
  43. Int cwauditingflag = 0 //总账审核标记
  44. DateTime cwauditingdate //总账审核时间
  45. String cwauditingrep //总账审核操作员
  46. PRIVATE:
  47. Boolean it_newbegin = FALSE //新建标志
  48. Boolean it_updatebegin = FALSE//修改标志
  49. S_BmstamtMX BmstamtMX[]
  50. Long it_MXBT = 0
  51. end variables
  52. forward prototypes
  53. public function integer p_reset ()
  54. public function integer save (ref string arg_msg, boolean arg_ifcommit)
  55. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg)
  56. public function integer newbegin (long arg_scid, ref string arg_msg)
  57. public function integer del (long arg_scid, long arg_billid, ref string arg_msg)
  58. public function integer auditing (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  59. public function integer confirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  60. public function integer cconfirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  61. public function integer add_dscrp (long arg_Baid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  62. public function integer secauditing (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  63. public function integer c_secauditing (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  64. public function integer uof_update_cust (long arg_billid, long arg_cusid, ref string arg_msg, boolean arg_ifcommit)
  65. public function integer acceptmx (s_bmstamtmx s_mx, ref string arg_msg)
  66. public function integer p_clearmx ()
  67. public function integer uof_acceptmx_chk (s_bmstamtmx s_mx, ref string arg_msg)
  68. public function integer auditing_cancel (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  69. public function integer uof_auditing_end (ref string arg_msg)
  70. public function integer uof_auditing_cancel_end (ref string arg_msg)
  71. public function integer uof_secauditing_end (ref string arg_msg)
  72. public function integer uof_secauditing_cancel_end (ref string arg_msg)
  73. public function integer audit_subject (long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg)
  74. public function integer c_audit_subject (long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg)
  75. public function long getinfo (long arg_billid, ref string arg_msg)
  76. public function integer p_getinfo (long arg_billid, ref string arg_msg)
  77. end prototypes
  78. public function integer p_reset ();//INT p_RESET()
  79. //清除对象及其明细
  80. banktypeid = 0
  81. Baid = 0
  82. BaCode = ''
  83. opemp = ''
  84. auditingrep = ''
  85. flag = 0
  86. cusid = 0
  87. Bmstamt = 0
  88. Zqamt = 0
  89. Bmstamt_mxsum = 0
  90. Zqamt_mxsum = 0
  91. dscrp = ''
  92. itemid = 0
  93. billtype = 0
  94. BaRep = ''
  95. moneyid = 0
  96. accountid = 0
  97. scid = 0
  98. p_clearmx()
  99. it_newbegin = FALSE
  100. it_updatebegin = FALSE
  101. RETURN 1
  102. end function
  103. public function integer save (ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0,i
  104. DateTime server_dt
  105. Long ls_newid
  106. String ls_sccode
  107. Long ll_moneyid_account
  108. IF IsNull(cusid) THEN cusid = 0
  109. IF IsNull(accountid) THEN accountid = 0
  110. IF IsNull(dscrp) THEN dscrp = ''
  111. IF IsNull(Bmstamt) THEN Bmstamt = 0
  112. IF IsNull(Zqamt) THEN Zqamt = 0
  113. IF IsNull(scid) THEN scid = 0
  114. IF IsNull(billtype) THEN billtype = 0
  115. IF IsNull(itemid) THEN itemid = 0
  116. IF IsNull(BaRep) THEN BaRep = ''
  117. IF IsNull(moneyid) THEN moneyid = 0
  118. IF IsNull(mrate) THEN mrate = 0
  119. IF IsNull(relcode) THEN relcode = ''
  120. IF IsNull(fpcode) THEN fpcode = ''
  121. IF Not ( it_updatebegin Or it_newbegin) THEN
  122. rslt = 0
  123. arG_MSG = "非编辑状态下不可用"
  124. GOTO ext
  125. END IF
  126. IF accountid = 0 THEN
  127. arG_MSG = '请选择帐号'
  128. rslt = 0
  129. GOTO ext
  130. END IF
  131. SELECT moneyid INTO :ll_moneyid_account
  132. FROM u_accounts
  133. Where accountsid = :accountid;
  134. IF sqlca.SQLCode <> 0 THEN
  135. arG_MSG = '查询帐号币种失败,'+sqlca.SQLErrText
  136. rslt = 0
  137. GOTO ext
  138. END IF
  139. IF IsNull(ll_moneyid_account) THEN ll_moneyid_account = 0
  140. IF ll_moneyid_account = 0 THEN
  141. arG_MSG = '帐号币种未指定,请检查'
  142. rslt = 0
  143. GOTO ext
  144. END IF
  145. //检查本次收金额 >= 单据明细本次应收; 折扣金额 = 单据明细本次折扣金额
  146. IF Bmstamt_mxsum > Bmstamt THEN
  147. arG_MSG = '单据金额少于明细本次应收金额总和'
  148. rslt = 0
  149. GOTO ext
  150. END IF
  151. IF Zqamt_mxsum <> Zqamt THEN
  152. arG_MSG = '单据折扣金额不等于明细本次折扣金额总和'
  153. rslt = 0
  154. GOTO ext
  155. END IF
  156. IF billtype = 0 THEN
  157. IF sys_option_msttake_takeamt_secaudit = 0 THEN //
  158. IF cusid = 0 THEN
  159. arG_MSG = '请先选择客户'
  160. rslt = 0
  161. GOTO ext
  162. END IF
  163. SELECT count(*) INTO :cnt
  164. FROM u_cust
  165. Where cusid = :cusid;
  166. IF sqlca.SQLCode <> 0 THEN
  167. arG_MSG = '查询客户资料失败'
  168. rslt = 0
  169. GOTO ext
  170. END IF
  171. IF cnt > 1 THEN
  172. arG_MSG = '客户资料重复'
  173. rslt = 0
  174. GOTO ext
  175. END IF
  176. END IF
  177. ELSE
  178. IF cusid = 0 THEN
  179. arG_MSG = '请先选择供应商'
  180. rslt = 0
  181. GOTO ext
  182. END IF
  183. SELECT count(*) INTO :cnt
  184. FROM u_spt
  185. Where sptid = :cusid;
  186. IF sqlca.SQLCode <> 0 THEN
  187. arG_MSG = '查询供应商资料失败'
  188. rslt = 0
  189. GOTO ext
  190. END IF
  191. IF cnt > 1 THEN
  192. arG_MSG = '供应商资料重复'
  193. rslt = 0
  194. GOTO ext
  195. END IF
  196. END IF
  197. IF moneyid = 0 THEN
  198. arG_MSG = '请选择币种'
  199. rslt = 0
  200. GOTO ext
  201. END IF
  202. IF mrate <= 0 THEN
  203. arG_MSG = '请输入币种汇率'
  204. rslt = 0
  205. GOTO ext
  206. END IF
  207. IF moneyid <> ll_moneyid_account And mrate = 1 THEN
  208. arG_MSG = '收款币种与帐号币种不相同,汇率不能设为1'
  209. rslt = 0
  210. GOTO ext
  211. END IF
  212. IF moneyid = ll_moneyid_account And mrate <> 1 THEN
  213. arG_MSG = '收款币种与帐号币种相同,汇率要设为1'
  214. rslt = 0
  215. GOTO ext
  216. END IF
  217. IF f_check_inoutdate(0,BaDate,False,arg_msg) = 0 THEN
  218. rslt = 0
  219. arg_msg = "该单据超出指定日期范围(单据限制录入天数)"
  220. GOTO ext
  221. END IF
  222. cnt = 0
  223. SELECT count(*) INTO :cnt
  224. FROM u_itemdef
  225. Where itemid = :itemid;
  226. IF sqlca.SQLCode <> 0 THEN
  227. arG_MSG = '查询项目资料失败,'+sqlca.SQLErrText
  228. rslt = 0
  229. GOTO ext
  230. END IF
  231. IF cnt <> 1 THEN
  232. arG_MSG = '项目资料不存在或重复'
  233. rslt = 0
  234. GOTO ext
  235. END IF
  236. //20100426
  237. Long ll_itemflag
  238. SELECT itemflag
  239. INTO :ll_itemflag
  240. FROM u_itemdef
  241. Where itemid = :itemid;
  242. IF sqlca.SQLCode <> 0 THEN
  243. arG_MSG = '查询项目资料核算方向失败,'+sqlca.SQLErrText
  244. rslt = 0
  245. GOTO ext
  246. END IF
  247. IF billtype = 0 And ll_itemflag = -1 THEN
  248. arG_MSG = '客户收款结算单,不能选择核算支出方向的收支项目'
  249. rslt = 0
  250. GOTO ext
  251. END IF
  252. IF billtype = 1 And ll_itemflag = 1 THEN
  253. arG_MSG = '供应商付款结算单,不能选择核算收入方向的收支项目'
  254. rslt = 0
  255. GOTO ext
  256. END IF
  257. IF banktypeid = 0 THEN
  258. arG_MSG = '没有结算方式'
  259. rslt = 0
  260. GOTO ext
  261. END IF
  262. IF Bmstamt = 0 THEN
  263. arG_MSG = '请输入正确的金额'
  264. rslt = 0
  265. GOTO ext
  266. END IF
  267. SELECT Top 1 getdate() Into :server_dt From u_user;
  268. IF sqlca.SQLCode <> 0 THEN
  269. rslt = 0
  270. arG_MSG = "查询操作失败,日期 "
  271. GOTO ext
  272. END IF
  273. IF Year(Date(BaDate)) < 2000 Or IsNull(BaDate) THEN
  274. rslt = 0
  275. arG_MSG = "时间不合理"
  276. GOTO ext
  277. END IF
  278. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  279. IF it_newbegin THEN //新建
  280. ls_newid = f_sys_scidentity(0,"u_Bmstamt","Baid",arG_MSG,True,sqlca)
  281. IF ls_newid <= 0 THEN
  282. rslt = 0
  283. GOTO ext
  284. END IF
  285. //取分部代号
  286. IF f_get_sccode(0,sqlca,ls_sccode,arG_MSG) = 0 THEN
  287. rslt = 0
  288. GOTO ext
  289. END IF
  290. IF billtype = 0 THEN //客户收款结算单
  291. BaCode = getid(0,ls_sccode + "CB",Date(server_dt),True,sqlca) //取得新单据编号
  292. ELSE //供应商付款结算单
  293. BaCode = getid(0,ls_sccode + "SB",Date(server_dt),True,sqlca) //取得新单据编号
  294. END IF
  295. IF BaCode = "err" THEN
  296. BaCode = ''
  297. rslt = 0
  298. arG_MSG = "无法获取单据编号"
  299. GOTO ext
  300. END IF
  301. INSERT INTO u_Bmstamt (
  302. scid,
  303. Baid,
  304. BaCode,
  305. BaDate,
  306. cusid,
  307. Bmstamt,
  308. dscrp,
  309. opdate,
  310. opemp,
  311. accountid,
  312. banktypeid,
  313. billtype,
  314. itemid,
  315. BaRep,
  316. moneyid,
  317. mrate,
  318. viewdate,
  319. relcode,
  320. fpcode,
  321. Zqamt)
  322. VALUES (
  323. :scid,
  324. :ls_newid,
  325. :BaCode,
  326. :BaDate,
  327. :cusid,
  328. :Bmstamt,
  329. :dscrp,
  330. getdate(),
  331. :publ_operator,
  332. :accountid,
  333. :banktypeid,
  334. :billtype,
  335. :itemid,
  336. :BaRep,
  337. :moneyid,
  338. :mrate,
  339. :viewdate,
  340. :relcode,
  341. :fpcode,
  342. :Zqamt);
  343. IF sqlca.SQLCode <> 0 THEN
  344. rslt = 0
  345. arG_MSG = "插入单据操作失败"+"~n"+sqlca.SQLErrText
  346. GOTO ext
  347. END IF
  348. Baid = ls_newid
  349. ELSE //////////////////////////////////////////////// //更新
  350. UPDATE u_Bmstamt
  351. SET BaDate = :BaDate,
  352. cusid = :cusid,
  353. Bmstamt = :Bmstamt,
  354. Zqamt = :Zqamt,
  355. dscrp = :dscrp,
  356. opdate = getdate(),
  357. opemp = :publ_operator,
  358. BaCode = :BaCode,
  359. scid = :scid,
  360. accountid = :accountid,
  361. banktypeid = :banktypeid,
  362. itemid = :itemid,
  363. BaRep = :BaRep,
  364. moneyid = :moneyid,
  365. mrate = :mrate,
  366. viewdate = :viewdate,
  367. relcode = :relcode,
  368. fpcode = :fpcode,
  369. modemp = :publ_operator,
  370. moddate = getdate()
  371. Where Baid = :Baid;
  372. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  373. rslt = 0
  374. arG_MSG = "更新单据操作失败"+"~n"+sqlca.SQLErrText
  375. GOTO ext
  376. END IF
  377. //删除原有明细
  378. DELETE FROM u_Bmstamtmx
  379. Where u_Bmstamtmx.Baid = :Baid Using sqlca;
  380. IF sqlca.SQLCode <> 0 THEN
  381. rslt = 0
  382. arG_MSG = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  383. GOTO ext
  384. END IF
  385. END IF
  386. FOR i = 1 To it_mxbt
  387. INSERT INTO u_Bmstamtmx
  388. (Baid,
  389. printid,
  390. scid,
  391. takeid,
  392. takedate,
  393. msttakeamt,
  394. takeamt,
  395. Zqamt,
  396. Ttakeamt,
  397. TZqamt,
  398. billid,
  399. billcode,
  400. relid,
  401. relcode,
  402. relprintid,
  403. mxdscrp)
  404. VALUES (:Baid,
  405. :BmstamtMX[i].printid,
  406. :scid,
  407. :BmstamtMX[i].takeid,
  408. :BmstamtMX[i].takedate,
  409. :BmstamtMX[i].msttakeamt,
  410. :BmstamtMX[i].takeamt,
  411. :BmstamtMX[i].Zqamt,
  412. :BmstamtMX[i].Ttakeamt,
  413. :BmstamtMX[i].TZqamt,
  414. :BmstamtMX[i].billid,
  415. :BmstamtMX[i].billcode,
  416. :BmstamtMX[i].relid,
  417. :BmstamtMX[i].relcode,
  418. :BmstamtMX[i].relprintid,
  419. :BmstamtMX[i].mxdscrp);
  420. IF sqlca.SQLCode <> 0 THEN
  421. IF it_newbegin THEN Baid = 0
  422. rslt = 0
  423. if pos(sqlca.sqlerrtext, 'IX_u_Bmstamtmx') > 0 then
  424. arg_msg = "插入明细操作失败,存在重复的凭证"+"~n"+sqlca.SQLErrText
  425. else
  426. arG_MSG = "插入明细操作失败"+"~n"+sqlca.SQLErrText
  427. end if
  428. GOTO ext
  429. END IF
  430. NEXT
  431. it_newbegin = False
  432. it_updatebegin = False
  433. ext:
  434. IF rslt = 0 THEN
  435. p_clearmx()
  436. ROLLBACK;
  437. ELSEIF rslt = 1 And arg_ifcommit THEN
  438. COMMIT;
  439. END IF
  440. Return(rslt)
  441. end function
  442. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);//====================================================================
  443. // Function: updatebegin(arg_billid,arg_msg)
  444. //--------------------------------------------------------------------
  445. // Description:
  446. //--------------------------------------------------------------------
  447. // Arguments:
  448. // value long arg_billid
  449. // reference string arg_msg
  450. //--------------------------------------------------------------------
  451. // Returns: integer
  452. //--------------------------------------------------------------------
  453. // Author: yyx Date: 2003.11.21
  454. //--------------------------------------------------------------------
  455. // Modify History:
  456. //
  457. //====================================================================
  458. Int rslt = 1
  459. IF arg_billid <= 0 THEN
  460. Baid = 0
  461. arg_msg = '错误的单据ID'
  462. GOTO ext
  463. END IF
  464. SELECT
  465. u_Bmstamt.Baid,
  466. u_Bmstamt.BaCode,
  467. u_Bmstamt.cusid,
  468. u_Bmstamt.Bmstamt,
  469. u_Bmstamt.dscrp ,
  470. u_Bmstamt.BaDate,
  471. u_Bmstamt.scid,
  472. u_Bmstamt.accountid,
  473. u_Bmstamt.flag
  474. Into
  475. :Baid,
  476. :BaCode,
  477. :cusid,
  478. :Bmstamt,
  479. :dscrp,
  480. :BaDate,
  481. :scid,
  482. :accountid,
  483. :flag
  484. From u_Bmstamt
  485. Where Baid = :arg_billid;
  486. IF sqlca.SQLCode <> 0 THEN
  487. rslt = 0
  488. arg_msg = '查询数据操作失败,单据'+sqlca.SQLErrText
  489. GOTO ext
  490. END IF
  491. IF flag = 1 THEN
  492. rslt = 0
  493. arg_msg = '单据已经审核,不可以修改'
  494. GOTO ext
  495. END IF
  496. Baid = arg_billid
  497. scid = arg_scid
  498. it_newbegin = False
  499. it_updatebegin = True
  500. p_clearmx() //清除明细
  501. ext:
  502. IF rslt = 0 THEN p_reset()
  503. RETURN rslt
  504. end function
  505. public function integer newbegin (long arg_scid, ref string arg_msg);Int rslt = 1
  506. IF arg_scid < 0 THEN
  507. arg_msg = '请选择分部'
  508. rslt = 0
  509. GOTO ext
  510. END IF
  511. p_reset()
  512. scid = arg_scid
  513. it_newbegin = True
  514. it_updatebegin = False
  515. ext:
  516. IF rslt = 0 THEN p_reset()
  517. RETURN rslt
  518. end function
  519. public function integer del (long arg_scid, long arg_billid, ref string arg_msg);//====================================================================
  520. // Function: del(arg_billid,arg_msg)
  521. //--------------------------------------------------------------------
  522. // Description:
  523. //--------------------------------------------------------------------
  524. // Arguments:
  525. // value long arg_billid
  526. // reference string arg_msg
  527. //--------------------------------------------------------------------
  528. // Returns: integer
  529. //--------------------------------------------------------------------
  530. // Author: yyx Date: 2003.11.21
  531. //--------------------------------------------------------------------
  532. // Modify History:
  533. //
  534. //====================================================================
  535. Int rslt = 1
  536. IF arg_billid <= 0 THEN
  537. rslt = 0
  538. arg_msg = "没有删除对象,操作取消"
  539. GOTO ext
  540. END IF
  541. IF it_newbegin Or it_updatebegin THEN
  542. rslt = 0
  543. arg_msg = "编辑状态下不可以执行,操作取消"
  544. GOTO ext
  545. END IF
  546. SELECT u_Bmstamt.flag, confirmflag
  547. INTO :flag, :confirmflag
  548. FROM u_Bmstamt
  549. Where u_Bmstamt.Baid = :arg_billid;
  550. IF sqlca.SQLCode <> 0 THEN
  551. rslt = 0
  552. arg_msg = '查询收款单操作失败'
  553. GOTO ext
  554. END IF
  555. IF confirmflag = 1 THEN
  556. rslt = 0
  557. arg_msg = "单据已经确认,不可以删除"
  558. GOTO ext
  559. END IF
  560. IF flag = 1 THEN
  561. rslt = 0
  562. arg_msg = "单据已经审核,不可以删除"
  563. GOTO ext
  564. END IF
  565. DELETE FROM u_Bmstamt
  566. Where u_Bmstamt.Baid = :arg_billid ;
  567. IF sqlca.SQLCode <> 0 THEN
  568. rslt = 0
  569. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  570. GOTO ext
  571. END IF
  572. DELETE FROM u_Bmstamtmx
  573. Where u_Bmstamtmx.Baid = :arg_billid ;
  574. IF sqlca.SQLCode <> 0 THEN
  575. rslt = 0
  576. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  577. GOTO ext
  578. END IF
  579. it_newbegin = False
  580. it_updatebegin = False
  581. ext:
  582. IF rslt = 0 THEN
  583. ROLLBACK;
  584. p_reset()
  585. ELSE
  586. COMMIT;
  587. END IF
  588. Return (rslt)
  589. end function
  590. public function integer auditing (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);
  591. Long cnt = 0
  592. Long i
  593. Int rslt = 1
  594. Long ref_rapid
  595. Long ref_dateint
  596. String ls_name
  597. String ls_dscrp
  598. IF getinfo(arg_billid,arg_msg) = 0 THEN
  599. rslt = 0
  600. GOTO ext
  601. END IF
  602. IF flag = 1 THEN
  603. rslt = 0
  604. arg_msg = '单据已经审核,不可以再审核'
  605. GOTO ext
  606. END IF
  607. IF billtype = 0 And sys_option_msttake_takeamt_secaudit = 0 THEN
  608. UPDATE u_Bmstamt
  609. SET auditemp = :publ_operator,
  610. auditdate = getdate(),
  611. flag = 1,
  612. secemp = :publ_operator,
  613. secdate = getdate(),
  614. secflag = 1
  615. WHERE u_Bmstamt.Baid = :arg_billid
  616. And flag = 0;
  617. ELSE
  618. UPDATE u_Bmstamt
  619. SET auditemp = :publ_operator,
  620. auditdate = getdate(),
  621. flag = 1
  622. WHERE u_Bmstamt.Baid = :arg_billid
  623. And flag = 0;
  624. END IF
  625. IF sqlca.SQLCode <> 0 THEN
  626. rslt = 0
  627. arg_msg = "审核单据操作失败,"+"~n"+sqlca.SQLErrText
  628. GOTO ext
  629. ELSEIF sqlca.SQLNRows = 0 THEN
  630. rslt = 0
  631. arg_msg = "单据正在审核,请稍后查询,"+"~n"+sqlca.SQLErrText
  632. GOTO ext
  633. END IF
  634. IF uof_auditing_end(arg_msg) = 0 THEN
  635. rslt = 0
  636. GOTO ext
  637. END IF
  638. flag = 1
  639. ext:
  640. IF rslt = 0 THEN
  641. ROLLBACK;
  642. ELSEIF rslt = 1 And arg_ifcommit THEN
  643. COMMIT;
  644. END IF
  645. RETURN rslt
  646. end function
  647. public function integer confirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Long cnt = 0
  648. Int rslt = 1
  649. IF getinfo(arg_billid,arg_msg) = 0 THEN
  650. rslt = 0
  651. GOTO ext
  652. END IF
  653. //IF flag = 0 THEN
  654. // rslt = 0
  655. // arg_msg = '单据未审核,不可以确认'
  656. // GOTO ext
  657. //END IF
  658. IF confirmflag = 1 THEN
  659. rslt = 0
  660. arg_msg = '单据已确认,不可以确认'
  661. GOTO ext
  662. END IF
  663. UPDATE u_Bmstamt
  664. SET confirmemp = :publ_operator,
  665. confirmdate = getdate(),
  666. confirmflag = 1
  667. WHERE u_Bmstamt.Baid = :arg_billid
  668. AND confirmflag = 0;
  669. IF sqlca.SQLCode <> 0 THEN
  670. rslt = 0
  671. arg_msg = "确认单据操作失败,"+"~n"+sqlca.SQLErrText
  672. GOTO ext
  673. ELSEIF sqlca.SQLNRows = 0 THEN
  674. rslt = 0
  675. arg_msg = "单据正在确认,请稍后查询,"+"~n"+sqlca.SQLErrText
  676. GOTO ext
  677. END IF
  678. confirmflag = 1
  679. ext:
  680. IF rslt = 0 THEN
  681. ROLLBACK;
  682. ELSEIF rslt = 1 AND arg_ifcommit THEN
  683. COMMIT;
  684. END IF
  685. RETURN rslt
  686. end function
  687. public function integer cconfirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Long cnt = 0
  688. Int rslt = 1
  689. datetime null_dt
  690. setnull(null_dt)
  691. IF getinfo(arg_billid,arg_msg) = 0 THEN
  692. rslt = 0
  693. GOTO ext
  694. END IF
  695. IF confirmflag = 0 THEN
  696. rslt = 0
  697. arg_msg = '单据未确认,不可以反确认'
  698. GOTO ext
  699. END IF
  700. UPDATE u_Bmstamt
  701. SET confirmemp = '',
  702. confirmdate = :null_dt,
  703. confirmflag = 0
  704. WHERE u_Bmstamt.Baid = :arg_billid
  705. AND confirmflag = 1;
  706. IF sqlca.SQLCode <> 0 THEN
  707. rslt = 0
  708. arg_msg = "反确认单据操作失败,"+"~n"+sqlca.SQLErrText
  709. GOTO ext
  710. ELSEIF sqlca.SQLNRows = 0 THEN
  711. rslt = 0
  712. arg_msg = "单据正在反确认,请稍后查询,"+"~n"+sqlca.SQLErrText
  713. GOTO ext
  714. END IF
  715. confirmflag = 0
  716. ext:
  717. IF rslt = 0 THEN
  718. ROLLBACK;
  719. ELSEIF rslt = 1 AND arg_ifcommit THEN
  720. COMMIT;
  721. END IF
  722. RETURN rslt
  723. end function
  724. public function integer add_dscrp (long arg_Baid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart)
  725. //0 fail 1 SUCCESS
  726. Int rslt = 1
  727. arg_newdescppart = Trim(arg_newdescppart)
  728. IF it_updatebegin OR it_newbegin THEN
  729. rslt = 0
  730. arG_MSG = "编辑状态下不可用"
  731. GOTO ext
  732. END IF
  733. IF getinfo(arg_Baid,arG_MSG) = 0 THEN
  734. rslt = 0
  735. GOTO ext
  736. END IF
  737. IF flag = 0 THEN
  738. rslt = 0
  739. arG_MSG = "非审核状态下不可用"
  740. GOTO ext
  741. END IF
  742. UPDATE u_Bmstamt
  743. SET DSCRP = ltrim(rtrim(DSCRP))+' '+:arg_newdescppart
  744. Where u_Bmstamt.Baid = :arg_Baid;
  745. IF SQLCA.SQLCode <> 0 THEN
  746. rslt = 0
  747. arG_MSG = "添加单据备注操作失败"+"~n"+SQLCA.SQLErrText
  748. GOTO ext
  749. END IF
  750. DSCRP = DSCRP+' '+arg_newdescppart
  751. ext:
  752. IF rslt = 0 THEN
  753. ROLLBACK;
  754. ELSEIF rslt = 1 AND arg_ifcommit THEN
  755. COMMIT;
  756. END IF
  757. Return (rslt)
  758. end function
  759. public function integer secauditing (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);
  760. Int rslt = 1
  761. IF getinfo(arg_billid,arg_msg) = 0 THEN
  762. rslt = 0
  763. GOTO ext
  764. END IF
  765. IF flag = 0 THEN
  766. rslt = 0
  767. arg_msg = '单据未初审,不可以终审'
  768. GOTO ext
  769. END IF
  770. IF secflag = 1 THEN
  771. rslt = 0
  772. arg_msg = '单据已经审核,不可以再审核'
  773. GOTO ext
  774. END IF
  775. UPDATE u_Bmstamt
  776. SET secemp = :publ_operator,
  777. secdate = getdate(),
  778. secflag = 1
  779. WHERE u_Bmstamt.Baid = :arg_billid
  780. AND flag = 1
  781. AND secflag = 0 ;
  782. IF sqlca.SQLCode <> 0 THEN
  783. rslt = 0
  784. arg_msg = "最终审核单据操作失败,"+"~n"+sqlca.SQLErrText
  785. GOTO ext
  786. ELSEIF sqlca.SQLNRows = 0 THEN
  787. rslt = 0
  788. arg_msg = "单据正在审核,请稍后查询,"+"~n"+sqlca.SQLErrText
  789. GOTO ext
  790. END IF
  791. IF uof_secauditing_end(arg_msg) = 0 THEN
  792. rslt = 0
  793. GOTO ext
  794. END IF
  795. flag = 1
  796. secflag = 1
  797. ext:
  798. IF rslt = 0 THEN
  799. ROLLBACK;
  800. ELSEIF rslt = 1 AND arg_ifcommit THEN
  801. COMMIT;
  802. END IF
  803. RETURN rslt
  804. end function
  805. public function integer c_secauditing (long arg_billid, ref string arg_msg, boolean arg_ifcommit);
  806. Int rslt = 1
  807. DateTime null_dt
  808. SetNull(null_dt)
  809. IF getinfo(arg_billid,arg_msg) = 0 THEN
  810. rslt = 0
  811. GOTO ext
  812. END IF
  813. IF secflag = 0 THEN
  814. rslt = 0
  815. arg_msg = '单据未审核,不可以再撤审'
  816. GOTO ext
  817. END IF
  818. UPDATE u_Bmstamt
  819. SET secemp = '',
  820. secdate = :null_dt,
  821. secflag = 0
  822. WHERE u_Bmstamt.Baid = :arg_billid
  823. And secflag = 1 And flag = 1;
  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. IF uof_secauditing_cancel_end(arg_msg) = 0 THEN
  834. rslt = 0
  835. GOTO ext
  836. END IF
  837. flag = 1
  838. secflag = 0
  839. ext:
  840. IF rslt = 0 THEN
  841. ROLLBACK;
  842. ELSEIF rslt = 1 And arg_ifcommit THEN
  843. COMMIT;
  844. END IF
  845. //DESTROY uo_take
  846. RETURN rslt
  847. end function
  848. public function integer uof_update_cust (long arg_billid, long arg_cusid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  849. IF getinfo(arg_billid,arg_msg) = 0 THEN
  850. rslt = 0
  851. GOTO ext
  852. END IF
  853. IF flag = 0 THEN
  854. rslt = 0
  855. arg_msg = '单据未初审,不可以操作'
  856. GOTO ext
  857. END IF
  858. IF secflag = 1 THEN
  859. rslt = 0
  860. arg_msg = '单据已终审,不可以再操作'
  861. GOTO ext
  862. END IF
  863. IF billtype <> 0 THEN
  864. arg_msg = '不是客户收款结算单,不能操作'
  865. rslt = 0
  866. GOTO ext
  867. END IF
  868. UPDATE u_Bmstamt
  869. SET cusid = :arg_cusid
  870. WHERE u_Bmstamt.Baid = :arg_billid
  871. AND flag = 1
  872. AND secflag = 0;
  873. IF sqlca.SQLCode <> 0 THEN
  874. rslt = 0
  875. arg_msg = "单据客户资料操作失败,"+"~n"+sqlca.SQLErrText
  876. GOTO ext
  877. ELSEIF sqlca.SQLNRows = 0 THEN
  878. rslt = 0
  879. arg_msg = "单据正在更新单据客户资料,请稍后查询,"+"~n"+sqlca.SQLErrText
  880. GOTO ext
  881. END IF
  882. cusid = arg_cusid
  883. ext:
  884. IF rslt = 0 THEN
  885. ROLLBACK;
  886. ELSEIF rslt = 1 AND arg_ifcommit THEN
  887. COMMIT;
  888. END IF
  889. RETURN rslt
  890. end function
  891. public function integer acceptmx (s_bmstamtmx s_mx, ref string arg_msg);
  892. Long rslt = 1
  893. DateTime ldt_takedate
  894. String ls_billcode, ls_relcode
  895. IF it_newbegin = False And it_updatebegin = False THEN
  896. rslt = 0
  897. arg_msg = "非编辑状态不可以使用,操作取消"
  898. GOTO ext
  899. END IF
  900. //清除空值
  901. IF IsNull(s_mx.printid) THEN s_mx.printid = 0
  902. IF IsNull(s_mx.takeid) THEN s_mx.takeid = 0
  903. IF IsNull(s_mx.billcode) THEN s_mx.billcode = ''
  904. IF IsNull(s_mx.relcode) THEN s_mx.relcode = ''
  905. IF IsNull(s_mx.msttakeamt) THEN s_mx.msttakeamt = 0
  906. IF IsNull(s_mx.takeamt) THEN s_mx.takeamt = 0
  907. IF IsNull(s_mx.zqamt) THEN s_mx.zqamt = 0
  908. IF IsNull(s_mx.ttakeamt) THEN s_mx.ttakeamt = 0
  909. IF IsNull(s_mx.tzqamt) THEN s_mx.tzqamt = 0
  910. IF IsNull(s_mx.mxdscrp) THEN s_mx.mxdscrp = ''
  911. IF IsNull(s_mx.relid) THEN s_mx.relid = 0
  912. IF IsNull(s_mx.relprintid) THEN s_mx.relprintid = 0
  913. IF s_mx.takeid = 0 Or (s_mx.ttakeamt = 0 And s_mx.tzqamt = 0) THEN
  914. rslt = 1
  915. GOTO ext
  916. END IF
  917. IF billtype = 0 THEN
  918. IF s_mx.ttakeamt + s_mx.tzqamt > s_mx.msttakeamt - s_mx.takeamt THEN
  919. arg_msg = "行:"+String(s_mx.printid)+",本次收款金额+本次折扣金额>未收金额"
  920. rslt = 0
  921. GOTO ext
  922. END IF
  923. SELECT takedate, billcode, relcode
  924. INTO :ldt_takedate, :ls_billcode, :ls_relcode
  925. FROM U_Bmsttake
  926. Where takeid = :s_mx.takeid;
  927. IF sqlca.SQLCode <> 0 THEN
  928. arg_msg = "查询明细对应的应收帐信息失败,"+sqlca.SQLErrText
  929. rslt = 0
  930. GOTO ext
  931. END IF
  932. ELSE
  933. IF Abs(s_mx.ttakeamt + s_mx.tzqamt) > Abs(s_mx.msttakeamt - s_mx.takeamt) THEN
  934. arg_msg = "行:"+String(s_mx.printid)+",本次付款金额+本次折扣金额>未付金额"
  935. rslt = 0
  936. GOTO ext
  937. END IF
  938. SELECT paydate, billcode, relcode
  939. INTO :ldt_takedate, :ls_billcode, :ls_relcode
  940. FROM U_Bmstpay
  941. Where payid = :s_mx.takeid;
  942. IF sqlca.SQLCode <> 0 THEN
  943. arg_msg = "查询明细对应的应付帐信息失败,"+sqlca.SQLErrText
  944. rslt = 0
  945. GOTO ext
  946. END IF
  947. //ls_relcode = ""
  948. END IF
  949. IF uof_acceptmx_chk(s_mx, arg_msg) = 0 THEN
  950. rslt = 0
  951. GOTO ext
  952. END IF
  953. //写入内容
  954. it_mxbt++
  955. BmstamtMX[it_mxbt].printid = it_mxbt
  956. BmstamtMX[it_mxbt].takeid = s_mx.takeid
  957. BmstamtMX[it_mxbt].billcode = ls_billcode
  958. BmstamtMX[it_mxbt].relcode = ls_relcode
  959. BmstamtMX[it_mxbt].takedate = ldt_takedate
  960. BmstamtMX[it_mxbt].msttakeamt = s_mx.msttakeamt
  961. BmstamtMX[it_mxbt].takeamt = s_mx.takeamt
  962. BmstamtMX[it_mxbt].zqamt = s_mx.zqamt
  963. BmstamtMX[it_mxbt].ttakeamt = s_mx.ttakeamt
  964. BmstamtMX[it_mxbt].tzqamt = s_mx.tzqamt
  965. BmstamtMX[it_mxbt].relid = s_mx.relid
  966. BmstamtMX[it_mxbt].relprintid = s_mx.relprintid
  967. BmstamtMX[it_mxbt].mxdscrp = s_mx.mxdscrp
  968. Bmstamt_mxsum += s_mx.ttakeamt
  969. Zqamt_mxsum += s_mx.tzqamt
  970. ext:
  971. IF rslt = 0 THEN
  972. p_clearmx()
  973. END IF
  974. Return(rslt)
  975. end function
  976. public function integer p_clearmx ();//int p_clearmx()
  977. //清除明细
  978. it_mxbt=0
  979. Bmstamt_mxsum = 0
  980. Zqamt_mxsum = 0
  981. return 1
  982. end function
  983. public function integer uof_acceptmx_chk (s_bmstamtmx s_mx, ref string arg_msg);Int rslt = 1
  984. GOTO ext
  985. ext:
  986. RETURN rslt
  987. end function
  988. public function integer auditing_cancel (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long cnt = 0
  989. Long i
  990. Int rslt = 1
  991. Long ref_rapid
  992. DateTime null_dt
  993. SetNull(null_dt)
  994. IF getinfo(arg_billid,arg_msg) = 0 THEN
  995. rslt = 0
  996. GOTO ext
  997. END IF
  998. IF flag = 0 THEN
  999. rslt = 0
  1000. arg_msg = '单据未审核,不可以再撤审'
  1001. GOTO ext
  1002. END IF
  1003. IF billtype = 0 AND sys_option_msttake_takeamt_secaudit = 0 THEN
  1004. UPDATE u_Bmstamt
  1005. SET auditemp = '',
  1006. auditdate = :null_dt,
  1007. flag = 0,
  1008. secemp = '',
  1009. secdate = :null_dt,
  1010. secflag = 0
  1011. WHERE u_Bmstamt.Baid = :arg_billid
  1012. AND flag = 1;
  1013. ELSE
  1014. UPDATE u_Bmstamt
  1015. SET auditemp = '',
  1016. auditdate = :null_dt,
  1017. flag = 0
  1018. WHERE Baid = :arg_billid
  1019. AND flag = 1
  1020. And secflag = 0;
  1021. END IF
  1022. IF sqlca.SQLCode <> 0 THEN
  1023. rslt = 0
  1024. arg_msg = "撤审单据操作失败"+"~n"+sqlca.SQLErrText
  1025. GOTO ext
  1026. ELSEIF sqlca.SQLNRows = 0 THEN
  1027. rslt = 0
  1028. arg_msg = "单据正在撤审,请稍后查询。"+"~n"+sqlca.SQLErrText
  1029. GOTO ext
  1030. END IF
  1031. IF uof_auditing_cancel_end(arg_msg) = 0 THEN
  1032. rslt = 0
  1033. GOTO ext
  1034. END IF
  1035. flag = 0
  1036. ext:
  1037. IF rslt = 0 THEN
  1038. ROLLBACK;
  1039. ELSEIF rslt = 1 And arg_ifcommit THEN
  1040. COMMIT;
  1041. END IF
  1042. RETURN rslt
  1043. end function
  1044. public function integer uof_auditing_end (ref string arg_msg);Long rslt = 1
  1045. Long ll_relid_ref
  1046. Long i
  1047. Long ll_itemid
  1048. Long ref_dateint
  1049. Decimal lde_oriamt, lde_msttakeamt, lde_takeamt
  1050. String ls_about
  1051. DateTime ldt_zqdate
  1052. String ls_dscrp,ls_cuscode, ls_cusname, ls_custype
  1053. uo_musttake uo_take
  1054. uo_take = Create uo_musttake
  1055. uo_salebill uo_bill_s
  1056. uo_bill_s = Create uo_salebill
  1057. uo_mustpay uo_pay
  1058. uo_pay = Create uo_mustpay
  1059. uo_buybill uo_bill_b
  1060. uo_bill_b = Create uo_buybill
  1061. uo_iteminput uo_item
  1062. uo_item = Create uo_iteminput
  1063. DateTime ld_viewdate
  1064. SetNull(ld_viewdate)
  1065. Int li_item_dfttype,li_itemflag
  1066. Decimal ld_takeamt
  1067. Long ll_moneyid_account
  1068. ls_dscrp = dscrp
  1069. IF Trim(fpcode) <> '' THEN
  1070. ls_dscrp = ls_dscrp + ' 发票号:'+fpcode
  1071. END IF
  1072. IF billtype = 0 THEN //生成客户收款, 对单
  1073. IF sys_option_msttake_takeamt_secaudit = 0 THEN //两审一起进行,生成应收,出纳, 对单
  1074. //1.生成已收帐
  1075. SELECT moneyid INTO :ll_moneyid_account
  1076. FROM u_accounts
  1077. Where accountsid = :accountid;
  1078. IF sqlca.SQLCode <> 0 THEN
  1079. arg_msg = '查询帐号币种资料失败,'+sqlca.SQLErrText
  1080. rslt = 0
  1081. GOTO ext
  1082. END IF
  1083. IF IsNull(ll_moneyid_account) THEN ll_moneyid_account = 0
  1084. IF ll_moneyid_account = 0 THEN
  1085. arg_msg = '帐号币种未指定,请检查'
  1086. rslt = 0
  1087. GOTO ext
  1088. END IF
  1089. s_bmsttake s_take
  1090. s_take.scid = scid
  1091. s_take.cusid = cusid
  1092. s_take.takedate = BaDate
  1093. s_take.inrep = BaRep
  1094. s_take.oriamt = 0 - Bmstamt
  1095. s_take.msttakeamt = 0
  1096. s_take.takeamt = Bmstamt * mrate
  1097. s_take.dscrp = ls_dscrp
  1098. s_take.billcode = BaCode
  1099. s_take.banktypeid = banktypeid
  1100. s_take.buildtype = 4
  1101. s_take.opemp = publ_operator
  1102. s_take.outwareid = 0
  1103. s_take.salebillid = 0
  1104. s_take.viewdate = viewdate
  1105. s_take.accountsid = accountid
  1106. s_take.itemid = itemid
  1107. s_take.moneyid = moneyid
  1108. s_take.relcode = relcode
  1109. s_take.takeamt_cn = Bmstamt
  1110. s_take.moneyid_cn = ll_moneyid_account
  1111. IF uo_take.add_takerec(s_take,arg_msg,False) = 0 THEN
  1112. rslt = 0
  1113. GOTO ext
  1114. END IF
  1115. ll_relid_ref = uo_take.ref_takeid
  1116. IF ll_relid_ref = 0 THEN
  1117. arg_msg = '错误的应收应付帐ID!'
  1118. rslt = 0
  1119. GOTO ext
  1120. END IF
  1121. UPDATE u_Bmstamt
  1122. SET relid = :ll_relid_ref
  1123. WHERE Baid = :Baid
  1124. And flag = 1;
  1125. IF sqlca.SQLCode <> 0 THEN
  1126. arg_msg = '更新单据资料失败,'+sqlca.SQLErrText
  1127. rslt = 0
  1128. GOTO ext
  1129. END IF
  1130. IF it_mxbt > 0 THEN
  1131. //2.明细生成折扣金额(优惠款)
  1132. IF f_get_itemid(3, ll_itemid, arg_msg) = 0 THEN //查询默认销售优惠款项目
  1133. rslt = 0
  1134. GOTO ext
  1135. END IF
  1136. Bmstamt_mxsum = 0
  1137. FOR i = 1 To it_mxbt
  1138. IF BmstamtMX[i].tzqamt <> 0 THEN
  1139. ls_about = BaCode + "折扣金额"
  1140. IF sys_option_bmstamt_zqamt_date = 0 THEN
  1141. ldt_zqdate = BaDate
  1142. ELSE
  1143. SELECT takedate INTO :ldt_zqdate FROM u_Bmsttake
  1144. Where scid = :scid And takeid = :BmstamtMX[i].takeid;
  1145. IF sqlca.SQLCode <> 0 THEN
  1146. arg_msg = '查询应收帐发生日期信息失败,'+sqlca.SQLErrText
  1147. rslt = 0
  1148. GOTO ext
  1149. END IF
  1150. END IF
  1151. IF uo_take.add_takerecmx(scid,BmstamtMX[i].takeid,BaCode,ldt_zqdate,banktypeid,0 - BmstamtMX[i].tzqamt,0,&
  1152. publ_operator,ls_about,BaRep,3,0,ll_itemid,cusid, moneyid,arg_msg,False,relcode) = 0 THEN
  1153. rslt = 0
  1154. GOTO ext
  1155. END IF
  1156. END IF
  1157. IF BmstamtMX[i].ttakeamt <> 0 THEN
  1158. Bmstamt_mxsum += BmstamtMX[i].ttakeamt
  1159. END IF
  1160. NEXT
  1161. //3.明细(扣除折扣金额)与当前已收帐对单
  1162. IF uo_bill_s.newbegin() = 0 THEN
  1163. arg_msg = '初始化对单失败'
  1164. rslt = 0
  1165. GOTO ext
  1166. END IF
  1167. uo_bill_s.opemp = publ_operator
  1168. uo_bill_s.takedate = BaDate
  1169. uo_bill_s.relcode = BaCode
  1170. uo_bill_s.inrep = publ_operator
  1171. uo_bill_s.banktypeid = banktypeid
  1172. uo_bill_s.dscrp = '客户收款结算单自动生成'
  1173. uo_bill_s.cusid = cusid
  1174. uo_bill_s.msttakeamt = 0
  1175. uo_bill_s.takeamt = 0
  1176. uo_bill_s.accountsid = accountid
  1177. uo_bill_s.itemid = itemid
  1178. uo_bill_s.buildtype = 1
  1179. uo_bill_s.moneyid = moneyid
  1180. //
  1181. //插入收款明细
  1182. IF uo_bill_s.acceptmx(ll_relid_ref,&
  1183. BaCode,&
  1184. 0,&
  1185. 0 - Bmstamt_mxsum,&
  1186. 0 - Bmstamt,&
  1187. 0,&
  1188. Bmstamt,&
  1189. BaCode,&
  1190. arg_msg) = 0 THEN
  1191. arg_msg = '对数单插入已收明细失败,'+arg_msg
  1192. rslt = 0
  1193. GOTO ext
  1194. END IF
  1195. //插入应收明细
  1196. FOR i = 1 To it_mxbt
  1197. IF BmstamtMX[i].ttakeamt <> 0 THEN
  1198. SELECT oriamt, msttakeamt, takeamt
  1199. INTO :lde_oriamt, :lde_msttakeamt, :lde_takeamt
  1200. FROM U_Bmsttake
  1201. Where takeid = :BmstamtMX[i].takeid;
  1202. IF sqlca.SQLCode <> 0 THEN
  1203. arg_msg = '行:'+String(i)+'查询应收帐信息失败,'+sqlca.SQLErrText
  1204. rslt = 0
  1205. GOTO ext
  1206. END IF
  1207. IF uo_bill_s.acceptmx(BmstamtMX[i].takeid,&
  1208. BmstamtMX[i].billcode,&
  1209. 0,&
  1210. BmstamtMX[i].ttakeamt,&
  1211. lde_oriamt,&
  1212. lde_msttakeamt,&
  1213. lde_takeamt,&
  1214. BmstamtMX[i].relcode,&
  1215. arg_msg) = 0 THEN
  1216. arg_msg = '对数单插入应收明细失败,'+arg_msg
  1217. rslt = 0
  1218. GOTO ext
  1219. END IF
  1220. END IF
  1221. NEXT
  1222. IF uo_bill_s.save_ds(arg_msg,False) = 0 THEN
  1223. rslt = 0
  1224. GOTO ext
  1225. END IF
  1226. END IF
  1227. ELSE //IF sys_option_msttake_takeamt_secaudit = 0 THEN //初审出纳; 终审应收
  1228. SELECT dfttype,itemflag
  1229. INTO :li_item_dfttype,:li_itemflag
  1230. FROM u_itemdef
  1231. Where u_itemdef.itemid = :itemid;
  1232. IF sqlca.SQLCode <> 0 THEN
  1233. arg_msg = '查询当前收支项目核算类型和核算方向失败!'
  1234. rslt = 0
  1235. GOTO ext
  1236. END IF
  1237. CHOOSE CASE li_item_dfttype
  1238. CASE 1,3,4
  1239. ld_takeamt = Bmstamt * li_itemflag
  1240. CASE ELSE
  1241. ld_takeamt = Bmstamt
  1242. END CHOOSE
  1243. IF sys_option_cusamt_dftdate = 0 THEN
  1244. ld_viewdate = BaDate
  1245. ELSE
  1246. ld_viewdate = viewdate
  1247. END IF
  1248. s_iteminput s_input
  1249. SELECT cuscode,name, custype
  1250. INTO :ls_cuscode, :ls_cusname, :ls_custype
  1251. FROM u_cust
  1252. Where u_cust.cusid = :cusid;
  1253. IF sqlca.SQLCode <> 0 THEN
  1254. arg_msg = '查询操作失败,客户唯一码'
  1255. rslt = 0
  1256. GOTO ext
  1257. END IF
  1258. IF sys_option_rap_money_dscrp_mode = 0 THEN
  1259. ls_dscrp = ls_cuscode + ' ' + ls_cusname + ' ' + ls_custype + ' '+ls_dscrp
  1260. ELSEIF sys_option_rap_money_dscrp_mode = 1 THEN
  1261. ls_dscrp = ls_cusname + ' '+ls_dscrp
  1262. ELSE
  1263. ls_dscrp = ls_cuscode + ' ' + ls_cusname + ' ' + ls_custype + ' '+ls_dscrp
  1264. END IF
  1265. s_input.itemid = itemid
  1266. s_input.dateint = 0
  1267. s_input.outdate = ld_viewdate
  1268. s_input.dscrp = ls_dscrp
  1269. s_input.outamt = ld_takeamt
  1270. s_input.accountsid = accountid
  1271. s_input.banktypeid = banktypeid
  1272. s_input.billcode = BaCode
  1273. s_input.relcode = relcode
  1274. s_input.buildtype = 1
  1275. s_input.opemp = publ_operator
  1276. s_input.relrep = ''
  1277. s_input.scid = scid
  1278. s_input.moneyid = moneyid
  1279. IF uo_item.add_iteminput(s_input,arg_msg,False) = 0 THEN
  1280. arg_msg = '增加收支明细帐失败!~n' + arg_msg
  1281. rslt = 0
  1282. GOTO ext
  1283. END IF
  1284. ref_dateint = uo_item.ref_dateint
  1285. IF ref_dateint = 0 THEN
  1286. arg_msg = '增加收支出纳明细帐失败!'
  1287. rslt = 0
  1288. GOTO ext
  1289. END IF
  1290. UPDATE u_Bmstamt
  1291. SET reldateint = :ref_dateint
  1292. WHERE Baid = :Baid
  1293. And flag = 1;
  1294. IF sqlca.SQLCode <> 0 THEN
  1295. arg_msg = '更新单据收支帐ID资料失败,'+sqlca.SQLErrText
  1296. rslt = 0
  1297. GOTO ext
  1298. END IF
  1299. END IF
  1300. ELSEIF billtype = 1 THEN //生成供应商付款, 对单
  1301. //1.生成已付帐
  1302. SELECT moneyid INTO :ll_moneyid_account
  1303. FROM u_accounts
  1304. Where accountsid = :accountid;
  1305. IF sqlca.SQLCode <> 0 THEN
  1306. arg_msg = '查询帐号币种资料失败,'+sqlca.SQLErrText
  1307. rslt = 0
  1308. GOTO ext
  1309. END IF
  1310. IF IsNull(ll_moneyid_account) THEN ll_moneyid_account = 0
  1311. IF ll_moneyid_account = 0 THEN
  1312. arg_msg = '帐号币种未指定,请检查'
  1313. rslt = 0
  1314. GOTO ext
  1315. END IF
  1316. s_bmstpay s_pay
  1317. s_pay.scid = scid
  1318. s_pay.sptid = cusid
  1319. s_pay.paydate = BaDate
  1320. s_pay.inrep = BaRep
  1321. s_pay.oriamt = 0 - Bmstamt * mrate
  1322. s_pay.mstpayamt = 0
  1323. s_pay.payamt = Bmstamt * mrate
  1324. s_pay.dscrp = ls_dscrp
  1325. s_pay.billcode = BaCode
  1326. s_pay.banktypeid = banktypeid
  1327. s_pay.buildtype = 4
  1328. s_pay.opemp = publ_operator
  1329. s_pay.inwareid = 0
  1330. s_pay.buybillid = 0
  1331. s_pay.accountsid = accountid
  1332. s_pay.itemid = itemid
  1333. s_pay.moneyid = moneyid
  1334. s_pay.relcode = relcode
  1335. s_pay.viewdate = viewdate
  1336. s_pay.payamt_cn = Bmstamt
  1337. IF uo_pay.add_payrec(s_pay,arg_msg,False) = 0 THEN
  1338. rslt = 0
  1339. GOTO ext
  1340. END IF
  1341. ll_relid_ref = uo_pay.ref_payid
  1342. IF ll_relid_ref = 0 THEN
  1343. arg_msg = '错误的应收应付帐ID!'
  1344. rslt = 0
  1345. GOTO ext
  1346. END IF
  1347. UPDATE u_Bmstamt
  1348. SET relid = :ll_relid_ref
  1349. WHERE Baid = :Baid
  1350. And flag = 1;
  1351. IF sqlca.SQLCode <> 0 THEN
  1352. arg_msg = '更新单据资料失败,'+sqlca.SQLErrText
  1353. rslt = 0
  1354. GOTO ext
  1355. END IF
  1356. IF it_mxbt > 0 THEN
  1357. //2.明细生成折扣金额(优惠款)
  1358. IF f_get_itemid(8, ll_itemid, arg_msg) = 0 THEN //查询默认采购优惠款项目
  1359. rslt = 0
  1360. GOTO ext
  1361. END IF
  1362. Bmstamt_mxsum = 0
  1363. FOR i = 1 To it_mxbt
  1364. IF BmstamtMX[i].tzqamt <> 0 THEN
  1365. ls_about = BaCode + "折扣金额"
  1366. IF sys_option_bmstamt_zqamt_date = 0 THEN
  1367. ldt_zqdate = BaDate
  1368. ELSE
  1369. SELECT paydate INTO :ldt_zqdate FROM u_Bmstpay
  1370. Where scid = :scid And payid = :BmstamtMX[i].takeid;
  1371. IF sqlca.SQLCode <> 0 THEN
  1372. arg_msg = '查询应付帐发生日期信息失败,'+sqlca.SQLErrText
  1373. rslt = 0
  1374. GOTO ext
  1375. END IF
  1376. END IF
  1377. IF uo_pay.add_payrecmx(scid,BmstamtMX[i].takeid,BaCode,BaDate,banktypeid,0 - BmstamtMX[i].tzqamt,0,&
  1378. publ_operator,ls_about,BaRep,3,0,ll_itemid,cusid, arg_msg,False,moneyid,relcode) = 0 THEN
  1379. rslt = 0
  1380. GOTO ext
  1381. END IF
  1382. END IF
  1383. IF BmstamtMX[i].ttakeamt <> 0 THEN
  1384. Bmstamt_mxsum += BmstamtMX[i].ttakeamt
  1385. END IF
  1386. NEXT
  1387. //3.明细(扣除折扣金额)与当前已付帐对单
  1388. IF uo_bill_b.newbegin() = 0 THEN
  1389. arg_msg = '初始化对单失败'
  1390. rslt = 0
  1391. GOTO ext
  1392. END IF
  1393. uo_bill_b.opemp = publ_operator
  1394. uo_bill_b.paydate = BaDate
  1395. uo_bill_b.relcode = BaCode
  1396. uo_bill_b.inrep = publ_operator
  1397. uo_bill_b.banktypeid = banktypeid
  1398. uo_bill_b.dscrp = '供应商付款结算单自动生成'
  1399. uo_bill_b.sptid = cusid
  1400. uo_bill_b.mstpayamt = 0
  1401. uo_bill_b.payamt = 0
  1402. uo_bill_b.accountsid = accountid
  1403. uo_bill_b.itemid = itemid
  1404. uo_bill_b.buildtype = 1
  1405. uo_bill_b.moneyid = moneyid
  1406. //
  1407. //插入付款明细
  1408. IF uo_bill_b.acceptmx(ll_relid_ref,&
  1409. BaCode,&
  1410. 0,&
  1411. 0 - Bmstamt_mxsum,&
  1412. 0 - Bmstamt,&
  1413. 0,&
  1414. Bmstamt,&
  1415. BaCode,&
  1416. arg_msg) = 0 THEN
  1417. arg_msg = '对数单插入已付明细失败,'+arg_msg
  1418. rslt = 0
  1419. GOTO ext
  1420. END IF
  1421. //插入应付明细
  1422. FOR i = 1 To it_mxbt
  1423. IF BmstamtMX[i].ttakeamt <> 0 THEN
  1424. SELECT oriamt, mstpayamt, payamt
  1425. INTO :lde_oriamt, :lde_msttakeamt, :lde_takeamt
  1426. FROM U_Bmstpay
  1427. Where payid = :BmstamtMX[i].takeid;
  1428. IF sqlca.SQLCode <> 0 THEN
  1429. arg_msg = '行:'+String(i)+'查询应付帐信息失败,'+sqlca.SQLErrText
  1430. rslt = 0
  1431. GOTO ext
  1432. END IF
  1433. IF uo_bill_b.acceptmx(BmstamtMX[i].takeid,&
  1434. BmstamtMX[i].billcode,&
  1435. 0,&
  1436. BmstamtMX[i].ttakeamt,&
  1437. lde_oriamt,&
  1438. lde_msttakeamt,&
  1439. lde_takeamt,&
  1440. BmstamtMX[i].relcode,&
  1441. arg_msg) = 0 THEN
  1442. arg_msg = '对数单插入应付明细失败,'+arg_msg
  1443. rslt = 0
  1444. GOTO ext
  1445. END IF
  1446. END IF
  1447. NEXT
  1448. IF uo_bill_b.save_ds(arg_msg,False) = 0 THEN
  1449. rslt = 0
  1450. GOTO ext
  1451. END IF
  1452. END IF
  1453. END IF
  1454. ext:
  1455. Destroy uo_take
  1456. Destroy uo_bill_s
  1457. Destroy uo_pay
  1458. Destroy uo_item
  1459. RETURN rslt
  1460. end function
  1461. public function integer uof_auditing_cancel_end (ref string arg_msg);Long rslt = 1
  1462. Long ll_relid_ref
  1463. Long i
  1464. Long ll_itemid
  1465. Decimal lde_oriamt, lde_msttakeamt, lde_takeamt
  1466. Long ll_listno
  1467. String ls_about
  1468. uo_musttake uo_take
  1469. uo_take = Create uo_musttake
  1470. uo_salebill uo_bill_s
  1471. uo_bill_s = Create uo_salebill
  1472. uo_mustpay uo_pay
  1473. uo_pay = Create uo_mustpay
  1474. uo_buybill uo_bill_b
  1475. uo_bill_b = Create uo_buybill
  1476. uo_iteminput uo_item
  1477. uo_item = Create uo_iteminput
  1478. //DateTime ld_viewdate
  1479. //SetNull(ld_viewdate)
  1480. //Int li_item_dfttype,li_itemflag
  1481. //Decimal ld_takeamt
  1482. Long ll_moneyid_account
  1483. Long ll_salebillid
  1484. IF billtype = 0 THEN //生成客户收款, 对单
  1485. IF sys_option_msttake_takeamt_secaudit = 0 THEN
  1486. IF it_mxbt > 0 THEN
  1487. //1.删除对数单
  1488. SELECT salebillid
  1489. INTO :ll_salebillid
  1490. FROM u_salebill
  1491. WHERE relcode = :BaCode
  1492. And dscrp like '%客户收款结算单自动生成%';
  1493. IF sqlca.SQLCode <> 0 THEN
  1494. arg_msg = "查询对应对数单失败,"+sqlca.SQLErrText
  1495. rslt = 0
  1496. GOTO ext
  1497. END IF
  1498. IF uo_bill_s.del(ll_salebillid, arg_msg,False) = 0 THEN
  1499. rslt = 0
  1500. GOTO ext
  1501. END IF
  1502. //2.删除明细优惠
  1503. FOR i = 1 To it_mxbt
  1504. IF BmstamtMX[i].tzqamt <> 0 THEN
  1505. ls_about = BaCode + "折扣金额"
  1506. SELECT listno
  1507. INTO :ll_listno
  1508. FROM U_BmsttakeMX
  1509. WHERE takeid = :BmstamtMX[i].takeid
  1510. AND dscrp = :ls_about
  1511. And billcode = :BaCode;
  1512. IF sqlca.SQLCode <> 0 THEN
  1513. arg_msg = "查询应收明细对应的折扣金额应收帐失败,"+sqlca.SQLErrText
  1514. rslt = 0
  1515. GOTO ext
  1516. END IF
  1517. IF uo_take.del_takerecmx (2,BmstamtMX[i].takeid, ll_listno,arg_msg,False) = 0 THEN
  1518. rslt = 0
  1519. GOTO ext
  1520. END IF
  1521. END IF
  1522. NEXT
  1523. END IF
  1524. //3.删除已收帐
  1525. IF uo_take.del_takerec (scid,1,relid, cusid, arg_msg,False) = 0 THEN
  1526. rslt = 0
  1527. GOTO ext
  1528. END IF
  1529. ELSE //IF sys_option_msttake_takeamt_secaudit = 0 THEN
  1530. IF secflag = 1 THEN
  1531. arg_msg = '客户收款结算单已终审,不能操作'
  1532. rslt = 0
  1533. GOTO ext
  1534. END IF
  1535. IF uo_item.del_iteminput(itemid,reldateint,1,arg_msg,False) = 0 THEN
  1536. arg_msg = '删除收支明细帐失败!~n' + arg_msg
  1537. rslt = 0
  1538. GOTO ext
  1539. END IF
  1540. END IF
  1541. ELSEIF billtype = 1 THEN //生成供应商付款, 对单
  1542. IF secflag = 1 THEN
  1543. arg_msg = '供应商付款结算单已终审,不能操作'
  1544. rslt = 0
  1545. GOTO ext
  1546. END IF
  1547. IF it_mxbt > 0 THEN
  1548. //1.删除对数单
  1549. SELECT buybillid
  1550. INTO :ll_salebillid
  1551. FROM u_buybill
  1552. WHERE relcode = :BaCode
  1553. And dscrp like '%供应商付款结算单自动生成%';
  1554. IF sqlca.SQLCode <> 0 THEN
  1555. arg_msg = "查询对应对数单失败,"+sqlca.SQLErrText
  1556. rslt = 0
  1557. GOTO ext
  1558. END IF
  1559. IF uo_bill_b.del(ll_salebillid, arg_msg,False) = 0 THEN
  1560. rslt = 0
  1561. GOTO ext
  1562. END IF
  1563. //2.删除明细优惠
  1564. FOR i = 1 To it_mxbt
  1565. IF BmstamtMX[i].tzqamt <> 0 THEN
  1566. ls_about = BaCode + "折扣金额"
  1567. SELECT listno
  1568. INTO :ll_listno
  1569. FROM U_BmstpayMX
  1570. WHERE payid = :BmstamtMX[i].takeid
  1571. AND dscrp = :ls_about
  1572. And billcode = :BaCode;
  1573. IF sqlca.SQLCode <> 0 THEN
  1574. arg_msg = "查询应付明细对应的折扣金额应付帐失败,"+sqlca.SQLErrText
  1575. rslt = 0
  1576. GOTO ext
  1577. END IF
  1578. IF uo_pay.del_payrecmx (2,BmstamtMX[i].takeid, ll_listno,arg_msg,False) = 0 THEN
  1579. rslt = 0
  1580. GOTO ext
  1581. END IF
  1582. END IF
  1583. NEXT
  1584. END IF
  1585. //3.删除已付帐
  1586. IF uo_pay.del_payrec (scid,1,relid, cusid, arg_msg,False) = 0 THEN
  1587. rslt = 0
  1588. GOTO ext
  1589. END IF
  1590. END IF
  1591. ext:
  1592. Destroy uo_take
  1593. Destroy uo_pay
  1594. Destroy uo_item
  1595. destroy uo_bill_s
  1596. destroy uo_bill_b
  1597. RETURN rslt
  1598. end function
  1599. public function integer uof_secauditing_end (ref string arg_msg);Long rslt = 1
  1600. Long ll_relid_ref
  1601. Long i
  1602. Long ll_itemid
  1603. //Long ref_dateint
  1604. Decimal lde_oriamt, lde_msttakeamt, lde_takeamt
  1605. datetime ldt_zqdate
  1606. uo_musttake uo_take
  1607. uo_take = Create uo_musttake
  1608. uo_salebill uo_bill_s
  1609. uo_bill_s = Create uo_salebill
  1610. //uo_mustpay uo_pay
  1611. //uo_pay = Create uo_mustpay
  1612. //
  1613. //uo_iteminput uo_item
  1614. //uo_item = Create uo_iteminput
  1615. //
  1616. //DateTime ld_viewdate
  1617. //SetNull(ld_viewdate)
  1618. //
  1619. //Int li_item_dfttype,li_itemflag
  1620. //Decimal ld_takeamt
  1621. Long ll_moneyid_account
  1622. string ls_dscrp
  1623. ls_dscrp = dscrp
  1624. IF Trim(fpcode) <> '' THEN
  1625. ls_dscrp = ls_dscrp + ' 发票号:'+fpcode
  1626. END IF
  1627. IF billtype = 0 THEN //生成客户收款, 对单
  1628. IF sys_option_msttake_takeamt_secaudit = 1 THEN //终审,生成应收
  1629. //1.生成已收帐
  1630. s_bmsttake s_take
  1631. s_take.scid = scid
  1632. s_take.cusid = cusid
  1633. s_take.takedate = BaDate
  1634. s_take.inrep = BaRep
  1635. s_take.oriamt = 0 - Bmstamt
  1636. s_take.msttakeamt = 0
  1637. s_take.takeamt = Bmstamt
  1638. s_take.dscrp = ls_dscrp
  1639. s_take.billcode = BaCode
  1640. s_take.banktypeid = banktypeid
  1641. s_take.buildtype = 4
  1642. s_take.opemp = publ_operator
  1643. s_take.outwareid = 0
  1644. s_take.salebillid = 0
  1645. s_take.viewdate = viewdate
  1646. s_take.accountsid = accountid
  1647. s_take.itemid = itemid
  1648. s_take.moneyid = moneyid
  1649. s_take.relcode = relcode
  1650. SELECT moneyid INTO :ll_moneyid_account
  1651. FROM u_accounts
  1652. Where accountsid = :accountid;
  1653. IF sqlca.SQLCode <> 0 THEN
  1654. arg_msg = '查询帐号币种资料失败,'+sqlca.SQLErrText
  1655. rslt = 0
  1656. GOTO ext
  1657. END IF
  1658. IF IsNull(ll_moneyid_account) THEN ll_moneyid_account = 0
  1659. IF ll_moneyid_account = 0 THEN
  1660. arg_msg = '帐号币种未指定,请检查'
  1661. rslt = 0
  1662. GOTO ext
  1663. END IF
  1664. IF uo_take.add_takerec(s_take,arg_msg,False) = 0 THEN
  1665. rslt = 0
  1666. GOTO ext
  1667. END IF
  1668. ll_relid_ref = uo_take.ref_takeid
  1669. IF ll_relid_ref = 0 THEN
  1670. arg_msg = '错误的应收应付帐ID!'
  1671. rslt = 0
  1672. GOTO ext
  1673. END IF
  1674. UPDATE u_Bmstamt
  1675. SET relid = :ll_relid_ref
  1676. WHERE Baid = :Baid
  1677. And flag = 1;
  1678. IF sqlca.SQLCode <> 0 THEN
  1679. arg_msg = '更新单据资料失败,'+sqlca.SQLErrText
  1680. rslt = 0
  1681. GOTO ext
  1682. END IF
  1683. IF it_mxbt > 0 THEN
  1684. //2.明细生成折扣金额(优惠款)
  1685. IF f_get_itemid(3, ll_itemid, arg_msg) = 0 THEN //查询优惠款项目
  1686. rslt = 0
  1687. GOTO ext
  1688. END IF
  1689. String ls_about
  1690. Bmstamt_mxsum = 0
  1691. FOR i = 1 To it_mxbt
  1692. IF BmstamtMX[i].tzqamt <> 0 THEN
  1693. ls_about = BaCode + "折扣金额"
  1694. IF sys_option_bmstamt_zqamt_date = 0 THEN
  1695. ldt_zqdate = BaDate
  1696. ELSE
  1697. SELECT takedate INTO :ldt_zqdate FROM u_Bmsttake
  1698. Where scid = :scid And takeid = :BmstamtMX[i].takeid;
  1699. IF sqlca.SQLCode <> 0 THEN
  1700. arg_msg = '查询应收帐发生日期信息失败,'+sqlca.SQLErrText
  1701. rslt = 0
  1702. GOTO ext
  1703. END IF
  1704. END IF
  1705. IF uo_take.add_takerecmx(scid,BmstamtMX[i].takeid,BaCode,ldt_zqdate,banktypeid,0 - BmstamtMX[i].tzqamt,0,&
  1706. publ_operator,ls_about,BaRep,3,0,ll_itemid,cusid, moneyid,arg_msg,False,relcode) = 0 THEN
  1707. rslt = 0
  1708. GOTO ext
  1709. END IF
  1710. END IF
  1711. IF BmstamtMX[i].ttakeamt <> 0 THEN
  1712. Bmstamt_mxsum += BmstamtMX[i].ttakeamt
  1713. END IF
  1714. NEXT
  1715. //3.明细(扣除折扣金额)与当前已收帐对单
  1716. IF uo_bill_s.newbegin() = 0 THEN
  1717. arg_msg = '初始化对单失败'
  1718. rslt = 0
  1719. GOTO ext
  1720. END IF
  1721. uo_bill_s.opemp = publ_operator
  1722. uo_bill_s.takedate = BaDate
  1723. uo_bill_s.relcode = BaCode
  1724. uo_bill_s.inrep = publ_operator
  1725. uo_bill_s.banktypeid = banktypeid
  1726. uo_bill_s.dscrp = '客户收款结算单自动生成'
  1727. uo_bill_s.cusid = cusid
  1728. uo_bill_s.msttakeamt = 0
  1729. uo_bill_s.takeamt = 0
  1730. uo_bill_s.accountsid = accountid
  1731. uo_bill_s.itemid = itemid
  1732. uo_bill_s.buildtype = 1
  1733. uo_bill_s.moneyid = moneyid
  1734. //
  1735. //插入收款明细
  1736. IF uo_bill_s.acceptmx(ll_relid_ref,&
  1737. BaCode,&
  1738. 0,&
  1739. 0 - Bmstamt_mxsum,&
  1740. 0 - Bmstamt,&
  1741. 0,&
  1742. Bmstamt,&
  1743. BaCode,&
  1744. arg_msg) = 0 THEN
  1745. arg_msg = '对数单插入已收明细失败,'+arg_msg
  1746. rslt = 0
  1747. GOTO ext
  1748. END IF
  1749. //插入应收明细
  1750. FOR i = 1 To it_mxbt
  1751. IF BmstamtMX[i].ttakeamt <> 0 THEN
  1752. SELECT oriamt, msttakeamt, takeamt
  1753. INTO :lde_oriamt, :lde_msttakeamt, :lde_takeamt
  1754. FROM U_Bmsttake
  1755. Where takeid = :BmstamtMX[i].takeid;
  1756. IF sqlca.SQLCode <> 0 THEN
  1757. arg_msg = '行:'+String(i)+'查询应收帐信息失败,'+sqlca.SQLErrText
  1758. rslt = 0
  1759. GOTO ext
  1760. END IF
  1761. IF uo_bill_s.acceptmx(BmstamtMX[i].takeid,&
  1762. BmstamtMX[i].billcode,&
  1763. 0,&
  1764. BmstamtMX[i].ttakeamt,&
  1765. lde_oriamt,&
  1766. lde_msttakeamt,&
  1767. lde_takeamt,&
  1768. BmstamtMX[i].relcode,&
  1769. arg_msg) = 0 THEN
  1770. arg_msg = '对数单插入应收明细失败,'+arg_msg
  1771. rslt = 0
  1772. GOTO ext
  1773. END IF
  1774. END IF
  1775. NEXT
  1776. IF uo_bill_s.save_ds(arg_msg,False) = 0 THEN
  1777. rslt = 0
  1778. GOTO ext
  1779. END IF
  1780. END IF
  1781. END IF
  1782. ELSEIF billtype = 1 THEN //生成供应商付款, 对单
  1783. END IF
  1784. ext:
  1785. Destroy uo_take
  1786. Destroy uo_bill_s
  1787. //Destroy uo_item
  1788. RETURN rslt
  1789. end function
  1790. public function integer uof_secauditing_cancel_end (ref string arg_msg);Long rslt = 1
  1791. Long ll_relid_ref
  1792. Long i
  1793. Long ll_itemid
  1794. Decimal lde_oriamt, lde_msttakeamt, lde_takeamt
  1795. Long ll_listno
  1796. String ls_about
  1797. uo_musttake uo_take
  1798. uo_take = Create uo_musttake
  1799. uo_salebill uo_bill_s
  1800. uo_bill_s = Create uo_salebill
  1801. //uo_mustpay uo_pay
  1802. //uo_pay = Create uo_mustpay
  1803. //
  1804. uo_iteminput uo_item
  1805. uo_item = Create uo_iteminput
  1806. //DateTime ld_viewdate
  1807. //SetNull(ld_viewdate)
  1808. //Int li_item_dfttype,li_itemflag
  1809. //Decimal ld_takeamt
  1810. Long ll_moneyid_account
  1811. Long ll_salebillid
  1812. IF billtype = 0 THEN //生成客户收款, 对单
  1813. IF sys_option_msttake_takeamt_secaudit = 1 THEN
  1814. IF it_mxbt > 0 THEN
  1815. //1.删除对数单
  1816. SELECT salebillid
  1817. INTO :ll_salebillid
  1818. FROM u_salebill
  1819. WHERE relcode = :BaCode
  1820. And dscrp like '%客户收款结算单自动生成%';
  1821. IF sqlca.SQLCode <> 0 THEN
  1822. arg_msg = "查询对应对数单失败,"+sqlca.SQLErrText
  1823. rslt = 0
  1824. GOTO ext
  1825. END IF
  1826. IF uo_bill_s.del(ll_salebillid, arg_msg,False) = 0 THEN
  1827. rslt = 0
  1828. GOTO ext
  1829. END IF
  1830. //2.删除明细优惠
  1831. FOR i = 1 To it_mxbt
  1832. IF BmstamtMX[i].tzqamt <> 0 THEN
  1833. ls_about = BaCode + "折扣金额"
  1834. SELECT listno
  1835. INTO :ll_listno
  1836. FROM U_BmsttakeMX
  1837. WHERE takeid = :BmstamtMX[i].takeid
  1838. AND dscrp = :ls_about
  1839. And billcode = :BaCode;
  1840. IF sqlca.SQLCode <> 0 THEN
  1841. arg_msg = "查询应收明细对应的折扣金额应收帐失败,"+sqlca.SQLErrText
  1842. rslt = 0
  1843. GOTO ext
  1844. END IF
  1845. IF uo_take.del_takerecmx (2,BmstamtMX[i].takeid, ll_listno,arg_msg,False) = 0 THEN
  1846. rslt = 0
  1847. GOTO ext
  1848. END IF
  1849. END IF
  1850. NEXT
  1851. END IF
  1852. //3.删除已收帐
  1853. IF uo_take.del_takerec (scid,1,relid, cusid, arg_msg,False) = 0 THEN
  1854. rslt = 0
  1855. GOTO ext
  1856. END IF
  1857. END IF
  1858. ELSEIF billtype = 1 THEN //生成供应商付款, 对单
  1859. //====================================================================
  1860. // 修改: 原来是注释了if else的,收款与付款都是执行相同的代码
  1861. //--------------------------------------------------------------------
  1862. // 作者: lwl 日期: 2015年06月08日
  1863. //====================================================================
  1864. // IF sys_option_msttake_takeamt_secaudit = 1 THEN
  1865. // IF it_mxbt > 0 THEN
  1866. // //1.删除对数单
  1867. // SELECT salebillid
  1868. // INTO :ll_salebillid
  1869. // FROM u_salebill
  1870. // WHERE relcode = :BaCode
  1871. // And dscrp = '客户收款结算单自动生成';
  1872. // IF sqlca.SQLCode <> 0 THEN
  1873. // arg_msg = "查询对应对数单失败,"+sqlca.SQLErrText
  1874. // rslt = 0
  1875. // GOTO ext
  1876. // END IF
  1877. //
  1878. //
  1879. // IF uo_bill_s.del(ll_salebillid, arg_msg,False) = 0 THEN
  1880. // rslt = 0
  1881. // GOTO ext
  1882. // END IF
  1883. //
  1884. //
  1885. // //2.删除明细优惠
  1886. // FOR i = 1 To it_mxbt
  1887. // IF BmstamtMX[i].tzqamt <> 0 THEN
  1888. // ls_about = BaCode + "折扣金额"
  1889. //
  1890. // SELECT listno
  1891. // INTO :ll_listno
  1892. // FROM U_BmsttakeMX
  1893. // WHERE takeid = :BmstamtMX[i].takeid
  1894. // AND dscrp = :ls_about
  1895. // And billcode = :BaCode;
  1896. // IF sqlca.SQLCode <> 0 THEN
  1897. // arg_msg = "查询应收明细对应的折扣金额应收帐失败,"+sqlca.SQLErrText
  1898. // rslt = 0
  1899. // GOTO ext
  1900. // END IF
  1901. //
  1902. // IF uo_take.del_takerecmx (2,BmstamtMX[i].takeid, ll_listno,arg_msg,False) = 0 THEN
  1903. // rslt = 0
  1904. // GOTO ext
  1905. // END IF
  1906. // END IF
  1907. //
  1908. // NEXT
  1909. // END IF
  1910. //
  1911. // //3.删除已收帐
  1912. // IF uo_take.del_takerec (scid,1,relid, cusid, arg_msg,False) = 0 THEN
  1913. // rslt = 0
  1914. // GOTO ext
  1915. // END IF
  1916. // END IF
  1917. END IF
  1918. ext:
  1919. Destroy uo_take
  1920. Destroy uo_bill_s
  1921. //Destroy uo_item
  1922. RETURN rslt
  1923. end function
  1924. public function integer audit_subject (long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg);
  1925. Int rslt = 1,cnt = 0
  1926. IF arg_billid = 0 THEN
  1927. rslt = 0
  1928. arg_msg = "没有审核对象"
  1929. GOTO ext
  1930. END IF
  1931. IF p_getinfo(arg_billid,arg_msg) = 0 THEN
  1932. rslt = 0
  1933. GOTO ext
  1934. END IF
  1935. IF secflag = 0 THEN
  1936. rslt = 0
  1937. arg_msg = "单据没有终审"
  1938. GOTO ext
  1939. END IF
  1940. IF cwauditingflag = 1 THEN
  1941. rslt = 0
  1942. arg_msg = "单据已经总账审核"
  1943. GOTO ext
  1944. END IF
  1945. UPDATE u_bmstamt
  1946. SET cwauditingflag = 1,
  1947. cwauditingdate = getdate(),
  1948. cwauditingrep = :publ_operator
  1949. WHERE ( u_bmstamt.Baid = :arg_billid ) Using sqlca;
  1950. IF sqlca.SQLCode <> 0 THEN
  1951. rslt = 0
  1952. arg_msg = "因网络或其它原因导致总账审核操作失败"+"~n"+sqlca.SQLErrText
  1953. ROLLBACK Using sqlca;
  1954. GOTO ext
  1955. END IF
  1956. ext:
  1957. IF arg_ifcommit And rslt = 1 THEN
  1958. COMMIT Using sqlca;
  1959. END IF
  1960. Return (rslt)
  1961. end function
  1962. public function integer c_audit_subject (long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg);
  1963. Int rslt = 1,cnt = 0
  1964. IF arg_billid = 0 THEN
  1965. rslt = 0
  1966. arg_msg = "没有审核对象"
  1967. GOTO ext
  1968. END IF
  1969. IF p_getinfo(arg_billid,arg_msg) = 0 THEN
  1970. rslt = 0
  1971. GOTO ext
  1972. END IF
  1973. IF cwauditingflag = 0 THEN
  1974. rslt = 0
  1975. arg_msg = "单据没有总账审核"
  1976. GOTO ext
  1977. END IF
  1978. UPDATE u_bmstamt
  1979. SET cwauditingflag = 0,
  1980. cwauditingdate =null,
  1981. cwauditingrep = ''
  1982. WHERE ( u_bmstamt.Baid = :arg_billid ) Using sqlca;
  1983. IF sqlca.SQLCode <> 0 THEN
  1984. rslt = 0
  1985. arg_msg = "因网络或其它原因导致总账撤审操作失败"+"~n"+sqlca.SQLErrText
  1986. ROLLBACK Using sqlca;
  1987. GOTO ext
  1988. END IF
  1989. ext:
  1990. IF arg_ifcommit And rslt = 1 THEN
  1991. COMMIT Using sqlca;
  1992. END IF
  1993. Return (rslt)
  1994. end function
  1995. public function long getinfo (long arg_billid, ref string arg_msg);Int rslt = 1
  1996. long i = 1, no_mxcheck
  1997. IF arg_billid <= 0 THEN
  1998. rslt = 0
  1999. arg_msg = '错误的单据id'
  2000. GOTO ext
  2001. END IF
  2002. IF p_getinfo(arg_billid,arg_msg) = 0 THEN
  2003. rslt = 0
  2004. GOTO ext
  2005. END IF
  2006. //用游标读取明细
  2007. DECLARE cur_bamx CURSOR FOR
  2008. SELECT printid, scid, takeid, takedate, msttakeamt, takeamt, Zqamt, Ttakeamt,
  2009. TZqamt, billid, billcode, relid, relcode, relprintid, mxdscrp
  2010. FROM u_Bmstamtmx
  2011. Where Baid = :arg_billid;
  2012. OPEN cur_bamx;
  2013. FETCH cur_bamx INTO :BmstamtMX[i].printid, :BmstamtMX[i].scid, :BmstamtMX[i].takeid, :BmstamtMX[i].takedate, :BmstamtMX[i].msttakeamt, :BmstamtMX[i].takeamt, :BmstamtMX[i].Zqamt,
  2014. :BmstamtMX[i].Ttakeamt, :BmstamtMX[i].TZqamt, :BmstamtMX[i].billid, :BmstamtMX[i].billcode, :BmstamtMX[i].relid, :BmstamtMX[i].relcode, :BmstamtMX[i].relprintid, :BmstamtMX[i].mxdscrp;
  2015. DO WHILE sqlca.SQLCode = 0
  2016. i++
  2017. FETCH cur_bamx INTO :BmstamtMX[i].printid, :BmstamtMX[i].scid, :BmstamtMX[i].takeid, :BmstamtMX[i].takedate, :BmstamtMX[i].msttakeamt, :BmstamtMX[i].takeamt, :BmstamtMX[i].Zqamt,
  2018. :BmstamtMX[i].Ttakeamt, :BmstamtMX[i].TZqamt, :BmstamtMX[i].billid, :BmstamtMX[i].billcode, :BmstamtMX[i].relid, :BmstamtMX[i].relcode, :BmstamtMX[i].relprintid, :BmstamtMX[i].mxdscrp;
  2019. LOOP
  2020. CLOSE cur_bamx;
  2021. //检验明细是否读入完整
  2022. SELECT count(*) INTO :no_mxcheck
  2023. FROM u_Bmstamtmx
  2024. Where Baid = :arg_billid;
  2025. IF sqlca.SQLCode <> 0 THEN
  2026. rslt = 0
  2027. arg_msg = "查询操作失败,结算明细数量"
  2028. GOTO ext
  2029. END IF
  2030. IF i <> (no_mxcheck+1) THEN
  2031. rslt = 0
  2032. arg_msg = "查询操作失败,结算单明细"
  2033. GOTO ext
  2034. END IF
  2035. Baid = arg_billid
  2036. it_MXBT = i - 1
  2037. it_newbegin=FALSE
  2038. it_updatebegin=FALSE
  2039. ext:
  2040. IF rslt = 0 THEN p_reset()
  2041. RETURN rslt
  2042. end function
  2043. public function integer p_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1
  2044. IF arg_billid <= 0 THEN
  2045. arg_msg = '错误的单据id'
  2046. GOTO ext
  2047. END IF
  2048. SELECT u_Bmstamt.scid,
  2049. u_Bmstamt.cusid,
  2050. u_Bmstamt.banktypeid,
  2051. u_Bmstamt.accountid,
  2052. u_Bmstamt.BaDate,
  2053. u_Bmstamt.Bmstamt,
  2054. u_Bmstamt.dscrp,
  2055. u_Bmstamt.flag,
  2056. u_Bmstamt.BaCode,
  2057. u_Bmstamt.billtype,
  2058. u_Bmstamt.relid,
  2059. u_Bmstamt.itemid,
  2060. u_Bmstamt.BaRep,
  2061. u_Bmstamt.moneyid,
  2062. u_Bmstamt.mrate,
  2063. u_Bmstamt.confirmflag,
  2064. u_Bmstamt.relcode,
  2065. u_Bmstamt.secflag,
  2066. u_Bmstamt.secemp,
  2067. u_Bmstamt.secdate,
  2068. u_Bmstamt.fpcode,
  2069. reldateint,
  2070. viewdate,
  2071. zqamt,
  2072. u_Bmstamt.cwauditingflag,
  2073. u_Bmstamt.cwauditingrep,
  2074. u_Bmstamt.cwauditingdate
  2075. INTO :scid,
  2076. :cusid,
  2077. :banktypeid,
  2078. :accountid,
  2079. :BaDate,
  2080. :Bmstamt,
  2081. :dscrp,
  2082. :flag,
  2083. :BaCode,
  2084. :billtype,
  2085. :relid,
  2086. :itemid,
  2087. :BaRep,
  2088. :moneyid,
  2089. :mrate,
  2090. :confirmflag,
  2091. :relcode,
  2092. :secflag,
  2093. :secemp,
  2094. :secdate,
  2095. :fpcode,
  2096. :reldateint,
  2097. :viewdate,
  2098. :zqamt,
  2099. :cwauditingflag,
  2100. :cwauditingrep,
  2101. :cwauditingdate
  2102. FROM u_Bmstamt
  2103. Where u_Bmstamt.Baid = :arg_billid;
  2104. IF sqlca.SQLCode <> 0 THEN
  2105. rslt = 0
  2106. arg_msg = '查询数据操作失败,收据'+sqlca.SQLErrText
  2107. GOTO ext
  2108. END IF
  2109. Baid = arg_billid
  2110. ext:
  2111. IF rslt = 0 THEN p_reset()
  2112. RETURN rslt
  2113. end function
  2114. on uo_bmstamt.create
  2115. call super::create
  2116. TriggerEvent( this, "constructor" )
  2117. end on
  2118. on uo_bmstamt.destroy
  2119. TriggerEvent( this, "destructor" )
  2120. call super::destroy
  2121. end on