f_amt.srf 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. $PBExportHeader$f_amt.srf
  2. $PBExportComments$取科目金额
  3. global type f_amt from function_object
  4. end type
  5. forward prototypes
  6. global function decimal f_amt (long arg_accsetid, string arg_subid, string arg_str, long arg_mth, transaction arg_sqlca)
  7. end prototypes
  8. global function decimal f_amt (long arg_accsetid, string arg_subid, string arg_str, long arg_mth, transaction arg_sqlca);//f_getsubfromtable(string arg_subid,string arg_str)
  9. //科目余额表取数
  10. //arg_subid:科目名称
  11. //arg_str:类型串(年初余额,期初余额,本期累计,期末余额,本年累计等等)
  12. Decimal{2} rst_amt, year_amt = 0
  13. Int ii_dcflag
  14. Long tmp_year
  15. Long ll_length_subid
  16. Boolean if_sameyear = FALSE
  17. tmp_year = Long(Left(String(arg_mth),4)) * 100
  18. IF Left(String(arg_mth),4) = Left(String(sys_startyearmon),4) THEN
  19. if_sameyear = TRUE
  20. ELSE
  21. if_sameyear = FALSE
  22. END IF
  23. ll_length_subid = Len(arg_subid)
  24. SELECT dcflag INTO :ii_dcflag FROM cw_subject
  25. WHERE accsetid = :arg_accsetid
  26. AND subid = :arg_subid USING arg_sqlca;
  27. IF arg_sqlca.SQLCode <> 0 THEN
  28. ii_dcflag = 1
  29. END IF
  30. rst_amt = 0
  31. year_amt = 0
  32. CHOOSE CASE arg_str
  33. CASE '本期借方'
  34. SELECT sum(debit) INTO :rst_amt FROM cw_balance
  35. WHERE accsetid = :arg_accsetid
  36. AND subaccsetid = 0
  37. AND yearmon = :arg_mth
  38. AND subid = :arg_subid USING arg_sqlca;
  39. CASE '本期贷方'
  40. SELECT sum(credit) INTO :rst_amt FROM cw_balance
  41. WHERE accsetid = :arg_accsetid
  42. AND subaccsetid = 0
  43. AND yearmon = :arg_mth
  44. AND subid = :arg_subid USING arg_sqlca;
  45. CASE '年初余额'
  46. IF ii_dcflag = 1 THEN
  47. SELECT sum(ybdebit) - sum(ybcredit) INTO :rst_amt FROM cw_balance
  48. WHERE accsetid = :arg_accsetid
  49. AND subaccsetid = 0
  50. AND yearmon = :arg_mth
  51. AND subid = :arg_subid USING arg_sqlca;
  52. ELSE
  53. SELECT sum(ybcredit) - sum(ybdebit) INTO :rst_amt FROM cw_balance
  54. WHERE accsetid = :arg_accsetid
  55. AND subaccsetid = 0
  56. AND yearmon = :arg_mth
  57. AND subid = :arg_subid USING arg_sqlca;
  58. END IF
  59. CASE '期初余额'
  60. IF ii_dcflag = 1 THEN
  61. SELECT sum(bdebit) - sum(bcredit) INTO :rst_amt FROM cw_balance
  62. WHERE accsetid = :arg_accsetid
  63. AND subaccsetid = 0
  64. AND yearmon = :arg_mth
  65. AND subid = :arg_subid USING arg_sqlca;
  66. ELSE
  67. SELECT sum(bcredit) - sum(bdebit) INTO :rst_amt FROM cw_balance
  68. WHERE accsetid = :arg_accsetid
  69. AND subaccsetid = 0
  70. AND yearmon = :arg_mth
  71. AND subid = :arg_subid USING arg_sqlca;
  72. END IF
  73. CASE '本期累计'
  74. IF ii_dcflag = 1 THEN
  75. SELECT sum(debit) - sum(credit) INTO :rst_amt FROM cw_balance
  76. WHERE accsetid = :arg_accsetid
  77. AND subaccsetid = 0
  78. AND yearmon = :arg_mth
  79. AND subid = :arg_subid USING arg_sqlca;
  80. ELSE
  81. SELECT sum(credit) - sum(debit) INTO :rst_amt FROM cw_balance
  82. WHERE accsetid = :arg_accsetid
  83. AND subaccsetid = 0
  84. AND yearmon = :arg_mth
  85. AND subid = :arg_subid USING arg_sqlca;
  86. END IF
  87. CASE '期末余额'
  88. IF ii_dcflag = 1 THEN
  89. SELECT sum(edebit) - sum(ecredit) INTO :rst_amt FROM cw_balance
  90. WHERE accsetid = :arg_accsetid
  91. AND subaccsetid = 0
  92. AND yearmon = :arg_mth
  93. AND subid = :arg_subid USING arg_sqlca;
  94. ELSE
  95. SELECT sum(ecredit) - sum(edebit) INTO :rst_amt FROM cw_balance
  96. WHERE accsetid = :arg_accsetid
  97. AND subaccsetid = 0
  98. AND yearmon = :arg_mth
  99. AND subid = :arg_subid USING arg_sqlca;
  100. END IF
  101. CASE '本年累计'
  102. IF ii_dcflag = 1 THEN
  103. SELECT sum(ydebit) - sum(ycredit) INTO :rst_amt FROM cw_balance
  104. WHERE accsetid = :arg_accsetid
  105. AND subaccsetid = 0
  106. AND yearmon = :arg_mth
  107. AND subid = :arg_subid USING arg_sqlca;
  108. ELSE
  109. SELECT sum(ycredit) - sum(ydebit) INTO :rst_amt FROM cw_balance
  110. WHERE accsetid = :arg_accsetid
  111. AND subaccsetid = 0
  112. AND yearmon = :arg_mth
  113. AND subid = :arg_subid USING arg_sqlca;
  114. END IF
  115. CASE '本期累计[损益]'
  116. IF ii_dcflag = 1 THEN
  117. SELECT sum(credit) - sum(debit) INTO :rst_amt FROM cw_credence,cw_credencemx
  118. WHERE cw_credence.accsetid = cw_credencemx.accsetid
  119. AND cw_credence.credid = cw_credencemx.credid
  120. AND cw_credence.accsetid = :arg_accsetid
  121. AND cw_credence.postflag = 1
  122. AND left(cw_credencemx.subid,:ll_length_subid) = :arg_subid
  123. AND cw_credence.cmonth = :arg_mth
  124. AND (cw_credence.readtype = 100 ) USING arg_sqlca;
  125. ELSE
  126. SELECT sum(debit) - sum(credit) INTO :rst_amt FROM cw_credence,cw_credencemx
  127. WHERE cw_credence.accsetid = cw_credencemx.accsetid
  128. AND cw_credence.credid = cw_credencemx.credid
  129. AND cw_credence.accsetid = :arg_accsetid
  130. AND cw_credence.postflag = 1
  131. AND left(cw_credencemx.subid,:ll_length_subid) = :arg_subid
  132. AND cw_credence.cmonth = :arg_mth
  133. AND (cw_credence.readtype = 100 ) USING arg_sqlca;
  134. END IF
  135. CASE '本年累计[损益]'
  136. IF ii_dcflag = 1 THEN
  137. SELECT sum(credit) - sum(debit) INTO :rst_amt FROM cw_credence,cw_credencemx
  138. WHERE cw_credence.accsetid = cw_credencemx.accsetid
  139. AND cw_credence.credid = cw_credencemx.credid
  140. AND cw_credence.accsetid = :arg_accsetid
  141. AND cw_credence.postflag = 1
  142. AND left(cw_credencemx.subid,:ll_length_subid) = :arg_subid
  143. AND cw_credence.cmonth - :tmp_year <= 12
  144. AND cw_credence.cmonth - :tmp_year >= 1
  145. AND cw_credence.cmonth <= :arg_mth
  146. AND (cw_credence.readtype = 100 ) USING arg_sqlca;
  147. ELSE
  148. SELECT sum(debit) - sum(credit) INTO :rst_amt FROM cw_credence,cw_credencemx
  149. WHERE cw_credence.accsetid = cw_credencemx.accsetid
  150. AND cw_credence.credid = cw_credencemx.credid
  151. AND cw_credence.accsetid = :arg_accsetid
  152. AND cw_credence.postflag = 1
  153. AND left(cw_credencemx.subid,:ll_length_subid) = :arg_subid
  154. AND cw_credence.cmonth - :tmp_year <= 12
  155. AND cw_credence.cmonth - :tmp_year >= 1
  156. AND cw_credence.cmonth <= :arg_mth
  157. AND (cw_credence.readtype = 100 ) USING arg_sqlca;
  158. END IF
  159. END CHOOSE
  160. IF arg_sqlca.SQLCode = -1 THEN
  161. rst_amt = 0.00
  162. ELSEIF arg_sqlca.SQLCode = 100 THEN
  163. rst_amt = 0.00
  164. END IF
  165. IF IsNull(rst_amt) THEN
  166. rst_amt = 0.00
  167. END IF
  168. //**查询期初本年累计
  169. IF arg_str = '本年累计[损益]' AND if_sameyear THEN
  170. IF ii_dcflag = 1 THEN
  171. SELECT sum(plhavedone) INTO :year_amt FROM cw_InitBalance
  172. WHERE cw_InitBalance.accsetid = :arg_accsetid
  173. AND cw_InitBalance.subid = :arg_subid USING arg_sqlca;
  174. ELSE
  175. SELECT sum(plhavedone) INTO :year_amt FROM cw_InitBalance
  176. WHERE cw_InitBalance.accsetid = :arg_accsetid
  177. AND cw_InitBalance.subid = :arg_subid USING arg_sqlca;
  178. END IF
  179. END IF
  180. IF arg_sqlca.SQLCode = -1 THEN
  181. year_amt = 0.00
  182. ELSEIF arg_sqlca.SQLCode = 100 THEN
  183. year_amt = 0.00
  184. END IF
  185. IF IsNull(year_amt) THEN
  186. year_amt = 0.00
  187. END IF
  188. //********************
  189. rst_amt = rst_amt + year_amt
  190. RETURN rst_amt
  191. end function