$PBExportHeader$w_rp_multibaracc.srw forward global type w_rp_multibaracc from w_publ_easyq end type type cbx_brief from checkbox within w_rp_multibaracc end type end forward global type w_rp_multibaracc from w_publ_easyq integer width = 3502 integer height = 2200 string title = "多栏式明细帐" long backcolor = 80269524 boolean if_ue_sentdataout = true cbx_brief cbx_brief end type global w_rp_multibaracc w_rp_multibaracc type variables boolean is_display=false s_rp_multibar s_rp_multibar end variables forward prototypes public subroutine wf_pr () end prototypes public subroutine wf_pr ();//生成多栏帐报表 Long li_multibarid,li_year,li_firstmon,li_lastmon String ls_multibarname s_rp_multibarmx s_multibarmx[] Long it_mxt Long itemno Int dcflag Int mxt_c String subid,barname,multibarsubid Long i,j String mod_str Long ls_width,ls_sit,ls_dwidth Int arg_flag //**报表重置********************************************************** dw_1.Reset() //**取多栏帐参数****************************************************** li_multibarid = s_rp_multibar.relid ls_multibarname = s_rp_multibar.relname li_year = s_rp_multibar.Year li_firstmon = s_rp_multibar.firstmon li_lastmon = s_rp_multibar.lastmon multibarsubid = s_rp_multibar.subid //**取多栏帐项目****************************************************** DECLARE multibar_cur CURSOR FOR SELECT cw_multibarmx.itemno, cw_multibarmx.dcflag, cw_multibarmx.subid, cw_multibarmx.barname FROM cw_multibarmx WHERE cw_multibarmx.accsetid = :sys_accsetid AND cw_multibarmx.multibarid = :li_multibarid Order By dcflag Desc ,itemno Asc ; OPEN multibar_cur; FETCH multibar_cur INTO :itemno,:dcflag,:subid,:barname; DO WHILE sqlca.SQLCode = 0 it_mxt++ s_multibarmx[it_mxt].itemno = itemno s_multibarmx[it_mxt].dcflag = dcflag s_multibarmx[it_mxt].subid = subid s_multibarmx[it_mxt].barname = barname FETCH multibar_cur INTO :itemno,:dcflag,:subid,:barname; LOOP CLOSE multibar_cur; //**处理报表格式****************************************************** IF UpperBound(s_multibarmx) = 0 THEN RETURN ELSE ls_dwidth = Long(dw_1.DESCRIBE('sum01.width')) FOR i = 1 TO 40 IF i <= UpperBound(s_multibarmx) THEN mod_str = mod_str+"sum"+String(i,'00')+"_t.text='"+s_multibarmx[i].barname+"' ~n " mod_str = mod_str+"sum"+String(i,'00')+".width='"+String(ls_dwidth)+"' ~n " ELSE mod_str = mod_str+"sum"+String(i,'00')+".visible=0 ~n " END IF NEXT dw_1.Modify(mod_str) END IF ls_sit = Long(dw_1.DESCRIBE('balancesum.x')) ls_width = Long(dw_1.DESCRIBE('balancesum.width')) dw_1.Modify('bar.width='+String(ls_sit + ls_width + 20)) //***定义变量********************************************************************************** DateTime firstdate,enddate Long firstymon,endymon Decimal or_amt,up_amt Decimal sum_damt,sum_camt Decimal balc_amt,mx_balcamt Decimal mx_damt,mx_camt,mx_damt_1,mx_camt_1 firstymon = li_year * 100 + li_firstmon endymon = li_year * 100 + li_lastmon IF firstymon < sys_startyearmon THEN firstymon = sys_startyearmon firstdate = f_rst_mon_1st(1,firstymon) enddate = f_rst_mon_1st(3,endymon) w_sys_wait.Show() //*****1.期初值******************************************************************************** Long li_row li_row = dw_1.InsertRow(0) dw_1.Object.typeflag[li_row] = 0 dw_1.Object.brief[li_row] = '期初余额' FOR i = 1 TO UpperBound(s_multibarmx) SELECT bdebit,bcredit INTO :mx_damt,:mx_camt FROM cw_balance WHERE accsetid = :sys_accsetid AND subaccsetid = :sys_subaccsetid AND yearmon = :firstymon AND subid = :s_multibarmx[i].subid; IF sqlca.SQLCode <> 0 OR IsNull(mx_damt) THEN mx_damt = 0 IF sqlca.SQLCode <> 0 OR IsNull(mx_camt) THEN mx_camt = 0 IF s_multibarmx[i].dcflag = 0 THEN sum_camt = sum_camt + mx_camt - mx_damt dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_camt - mx_damt ) s_multibarmx[i].oramt = mx_camt - mx_damt ELSE sum_damt = sum_damt + mx_damt - mx_camt dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_damt - mx_camt ) s_multibarmx[i].oramt = mx_damt - mx_camt END IF NEXT balc_amt = sum_damt - sum_camt or_amt = balc_amt //**期初余额 up_amt = balc_amt //**上行结余 dw_1.Object.debitsum[li_row] = sum_damt dw_1.Object.creditsum[li_row] = sum_camt dw_1.Object.balancesum[li_row] = Abs(balc_amt) IF up_amt = 0 THEN dw_1.Object.direct[li_row] = '平' ELSEIF up_amt > 0 THEN dw_1.Object.direct[li_row] = '借' ELSE dw_1.Object.direct[li_row] = '贷' END IF //*****2.期间发生****************************************************************************** IF is_display THEN arg_flag = -1 ELSE arg_flag = 1 END IF Long ll_credno Long ll_readtype DateTime ld_creddate String ls_brief Long ls_monthint,cur_monthint Decimal sum_month_debit,sum_month_credit Decimal sum_year_debit,sum_year_credit String ls_credtype Long ll_credid datastore ds_multibar ds_multibar = CREATE datastore ds_multibar.DataObject = 'ds_multibar_subid' ds_multibar.SetTransObject(sqlca) multibarsubid = multibarsubid+'%' ds_multibar.Retrieve(sys_accsetid,firstymon,endymon,multibarsubid,arg_flag) sum_damt = 0 sum_camt = 0 IF ds_multibar.RowCount() > 0 THEN FOR i = 1 TO ds_multibar.RowCount() FOR j = 1 TO UpperBound(s_multibarmx) IF ds_multibar.Object.cw_credencemx_subid[i] = s_multibarmx[j].subid THEN ld_creddate = ds_multibar.Object.cw_credence_creddate[i] ll_credno = ds_multibar.Object.cw_credence_credno[i] ls_brief = ds_multibar.Object.cw_credencemx_brief[i] ls_credtype = ds_multibar.Object.cw_credence_credtype[i] ll_readtype = ds_multibar.Object.cw_credence_readtype[i] ll_credid = ds_multibar.Object.cw_credence_credid[i] mx_damt = ds_multibar.Object.cw_credencemx_debit[i] mx_camt = ds_multibar.Object.cw_credencemx_credit[i] IF ll_readtype = 100 OR ll_readtype = 301 THEN //**检查是否结转凭证 li_row = dw_1.InsertRow(0) dw_1.Object.typeflag[li_row] = 1 dw_1.Object.creddate[li_row] = ld_creddate dw_1.Object.credno[li_row] = ll_credno dw_1.Object.brief[li_row] = ls_brief dw_1.Object.credtype[li_row] = ls_credtype dw_1.Object.credid[li_row] = ll_credid IF s_multibarmx[j].dcflag = 1 THEN dw_1.SetItem ( li_row, "creditsum", mx_camt ) balc_amt = mx_camt - mx_damt up_amt = up_amt - balc_amt ELSE dw_1.SetItem ( li_row, "debitsum", mx_damt ) balc_amt = mx_damt - mx_camt up_amt = up_amt + balc_amt END IF dw_1.Object.balancesum[li_row] = Abs(up_amt) IF up_amt = 0 THEN dw_1.Object.direct[li_row] = '平' ELSEIF up_amt > 0 THEN dw_1.Object.direct[li_row] = '借' ELSE dw_1.Object.direct[li_row] = '贷' END IF ELSE IF i = 1 THEN //--------------第1行 li_row = dw_1.InsertRow(0) dw_1.Object.typeflag[li_row] = 1 dw_1.Object.creddate[li_row] = ld_creddate dw_1.Object.credno[li_row] = ll_credno dw_1.Object.brief[li_row] = ls_brief dw_1.Object.credtype[li_row] = ls_credtype dw_1.Object.credid[li_row] = ll_credid IF s_multibarmx[j].dcflag = 1 THEN dw_1.SetItem ( li_row, "sum"+String(j,'00'), mx_damt - mx_camt ) sum_damt = sum_damt + mx_damt - mx_camt ELSE dw_1.SetItem ( li_row, "sum"+String(j,'00'), mx_camt - mx_damt) sum_camt = sum_camt + mx_camt - mx_damt END IF //只有一张凭证,第2张为结转凭证 IF ds_multibar.RowCount() > 1 THEN IF ( ds_multibar.Object.cw_credence_readtype[2] = 100 OR & ds_multibar.Object.cw_credence_readtype[2] = 301 ) THEN balc_amt = sum_damt - sum_camt dw_1.Object.debitsum[li_row] = sum_damt dw_1.Object.creditsum[li_row] = sum_camt up_amt = up_amt + balc_amt dw_1.Object.balancesum[li_row] = Abs(up_amt) IF up_amt = 0 THEN dw_1.Object.direct[li_row] = '平' ELSEIF up_amt > 0 THEN dw_1.Object.direct[li_row] = '借' ELSE dw_1.Object.direct[li_row] = '贷' END IF END IF END IF ELSE //------------------第n行 //---------------------相同凭证 IF ds_multibar.Object.cw_credence_creddate[i] = ds_multibar.Object.cw_credence_creddate[i - 1]& AND ds_multibar.Object.cw_credence_credno[i] = ds_multibar.Object.cw_credence_credno[i - 1] THEN IF s_multibarmx[j].dcflag = 1 THEN Decimal tmp_d tmp_d = dw_1.GetItemDecimal(li_row,"sum"+String(j,'00')) IF IsNull(tmp_d) THEN tmp_d = 0 dw_1.SetItem ( li_row, "sum"+String(j,'00'),tmp_d + mx_damt - mx_camt ) sum_damt = sum_damt + mx_damt - mx_camt ELSE Decimal tmp_c tmp_c = dw_1.GetItemDecimal(li_row,"sum"+String(j,'00')) IF IsNull(tmp_c) THEN tmp_c = 0 dw_1.SetItem ( li_row, "sum"+String(j,'00'),tmp_c + mx_camt - mx_damt ) sum_camt = sum_camt + mx_camt - mx_damt END IF IF cbx_brief.Checked THEN IF NOT Pos(dw_1.Object.brief[li_row],ls_brief) > 0 THEN dw_1.Object.brief[li_row] = dw_1.Object.brief[li_row] + ','+ls_brief END IF END IF IF i = ds_multibar.RowCount() THEN balc_amt = sum_damt - sum_camt dw_1.Object.debitsum[li_row] = sum_damt dw_1.Object.creditsum[li_row] = sum_camt up_amt = up_amt + balc_amt dw_1.Object.balancesum[li_row] = Abs(up_amt) IF up_amt = 0 THEN dw_1.Object.direct[li_row] = '平' ELSEIF up_amt > 0 THEN dw_1.Object.direct[li_row] = '借' ELSE dw_1.Object.direct[li_row] = '贷' END IF ELSE IF ds_multibar.Object.cw_credence_readtype[i + 1] = 100 OR ds_multibar.Object.cw_credence_readtype[i + 1] = 301 THEN balc_amt = sum_damt - sum_camt dw_1.Object.debitsum[li_row] = sum_damt dw_1.Object.creditsum[li_row] = sum_camt up_amt = up_amt + balc_amt dw_1.Object.balancesum[li_row] = Abs(up_amt) IF up_amt = 0 THEN dw_1.Object.direct[li_row] = '平' ELSEIF up_amt > 0 THEN dw_1.Object.direct[li_row] = '借' ELSE dw_1.Object.direct[li_row] = '贷' END IF END IF END IF ELSE //-----------------不是相同凭证 IF NOT(ds_multibar.Object.cw_credence_readtype[i - 1] = 100 OR ds_multibar.Object.cw_credence_readtype[i - 1] = 301) THEN balc_amt = sum_damt - sum_camt dw_1.Object.debitsum[li_row] = sum_damt dw_1.Object.creditsum[li_row] = sum_camt up_amt = up_amt + balc_amt dw_1.Object.balancesum[li_row] = Abs(up_amt) IF up_amt = 0 THEN dw_1.Object.direct[li_row] = '平' ELSEIF up_amt > 0 THEN dw_1.Object.direct[li_row] = '借' ELSE dw_1.Object.direct[li_row] = '贷' END IF END IF sum_damt = 0 sum_camt = 0 li_row = dw_1.InsertRow(0) dw_1.Object.typeflag[li_row] = 1 dw_1.Object.creddate[li_row] = ld_creddate dw_1.Object.credno[li_row] = ll_credno dw_1.Object.brief[li_row] = ls_brief dw_1.Object.credtype[li_row] = ls_credtype dw_1.Object.credid[li_row] = ll_credid IF s_multibarmx[j].dcflag = 1 THEN dw_1.SetItem ( li_row, "sum"+String(j,'00'), mx_damt - mx_camt ) sum_damt = sum_damt + mx_damt - mx_camt ELSE dw_1.SetItem ( li_row, "sum"+String(j,'00'), mx_camt - mx_damt ) sum_camt = sum_camt + mx_camt - mx_damt END IF IF i = ds_multibar.RowCount() THEN balc_amt = sum_damt - sum_camt dw_1.Object.debitsum[li_row] = sum_damt dw_1.Object.creditsum[li_row] = sum_camt up_amt = up_amt + balc_amt dw_1.Object.balancesum[li_row] = Abs(up_amt) IF up_amt = 0 THEN dw_1.Object.direct[li_row] = '平' ELSEIF up_amt > 0 THEN dw_1.Object.direct[li_row] = '借' ELSE dw_1.Object.direct[li_row] = '贷' END IF ELSE IF ds_multibar.Object.cw_credence_readtype[i + 1] = 100 OR ds_multibar.Object.cw_credence_readtype[i + 1] = 301 THEN balc_amt = sum_damt - sum_camt dw_1.Object.debitsum[li_row] = sum_damt dw_1.Object.creditsum[li_row] = sum_camt up_amt = up_amt + balc_amt dw_1.Object.balancesum[li_row] = Abs(up_amt) IF up_amt = 0 THEN dw_1.Object.direct[li_row] = '平' ELSEIF up_amt > 0 THEN dw_1.Object.direct[li_row] = '借' ELSE dw_1.Object.direct[li_row] = '贷' END IF END IF END IF END IF END IF END IF END IF NEXT NEXT END IF //**多月中间合计******************************************************* Long k Long ll_tmp_year Long ll_stat_month Decimal or_ydebit,or_ycredit Boolean if_sameyear = FALSE IF Left(String(firstymon),4) = Left(String(sys_startyearmon),4) THEN if_sameyear = TRUE ELSE if_sameyear = FALSE END IF ll_stat_month = firstymon dw_1.AcceptText() IF dw_1.RowCount() > 1 THEN k = 1 DO WHILE k <= dw_1.RowCount() CHOOSE CASE dw_1.Object.typeflag[k] CASE 0 k++ CASE 1 ld_creddate = dw_1.Object.creddate[k] ls_monthint = Year(Date(String(ld_creddate,'yyyy-mm-dd'))) * 100 + Month(Date(String(ld_creddate,'yyyy-mm-dd'))) IF cur_monthint > 0 THEN IF ls_monthint <> cur_monthint THEN ll_tmp_year = Long(Left(String(ll_stat_month),4)) * 100 //3.本期合计 sum_month_debit = 0 sum_month_credit = 0 li_row = dw_1.InsertRow(k) dw_1.Object.typeflag[li_row] = 2 dw_1.Object.brief[li_row] = '本期合计' FOR i = 1 TO UpperBound(s_multibarmx) SELECT sum(debit),sum(credit) INTO :mx_damt,:mx_camt FROM cw_credence,cw_credencemx WHERE cw_credence.accsetid = :sys_accsetid AND cw_credence.subaccsetid = :sys_subaccsetid AND cw_credence.cmonth = :ll_stat_month AND cw_credence.accsetid = cw_credencemx.accsetid AND cw_credence.subaccsetid = cw_credencemx.subaccsetid AND cw_credence.credid = cw_credencemx.credid AND cw_credencemx.subid = :s_multibarmx[i].subid AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 ) AND ( cw_credence.readtype <> 100 ) AND ( cw_credence.readtype <> 301 ) ; IF sqlca.SQLCode <> 0 OR IsNull(mx_camt) THEN mx_camt = 0 IF sqlca.SQLCode <> 0 OR IsNull(mx_damt) THEN mx_damt = 0 SELECT sum(debit),sum(credit) INTO :mx_damt_1,:mx_camt_1 FROM cw_credence,cw_credencemx WHERE cw_credence.accsetid = :sys_accsetid AND cw_credence.subaccsetid = :sys_subaccsetid AND cw_credence.accsetid = cw_credencemx.accsetid AND cw_credence.subaccsetid = cw_credencemx.subaccsetid AND cw_credence.credid = cw_credencemx.credid AND cw_credence.cmonth = :ll_stat_month AND cw_credencemx.subid = :s_multibarmx[i].subid AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 ) AND ( cw_credence.readtype = 100 OR cw_credence.readtype = 301 ) ; IF sqlca.SQLCode <> 0 OR IsNull(mx_camt_1) THEN mx_camt_1 = 0 IF sqlca.SQLCode <> 0 OR IsNull(mx_damt_1) THEN mx_damt_1 = 0 IF s_multibarmx[i].dcflag = 0 THEN dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_camt - mx_damt ) sum_month_debit = sum_month_debit + mx_damt_1 - mx_camt_1 sum_month_credit = sum_month_credit + mx_camt - mx_damt s_multibarmx[i].mamt = s_multibarmx[i].mamt + mx_camt - mx_damt - (mx_damt_1 - mx_camt_1) ELSE dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_damt - mx_camt ) sum_month_debit = sum_month_debit + mx_damt - mx_camt sum_month_credit = sum_month_credit + mx_camt_1 - mx_damt_1 s_multibarmx[i].mamt = s_multibarmx[i].mamt + mx_damt - mx_camt - (mx_camt_1 - mx_damt_1) END IF NEXT dw_1.Object.debitsum[li_row] = sum_month_debit dw_1.Object.creditsum[li_row] = sum_month_credit balc_amt = dw_1.Object.balancesum[li_row - 1] dw_1.Object.balancesum[li_row] = Abs(balc_amt) IF balc_amt = 0 THEN dw_1.Object.direct[li_row] = '平' ELSEIF balc_amt > 0 THEN dw_1.Object.direct[li_row] = '借' ELSE dw_1.Object.direct[li_row] = '贷' END IF k++ //4.本年累计 li_row = dw_1.InsertRow(k) dw_1.Object.typeflag[li_row] = 3 dw_1.Object.brief[li_row] = '本年累计' sum_year_debit = 0 sum_year_credit = 0 FOR i = 1 TO UpperBound(s_multibarmx) mx_damt = 0 mx_camt = 0 SELECT sum(credit),sum(debit) INTO :mx_camt,:mx_damt FROM cw_credence,cw_credencemx WHERE cw_credence.accsetid = cw_credencemx.accsetid AND cw_credence.credid = cw_credencemx.credid AND cw_credence.accsetid = :sys_accsetid AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 ) AND cw_credencemx.subid = :s_multibarmx[i].subid AND cw_credence.cmonth - :ll_tmp_year <= 12 AND cw_credence.cmonth - :ll_tmp_year >= 1 AND cw_credence.cmonth <= :ll_stat_month AND ( cw_credence.readtype <> 100 ) AND ( cw_credence.readtype <> 301 ) ; IF sqlca.SQLCode <> 0 OR IsNull(mx_camt) THEN mx_camt = 0 IF sqlca.SQLCode <> 0 OR IsNull(mx_damt) THEN mx_damt = 0 SELECT sum(credit),sum(debit) INTO :mx_camt_1,:mx_damt_1 FROM cw_credence,cw_credencemx WHERE cw_credence.accsetid = cw_credencemx.accsetid AND cw_credence.credid = cw_credencemx.credid AND cw_credence.accsetid = :sys_accsetid AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 ) AND cw_credencemx.subid = :s_multibarmx[i].subid AND cw_credence.cmonth - :ll_tmp_year <= 12 AND cw_credence.cmonth - :ll_tmp_year >= 1 AND cw_credence.cmonth <= :ll_stat_month AND ( cw_credence.readtype = 100 OR cw_credence.readtype = 301 ) ; IF sqlca.SQLCode <> 0 OR IsNull(mx_camt_1) THEN mx_camt_1 = 0 IF sqlca.SQLCode <> 0 OR IsNull(mx_damt_1) THEN mx_damt_1 = 0 IF if_sameyear THEN SELECT sum(debit),sum(credit) INTO :or_ydebit,:or_ycredit FROM cw_InitBalance WHERE cw_InitBalance.accsetid = :sys_accsetid AND cw_InitBalance.subid = :s_multibarmx[i].subid; IF sqlca.SQLCode <> 0 OR IsNull(or_ydebit) THEN or_ydebit = 0 IF sqlca.SQLCode <> 0 OR IsNull(or_ycredit) THEN or_ycredit = 0 ELSE or_ydebit = 0 or_ycredit = 0 END IF IF s_multibarmx[i].dcflag = 0 THEN dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_camt - mx_damt + or_ycredit ) sum_year_debit = sum_year_debit + mx_damt_1 - mx_camt_1 + or_ydebit sum_year_credit = sum_year_credit + mx_camt - mx_damt + or_ycredit ELSE dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_damt - mx_camt + or_ydebit ) sum_year_debit = sum_year_debit + mx_damt - mx_camt + or_ydebit sum_year_credit = sum_year_credit + mx_camt_1 - mx_damt_1 + or_ycredit END IF NEXT dw_1.Object.debitsum[li_row] = sum_year_debit dw_1.Object.creditsum[li_row] = sum_year_credit dw_1.Object.balancesum[li_row] = Abs(balc_amt) balc_amt = dw_1.Object.balancesum[li_row - 1] IF balc_amt = 0 THEN dw_1.Object.direct[li_row] = '平' ELSEIF balc_amt > 0 THEN dw_1.Object.direct[li_row] = '借' ELSE dw_1.Object.direct[li_row] = '贷' END IF k++ //5.余额 li_row = dw_1.InsertRow(k) dw_1.Object.typeflag[li_row] = 4 dw_1.Object.brief[li_row] = '余 额' FOR i = 1 TO UpperBound(s_multibarmx) dw_1.SetItem ( li_row, "sum"+String(i,'00'), s_multibarmx[i].oramt + s_multibarmx[i].mamt ) NEXT dw_1.AcceptText() ll_stat_month = ll_stat_month + 1 END IF END IF k++ cur_monthint = ls_monthint CASE 2,3 cur_monthint = 0 k++ END CHOOSE LOOP END IF //**最后一行合计******************************************************* IF ds_multibar.RowCount() > 0 THEN //3.本期合计 ll_stat_month = endymon ll_tmp_year = Long(Left(String(ll_stat_month),4)) * 100 sum_month_debit = 0 sum_month_credit = 0 li_row = dw_1.InsertRow(0) dw_1.Object.brief[li_row] = '本期合计' FOR i = 1 TO UpperBound(s_multibarmx) SELECT sum(debit),sum(credit) INTO :mx_damt,:mx_camt FROM cw_credence,cw_credencemx WHERE cw_credence.accsetid = :sys_accsetid AND cw_credence.subaccsetid = :sys_subaccsetid AND cw_credence.accsetid = cw_credencemx.accsetid AND cw_credence.subaccsetid = cw_credencemx.subaccsetid AND cw_credence.credid = cw_credencemx.credid AND cw_credence.cmonth = :ll_stat_month AND cw_credencemx.subid = :s_multibarmx[i].subid AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 ) AND ( cw_credence.readtype <> 100 ) AND ( cw_credence.readtype <> 301 ) ; IF sqlca.SQLCode <> 0 OR IsNull(mx_camt) THEN mx_camt = 0 IF sqlca.SQLCode <> 0 OR IsNull(mx_damt) THEN mx_damt = 0 SELECT sum(debit),sum(credit) INTO :mx_damt_1,:mx_camt_1 FROM cw_credence,cw_credencemx WHERE cw_credence.accsetid = :sys_accsetid AND cw_credence.subaccsetid = :sys_subaccsetid AND cw_credence.accsetid = cw_credencemx.accsetid AND cw_credence.subaccsetid = cw_credencemx.subaccsetid AND cw_credence.credid = cw_credencemx.credid AND cw_credence.cmonth = :ll_stat_month AND cw_credencemx.subid = :s_multibarmx[i].subid AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 ) AND ( cw_credence.readtype = 100 OR cw_credence.readtype = 301 ) ; IF sqlca.SQLCode <> 0 OR IsNull(mx_camt_1) THEN mx_camt_1 = 0 IF sqlca.SQLCode <> 0 OR IsNull(mx_damt_1) THEN mx_damt_1 = 0 IF s_multibarmx[i].dcflag = 0 THEN dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_camt - mx_damt ) sum_month_debit = sum_month_debit + mx_damt_1 - mx_camt_1 sum_month_credit = sum_month_credit + mx_camt - mx_damt s_multibarmx[i].mamt = s_multibarmx[i].mamt + mx_camt - mx_damt - (mx_damt_1 - mx_camt_1) ELSE dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_damt - mx_camt ) sum_month_debit = sum_month_debit + mx_damt - mx_camt sum_month_credit = sum_month_credit + mx_camt_1 - mx_damt_1 s_multibarmx[i].mamt = s_multibarmx[i].mamt + mx_damt - mx_camt - (mx_camt_1 - mx_damt_1) END IF NEXT dw_1.Object.debitsum[li_row] = sum_month_debit dw_1.Object.creditsum[li_row] = sum_month_credit balc_amt = dw_1.Object.balancesum[li_row - 1] dw_1.Object.balancesum[li_row] = Abs(balc_amt) IF balc_amt = 0 THEN dw_1.Object.direct[li_row] = '平' ELSEIF balc_amt > 0 THEN dw_1.Object.direct[li_row] = '借' ELSE dw_1.Object.direct[li_row] = '贷' END IF //4.本年累计 li_row = dw_1.InsertRow(0) dw_1.Object.brief[li_row] = '本年累计' sum_year_debit = 0 sum_year_credit = 0 FOR i = 1 TO UpperBound(s_multibarmx) SELECT sum(credit),sum(debit) INTO :mx_camt,:mx_damt FROM cw_credence,cw_credencemx WHERE cw_credence.accsetid = cw_credencemx.accsetid AND cw_credence.credid = cw_credencemx.credid AND cw_credence.accsetid = :sys_accsetid AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 ) AND cw_credencemx.subid = :s_multibarmx[i].subid AND cw_credence.cmonth - :ll_tmp_year <= 12 AND cw_credence.cmonth - :ll_tmp_year >= 1 AND cw_credence.cmonth <= :ll_stat_month AND ( cw_credence.readtype <> 100 ) AND ( cw_credence.readtype <> 301 ) ; IF sqlca.SQLCode <> 0 OR IsNull(mx_camt) THEN mx_camt = 0 IF sqlca.SQLCode <> 0 OR IsNull(mx_damt) THEN mx_damt = 0 SELECT sum(credit),sum(debit) INTO :mx_camt_1,:mx_damt_1 FROM cw_credence,cw_credencemx WHERE cw_credence.accsetid = cw_credencemx.accsetid AND cw_credence.credid = cw_credencemx.credid AND cw_credence.accsetid = :sys_accsetid AND ( cw_credence.postflag = :arg_flag OR :arg_flag = -1 ) AND cw_credencemx.subid = :s_multibarmx[i].subid AND cw_credence.cmonth - :ll_tmp_year <= 12 AND cw_credence.cmonth - :ll_tmp_year >= 1 AND cw_credence.cmonth <= :ll_stat_month AND ( cw_credence.readtype = 100 OR cw_credence.readtype = 301 ) ; IF sqlca.SQLCode <> 0 OR IsNull(mx_camt_1) THEN mx_camt_1 = 0 IF sqlca.SQLCode <> 0 OR IsNull(mx_damt_1) THEN mx_damt_1 = 0 IF if_sameyear THEN SELECT sum(debit),sum(credit) INTO :or_ydebit,:or_ycredit FROM cw_InitBalance WHERE cw_InitBalance.accsetid = :sys_accsetid AND cw_InitBalance.subid = :s_multibarmx[i].subid; IF sqlca.SQLCode <> 0 OR IsNull(or_ydebit) THEN or_ydebit = 0 IF sqlca.SQLCode <> 0 OR IsNull(or_ycredit) THEN or_ycredit = 0 ELSE or_ydebit = 0 or_ycredit = 0 END IF IF s_multibarmx[i].dcflag = 0 THEN dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_camt - mx_damt + or_ycredit ) sum_year_debit = sum_year_debit + mx_damt_1 - mx_camt_1 + or_ydebit sum_year_credit = sum_year_credit + mx_camt - mx_damt + or_ycredit ELSE dw_1.SetItem ( li_row, "sum"+String(i,'00'), mx_damt - mx_camt + or_ydebit ) sum_year_debit = sum_year_debit + mx_damt - mx_camt + or_ydebit sum_year_credit = sum_year_credit + mx_camt_1 - mx_damt_1 + or_ycredit END IF NEXT dw_1.Object.debitsum[li_row] = sum_year_debit dw_1.Object.creditsum[li_row] = sum_year_debit balc_amt = dw_1.Object.balancesum[li_row - 1] dw_1.Object.balancesum[li_row] = Abs(balc_amt) IF balc_amt = 0 THEN dw_1.Object.direct[li_row] = '平' ELSEIF balc_amt > 0 THEN dw_1.Object.direct[li_row] = '借' ELSE dw_1.Object.direct[li_row] = '贷' END IF //5.余额 li_row = dw_1.InsertRow(0) dw_1.Object.brief[li_row] = '余 额' FOR i = 1 TO UpperBound(s_multibarmx) dw_1.SetItem ( li_row, "sum"+String(i,'00'), s_multibarmx[i].oramt + s_multibarmx[i].mamt ) NEXT END IF //改变标题 dw_1.Object.Title.Text = ls_multibarname + "明细帐" dw_1.Object.Month.Text = "会计期间:"+String(firstymon)+" 至 "+String(endymon) w_sys_wait.Hide() end subroutine on w_rp_multibaracc.create int iCurrent call super::create this.cbx_brief=create cbx_brief iCurrent=UpperBound(this.Control) this.Control[iCurrent+1]=this.cbx_brief end on on w_rp_multibaracc.destroy call super::destroy destroy(this.cbx_brief) end on event open;this.triggerevent('ue_before_open') wf_movetocenter() IF TRIM(DW_1.DATAOBJECT)<>'' THEN DW_1.OBJECT.DataWindow.PRINT.MARGIN.TOP=INTEGER(ProfileString(sys_inifilename,DW_1.DATAOBJECT, "MARGIN_TOP", "110")) DW_1.OBJECT.DataWindow.PRINT.MARGIN.LEFT=INTEGER(ProfileString(sys_inifilename,DW_1.DATAOBJECT, "MARGIN_LEFT", "96" )) DW_1.OBJECT.DataWindow.PRINT.MARGIN.bottom=INTEGER(ProfileString(sys_inifilename,DW_1.DATAOBJECT, "MARGIN_BOTTOM", "110")) DW_1.OBJECT.DataWindow.PRINT.MARGIN.right=INTEGER(ProfileString(sys_inifilename,DW_1.DATAOBJECT, "MARGIN_RIGHT", "96" )) end if Int use_brief use_brief = Integer(ProfileString (sys_inifilename,dw_1.DataObject, "use_brief", '0')) IF use_brief = 1 THEN cbx_brief.Checked = TRUE ELSE cbx_brief.Checked = FALSE END IF dw_1.SetTransObject (sqlca) cb_1.triggerevent(clicked!) end event event close;Int use_brief IF cbx_brief.Checked THEN use_brief = 1 ELSE use_brief = 0 END IF SetProfileString (sys_inifilename,dw_1.DataObject, "use_brief", String(use_brief)) end event event ue_before_open;call super::ue_before_open;if_ue_filter = TRUE if_ue_sort = TRUE if_ue_sentdataout = TRUE end event type cb_func from w_publ_easyq`cb_func within w_rp_multibaracc end type type cb_exit from w_publ_easyq`cb_exit within w_rp_multibaracc integer x = 965 end type type cb_2 from w_publ_easyq`cb_2 within w_rp_multibaracc boolean bringtotop = true end type type cb_psetup from w_publ_easyq`cb_psetup within w_rp_multibaracc boolean bringtotop = true end type type cb_1 from w_publ_easyq`cb_1 within w_rp_multibaracc boolean bringtotop = true string text = "过滤" end type event cb_1::clicked;call super::clicked;open(w_rp_multibar) s_rp_multibar=message.powerobjectparm long firstmon,lastmon,ls_multibarid,ls_firstmon,ls_lastmon ls_multibarid=s_rp_multibar.relid if ls_multibarid=0 then if is_display then return else close(parent) return end if end if is_display=true wf_pr() end event type st_3 from w_publ_easyq`st_3 within w_rp_multibaracc integer x = 768 integer y = 736 end type type st_4 from w_publ_easyq`st_4 within w_rp_multibaracc integer x = 1710 integer y = 624 end type type em_1 from w_publ_easyq`em_1 within w_rp_multibaracc integer x = 987 integer y = 700 end type type em_2 from w_publ_easyq`em_2 within w_rp_multibaracc integer x = 1321 integer y = 780 end type type ddlb_yl from w_publ_easyq`ddlb_yl within w_rp_multibaracc integer x = 1358 integer y = 52 end type type cbx_yl from w_publ_easyq`cbx_yl within w_rp_multibaracc integer x = 1138 integer y = 52 end type type dw_1 from w_publ_easyq`dw_1 within w_rp_multibaracc integer y = 300 integer width = 2537 integer height = 952 string dataobject = "dw_multibaracc" end type event dw_1::doubleclicked;Long ll_row Long ll_credid ll_row = THIS.GetRow() IF ll_row <= 0 THEN RETURN ll_credid = THIS.Object.credid[ll_row] IF ll_credid <= 0 THEN RETURN s_edit_index_tran s_tran //翻页功能窗口 传递参数使用 s_tran.if_retrieve_all = TRUE //是否一次RETRIEVE所有行 s_tran.work_mode = 0 //0-单纯编辑模式, 1-选择模式 s_tran.arg_pkid = 0 //目标定位PKID (备用) s_tran.arg_string_code = '' //查询列部分内容,用于初步筛选 s_tran.e_long = ll_credid OpenWithParm(w_credence_edit,s_tran) end event type sle_mtrl from w_publ_easyq`sle_mtrl within w_rp_multibaracc integer x = 1659 integer y = 952 end type type sle_cust from w_publ_easyq`sle_cust within w_rp_multibaracc integer x = 498 integer y = 952 end type type st_mtrl from w_publ_easyq`st_mtrl within w_rp_multibaracc integer x = 1202 integer y = 968 end type type st_cust from w_publ_easyq`st_cust within w_rp_multibaracc integer x = 37 integer y = 968 end type type cbx_loginretr from w_publ_easyq`cbx_loginretr within w_rp_multibaracc integer x = 1851 integer y = 748 end type type pb_em1 from w_publ_easyq`pb_em1 within w_rp_multibaracc boolean visible = false integer x = 599 integer y = 836 end type type pb_em2 from w_publ_easyq`pb_em2 within w_rp_multibaracc boolean visible = false integer x = 1211 integer y = 836 end type type pb_2 from w_publ_easyq`pb_2 within w_rp_multibaracc boolean visible = false integer x = 1321 integer y = 836 end type type cb_help from w_publ_easyq`cb_help within w_rp_multibaracc boolean visible = false integer x = 2542 integer y = 668 end type type cb_copyself from w_publ_easyq`cb_copyself within w_rp_multibaracc end type type gb_1 from w_publ_easyq`gb_1 within w_rp_multibaracc end type type ln_bar from w_publ_easyq`ln_bar within w_rp_multibaracc end type type ln_bar2 from w_publ_easyq`ln_bar2 within w_rp_multibaracc end type type r_bar from w_publ_easyq`r_bar within w_rp_multibaracc end type type ln_1 from w_publ_easyq`ln_1 within w_rp_multibaracc boolean visible = false end type type ln_2 from w_publ_easyq`ln_2 within w_rp_multibaracc boolean visible = false end type type ln_3 from w_publ_easyq`ln_3 within w_rp_multibaracc boolean visible = false end type type ln_4 from w_publ_easyq`ln_4 within w_rp_multibaracc boolean visible = false end type type cbx_brief from checkbox within w_rp_multibaracc integer x = 27 integer y = 212 integer width = 681 integer height = 60 boolean bringtotop = true integer textsize = -9 integer weight = 400 fontcharset fontcharset = gb2312charset! fontpitch fontpitch = variable! string facename = "宋体" long textcolor = 33554432 long backcolor = 67108864 string text = "相同凭证合并分录摘要" end type