w_rp_multibaracc.srw 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021
  1. $PBExportHeader$w_rp_multibaracc.srw
  2. forward
  3. global type w_rp_multibaracc from w_publ_easyq
  4. end type
  5. type cbx_brief from checkbox within w_rp_multibaracc
  6. end type
  7. end forward
  8. global type w_rp_multibaracc from w_publ_easyq
  9. integer width = 3502
  10. integer height = 2200
  11. string title = "多栏式明细帐"
  12. long backcolor = 80269524
  13. boolean if_ue_sentdataout = true
  14. cbx_brief cbx_brief
  15. end type
  16. global w_rp_multibaracc w_rp_multibaracc
  17. type variables
  18. boolean is_display=false
  19. s_rp_multibar s_rp_multibar
  20. end variables
  21. forward prototypes
  22. public subroutine wf_pr ()
  23. end prototypes
  24. public subroutine wf_pr ();//生成多栏帐报表
  25. Long li_multibarid,li_year,li_firstmon,li_lastmon
  26. String ls_multibarname
  27. s_rp_multibarmx s_multibarmx[]
  28. Long it_mxt
  29. Long itemno
  30. Int dcflag
  31. Int mxt_c
  32. String subid,barname,multibarsubid
  33. Long i,j
  34. String mod_str
  35. Long ls_width,ls_sit,ls_dwidth
  36. Int arg_flag
  37. //**报表重置**********************************************************
  38. dw_1.Reset()
  39. //**取多栏帐参数******************************************************
  40. li_multibarid = s_rp_multibar.relid
  41. ls_multibarname = s_rp_multibar.relname
  42. li_year = s_rp_multibar.Year
  43. li_firstmon = s_rp_multibar.firstmon
  44. li_lastmon = s_rp_multibar.lastmon
  45. multibarsubid = s_rp_multibar.subid
  46. //**取多栏帐项目******************************************************
  47. DECLARE multibar_cur CURSOR FOR
  48. SELECT cw_multibarmx.itemno,
  49. cw_multibarmx.dcflag,
  50. cw_multibarmx.subid,
  51. cw_multibarmx.barname
  52. FROM cw_multibarmx
  53. WHERE cw_multibarmx.accsetid = :sys_accsetid
  54. AND cw_multibarmx.multibarid = :li_multibarid
  55. Order By dcflag Desc ,itemno Asc ;
  56. OPEN multibar_cur;
  57. FETCH multibar_cur INTO :itemno,:dcflag,:subid,:barname;
  58. DO WHILE sqlca.SQLCode = 0
  59. it_mxt++
  60. s_multibarmx[it_mxt].itemno = itemno
  61. s_multibarmx[it_mxt].dcflag = dcflag
  62. s_multibarmx[it_mxt].subid = subid
  63. s_multibarmx[it_mxt].barname = barname
  64. FETCH multibar_cur INTO :itemno,:dcflag,:subid,:barname;
  65. LOOP
  66. CLOSE multibar_cur;
  67. //**处理报表格式******************************************************
  68. IF UpperBound(s_multibarmx) = 0 THEN
  69. RETURN
  70. ELSE
  71. ls_dwidth = Long(dw_1.DESCRIBE('sum01.width'))
  72. FOR i = 1 TO 40
  73. IF i <= UpperBound(s_multibarmx) THEN
  74. mod_str = mod_str+"sum"+String(i,'00')+"_t.text='"+s_multibarmx[i].barname+"' ~n "
  75. mod_str = mod_str+"sum"+String(i,'00')+".width='"+String(ls_dwidth)+"' ~n "
  76. ELSE
  77. mod_str = mod_str+"sum"+String(i,'00')+".visible=0 ~n "
  78. END IF
  79. NEXT
  80. dw_1.Modify(mod_str)
  81. END IF
  82. ls_sit = Long(dw_1.DESCRIBE('balancesum.x'))
  83. ls_width = Long(dw_1.DESCRIBE('balancesum.width'))
  84. dw_1.Modify('bar.width='+String(ls_sit + ls_width + 20))
  85. //***定义变量**********************************************************************************
  86. DateTime firstdate,enddate
  87. Long firstymon,endymon
  88. Decimal or_amt,up_amt
  89. Decimal sum_damt,sum_camt
  90. Decimal balc_amt,mx_balcamt
  91. Decimal mx_damt,mx_camt,mx_damt_1,mx_camt_1
  92. firstymon = li_year * 100 + li_firstmon
  93. endymon = li_year * 100 + li_lastmon
  94. IF firstymon < sys_startyearmon THEN firstymon = sys_startyearmon
  95. firstdate = f_rst_mon_1st(1,firstymon)
  96. enddate = f_rst_mon_1st(3,endymon)
  97. w_sys_wait.Show()
  98. //*****1.期初值********************************************************************************
  99. Long li_row
  100. li_row = dw_1.InsertRow(0)
  101. dw_1.Object.typeflag[li_row] = 0
  102. dw_1.Object.brief[li_row] = '期初余额'
  103. FOR i = 1 TO UpperBound(s_multibarmx)
  104. SELECT bdebit,bcredit INTO :mx_damt,:mx_camt FROM cw_balance
  105. WHERE accsetid = :sys_accsetid
  106. AND subaccsetid = :sys_subaccsetid
  107. AND yearmon = :firstymon
  108. AND subid = :s_multibarmx[i].subid;
  109. IF sqlca.SQLCode <> 0 OR IsNull(mx_damt) THEN mx_damt = 0
  110. IF sqlca.SQLCode <> 0 OR IsNull(mx_camt) THEN mx_camt = 0
  111. IF s_multibarmx[i].dcflag = 0 THEN
  112. sum_camt = sum_camt + mx_camt - mx_damt
  113. dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_camt - mx_damt )
  114. s_multibarmx[i].oramt = mx_camt - mx_damt
  115. ELSE
  116. sum_damt = sum_damt + mx_damt - mx_camt
  117. dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_damt - mx_camt )
  118. s_multibarmx[i].oramt = mx_damt - mx_camt
  119. END IF
  120. NEXT
  121. balc_amt = sum_damt - sum_camt
  122. or_amt = balc_amt //**期初余额
  123. up_amt = balc_amt //**上行结余
  124. dw_1.Object.debitsum[li_row] = sum_damt
  125. dw_1.Object.creditsum[li_row] = sum_camt
  126. dw_1.Object.balancesum[li_row] = Abs(balc_amt)
  127. IF up_amt = 0 THEN
  128. dw_1.Object.direct[li_row] = '平'
  129. ELSEIF up_amt > 0 THEN
  130. dw_1.Object.direct[li_row] = '借'
  131. ELSE
  132. dw_1.Object.direct[li_row] = '贷'
  133. END IF
  134. //*****2.期间发生******************************************************************************
  135. IF is_display THEN
  136. arg_flag = -1
  137. ELSE
  138. arg_flag = 1
  139. END IF
  140. Long ll_credno
  141. Long ll_readtype
  142. DateTime ld_creddate
  143. String ls_brief
  144. Long ls_monthint,cur_monthint
  145. Decimal sum_month_debit,sum_month_credit
  146. Decimal sum_year_debit,sum_year_credit
  147. String ls_credtype
  148. Long ll_credid
  149. datastore ds_multibar
  150. ds_multibar = CREATE datastore
  151. ds_multibar.DataObject = 'ds_multibar_subid'
  152. ds_multibar.SetTransObject(sqlca)
  153. multibarsubid = multibarsubid+'%'
  154. ds_multibar.Retrieve(sys_accsetid,firstymon,endymon,multibarsubid,arg_flag)
  155. sum_damt = 0
  156. sum_camt = 0
  157. IF ds_multibar.RowCount() > 0 THEN
  158. FOR i = 1 TO ds_multibar.RowCount()
  159. FOR j = 1 TO UpperBound(s_multibarmx)
  160. IF ds_multibar.Object.cw_credencemx_subid[i] = s_multibarmx[j].subid THEN
  161. ld_creddate = ds_multibar.Object.cw_credence_creddate[i]
  162. ll_credno = ds_multibar.Object.cw_credence_credno[i]
  163. ls_brief = ds_multibar.Object.cw_credencemx_brief[i]
  164. ls_credtype = ds_multibar.Object.cw_credence_credtype[i]
  165. ll_readtype = ds_multibar.Object.cw_credence_readtype[i]
  166. ll_credid = ds_multibar.Object.cw_credence_credid[i]
  167. mx_damt = ds_multibar.Object.cw_credencemx_debit[i]
  168. mx_camt = ds_multibar.Object.cw_credencemx_credit[i]
  169. IF ll_readtype = 100 OR ll_readtype = 301 THEN //**检查是否结转凭证
  170. li_row = dw_1.InsertRow(0)
  171. dw_1.Object.typeflag[li_row] = 1
  172. dw_1.Object.creddate[li_row] = ld_creddate
  173. dw_1.Object.credno[li_row] = ll_credno
  174. dw_1.Object.brief[li_row] = ls_brief
  175. dw_1.Object.credtype[li_row] = ls_credtype
  176. dw_1.Object.credid[li_row] = ll_credid
  177. IF s_multibarmx[j].dcflag = 1 THEN
  178. dw_1.SetItem ( li_row, "creditsum", mx_camt )
  179. balc_amt = mx_camt - mx_damt
  180. up_amt = up_amt - balc_amt
  181. ELSE
  182. dw_1.SetItem ( li_row, "debitsum", mx_damt )
  183. balc_amt = mx_damt - mx_camt
  184. up_amt = up_amt + balc_amt
  185. END IF
  186. dw_1.Object.balancesum[li_row] = Abs(up_amt)
  187. IF up_amt = 0 THEN
  188. dw_1.Object.direct[li_row] = '平'
  189. ELSEIF up_amt > 0 THEN
  190. dw_1.Object.direct[li_row] = '借'
  191. ELSE
  192. dw_1.Object.direct[li_row] = '贷'
  193. END IF
  194. ELSE
  195. IF i = 1 THEN //--------------第1行
  196. li_row = dw_1.InsertRow(0)
  197. dw_1.Object.typeflag[li_row] = 1
  198. dw_1.Object.creddate[li_row] = ld_creddate
  199. dw_1.Object.credno[li_row] = ll_credno
  200. dw_1.Object.brief[li_row] = ls_brief
  201. dw_1.Object.credtype[li_row] = ls_credtype
  202. dw_1.Object.credid[li_row] = ll_credid
  203. IF s_multibarmx[j].dcflag = 1 THEN
  204. dw_1.SetItem ( li_row, "sum"+String(j,'00'), mx_damt - mx_camt )
  205. sum_damt = sum_damt + mx_damt - mx_camt
  206. ELSE
  207. dw_1.SetItem ( li_row, "sum"+String(j,'00'), mx_camt - mx_damt)
  208. sum_camt = sum_camt + mx_camt - mx_damt
  209. END IF
  210. //只有一张凭证,第2张为结转凭证
  211. IF ds_multibar.RowCount() > 1 THEN
  212. IF ( ds_multibar.Object.cw_credence_readtype[2] = 100 OR &
  213. ds_multibar.Object.cw_credence_readtype[2] = 301 ) THEN
  214. balc_amt = sum_damt - sum_camt
  215. dw_1.Object.debitsum[li_row] = sum_damt
  216. dw_1.Object.creditsum[li_row] = sum_camt
  217. up_amt = up_amt + balc_amt
  218. dw_1.Object.balancesum[li_row] = Abs(up_amt)
  219. IF up_amt = 0 THEN
  220. dw_1.Object.direct[li_row] = '平'
  221. ELSEIF up_amt > 0 THEN
  222. dw_1.Object.direct[li_row] = '借'
  223. ELSE
  224. dw_1.Object.direct[li_row] = '贷'
  225. END IF
  226. END IF
  227. END IF
  228. ELSE //------------------第n行
  229. //---------------------相同凭证
  230. IF ds_multibar.Object.cw_credence_creddate[i] = ds_multibar.Object.cw_credence_creddate[i - 1]&
  231. AND ds_multibar.Object.cw_credence_credno[i] = ds_multibar.Object.cw_credence_credno[i - 1] THEN
  232. IF s_multibarmx[j].dcflag = 1 THEN
  233. Decimal tmp_d
  234. tmp_d = dw_1.GetItemDecimal(li_row,"sum"+String(j,'00'))
  235. IF IsNull(tmp_d) THEN tmp_d = 0
  236. dw_1.SetItem ( li_row, "sum"+String(j,'00'),tmp_d + mx_damt - mx_camt )
  237. sum_damt = sum_damt + mx_damt - mx_camt
  238. ELSE
  239. Decimal tmp_c
  240. tmp_c = dw_1.GetItemDecimal(li_row,"sum"+String(j,'00'))
  241. IF IsNull(tmp_c) THEN tmp_c = 0
  242. dw_1.SetItem ( li_row, "sum"+String(j,'00'),tmp_c + mx_camt - mx_damt )
  243. sum_camt = sum_camt + mx_camt - mx_damt
  244. END IF
  245. IF cbx_brief.Checked THEN
  246. IF NOT Pos(dw_1.Object.brief[li_row],ls_brief) > 0 THEN
  247. dw_1.Object.brief[li_row] = dw_1.Object.brief[li_row] + ','+ls_brief
  248. END IF
  249. END IF
  250. IF i = ds_multibar.RowCount() THEN
  251. balc_amt = sum_damt - sum_camt
  252. dw_1.Object.debitsum[li_row] = sum_damt
  253. dw_1.Object.creditsum[li_row] = sum_camt
  254. up_amt = up_amt + balc_amt
  255. dw_1.Object.balancesum[li_row] = Abs(up_amt)
  256. IF up_amt = 0 THEN
  257. dw_1.Object.direct[li_row] = '平'
  258. ELSEIF up_amt > 0 THEN
  259. dw_1.Object.direct[li_row] = '借'
  260. ELSE
  261. dw_1.Object.direct[li_row] = '贷'
  262. END IF
  263. ELSE
  264. IF ds_multibar.Object.cw_credence_readtype[i + 1] = 100 OR ds_multibar.Object.cw_credence_readtype[i + 1] = 301 THEN
  265. balc_amt = sum_damt - sum_camt
  266. dw_1.Object.debitsum[li_row] = sum_damt
  267. dw_1.Object.creditsum[li_row] = sum_camt
  268. up_amt = up_amt + balc_amt
  269. dw_1.Object.balancesum[li_row] = Abs(up_amt)
  270. IF up_amt = 0 THEN
  271. dw_1.Object.direct[li_row] = '平'
  272. ELSEIF up_amt > 0 THEN
  273. dw_1.Object.direct[li_row] = '借'
  274. ELSE
  275. dw_1.Object.direct[li_row] = '贷'
  276. END IF
  277. END IF
  278. END IF
  279. ELSE
  280. //-----------------不是相同凭证
  281. IF NOT(ds_multibar.Object.cw_credence_readtype[i - 1] = 100 OR ds_multibar.Object.cw_credence_readtype[i - 1] = 301) THEN
  282. balc_amt = sum_damt - sum_camt
  283. dw_1.Object.debitsum[li_row] = sum_damt
  284. dw_1.Object.creditsum[li_row] = sum_camt
  285. up_amt = up_amt + balc_amt
  286. dw_1.Object.balancesum[li_row] = Abs(up_amt)
  287. IF up_amt = 0 THEN
  288. dw_1.Object.direct[li_row] = '平'
  289. ELSEIF up_amt > 0 THEN
  290. dw_1.Object.direct[li_row] = '借'
  291. ELSE
  292. dw_1.Object.direct[li_row] = '贷'
  293. END IF
  294. END IF
  295. sum_damt = 0
  296. sum_camt = 0
  297. li_row = dw_1.InsertRow(0)
  298. dw_1.Object.typeflag[li_row] = 1
  299. dw_1.Object.creddate[li_row] = ld_creddate
  300. dw_1.Object.credno[li_row] = ll_credno
  301. dw_1.Object.brief[li_row] = ls_brief
  302. dw_1.Object.credtype[li_row] = ls_credtype
  303. dw_1.Object.credid[li_row] = ll_credid
  304. IF s_multibarmx[j].dcflag = 1 THEN
  305. dw_1.SetItem ( li_row, "sum"+String(j,'00'), mx_damt - mx_camt )
  306. sum_damt = sum_damt + mx_damt - mx_camt
  307. ELSE
  308. dw_1.SetItem ( li_row, "sum"+String(j,'00'), mx_camt - mx_damt )
  309. sum_camt = sum_camt + mx_camt - mx_damt
  310. END IF
  311. IF i = ds_multibar.RowCount() THEN
  312. balc_amt = sum_damt - sum_camt
  313. dw_1.Object.debitsum[li_row] = sum_damt
  314. dw_1.Object.creditsum[li_row] = sum_camt
  315. up_amt = up_amt + balc_amt
  316. dw_1.Object.balancesum[li_row] = Abs(up_amt)
  317. IF up_amt = 0 THEN
  318. dw_1.Object.direct[li_row] = '平'
  319. ELSEIF up_amt > 0 THEN
  320. dw_1.Object.direct[li_row] = '借'
  321. ELSE
  322. dw_1.Object.direct[li_row] = '贷'
  323. END IF
  324. ELSE
  325. IF ds_multibar.Object.cw_credence_readtype[i + 1] = 100 OR ds_multibar.Object.cw_credence_readtype[i + 1] = 301 THEN
  326. balc_amt = sum_damt - sum_camt
  327. dw_1.Object.debitsum[li_row] = sum_damt
  328. dw_1.Object.creditsum[li_row] = sum_camt
  329. up_amt = up_amt + balc_amt
  330. dw_1.Object.balancesum[li_row] = Abs(up_amt)
  331. IF up_amt = 0 THEN
  332. dw_1.Object.direct[li_row] = '平'
  333. ELSEIF up_amt > 0 THEN
  334. dw_1.Object.direct[li_row] = '借'
  335. ELSE
  336. dw_1.Object.direct[li_row] = '贷'
  337. END IF
  338. END IF
  339. END IF
  340. END IF
  341. END IF
  342. END IF
  343. END IF
  344. NEXT
  345. NEXT
  346. END IF
  347. //**多月中间合计*******************************************************
  348. Long k
  349. Long ll_tmp_year
  350. Long ll_stat_month
  351. Decimal or_ydebit,or_ycredit
  352. Boolean if_sameyear = FALSE
  353. IF Left(String(firstymon),4) = Left(String(sys_startyearmon),4) THEN
  354. if_sameyear = TRUE
  355. ELSE
  356. if_sameyear = FALSE
  357. END IF
  358. ll_stat_month = firstymon
  359. dw_1.AcceptText()
  360. IF dw_1.RowCount() > 1 THEN
  361. k = 1
  362. DO WHILE k <= dw_1.RowCount()
  363. CHOOSE CASE dw_1.Object.typeflag[k]
  364. CASE 0
  365. k++
  366. CASE 1
  367. ld_creddate = dw_1.Object.creddate[k]
  368. ls_monthint = Year(Date(String(ld_creddate,'yyyy-mm-dd'))) * 100 + Month(Date(String(ld_creddate,'yyyy-mm-dd')))
  369. IF cur_monthint > 0 THEN
  370. IF ls_monthint <> cur_monthint THEN
  371. ll_tmp_year = Long(Left(String(ll_stat_month),4)) * 100
  372. //3.本期合计
  373. sum_month_debit = 0
  374. sum_month_credit = 0
  375. li_row = dw_1.InsertRow(k)
  376. dw_1.Object.typeflag[li_row] = 2
  377. dw_1.Object.brief[li_row] = '本期合计'
  378. FOR i = 1 TO UpperBound(s_multibarmx)
  379. SELECT sum(debit),sum(credit) INTO :mx_damt,:mx_camt
  380. FROM cw_credence,cw_credencemx
  381. WHERE cw_credence.accsetid = :sys_accsetid
  382. AND cw_credence.subaccsetid = :sys_subaccsetid
  383. AND cw_credence.cmonth = :ll_stat_month
  384. AND cw_credence.accsetid = cw_credencemx.accsetid
  385. AND cw_credence.subaccsetid = cw_credencemx.subaccsetid
  386. AND cw_credence.credid = cw_credencemx.credid
  387. AND cw_credencemx.subid = :s_multibarmx[i].subid
  388. AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 )
  389. AND ( cw_credence.readtype <> 100 )
  390. AND ( cw_credence.readtype <> 301 ) ;
  391. IF sqlca.SQLCode <> 0 OR IsNull(mx_camt) THEN mx_camt = 0
  392. IF sqlca.SQLCode <> 0 OR IsNull(mx_damt) THEN mx_damt = 0
  393. SELECT sum(debit),sum(credit) INTO :mx_damt_1,:mx_camt_1
  394. FROM cw_credence,cw_credencemx
  395. WHERE cw_credence.accsetid = :sys_accsetid
  396. AND cw_credence.subaccsetid = :sys_subaccsetid
  397. AND cw_credence.accsetid = cw_credencemx.accsetid
  398. AND cw_credence.subaccsetid = cw_credencemx.subaccsetid
  399. AND cw_credence.credid = cw_credencemx.credid
  400. AND cw_credence.cmonth = :ll_stat_month
  401. AND cw_credencemx.subid = :s_multibarmx[i].subid
  402. AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 )
  403. AND ( cw_credence.readtype = 100 OR cw_credence.readtype = 301 ) ;
  404. IF sqlca.SQLCode <> 0 OR IsNull(mx_camt_1) THEN mx_camt_1 = 0
  405. IF sqlca.SQLCode <> 0 OR IsNull(mx_damt_1) THEN mx_damt_1 = 0
  406. IF s_multibarmx[i].dcflag = 0 THEN
  407. dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_camt - mx_damt )
  408. sum_month_debit = sum_month_debit + mx_damt_1 - mx_camt_1
  409. sum_month_credit = sum_month_credit + mx_camt - mx_damt
  410. s_multibarmx[i].mamt = s_multibarmx[i].mamt + mx_camt - mx_damt - (mx_damt_1 - mx_camt_1)
  411. ELSE
  412. dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_damt - mx_camt )
  413. sum_month_debit = sum_month_debit + mx_damt - mx_camt
  414. sum_month_credit = sum_month_credit + mx_camt_1 - mx_damt_1
  415. s_multibarmx[i].mamt = s_multibarmx[i].mamt + mx_damt - mx_camt - (mx_camt_1 - mx_damt_1)
  416. END IF
  417. NEXT
  418. dw_1.Object.debitsum[li_row] = sum_month_debit
  419. dw_1.Object.creditsum[li_row] = sum_month_credit
  420. balc_amt = dw_1.Object.balancesum[li_row - 1]
  421. dw_1.Object.balancesum[li_row] = Abs(balc_amt)
  422. IF balc_amt = 0 THEN
  423. dw_1.Object.direct[li_row] = '平'
  424. ELSEIF balc_amt > 0 THEN
  425. dw_1.Object.direct[li_row] = '借'
  426. ELSE
  427. dw_1.Object.direct[li_row] = '贷'
  428. END IF
  429. k++
  430. //4.本年累计
  431. li_row = dw_1.InsertRow(k)
  432. dw_1.Object.typeflag[li_row] = 3
  433. dw_1.Object.brief[li_row] = '本年累计'
  434. sum_year_debit = 0
  435. sum_year_credit = 0
  436. FOR i = 1 TO UpperBound(s_multibarmx)
  437. mx_damt = 0
  438. mx_camt = 0
  439. SELECT sum(credit),sum(debit) INTO :mx_camt,:mx_damt FROM cw_credence,cw_credencemx
  440. WHERE cw_credence.accsetid = cw_credencemx.accsetid
  441. AND cw_credence.credid = cw_credencemx.credid
  442. AND cw_credence.accsetid = :sys_accsetid
  443. AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 )
  444. AND cw_credencemx.subid = :s_multibarmx[i].subid
  445. AND cw_credence.cmonth - :ll_tmp_year <= 12
  446. AND cw_credence.cmonth - :ll_tmp_year >= 1
  447. AND cw_credence.cmonth <= :ll_stat_month
  448. AND ( cw_credence.readtype <> 100 )
  449. AND ( cw_credence.readtype <> 301 ) ;
  450. IF sqlca.SQLCode <> 0 OR IsNull(mx_camt) THEN mx_camt = 0
  451. IF sqlca.SQLCode <> 0 OR IsNull(mx_damt) THEN mx_damt = 0
  452. SELECT sum(credit),sum(debit) INTO :mx_camt_1,:mx_damt_1 FROM cw_credence,cw_credencemx
  453. WHERE cw_credence.accsetid = cw_credencemx.accsetid
  454. AND cw_credence.credid = cw_credencemx.credid
  455. AND cw_credence.accsetid = :sys_accsetid
  456. AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 )
  457. AND cw_credencemx.subid = :s_multibarmx[i].subid
  458. AND cw_credence.cmonth - :ll_tmp_year <= 12
  459. AND cw_credence.cmonth - :ll_tmp_year >= 1
  460. AND cw_credence.cmonth <= :ll_stat_month
  461. AND ( cw_credence.readtype = 100 OR cw_credence.readtype = 301 ) ;
  462. IF sqlca.SQLCode <> 0 OR IsNull(mx_camt_1) THEN mx_camt_1 = 0
  463. IF sqlca.SQLCode <> 0 OR IsNull(mx_damt_1) THEN mx_damt_1 = 0
  464. IF if_sameyear THEN
  465. SELECT sum(debit),sum(credit) INTO :or_ydebit,:or_ycredit FROM cw_InitBalance
  466. WHERE cw_InitBalance.accsetid = :sys_accsetid
  467. AND cw_InitBalance.subid = :s_multibarmx[i].subid;
  468. IF sqlca.SQLCode <> 0 OR IsNull(or_ydebit) THEN or_ydebit = 0
  469. IF sqlca.SQLCode <> 0 OR IsNull(or_ycredit) THEN or_ycredit = 0
  470. ELSE
  471. or_ydebit = 0
  472. or_ycredit = 0
  473. END IF
  474. IF s_multibarmx[i].dcflag = 0 THEN
  475. dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_camt - mx_damt + or_ycredit )
  476. sum_year_debit = sum_year_debit + mx_damt_1 - mx_camt_1 + or_ydebit
  477. sum_year_credit = sum_year_credit + mx_camt - mx_damt + or_ycredit
  478. ELSE
  479. dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_damt - mx_camt + or_ydebit )
  480. sum_year_debit = sum_year_debit + mx_damt - mx_camt + or_ydebit
  481. sum_year_credit = sum_year_credit + mx_camt_1 - mx_damt_1 + or_ycredit
  482. END IF
  483. NEXT
  484. dw_1.Object.debitsum[li_row] = sum_year_debit
  485. dw_1.Object.creditsum[li_row] = sum_year_credit
  486. dw_1.Object.balancesum[li_row] = Abs(balc_amt)
  487. balc_amt = dw_1.Object.balancesum[li_row - 1]
  488. IF balc_amt = 0 THEN
  489. dw_1.Object.direct[li_row] = '平'
  490. ELSEIF balc_amt > 0 THEN
  491. dw_1.Object.direct[li_row] = '借'
  492. ELSE
  493. dw_1.Object.direct[li_row] = '贷'
  494. END IF
  495. k++
  496. //5.余额
  497. li_row = dw_1.InsertRow(k)
  498. dw_1.Object.typeflag[li_row] = 4
  499. dw_1.Object.brief[li_row] = '余 额'
  500. FOR i = 1 TO UpperBound(s_multibarmx)
  501. dw_1.SetItem ( li_row, "sum"+String(i,'00'), s_multibarmx[i].oramt + s_multibarmx[i].mamt )
  502. NEXT
  503. dw_1.AcceptText()
  504. ll_stat_month = ll_stat_month + 1
  505. END IF
  506. END IF
  507. k++
  508. cur_monthint = ls_monthint
  509. CASE 2,3
  510. cur_monthint = 0
  511. k++
  512. END CHOOSE
  513. LOOP
  514. END IF
  515. //**最后一行合计*******************************************************
  516. IF ds_multibar.RowCount() > 0 THEN
  517. //3.本期合计
  518. ll_stat_month = endymon
  519. ll_tmp_year = Long(Left(String(ll_stat_month),4)) * 100
  520. sum_month_debit = 0
  521. sum_month_credit = 0
  522. li_row = dw_1.InsertRow(0)
  523. dw_1.Object.brief[li_row] = '本期合计'
  524. FOR i = 1 TO UpperBound(s_multibarmx)
  525. SELECT sum(debit),sum(credit) INTO :mx_damt,:mx_camt
  526. FROM cw_credence,cw_credencemx
  527. WHERE cw_credence.accsetid = :sys_accsetid
  528. AND cw_credence.subaccsetid = :sys_subaccsetid
  529. AND cw_credence.accsetid = cw_credencemx.accsetid
  530. AND cw_credence.subaccsetid = cw_credencemx.subaccsetid
  531. AND cw_credence.credid = cw_credencemx.credid
  532. AND cw_credence.cmonth = :ll_stat_month
  533. AND cw_credencemx.subid = :s_multibarmx[i].subid
  534. AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 )
  535. AND ( cw_credence.readtype <> 100 )
  536. AND ( cw_credence.readtype <> 301 ) ;
  537. IF sqlca.SQLCode <> 0 OR IsNull(mx_camt) THEN mx_camt = 0
  538. IF sqlca.SQLCode <> 0 OR IsNull(mx_damt) THEN mx_damt = 0
  539. SELECT sum(debit),sum(credit) INTO :mx_damt_1,:mx_camt_1
  540. FROM cw_credence,cw_credencemx
  541. WHERE cw_credence.accsetid = :sys_accsetid
  542. AND cw_credence.subaccsetid = :sys_subaccsetid
  543. AND cw_credence.accsetid = cw_credencemx.accsetid
  544. AND cw_credence.subaccsetid = cw_credencemx.subaccsetid
  545. AND cw_credence.credid = cw_credencemx.credid
  546. AND cw_credence.cmonth = :ll_stat_month
  547. AND cw_credencemx.subid = :s_multibarmx[i].subid
  548. AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 )
  549. AND ( cw_credence.readtype = 100 OR cw_credence.readtype = 301 ) ;
  550. IF sqlca.SQLCode <> 0 OR IsNull(mx_camt_1) THEN mx_camt_1 = 0
  551. IF sqlca.SQLCode <> 0 OR IsNull(mx_damt_1) THEN mx_damt_1 = 0
  552. IF s_multibarmx[i].dcflag = 0 THEN
  553. dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_camt - mx_damt )
  554. sum_month_debit = sum_month_debit + mx_damt_1 - mx_camt_1
  555. sum_month_credit = sum_month_credit + mx_camt - mx_damt
  556. s_multibarmx[i].mamt = s_multibarmx[i].mamt + mx_camt - mx_damt - (mx_damt_1 - mx_camt_1)
  557. ELSE
  558. dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_damt - mx_camt )
  559. sum_month_debit = sum_month_debit + mx_damt - mx_camt
  560. sum_month_credit = sum_month_credit + mx_camt_1 - mx_damt_1
  561. s_multibarmx[i].mamt = s_multibarmx[i].mamt + mx_damt - mx_camt - (mx_camt_1 - mx_damt_1)
  562. END IF
  563. NEXT
  564. dw_1.Object.debitsum[li_row] = sum_month_debit
  565. dw_1.Object.creditsum[li_row] = sum_month_credit
  566. balc_amt = dw_1.Object.balancesum[li_row - 1]
  567. dw_1.Object.balancesum[li_row] = Abs(balc_amt)
  568. IF balc_amt = 0 THEN
  569. dw_1.Object.direct[li_row] = '平'
  570. ELSEIF balc_amt > 0 THEN
  571. dw_1.Object.direct[li_row] = '借'
  572. ELSE
  573. dw_1.Object.direct[li_row] = '贷'
  574. END IF
  575. //4.本年累计
  576. li_row = dw_1.InsertRow(0)
  577. dw_1.Object.brief[li_row] = '本年累计'
  578. sum_year_debit = 0
  579. sum_year_credit = 0
  580. FOR i = 1 TO UpperBound(s_multibarmx)
  581. SELECT sum(credit),sum(debit) INTO :mx_camt,:mx_damt FROM cw_credence,cw_credencemx
  582. WHERE cw_credence.accsetid = cw_credencemx.accsetid
  583. AND cw_credence.credid = cw_credencemx.credid
  584. AND cw_credence.accsetid = :sys_accsetid
  585. AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 )
  586. AND cw_credencemx.subid = :s_multibarmx[i].subid
  587. AND cw_credence.cmonth - :ll_tmp_year <= 12
  588. AND cw_credence.cmonth - :ll_tmp_year >= 1
  589. AND cw_credence.cmonth <= :ll_stat_month
  590. AND ( cw_credence.readtype <> 100 )
  591. AND ( cw_credence.readtype <> 301 ) ;
  592. IF sqlca.SQLCode <> 0 OR IsNull(mx_camt) THEN mx_camt = 0
  593. IF sqlca.SQLCode <> 0 OR IsNull(mx_damt) THEN mx_damt = 0
  594. SELECT sum(credit),sum(debit) INTO :mx_camt_1,:mx_damt_1 FROM cw_credence,cw_credencemx
  595. WHERE cw_credence.accsetid = cw_credencemx.accsetid
  596. AND cw_credence.credid = cw_credencemx.credid
  597. AND cw_credence.accsetid = :sys_accsetid
  598. AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 )
  599. AND cw_credencemx.subid = :s_multibarmx[i].subid
  600. AND cw_credence.cmonth - :ll_tmp_year <= 12
  601. AND cw_credence.cmonth - :ll_tmp_year >= 1
  602. AND cw_credence.cmonth <= :ll_stat_month
  603. AND ( cw_credence.readtype = 100 OR cw_credence.readtype = 301 ) ;
  604. IF sqlca.SQLCode <> 0 OR IsNull(mx_camt_1) THEN mx_camt_1 = 0
  605. IF sqlca.SQLCode <> 0 OR IsNull(mx_damt_1) THEN mx_damt_1 = 0
  606. IF if_sameyear THEN
  607. SELECT sum(debit),sum(credit) INTO :or_ydebit,:or_ycredit FROM cw_InitBalance
  608. WHERE cw_InitBalance.accsetid = :sys_accsetid
  609. AND cw_InitBalance.subid = :s_multibarmx[i].subid;
  610. IF sqlca.SQLCode <> 0 OR IsNull(or_ydebit) THEN or_ydebit = 0
  611. IF sqlca.SQLCode <> 0 OR IsNull(or_ycredit) THEN or_ycredit = 0
  612. ELSE
  613. or_ydebit = 0
  614. or_ycredit = 0
  615. END IF
  616. IF s_multibarmx[i].dcflag = 0 THEN
  617. dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_camt - mx_damt + or_ycredit )
  618. sum_year_debit = sum_year_debit + mx_damt_1 - mx_camt_1 + or_ydebit
  619. sum_year_credit = sum_year_credit + mx_camt - mx_damt + or_ycredit
  620. ELSE
  621. dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_damt - mx_camt + or_ydebit )
  622. sum_year_debit = sum_year_debit + mx_damt - mx_camt + or_ydebit
  623. sum_year_credit = sum_year_credit + mx_camt_1 - mx_damt_1 + or_ycredit
  624. END IF
  625. NEXT
  626. dw_1.Object.debitsum[li_row] = sum_year_debit
  627. dw_1.Object.creditsum[li_row] = sum_year_debit
  628. balc_amt = dw_1.Object.balancesum[li_row - 1]
  629. dw_1.Object.balancesum[li_row] = Abs(balc_amt)
  630. IF balc_amt = 0 THEN
  631. dw_1.Object.direct[li_row] = '平'
  632. ELSEIF balc_amt > 0 THEN
  633. dw_1.Object.direct[li_row] = '借'
  634. ELSE
  635. dw_1.Object.direct[li_row] = '贷'
  636. END IF
  637. //5.余额
  638. li_row = dw_1.InsertRow(0)
  639. dw_1.Object.brief[li_row] = '余 额'
  640. FOR i = 1 TO UpperBound(s_multibarmx)
  641. dw_1.SetItem ( li_row, "sum"+String(i,'00'), s_multibarmx[i].oramt + s_multibarmx[i].mamt )
  642. NEXT
  643. END IF
  644. //改变标题
  645. dw_1.Object.Title.Text = ls_multibarname + "明细帐"
  646. dw_1.Object.Month.Text = "会计期间:"+String(firstymon)+" 至 "+String(endymon)
  647. w_sys_wait.Hide()
  648. end subroutine
  649. on w_rp_multibaracc.create
  650. int iCurrent
  651. call super::create
  652. this.cbx_brief=create cbx_brief
  653. iCurrent=UpperBound(this.Control)
  654. this.Control[iCurrent+1]=this.cbx_brief
  655. end on
  656. on w_rp_multibaracc.destroy
  657. call super::destroy
  658. destroy(this.cbx_brief)
  659. end on
  660. event open;this.triggerevent('ue_before_open')
  661. wf_movetocenter()
  662. IF TRIM(DW_1.DATAOBJECT)<>'' THEN
  663. DW_1.OBJECT.DataWindow.PRINT.MARGIN.TOP=INTEGER(ProfileString(sys_inifilename,DW_1.DATAOBJECT, "MARGIN_TOP", "110"))
  664. DW_1.OBJECT.DataWindow.PRINT.MARGIN.LEFT=INTEGER(ProfileString(sys_inifilename,DW_1.DATAOBJECT, "MARGIN_LEFT", "96" ))
  665. DW_1.OBJECT.DataWindow.PRINT.MARGIN.bottom=INTEGER(ProfileString(sys_inifilename,DW_1.DATAOBJECT, "MARGIN_BOTTOM", "110"))
  666. DW_1.OBJECT.DataWindow.PRINT.MARGIN.right=INTEGER(ProfileString(sys_inifilename,DW_1.DATAOBJECT, "MARGIN_RIGHT", "96" ))
  667. end if
  668. Int use_brief
  669. use_brief = Integer(ProfileString (sys_inifilename,dw_1.DataObject, "use_brief", '0'))
  670. IF use_brief = 1 THEN
  671. cbx_brief.Checked = TRUE
  672. ELSE
  673. cbx_brief.Checked = FALSE
  674. END IF
  675. dw_1.SetTransObject (sqlca)
  676. cb_1.triggerevent(clicked!)
  677. end event
  678. event close;Int use_brief
  679. IF cbx_brief.Checked THEN
  680. use_brief = 1
  681. ELSE
  682. use_brief = 0
  683. END IF
  684. SetProfileString (sys_inifilename,dw_1.DataObject, "use_brief", String(use_brief))
  685. end event
  686. event ue_before_open;call super::ue_before_open;if_ue_filter = TRUE
  687. if_ue_sort = TRUE
  688. if_ue_sentdataout = TRUE
  689. end event
  690. type cb_func from w_publ_easyq`cb_func within w_rp_multibaracc
  691. end type
  692. type cb_exit from w_publ_easyq`cb_exit within w_rp_multibaracc
  693. integer x = 965
  694. end type
  695. type cb_2 from w_publ_easyq`cb_2 within w_rp_multibaracc
  696. boolean bringtotop = true
  697. end type
  698. type cb_psetup from w_publ_easyq`cb_psetup within w_rp_multibaracc
  699. boolean bringtotop = true
  700. end type
  701. type cb_1 from w_publ_easyq`cb_1 within w_rp_multibaracc
  702. boolean bringtotop = true
  703. string text = "过滤"
  704. end type
  705. event cb_1::clicked;call super::clicked;open(w_rp_multibar)
  706. s_rp_multibar=message.powerobjectparm
  707. long firstmon,lastmon,ls_multibarid,ls_firstmon,ls_lastmon
  708. ls_multibarid=s_rp_multibar.relid
  709. if ls_multibarid=0 then
  710. if is_display then
  711. return
  712. else
  713. close(parent)
  714. return
  715. end if
  716. end if
  717. is_display=true
  718. wf_pr()
  719. end event
  720. type st_3 from w_publ_easyq`st_3 within w_rp_multibaracc
  721. integer x = 768
  722. integer y = 736
  723. end type
  724. type st_4 from w_publ_easyq`st_4 within w_rp_multibaracc
  725. integer x = 1710
  726. integer y = 624
  727. end type
  728. type em_1 from w_publ_easyq`em_1 within w_rp_multibaracc
  729. integer x = 987
  730. integer y = 700
  731. end type
  732. type em_2 from w_publ_easyq`em_2 within w_rp_multibaracc
  733. integer x = 1321
  734. integer y = 780
  735. end type
  736. type ddlb_yl from w_publ_easyq`ddlb_yl within w_rp_multibaracc
  737. integer x = 1358
  738. integer y = 52
  739. end type
  740. type cbx_yl from w_publ_easyq`cbx_yl within w_rp_multibaracc
  741. integer x = 1138
  742. integer y = 52
  743. end type
  744. type dw_1 from w_publ_easyq`dw_1 within w_rp_multibaracc
  745. integer y = 300
  746. integer width = 2537
  747. integer height = 952
  748. string dataobject = "dw_multibaracc"
  749. end type
  750. event dw_1::doubleclicked;Long ll_row
  751. Long ll_credid
  752. ll_row = THIS.GetRow()
  753. IF ll_row <= 0 THEN RETURN
  754. ll_credid = THIS.Object.credid[ll_row]
  755. IF ll_credid <= 0 THEN RETURN
  756. s_edit_index_tran s_tran //翻页功能窗口 传递参数使用
  757. s_tran.if_retrieve_all = TRUE //是否一次RETRIEVE所有行
  758. s_tran.work_mode = 0 //0-单纯编辑模式, 1-选择模式
  759. s_tran.arg_pkid = 0 //目标定位PKID (备用)
  760. s_tran.arg_string_code = '' //查询列部分内容,用于初步筛选
  761. s_tran.e_long = ll_credid
  762. OpenWithParm(w_credence_edit,s_tran)
  763. end event
  764. type sle_mtrl from w_publ_easyq`sle_mtrl within w_rp_multibaracc
  765. integer x = 1659
  766. integer y = 952
  767. end type
  768. type sle_cust from w_publ_easyq`sle_cust within w_rp_multibaracc
  769. integer x = 498
  770. integer y = 952
  771. end type
  772. type st_mtrl from w_publ_easyq`st_mtrl within w_rp_multibaracc
  773. integer x = 1202
  774. integer y = 968
  775. end type
  776. type st_cust from w_publ_easyq`st_cust within w_rp_multibaracc
  777. integer x = 37
  778. integer y = 968
  779. end type
  780. type cbx_loginretr from w_publ_easyq`cbx_loginretr within w_rp_multibaracc
  781. integer x = 1851
  782. integer y = 748
  783. end type
  784. type pb_em1 from w_publ_easyq`pb_em1 within w_rp_multibaracc
  785. boolean visible = false
  786. integer x = 599
  787. integer y = 836
  788. end type
  789. type pb_em2 from w_publ_easyq`pb_em2 within w_rp_multibaracc
  790. boolean visible = false
  791. integer x = 1211
  792. integer y = 836
  793. end type
  794. type pb_2 from w_publ_easyq`pb_2 within w_rp_multibaracc
  795. boolean visible = false
  796. integer x = 1321
  797. integer y = 836
  798. end type
  799. type cb_help from w_publ_easyq`cb_help within w_rp_multibaracc
  800. boolean visible = false
  801. integer x = 2542
  802. integer y = 668
  803. end type
  804. type cb_copyself from w_publ_easyq`cb_copyself within w_rp_multibaracc
  805. end type
  806. type gb_1 from w_publ_easyq`gb_1 within w_rp_multibaracc
  807. end type
  808. type ln_bar from w_publ_easyq`ln_bar within w_rp_multibaracc
  809. end type
  810. type ln_bar2 from w_publ_easyq`ln_bar2 within w_rp_multibaracc
  811. end type
  812. type r_bar from w_publ_easyq`r_bar within w_rp_multibaracc
  813. end type
  814. type ln_1 from w_publ_easyq`ln_1 within w_rp_multibaracc
  815. boolean visible = false
  816. end type
  817. type ln_2 from w_publ_easyq`ln_2 within w_rp_multibaracc
  818. boolean visible = false
  819. end type
  820. type ln_3 from w_publ_easyq`ln_3 within w_rp_multibaracc
  821. boolean visible = false
  822. end type
  823. type ln_4 from w_publ_easyq`ln_4 within w_rp_multibaracc
  824. boolean visible = false
  825. end type
  826. type cbx_brief from checkbox within w_rp_multibaracc
  827. integer x = 27
  828. integer y = 212
  829. integer width = 681
  830. integer height = 60
  831. boolean bringtotop = true
  832. integer textsize = -9
  833. integer weight = 400
  834. fontcharset fontcharset = gb2312charset!
  835. fontpitch fontpitch = variable!
  836. string facename = "宋体"
  837. long textcolor = 33554432
  838. long backcolor = 67108864
  839. string text = "相同凭证合并分录摘要"
  840. end type