*===============================基本信息===============================*
* 标题:明细分类账(对外-非费用)
* 创建日期:2004-12-28 '
*===============================定 义===============================*
************************************************************************
* 基本代码
************************************************************************
REPORT ZR_FI_010
NO STANDARD PAGE HEADING
LINE-COUNT 80
LINE-SIZE 125
MESSAGE-ID ZFI1.
************************************************************************
* INCLUDE:包含文件
************************************************************************
INCLUDE OLE2INCL.
************************************************************************
* TABLE: 定义TABLE
************************************************************************
TABLES: T001, "公司代码
GLT0, "总帐科目主记录业务额
SKAT, "总帐科目主记录(科目表:说明)
BKPF, "会计核算凭证标题(主表)
BSEG, "会计核算凭证段(从表)
ANLC. "资产值字段
************************************************************************
*INTERNAL TABLES
************************************************************************
*需打印的总账科目列表内表
DATA: BEGIN OF IT_LIST OCCURS 0,
SAKNR LIKE SKAT-SAKNR, "总帐科目号 = SKAT-SAKNR
TXT20 LIKE SKAT-TXT20. "总帐科目名称
DATA: END OF IT_LIST.
*定义内表ITABS(作为辅助使用)
DATA: BEGIN OF ITABS OCCURS 10.
INCLUDE STRUCTURE GLT0.
DATA: TAMOUNT LIKE GLT0-HSLVT.
DATA: END OF ITABS.
*--每张凭证上的借贷方内表--
DATA: BEGIN OF ITAB_LIST OCCURS 0,
BUDAT LIKE BKPF-BUDAT, "凭证中的记帐日期
BELNR LIKE BKPF-BELNR, "会计凭证号码(凭证字号)
WAERS LIKE BKPF-WAERS, "货币代码
KURSF LIKE BKPF-KURSF, "汇率
SGTXT LIKE BSEG-SGTXT, "项目文本(摘要)
WRBTR LIKE BSEG-WRBTR, "凭证货币金额
DMBTR LIKE BSEG-DMBTR, "按本位币计的金额
SHKZG LIKE BSEG-SHKZG, "借方/贷方标识
SAKNR LIKE BSEG-SAKNR, "总帐科目号
HKONT LIKE BSEG-HKONT, "总分类帐帐目
DEBIT LIKE GLT0-TSLVT, "借方(本位币计的金额)
CREDIT LIKE GLT0-TSLVT, "贷方(本位币计的金额)
BALANCEWAY(2), "余额方向
BALANCE LIKE GLT0-TSLVT,"余额
BALANCE_C(20),"余额
END OF ITAB_LIST.
DATA: ITAB_TEMP1 LIKE ITAB_LIST OCCURS 10 WITH HEADER LINE.
DATA: ITAB_TEMP2 LIKE ITAB_LIST OCCURS 10 WITH HEADER LINE.
*--本期合计、累计内表--
DATA: BEGIN OF ITAB OCCURS 0,
RACCT LIKE GLT0-RACCT, "总帐科目号 = SKAT-SAKNR
TXT20 LIKE SKAT-TXT20, "总帐科目名称
TXT50 LIKE SKAT-TXT50, "总帐科目详细注释
DRCRK LIKE GLT0-DRCRK, "借方/贷方标识
"MONAT TYPE I, "会计期间
MONAT(2), "会计期间
ZY(14), "摘要(本期合计)
DEBIT LIKE GLT0-TSLVT, "借方(本位币计的金额)
CREDIT LIKE GLT0-TSLVT, "贷方(本位币计的金额)
BALANCEWAY(2), "余额方向
BALANCE LIKE GLT0-TSLVT,"余额
BALANCE_C(20),"余额
ZY2(14), "摘要(本年累计)
DEBIT2 LIKE GLT0-TSLVT, "借方(本位币计的金额)
CREDIT2 LIKE GLT0-TSLVT, "贷方(本位币计的金额)
BALANCEWAY2(2), "余额方向
BALANCE2 LIKE GLT0-TSLVT,"余额
BALANCE2_C(20),"余额
HSLVT LIKE GLT0-HSLVT, "本位币的余额结转 (货币 2)
HSL01 LIKE GLT0-HSL01, "按本位币的期间中移动的总计 (货币2)
END OF ITAB.
*往数据库增加运行日志
DATA: BEGIN OF IT_ZREPORTLOG OCCURS 0.
INCLUDE TYPE ZREPORTLOG.
DATA: END OF IT_ZREPORTLOG.
************************************************************************
* CONSTANTS : 定义常量
************************************************************************
************************************************************************
* TYPE : 定义数据类型
************************************************************************
TYPE-POOLS: SLIS.
************************************************************************
* DATA : 定义变量
************************************************************************
DATA: K_KTOPL LIKE SKAT-KTOPL VALUE 'YW01', "第一行科目名(帐目表)
QCYE_RACCT(6), "期初余额相关变量定义
QCYE_TXT20(30),
QCYE_MONAT(2),
QCYE_DEBIT LIKE GLT0-HSLVT,
QCYE_CREDIT LIKE GLT0-HSLVT,
QCYE_BALANCEWAY(2),
QCYE_BALANCE LIKE GLT0-HSLVT,"ABC1222
QCYE_BALANCE_C(20),
NCYE_BALANCE LIKE GLT0-HSLVT,
G_SAKNR LIKE SKAT-SAKNR,
G_KM_NAME(20).
DATA: G_BUDAT1 LIKE BKPF-BUDAT,
G_BUDAT2 LIKE BKPF-BUDAT.
DATA: G_ISEMPTY TYPE I VALUE 0.
*单据表格上相关坐标值定义
DATA: A1 TYPE I VALUE 0,
A2 TYPE I VALUE 0,
A3 TYPE I VALUE 0,
A4 TYPE I VALUE 0,
A5 TYPE I VALUE 0,
A6 TYPE I VALUE 0,
A7 TYPE I VALUE 0,
A8 TYPE I VALUE 0,
A9 TYPE I VALUE 0,
A10 TYPE I VALUE 0,
A11 TYPE I VALUE 0.
DATA: B1 TYPE I VALUE 0,
B2 TYPE I VALUE 0,
B3 TYPE I VALUE 0,
B4 TYPE I VALUE 0,
B5 TYPE I VALUE 0,
B6 TYPE I VALUE 0,
B7 TYPE I VALUE 0,
B8 TYPE I VALUE 0,
B9 TYPE I VALUE 0,
B10 TYPE I VALUE 0.
DATA: L1 LIKE BKPF-BUDAT,
L2 LIKE BKPF-BELNR,
L3 LIKE BKPF-BKTXT,
L4 LIKE BKPF-WAERS,
L5 LIKE BKPF-KURSF,
L6 LIKE BSEG-WRBTR,
L7 LIKE BSEG-WRBTR,
L8 LIKE BSEG-WRBTR,
L9(2),
L10(20).
DATA: DS(1) VALUE 'D', "判断是否该换页的标志
NAME_LAST LIKE USER_ADDR-NAME_LAST,
NAME_FIRST LIKE USER_ADDR-NAME_FIRST,
NAME(16).
DATA: ZYS TYPE I VALUE 0. "总月数
DATA: ZHS TYPE I VALUE 0. "总行数
DATA: PAGENUM TYPE I VALUE 0. "总的页数
DATA: PAGE_CURR(2). "当前页数
DATA: LIMTA TYPE I VALUE 0.
DATA: LIMTB TYPE I VALUE 0.
DATA: YS TYPE I VALUE 0. "余数
DATA: XHCS TYPE I VALUE 0. "循环次数
DATA: PZNO TYPE I VALUE 0. "每个凭证的页序号
DATA: PZS TYPE I VALUE 0. "查询到的凭证数
DATA: I TYPE I VALUE 0,
FLAG_LINE TYPE I VALUE 0,
FLAG_PAGE TYPE I VALUE 0.
DATA: G_VALUE_IN(30), "传进来的值
G_VALUE_OUT(30). "经过分隔符号处理的金额
************************************************************************
* DEFINE: 定义宏
************************************************************************
*尾数加'.00'
DATA: LEN TYPE I,
CS TYPE I,
YUS TYPE I,
L TYPE I,
LEN1 TYPE I,
FLAG TYPE I,
ENDFLG(1),
TEST(1),
TEMP(20),
TEMP1(20),
TEMP2(20).
DEFINE MACRO_ZERO.
LEN = STRLEN( &1 ).
CS = 0.
FLAG = 0.
ENDFLG = 'N'.
WHILE ENDFLG <> 'Y'.
MOVE &1+CS(1) TO TEST.
IF TEST = '.'.
FLAG = 1.
ENDIF.
CS = CS + 1.
IF CS >= LEN.
ENDFLG = 'Y'.
ENDIF.
ENDWHILE.
IF FLAG = 0.
CONCATENATE &1 '.00' INTO &1.
CONDENSE &1.
ENDIF.
END-OF-DEFINITION.
*金额加分隔符
DATA: L_LEN TYPE I,
L_CS TYPE I,
L_YUS TYPE I,
L_BZS TYPE I,
L_L TYPE I,
L_ENDFLG(1),
L_TEST(1),
L_TEMP(30),
L_TEMP1(30),
L_TEMP2(30).
DEFINE MACRO_FGF.
L_TEMP = &1.
"处理分隔符号
L_TEMP1 = ''.
L_TEMP2 = ''.
L_LEN = STRLEN( L_TEMP ).
L_BZS = -1.
L_CS = L_LEN.
L_ENDFLG = 'N'.
WHILE L_ENDFLG <> 'Y'.
MOVE L_TEMP+L_CS(1) TO L_TEMP1.
IF L_TEMP1 = '.'.
L_BZS = -1.
ENDIF.
IF L_TEMP1 <> '.' AND L_TEMP1 <> ' ' AND L_TEMP1 <> '-'.
IF L_BZS = 3.
CONCATENATE ',' L_TEMP2 INTO L_TEMP2.
L_BZS = 0.
ENDIF.
ENDIF.
CONCATENATE L_TEMP1 L_TEMP2 INTO L_TEMP2.
L_CS = L_CS - 1.
L_BZS = L_BZS + 1.
IF L_CS < 0.
L_ENDFLG = 'Y'.
ENDIF.
ENDWHILE.
MOVE L_TEMP2 TO &1.
END-OF-DEFINITION.
************************************************************************
* SELECTION SCREEN : 定义报表筛选条件
************************************************************************
SELECTION-SCREEN SKIP.
*确定过滤参数
SELECTION-SCREEN BEGIN OF BLOCK YGF WITH FRAME. TITLE BLK_001.
"公司代码"会计年度"会计期间
PARAMETERS: P_BUKRS LIKE GLT0-BUKRS OBLIGATORY MEMORY ID 112.
PARAMETERS: P_GJAHR LIKE GLT0-RYEAR OBLIGATORY DEFAULT SY-DATUM
MEMORY ID 111.
SELECT-OPTIONS P_MONAT FOR GLT0-RPMAX OBLIGATORY DEFAULT '1' TO '16'
MEMORY ID 111.
"总帐科目号
SELECT-OPTIONS P_SAKNR FOR SKAT-SAKNR OBLIGATORY.
SELECTION-SCREEN END OF BLOCK YGF.
*选择报表类型
SELECTION-SCREEN BEGIN OF BLOCK BLK_003 WITH FRAME. TITLE BLK_003 .
PARAMETERS: P_REPORT RADIOBUTTON GROUP R1 DEFAULT 'X',
P_ALV RADIOBUTTON GROUP R1,
P_FORM. RADIOBUTTON GROUP R1.
SELECTION-SCREEN END OF BLOCK BLK_003.
*===============================事 件===============================*
************************************************************************
* INITIALIZATION.启动程序开始执行
************************************************************************
INITIALIZATION.
P_GJAHR = SY-DATUM(4). "会计年度
P_MONAT = SY-DATUM+4(2) - 1. "会计期间
BLK_001 = '检索参数'.
BLK_003 = '报表类型'.
PERFORM. F_INI.
************************************************************************
* AT SELECTION SCREEN:
************************************************************************
AT SELECTION-SCREEN.
PERFORM. F_CHECK_INPUT. "检查用户输入
************************************************************************
* START OF SELECTION:
************************************************************************
START-OF-SELECTION.
*往数据库增加运行日志
IT_ZREPORTLOG-MANDT = SY-MANDT.
IT_ZREPORTLOG-TCODE = SY-TCODE.
IT_ZREPORTLOG-DATUM = SY-DATUM.
IT_ZREPORTLOG-UZEIT = SY-UZEIT.
IT_ZREPORTLOG-UNAME = SY-UNAME.
IT_ZREPORTLOG-TITLE = SY-TITLE.
APPEND IT_ZREPORTLOG.
INSERT INTO ZREPORTLOG VALUES IT_ZREPORTLOG .
* Perform. F_READ_DATA. "取数
IF P_REPORT = 'X'. "报表输出判断
PERFORM. F_PRINT_REPORT. "输出数据
ELSEIF P_ALV = 'X'.
PERFORM. F_OUT_ALV.
ELSE.
PERFORM. F_OUT_FORM.
ENDIF.
END-OF-SELECTION.
************************************************************************
* TOP OF PAGE
************************************************************************
TOP-OF-PAGE.
* PERFORM. F_HEAD.
************************************************************************
* END OF PAGE
************************************************************************
END-OF-PAGE.
* PERFORM. F_BOTTOM.
*===============================子 例 程===============================*
*&---------------------------------------------------------------------*
*过滤条件有效性检查
*&---------------------------------------------------------------------*
FORM. F_CHECK_INPUT.
DATA: P_MONAT1 TYPE D,
P_MONAT2 TYPE D,
Q_SAKNR(12).
P_MONAT1 = P_MONAT+4(2).
P_MONAT2 = P_MONAT+7(2).
IF ( P_MONAT1 < '01' ) OR ( P_MONAT1 > '16' ) OR
( P_MONAT2 < '01' ) OR ( P_MONAT2 > '16' ).
MESSAGE E101. "该会计期间不存在!
ENDIF.
*判断LOW < HIGH
IF P_MONAT1 > P_MONAT2.
MESSAGE E102. "会计期间LOW值不能大于HIGH值!
ENDIF.
*判断是否存在该记录
IF P_SAKNR+0(7) = 'IEQ0000'.
Q_SAKNR = P_SAKNR+7(10).
ELSE.
Q_SAKNR = P_SAKNR+3(10).
ENDIF.
SELECT SINGLE *
FROM SKAT
WHERE SPRAS = '1' AND
KTOPL = '1000' AND
SAKNR = Q_SAKNR. "取明细科目代码
IF SY-SUBRC <> 0 .
MESSAGE E103. "不存在该会计科目!
ENDIF.
ENDFORM. " F_CHECK_INPUT
*&---------------------------------------------------------------------*
*普通报表格式的打印
*&---------------------------------------------------------------------*
FORM. F_PRINT_REPORT.
DATA: L_DEBIT LIKE GLT0-TSLVT, "借方(本位币计的金额)
L_CREDIT LIKE GLT0-TSLVT, "贷方(本位币计的金额)
L_BALANCEWAY(2), "余额方向
L_BALANCE LIKE GLT0-TSLVT,"余额
L_BALANCE_C(20), "余额
L_BUDAT1 LIKE BKPF-BUDAT,
L_BUDAT2 LIKE BKPF-BUDAT.
*获取科目LIST
SELECT SAKNR TXT20
FROM SKAT
INTO CORRESPONDING FIELDS OF TABLE IT_LIST
WHERE SPRAS = '1' AND
KTOPL = '1000' AND
SAKNR IN P_SAKNR.
*分页显示各明细账
LOOP AT IT_LIST.
IF IT_LIST-SAKNR+2(4) = '4200'.
CONTINUE.
ENDIF.
NEW-PAGE. "针对不同明细科目进行分页
PAGE_CURR = '1'.
G_SAKNR = IT_LIST-SAKNR.
CLEAR ITAB. REFRESH ITAB.
CLEAR ITABS. REFRESH ITABS.
QCYE_DEBIT = 0 .
QCYE_CREDIT = 0 .
QCYE_BALANCEWAY = ''.
QCYE_BALANCE = 0.
L_BUDAT2 = '00000000'.
L_DEBIT = 0. L_CREDIT = 0.
L_BALANCE = 0.
PERFORM. F_READ_TOTALDATA."取数
PERFORM. F_GETKMNAME. "取会计科目代码及名称
PERFORM. F_EMPTYCHECK. "判断期初余额及本期间内是否有发生额
IF G_ISEMPTY = 1.
NEW-PAGE.
PERFORM. F_HEAD.
PERFORM. F_LIST_HEAD.
PERFORM. F_QCYE_SHOW."期初余额显示
I = 1.
LOOP AT ITAB.
"明细账显示
IF ( ITAB-DEBIT <> 0 ) OR ( ITAB-CREDIT <> 0 ) .
G_BUDAT1 = ITAB-MONAT.
G_BUDAT2 = ITAB-MONAT.
PERFORM. F_GETDATE. "取日期期间
PERFORM. F_READ_DATA. "取数
L_BUDAT2 = '00000000'.
L_DEBIT = 0. L_CREDIT = 0.
* L_BALANCE = 0.
LOOP AT ITAB_LIST.
"每日合计处理
IF ( IT_LIST-SAKNR+2(4) = '1001' ) OR ( IT_LIST-SAKNR+2(4) = '1002' ) OR
( IT_LIST-SAKNR+2(4) = '1009' ) .
L_BUDAT1 = ITAB_LIST-BUDAT.
L_DEBIT = L_DEBIT + ITAB_LIST-DEBIT.
L_CREDIT = L_CREDIT + ITAB_LIST-CREDIT.
IF ( L_BUDAT2 <> L_BUDAT1 ) AND ( L_BUDAT2 <> '00000000' ).
L_DEBIT = L_DEBIT - ITAB_LIST-DEBIT.
L_CREDIT = L_CREDIT - ITAB_LIST-CREDIT.
"余额处理
L_BALANCE = L_BALANCE + L_DEBIT - L_CREDIT.
IF L_BALANCE = 0.
L_BALANCEWAY = '平'.
ELSEIF L_BALANCE > 0 .
L_BALANCEWAY = '借'.
L_BALANCE_C = L_BALANCE.
ELSE.
L_BALANCEWAY = '借'.
L_BALANCE_C = 0 - L_BALANCE.
CONCATENATE '-' L_BALANCE_C INTO L_BALANCE_C.
ENDIF.
CONDENSE L_BALANCE_C.
L1 = L_BUDAT2. L2 = ''. L3 = ' 本 日 合 计'. L4 = ''. L5 = ''. L6 = ''.
L7 = L_DEBIT. L8 = L_CREDIT.
L9 = L_BALANCEWAY. L10 = L_BALANCE_C.
PERFORM. F_LIST.
L_BUDAT2 = ITAB_LIST-BUDAT.
L_DEBIT = ITAB_LIST-DEBIT.
L_CREDIT = ITAB_LIST-CREDIT.
"换行、换页处理
PERFORM. F_NEWPAGE.
ELSE.
L_BUDAT2 = ITAB_LIST-BUDAT.
ENDIF.
ENDIF.
"本日值显示
L1 = ITAB_LIST-BUDAT. L2 = ITAB_LIST-BELNR. L3 = ITAB_LIST-SGTXT.
L4 = ITAB_LIST-WAERS. L5 = ITAB_LIST-KURSF. L6 = ITAB_LIST-WRBTR.
L7 = ITAB_LIST-DEBIT. L8 = ITAB_LIST-CREDIT.L9 = ITAB_LIST-BALANCEWAY.
L10 = ITAB_LIST-BALANCE_C.
PERFORM. F_LIST.
"换行,换页处理
PERFORM. F_NEWPAGE.
ENDLOOP.
"每日合计处理(最后一条记录处理)
IF ( IT_LIST-SAKNR+2(4) = '1001' ) OR ( IT_LIST-SAKNR+2(4) = '1002' ) OR
( IT_LIST-SAKNR+2(4) = '1009' ).
L_BUDAT1 = ITAB_LIST-BUDAT.
"余额处理
L_BALANCE = L_BALANCE + L_DEBIT - L_CREDIT.
IF L_BALANCE = 0.
L_BALANCEWAY = '平'.
ELSEIF L_BALANCE > 0 .
L_BALANCEWAY = '借'.
L_BALANCE_C = L_BALANCE.
ELSE.
L_BALANCEWAY = '借'.
L_BALANCE_C = 0 - L_BALANCE.
CONCATENATE '-' L_BALANCE_C INTO L_BALANCE_C.
ENDIF.
CONDENSE L_BALANCE_C.
L1 = L_BUDAT2. L2 = ''. L3 = ' 本 日 合 计'. L4 = ''. L5 = ''. L6 = ''.
L7 = L_DEBIT. L8 = L_CREDIT.
L9 = L_BALANCEWAY. L10 = L_BALANCE_C.
PERFORM. F_LIST.
"换行、换页处理
PERFORM. F_NEWPAGE.
ENDIF.
QCYE_BALANCE = ITAB-BALANCE2. "重整期初余额
"[本期合计][本年累计]显示
ITAB-CREDIT = 0 - ITAB-CREDIT.
ITAB-CREDIT2 = 0 - ITAB-CREDIT2.
L1 = G_BUDAT2. L2 = ''. L3 = ' 本 期 合 计'. L4 = ''. L5 = ''. L6 = ''.
L7 = ITAB-DEBIT. L8 = ITAB-CREDIT. L9 = ITAB-BALANCEWAY2. L10 = ITAB-BALANCE2_C.
PERFORM. F_LIST.
I = I + 1.
FLAG_LINE = I MOD 5.
IF FLAG_LINE = 0 AND I > 5.
ULINE.
ENDIF.
L1 = G_BUDAT2. L2 = ''. L3 = ' 本 年 累 计'. L4 = ''. L5 = ''. L6 = ''.
L7 = ITAB-DEBIT2. L8 = ITAB-CREDIT2. L9 = ITAB-BALANCEWAY2. L10 = ITAB-BALANCE2_C.
PERFORM. F_LIST.
"注:[本期合计余额]相等于当期[本年累计余额]
I = I + 1.
FLAG_LINE = I MOD 5.
IF FLAG_LINE = 0.
ULINE.
ENDIF.
ENDIF.
ENDLOOP.
FLAG_LINE = I MOD 5.
IF ( I = 1 OR I < 6 OR ( FLAG_LINE <> 0 ) ) AND ( I <> 5 ).
ULINE.
ENDIF.
PERFORM. F_BOTTOM.
ENDIF. "结束G_ISEMPTY = 1
ENDLOOP.
ENDFORM. " F_PRINT_REPORT
*&---------------------------------------------------------------------*
*换页处理
*&---------------------------------------------------------------------*
FORM. F_NEWPAGE.
I = I + 1.
FLAG_LINE = I MOD 5.
IF FLAG_LINE = 0.
ULINE.
ENDIF.
PAGENUM = I MOD 59 .
IF PAGENUM = 0.
L1 = ''. L2 = ''. L3 = '(过次页)'. L4 = ''. L5 = ''. L6 = ''.
L7 = ''. L8 = ''. L9 = ''. L10 = ITAB_LIST-BALANCE_C.
PERFORM. F_LIST.
ULINE.
NEW-PAGE.
PAGE_CURR = PAGE_CURR + 1.
PERFORM. F_HEAD.
PERFORM. F_LIST_HEAD.
L1 = ''. L2 = ''. L3 = '(承前页)'. L4 = ''. L5 = ''. L6 = ''.
L7 = ''. L8 = ''. L9 = ''. L10 = ITAB_LIST-BALANCE_C.
PERFORM. F_LIST.
I = I + 2.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*从数据库中读取明细数据
*&---------------------------------------------------------------------*
FORM. F_READ_DATA .
DATA: L_BALANCE LIKE GLT0-TSLVT.
CLEAR ITAB_TEMP1. REFRESH ITAB_TEMP1.
CLEAR ITAB_TEMP2. REFRESH ITAB_TEMP2.
CLEAR ITAB_LIST. REFRESH ITAB_LIST.
SELECT
BELNR "会计凭证号码(凭证字号)
BUDAT "凭证中的记帐日期
WAERS "货币代码
KURSF "汇率
FROM BKPF
INTO CORRESPONDING FIELDS OF TABLE ITAB_TEMP1
WHERE BUKRS = P_BUKRS AND
GJAHR = P_GJAHR AND
BUDAT >= G_BUDAT1 AND
BUDAT <= G_BUDAT2 AND
BSTAT = ''. "凭证状态(去除样本凭证等)
*取每张凭证上的借贷金额
ZHS = 0.
LOOP AT ITAB_TEMP1.
SELECT
BELNR "会计凭证号码(凭证字号)
WRBTR "凭证货币金额
DMBTR "按本位币计的金额
SHKZG "借方/贷方标识
SGTXT "项目文本(摘要)
SAKNR "总帐科目号
HKONT "总分类帐帐目
FROM BSEG
INTO CORRESPONDING FIELDS OF TABLE ITAB_TEMP2
WHERE BUKRS = P_BUKRS AND GJAHR = P_GJAHR AND
BELNR = ITAB_TEMP1-BELNR AND
HKONT = IT_LIST-SAKNR.
LOOP AT ITAB_TEMP2.
MOVE ITAB_TEMP2-BELNR TO ITAB_LIST-BELNR.
MOVE ITAB_TEMP2-WRBTR TO ITAB_LIST-WRBTR.
MOVE ITAB_TEMP2-DMBTR TO ITAB_LIST-DMBTR.
MOVE ITAB_TEMP2-SHKZG TO ITAB_LIST-SHKZG.
MOVE ITAB_TEMP2-SAKNR TO ITAB_LIST-SAKNR.
MOVE ITAB_TEMP2-SGTXT TO ITAB_LIST-SGTXT.
MOVE ITAB_TEMP1-BUDAT TO ITAB_LIST-BUDAT.
MOVE ITAB_TEMP1-WAERS TO ITAB_LIST-WAERS.
IF ITAB_TEMP1-WAERS <> 'RMB'.
MOVE ITAB_TEMP1-KURSF TO ITAB_LIST-KURSF.
ELSE.
MOVE '' TO ITAB_LIST-KURSF.
ENDIF.
APPEND ITAB_LIST.
ZHS = ZHS + 1.
ENDLOOP.
ENDLOOP.
*处理借贷方金额
LOOP AT ITAB_LIST.
IF ITAB_LIST-SHKZG = 'S'.
MOVE ITAB_LIST-DMBTR TO ITAB_LIST-DEBIT.
ELSEIF ITAB_LIST-SHKZG = 'H'.
MOVE ITAB_LIST-DMBTR TO ITAB_LIST-CREDIT.
ENDIF.
MODIFY ITAB_LIST.
ENDLOOP.
SORT ITAB_LIST BY BUDAT.
L_BALANCE = QCYE_BALANCE.
*处理明细余额
LOOP AT ITAB_LIST.
ITAB_LIST-BALANCE = L_BALANCE + ITAB_LIST-DEBIT - ITAB_LIST-CREDIT.
ITAB_LIST-BALANCE_C = ITAB_LIST-BALANCE.
IF ( ( IT_LIST-SAKNR+2(1) <> '2' ) AND ( IT_LIST-SAKNR+2(1) <> '3' ) AND
( IT_LIST-SAKNR+2(1) <> '5' ) AND ( IT_LIST-SAKNR+2(1) <> '6' ) AND
( IT_LIST-SAKNR <> '0015020001' ) AND ( IT_LIST-SAKNR <> '0011410001' ) ) OR
( IT_LIST-SAKNR = '0021710101' ) OR ( IT_LIST-SAKNR = '0021710102' ) OR
( IT_LIST-SAKNR = '0021710103' ) OR ( IT_LIST-SAKNR = '0021710104' ) OR
( IT_LIST-SAKNR = '0021710105' ) OR ( IT_LIST-SAKNR = '0021710110' ) OR
( IT_LIST-SAKNR = '0021710111' ) OR ( IT_LIST-SAKNR = '0021710112' ) OR
( IT_LIST-SAKNR = '0021710117' ) OR
( IT_LIST-SAKNR+2(4) = '5401' ) OR ( IT_LIST-SAKNR+2(4) = '5402' ) OR
( IT_LIST-SAKNR+2(4) = '5405' ) OR ( IT_LIST-SAKNR = '0055010000' ) OR
( IT_LIST-SAKNR = '0055020000' ) OR ( IT_LIST-SAKNR = '0055030002' ) OR
( IT_LIST-SAKNR = '0055030003' ) OR ( IT_LIST-SAKNR = '0055030004' ) OR
( IT_LIST-SAKNR = '0055030005' ) OR ( IT_LIST-SAKNR+2(4) = '5601' ) OR
( IT_LIST-SAKNR+2(4) = '5701' ).
IF ITAB_LIST-BALANCE = 0.
ITAB_LIST-BALANCEWAY = '平'.
ELSEIF ITAB_LIST-BALANCE > 0 .
ITAB_LIST-BALANCEWAY = '借'.
ELSE.
ITAB_LIST-BALANCEWAY = '借'.
ITAB_LIST-BALANCE_C = 0 - ITAB_LIST-BALANCE.
CONCATENATE '-' ITAB_LIST-BALANCE_C INTO ITAB_LIST-BALANCE_C.
ENDIF.
ELSE.
IF ITAB_LIST-BALANCE = 0.
ITAB_LIST-BALANCEWAY = '平'.
ELSEIF ITAB_LIST-BALANCE > 0 .
ITAB_LIST-BALANCEWAY = '贷'.
CONCATENATE '-' ITAB_LIST-BALANCE_C INTO ITAB_LIST-BALANCE_C.
ELSE.
ITAB_LIST-BALANCEWAY = '贷'.
ITAB_LIST-BALANCE_C = 0 - ITAB_LIST-BALANCE.
ENDIF.
ENDIF.
CONDENSE ITAB_LIST-BALANCE_C.
MODIFY ITAB_LIST.
L_BALANCE = ITAB_LIST-BALANCE.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*从数据库中读取本期合计数据
*&---------------------------------------------------------------------*
FORM. F_READ_TOTALDATA .
DATA : I TYPE I,
J TYPE I,
TEMP_DEBIT2 LIKE ITAB-DEBIT2, "本年累计借方+年初数
TEMP_CREDIT2 LIKE ITAB-CREDIT2. "本年累计贷方+年初数
*获取本期合计数据
SELECT *
FROM GLT0
INTO CORRESPONDING FIELDS OF ITABS
WHERE BUKRS = P_BUKRS AND RYEAR = P_GJAHR "公司代码、会计年度
AND RACCT = G_SAKNR "取总账科目代码
* and RBUSA = ''
* and RPMAX >= P_MONAT+4(2) "期间处理
* and RPMAX <= P_MONAT+7(2)
ORDER BY RPMAX ASCENDING.
APPEND ITABS.
CLEAR ITABS.
ENDSELECT.
CLEAR ITAB.
I = 0.
DO 16 TIMES.
I = I + 1.
ITAB-MONAT = I.
APPEND ITAB.
ENDDO.
**开始循环
LOOP AT ITABS.
J = 0.
DO 16 TIMES.
J = J + 1.
READ TABLE ITAB INDEX J.
CASE J.
*处理1月份数据
WHEN 1.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL01. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01. "本年累计
NCYE_BALANCE = NCYE_BALANCE + ITABS-HSLVT.
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL01. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01. "本年累计
NCYE_BALANCE = NCYE_BALANCE + ITABS-HSLVT.
ENDIF.
*处理2月份数据
WHEN 2.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL02. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 .
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL02. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 .
ENDIF.
*处理3月份数据
WHEN 3.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL03. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03.
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL03. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03.
ENDIF.
*处理4月份数据
WHEN 4.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL04. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04 .
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL04. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04.
ENDIF.
*处理5月份数据
WHEN 5.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL05. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 .
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL05. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 .
ENDIF.
*处理6月份数据
WHEN 6.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL06. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 .
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL06. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 .
ENDIF.
*处理7月份数据
WHEN 7.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL07. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07 .
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL07. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07 .
ENDIF.
*处理8月份数据
WHEN 8.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL08. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 .
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL08. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 .
ENDIF.
*处理9月份数据
WHEN 9.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL09. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 .
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL09. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 .
ENDIF.
*处理10月份数据
WHEN 10.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL10. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 + ITABS-HSL10 .
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL10. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 + ITABS-HSL10 .
ENDIF.
*处理11月份数据
WHEN 11.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL11. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 + ITABS-HSL10
+ ITABS-HSL11 .
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL11. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 + ITABS-HSL10
+ ITABS-HSL11 .
ENDIF.
*处理12月份数据
WHEN 12.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL12. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 + ITABS-HSL10
+ ITABS-HSL11 + ITABS-HSL12 .
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL12. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 + ITABS-HSL10
+ ITABS-HSL11 + ITABS-HSL12 .
ENDIF.
*处理13月份数据
WHEN 13.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL13. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 + ITABS-HSL10
+ ITABS-HSL11 + ITABS-HSL12 + ITABS-HSL13 .
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL13. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 + ITABS-HSL10
+ ITABS-HSL11 + ITABS-HSL12 + ITABS-HSL13 .
ENDIF.
*处理14月份数据
WHEN 14.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL14. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 + ITABS-HSL10
+ ITABS-HSL11 + ITABS-HSL12 + ITABS-HSL13
+ ITABS-HSL14 .
ELSEIF ITABS-DRCRK = 'H'.
ITAB-CREDIT = ITAB-CREDIT + ITABS-HSL14. "贷方本期合计
ITAB-CREDIT2 = ITAB-CREDIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 + ITABS-HSL10
+ ITABS-HSL11 + ITABS-HSL12 + ITABS-HSL13
+ ITABS-HSL14 .
ENDIF.
*处理15月份数据
WHEN 15.
IF ITABS-DRCRK = 'S'.
ITAB-DEBIT = ITAB-DEBIT + ITABS-HSL15. "借方本期合计
ITAB-DEBIT2 = ITAB-DEBIT2 + ITABS-HSL01 "本年累计
+ ITABS-HSL02 + ITABS-HSL03 + ITABS-HSL04
+ ITABS-HSL05 + ITABS-HSL06 + ITABS-HSL07
+ ITABS-HSL08 + ITABS-HSL09 + ITABS-HSL10
+ ITABS-HSL11 + ITABS-HSL12 + ITABS-HSL13
&a