$PBExportHeader$f_amt.srf $PBExportComments$取科目金额 global type f_amt from function_object end type forward prototypes global function decimal f_amt (long arg_accsetid, string arg_subid, string arg_str, long arg_mth, transaction arg_sqlca) end prototypes 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) //科目余额表取数 //arg_subid:科目名称 //arg_str:类型串(年初余额,期初余额,本期累计,期末余额,本年累计等等) Decimal{2} rst_amt, year_amt = 0 Int ii_dcflag Long tmp_year Long ll_length_subid Boolean if_sameyear = FALSE tmp_year = Long(Left(String(arg_mth),4)) * 100 IF Left(String(arg_mth),4) = Left(String(sys_startyearmon),4) THEN if_sameyear = TRUE ELSE if_sameyear = FALSE END IF ll_length_subid = Len(arg_subid) SELECT dcflag INTO :ii_dcflag FROM cw_subject WHERE accsetid = :arg_accsetid AND subid = :arg_subid USING arg_sqlca; IF arg_sqlca.SQLCode <> 0 THEN ii_dcflag = 1 END IF rst_amt = 0 year_amt = 0 CHOOSE CASE arg_str CASE '本期借方' SELECT sum(debit) INTO :rst_amt FROM cw_balance WHERE accsetid = :arg_accsetid AND subaccsetid = 0 AND yearmon = :arg_mth AND subid = :arg_subid USING arg_sqlca; CASE '本期贷方' SELECT sum(credit) INTO :rst_amt FROM cw_balance WHERE accsetid = :arg_accsetid AND subaccsetid = 0 AND yearmon = :arg_mth AND subid = :arg_subid USING arg_sqlca; CASE '年初余额' IF ii_dcflag = 1 THEN SELECT sum(ybdebit) - sum(ybcredit) INTO :rst_amt FROM cw_balance WHERE accsetid = :arg_accsetid AND subaccsetid = 0 AND yearmon = :arg_mth AND subid = :arg_subid USING arg_sqlca; ELSE SELECT sum(ybcredit) - sum(ybdebit) INTO :rst_amt FROM cw_balance WHERE accsetid = :arg_accsetid AND subaccsetid = 0 AND yearmon = :arg_mth AND subid = :arg_subid USING arg_sqlca; END IF CASE '期初余额' IF ii_dcflag = 1 THEN SELECT sum(bdebit) - sum(bcredit) INTO :rst_amt FROM cw_balance WHERE accsetid = :arg_accsetid AND subaccsetid = 0 AND yearmon = :arg_mth AND subid = :arg_subid USING arg_sqlca; ELSE SELECT sum(bcredit) - sum(bdebit) INTO :rst_amt FROM cw_balance WHERE accsetid = :arg_accsetid AND subaccsetid = 0 AND yearmon = :arg_mth AND subid = :arg_subid USING arg_sqlca; END IF CASE '本期累计' IF ii_dcflag = 1 THEN SELECT sum(debit) - sum(credit) INTO :rst_amt FROM cw_balance WHERE accsetid = :arg_accsetid AND subaccsetid = 0 AND yearmon = :arg_mth AND subid = :arg_subid USING arg_sqlca; ELSE SELECT sum(credit) - sum(debit) INTO :rst_amt FROM cw_balance WHERE accsetid = :arg_accsetid AND subaccsetid = 0 AND yearmon = :arg_mth AND subid = :arg_subid USING arg_sqlca; END IF CASE '期末余额' IF ii_dcflag = 1 THEN SELECT sum(edebit) - sum(ecredit) INTO :rst_amt FROM cw_balance WHERE accsetid = :arg_accsetid AND subaccsetid = 0 AND yearmon = :arg_mth AND subid = :arg_subid USING arg_sqlca; ELSE SELECT sum(ecredit) - sum(edebit) INTO :rst_amt FROM cw_balance WHERE accsetid = :arg_accsetid AND subaccsetid = 0 AND yearmon = :arg_mth AND subid = :arg_subid USING arg_sqlca; END IF CASE '本年累计' IF ii_dcflag = 1 THEN SELECT sum(ydebit) - sum(ycredit) INTO :rst_amt FROM cw_balance WHERE accsetid = :arg_accsetid AND subaccsetid = 0 AND yearmon = :arg_mth AND subid = :arg_subid USING arg_sqlca; ELSE SELECT sum(ycredit) - sum(ydebit) INTO :rst_amt FROM cw_balance WHERE accsetid = :arg_accsetid AND subaccsetid = 0 AND yearmon = :arg_mth AND subid = :arg_subid USING arg_sqlca; END IF CASE '本期累计[损益]' IF ii_dcflag = 1 THEN SELECT sum(credit) - sum(debit) INTO :rst_amt FROM cw_credence,cw_credencemx WHERE cw_credence.accsetid = cw_credencemx.accsetid AND cw_credence.credid = cw_credencemx.credid AND cw_credence.accsetid = :arg_accsetid AND cw_credence.postflag = 1 AND left(cw_credencemx.subid,:ll_length_subid) = :arg_subid AND cw_credence.cmonth = :arg_mth AND (cw_credence.readtype = 100 ) USING arg_sqlca; ELSE SELECT sum(debit) - sum(credit) INTO :rst_amt FROM cw_credence,cw_credencemx WHERE cw_credence.accsetid = cw_credencemx.accsetid AND cw_credence.credid = cw_credencemx.credid AND cw_credence.accsetid = :arg_accsetid AND cw_credence.postflag = 1 AND left(cw_credencemx.subid,:ll_length_subid) = :arg_subid AND cw_credence.cmonth = :arg_mth AND (cw_credence.readtype = 100 ) USING arg_sqlca; END IF CASE '本年累计[损益]' IF ii_dcflag = 1 THEN SELECT sum(credit) - sum(debit) INTO :rst_amt FROM cw_credence,cw_credencemx WHERE cw_credence.accsetid = cw_credencemx.accsetid AND cw_credence.credid = cw_credencemx.credid AND cw_credence.accsetid = :arg_accsetid AND cw_credence.postflag = 1 AND left(cw_credencemx.subid,:ll_length_subid) = :arg_subid AND cw_credence.cmonth - :tmp_year <= 12 AND cw_credence.cmonth - :tmp_year >= 1 AND cw_credence.cmonth <= :arg_mth AND (cw_credence.readtype = 100 ) USING arg_sqlca; ELSE SELECT sum(debit) - sum(credit) INTO :rst_amt FROM cw_credence,cw_credencemx WHERE cw_credence.accsetid = cw_credencemx.accsetid AND cw_credence.credid = cw_credencemx.credid AND cw_credence.accsetid = :arg_accsetid AND cw_credence.postflag = 1 AND left(cw_credencemx.subid,:ll_length_subid) = :arg_subid AND cw_credence.cmonth - :tmp_year <= 12 AND cw_credence.cmonth - :tmp_year >= 1 AND cw_credence.cmonth <= :arg_mth AND (cw_credence.readtype = 100 ) USING arg_sqlca; END IF END CHOOSE IF arg_sqlca.SQLCode = -1 THEN rst_amt = 0.00 ELSEIF arg_sqlca.SQLCode = 100 THEN rst_amt = 0.00 END IF IF IsNull(rst_amt) THEN rst_amt = 0.00 END IF //**查询期初本年累计 IF arg_str = '本年累计[损益]' AND if_sameyear THEN IF ii_dcflag = 1 THEN SELECT sum(plhavedone) INTO :year_amt FROM cw_InitBalance WHERE cw_InitBalance.accsetid = :arg_accsetid AND cw_InitBalance.subid = :arg_subid USING arg_sqlca; ELSE SELECT sum(plhavedone) INTO :year_amt FROM cw_InitBalance WHERE cw_InitBalance.accsetid = :arg_accsetid AND cw_InitBalance.subid = :arg_subid USING arg_sqlca; END IF END IF IF arg_sqlca.SQLCode = -1 THEN year_amt = 0.00 ELSEIF arg_sqlca.SQLCode = 100 THEN year_amt = 0.00 END IF IF IsNull(year_amt) THEN year_amt = 0.00 END IF //******************** rst_amt = rst_amt + year_amt RETURN rst_amt end function