REPORT NO STANDARD PAGE HEADING LINE-SIZE 142
LINE-COUNT 64(2)
* 总分类账()
TABLES:bkpf,bseg, skat, glt0.
TYPES: BEGIN OF doc_type ,
gjahr LIKE bkpf-gjahr, "fincal year
belnr LIKE bkpf-belnr, "Document number
hkont LIKE bseg-hkont, "ACCOUNT NO
shkzg LIKE bseg-shkzg, "借/贷标志
dmbtr LIKE bseg-dmbtr, "H AMOUNT
xnegp LIKE bseg-xnegp, "RED
lifnr LIKE bseg-lifnr,
koart LIKE bseg-koart,
kunnr LIKE bseg-kunnr,
status TYPE i,
END OF doc_type.
TYPES: BEGIN OF docvend_type , "供应商
gjahr LIKE bkpf-gjahr, "fincal year
belnr LIKE bkpf-belnr, "Document number
* xkey(11) type c,
lifnr LIKE bseg-lifnr,
kunnr LIKE bseg-kunnr,
hkont LIKE bseg-hkont, "ACCOUNT NO
shkzg LIKE bseg-shkzg, "借/贷标志
dmbtr LIKE bseg-dmbtr, "H AMOUNT
xnegp LIKE bseg-xnegp, "RED
koart LIKE bseg-koart,
status TYPE i,
END OF docvend_type.
TYPES: BEGIN OF doccust_type , "客户
gjahr LIKE bkpf-gjahr, "fincal year
belnr LIKE bkpf-belnr, "Document number
* xkey(11) type c,
kunnr LIKE bseg-kunnr,
lifnr LIKE bseg-lifnr,
hkont LIKE bseg-hkont, "ACCOUNT NO
shkzg LIKE bseg-shkzg, "借/贷标志
dmbtr LIKE bseg-dmbtr, "H AMOUNT
xnegp LIKE bseg-xnegp, "RED
koart LIKE bseg-koart,
status TYPE i,
END OF doccust_type.
DATA: BEGIN OF doc_result OCCURS 0,
hkont2 LIKE bseg-hkont, "ACCOUNT NO
txt20 LIKE skat-txt50,
dmbtrs LIKE bseg-dmbtr, "H AMOUNT
dmbtrh LIKE bseg-dmbtr, "H AMOUNT
hkont1 LIKE bseg-hkont, "ACCOUNT NO
END OF doc_result.
DATA: BEGIN OF doc OCCURS 0,
hkont2 LIKE bseg-hkont, "ACCOUNT NO
txt20 LIKE skat-txt50,
dmbtrs LIKE bseg-dmbtr, "H AMOUNT
dmbtrh LIKE bseg-dmbtr, "H AMOUNT
hkont1 LIKE bseg-hkont, "ACCOUNT NO
END OF doc.
DATA: hslvt1 LIKE bseg-dmbtr.
DATA: bal LIKE bseg-dmbtr.
DATA: wrpt(1) TYPE c.
DATA: wappend(1) TYPE c.
DATA: wgrp LIKE skat-txt50.
DATA: wtopgrp(20) TYPE c. "所选科目的描述"
DATA: wzero(10) TYPE c VALUE '0000000000'.
DATA: wacct(10) TYPE c. "所选科目
DATA: wtabamt LIKE bseg-dmbtr.
DATA: account(4) TYPE c.
DATA: BEGIN OF aperiod OCCURS 0, " 某一科目的各期间数
hsl01 LIKE glt0-hsl01, " 一月
hsl02 LIKE glt0-hsl02, " 二月
hsl03 LIKE glt0-hsl03, " 三月
hsl04 LIKE glt0-hsl04, " 四月
hsl05 LIKE glt0-hsl05, " 五月
hsl06 LIKE glt0-hsl06, " 六月
hsl07 LIKE glt0-hsl07, " 七月
hsl08 LIKE glt0-hsl08, " 八月
hsl09 LIKE glt0-hsl09, " 九月
hsl10 LIKE glt0-hsl10, " 十月
hsl11 LIKE glt0-hsl11, " 十一月
hsl12 LIKE glt0-hsl12, " 十二月
END OF aperiod.
DATA:mon LIKE bkpf-monat,
type2(2) TYPE c, "期初借贷类型
hslvts LIKE glt0-hslvt, "期初借方
hslvth LIKE glt0-hslvt, "期初贷方
hslvt LIKE glt0-hslvt, "期初科目余额
wdiff LIKE bseg-dmbtr, "发生额-余额
wdrcr(2) TYPE c.
FIELD-SYMBOLS: <f-fs>.
DATA: wlen TYPE i.
DATA: tab1 TYPE doc_type OCCURS 0 WITH HEADER LINE.
DATA: tab2 TYPE doc_type OCCURS 0 WITH HEADER LINE.
DATA: vtab1 TYPE docvend_type OCCURS 0 WITH HEADER LINE.
DATA: ctab1 TYPE doccust_type OCCURS 0 WITH HEADER LINE.
DATA: vendtab TYPE docvend_type OCCURS 0 WITH HEADER LINE.
DATA: custtab TYPE doccust_type OCCURS 0 WITH HEADER LINE.
DATA: itab1 TYPE doc_type OCCURS 0 WITH HEADER LINE.
DATA: itab1b TYPE doc_type OCCURS 0 WITH HEADER LINE.
DATA: itab2 TYPE doc_type OCCURS 0 WITH HEADER LINE.
DATA: itab_temp1 TYPE doc_type OCCURS 0 WITH HEADER LINE.
DATA: itab_temp2 TYPE doc_type OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF i_bkpf OCCURS 0,
gjahr LIKE bkpf-gjahr,
belnr LIKE bkpf-belnr,
stblg LIKE bkpf-stblg, " Added by J.J 2002.9.5
END OF i_bkpf.
DATA: k TYPE i VALUE 0.
DATA: j TYPE i VALUE 0.
DATA: m TYPE i VALUE 0.
DATA: n TYPE i.
DATA: rec_count(5) TYPE c.
DATA: c_rc(14) TYPE c.
DATA: rc(5) TYPE c.
DATA slen TYPE i.
DATA xnegpctr TYPE i.
PARAMETERS: year LIKE bkpf-gjahr DEFAULT '2002',
month LIKE bkpf-monat
DEFAULT sy-datum+4(2).
Select-OPTIONS: accounts FOR bkpf-gjahr.
Select-OPTIONS: wbelnr FOR bseg-belnr NO-DISPLAY.
CONSTANTS:company(3) TYPE c VALUE 'cc01'.
PARAMETERS: general AS CHECKBOX DEFAULT 'X',
details AS CHECKBOX.
* main body
wrpt = ''.
IF general = 'X'.
wrpt = 'G'.
ELSEIF details = 'X'.
wrpt = 'D'.
ENDIF.
START-OF-SelectION.
LOOP AT accounts.
CLEAR: account, hslvth, hslvts, hslvt, bal, hslvt1,wdrcr, wdiff.
CLEAR: doc_result,tab2,tab1,itab1,itab2,aperiod,doc,i_bkpf.
REFRESH: doc_result,tab2,tab1,itab1,itab2,aperiod,doc,i_bkpf.
account = accounts-low.
PERFORM select_data.
* 合并相同科目项(同凭证内),
* 并放到ITAB1、ITAB2?
PERFORM process_init_data.
* 分四种情形处理ITAB1、ITAB2内数据
* 并放到DOC_RESULT?
PERFORM process_data.
* break-point.
PERFORM getdata. "取描述和对方科目
* 输出结果
wacct = account.
OVERLAY wacct WITH wzero.
PERFORM getdes USING wacct. "取一级科目的描述
wtopgrp = wgrp.
PERFORM output_data.
CLEAR: account.
ENDLOOP.
END-OF-SelectION.
TOP-OF-PAGE.
WRITE:/(142) '一 汽 集 团 大 连 柴 油 机 厂 '
CENTERED.
SKIP 1.
WRITE:/(142) '总 分 类 帐' CENTERED.
SKIP 1.
WRITE:/1 year, '年',
10 month,'月 1 日 - ',
25 month, '月 30 日 ',
45 '科目代码 : ',
55 account,
65 '科目名称: ',
75 wtopgrp,
95 '日期:',
100 sy-datum,
125 '用户号 :',
132 sy-uname.
ULINE.
WRITE:/'|',(10) '对方科目' CENTERED,
'|',(30) '对方科目描述' CENTERED,
'|',(25) '借方金额' CENTERED,
'|',(25) '贷方金额' CENTERED,
'|',(36) '余 额' CENTERED,'|'.
ULINE.
END-OF-PAGE.
*&---------------------------------------------------------------------*
*& Form select_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM select_data.
DATA: BEGIN OF i_doc OCCURS 0,
belnr LIKE bseg-belnr,
END OF i_doc.
DATA: wst LIKE bseg-hkont,
wen LIKE bseg-hkont.
* 确定明细科目
CONCATENATE account '000000' INTO wst.
CONCATENATE account '999999' INTO wen.
Select belnr
INTO CORRESPONDING FIELDS OF TABLE i_doc
FROM bseg Where hkont BETWEEN wst and wen.
SORT i_doc BY belnr.
Delete ADJACENT DUPLICATES FROM i_doc.
LOOP AT i_doc.
wbelnr-sign = 'I'.
wbelnr-option = 'EQ'.
wbelnr-low = i_doc-belnr.
APPEND wbelnr.
ENDLOOP.
Select gjahr belnr stblg
INTO CORRESPONDING FIELDS OF TABLE i_bkpf
FROM bkpf
Where
bukrs = company
AND belnr IN wbelnr
AND gjahr = year
AND monat = month.
Select gjahr belnr
hkont shkzg dmbtr xnegp koart lifnr kunnr
INTO CORRESPONDING FIELDS OF tab2
FROM bseg
Where bukrs = company
AND belnr IN wbelnr
AND gjahr = year.
READ TABLE i_bkpf WITH KEY
gjahr = tab2-gjahr
belnr = tab2-belnr.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
APPEND tab2.
IF tab2-hkont+0(4) = account.
MOVE-CORRESPONDING tab2 TO tab1.
APPEND tab1.
CLEAR tab1.
ENDIF.
CLEAR tab2.
ENDSelect.
* All items stored in Tab2
* Only item with specified account stored in Tab1
ENDFORM. " select_data
*&---------------------------------------------------------------------*
*& Form process_init_data
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM process_init_data.
DATA: wprvacct LIKE bseg-hkont VALUE ''.
SORT tab2 BY gjahr belnr hkont shkzg koart lifnr.
SORT tab1 BY gjahr belnr hkont shkzg koart lifnr.
DATA add_count TYPE i.
DATA temp_dmbtr LIKE bseg-dmbtr.
DATA wmline TYPE i.
*BREAK-POINT.
* G/L account
LOOP AT tab2 Where koart <> 'D' " 客户
AND koart <> 'K'. " 供应商
*** add 2002.9.8 by johnny, start
*** 如果行项目为反记帐,金额取反,并且借贷互换
IF tab2-xnegp = 'X'.
tab2-dmbtr = -1 * tab2-dmbtr.
wmline = wmline + 1.
IF tab2-shkzg = 'H'.
tab2-shkzg = 'S'.
else.
tab2-shkzg = 'H'.
endif.
ENDIF.
*** end
IF tab2-shkzg = 'H'. " 贷方
wtabamt = wtabamt + ( tab2-dmbtr * -1 ).
ELSE.
wtabamt = wtabamt + tab2-dmbtr.
ENDIF.
* wmline = wmline + 1.
AT END OF hkont.
SUM.
temp_dmbtr = wtabamt.
add_count = 1.
ENDAT.
IF add_count = 1.
add_count = 0.
MOVE-CORRESPONDING tab2 TO itab2.
IF wmline > 1.
MOVE 'X' TO itab2-xnegp.
ENDIF.
IF temp_dmbtr > 0.
MOVE 'S' TO itab2-shkzg.
ELSE.
MOVE 'H' TO itab2-shkzg.
ENDIF.
itab2-dmbtr = abs( temp_dmbtr ).
CLEAR temp_dmbtr.
APPEND itab2.
CLEAR itab2.
wtabamt = 0.
wmline = 0.
ENDIF.
ENDLOOP.
wtabamt = 0.
LOOP AT tab1 Where koart <> 'D' " 客户
AND koart <> 'K'. " 供应商
*** add 2002.9.8 by johnny, start
*** 如果行项目为反记帐,金额取反,并且借贷互换
IF tab1-xnegp = 'X'.
tab1-dmbtr = -1 * tab1-dmbtr.
wmline = wmline + 1.
IF tab1-shkzg = 'H'.
tab1-shkzg = 'S'.
else.
tab1-shkzg = 'H'.
endif.
ENDIF.
*** end
IF tab1-shkzg = 'H'.
wtabamt = wtabamt + ( tab1-dmbtr * -1 ).
ELSE.
wtabamt = wtabamt + tab1-dmbtr.
ENDIF.
* wmline = wmline + 1.
AT END OF hkont.
SUM.
add_count = 1.
temp_dmbtr = wtabamt.
ENDAT.
IF add_count = 1.
add_count = 0.
MOVE-CORRESPONDING tab1 TO itab1.
IF wmline > 1.
MOVE 'X' TO itab1-xnegp.
ENDIF.
IF temp_dmbtr > 0.
MOVE 'S' TO itab1-shkzg.
ELSE.
MOVE 'H' TO itab1-shkzg.
ENDIF.
itab1-dmbtr = temp_dmbtr.
itab1-dmbtr = abs( temp_dmbtr ).
CLEAR temp_dmbtr.
APPEND itab1.
CLEAR itab1.
wtabamt = 0.
wmline = 0.
ENDIF.
ENDLOOP.
wtabamt = 0.
*------------------------------------------------
* Account payable
* Check vendor from vendtab 供应商合并
REFRESH vendtab.
LOOP AT tab2 Where koart = 'K'.
MOVE-CORRESPONDING tab2 TO vendtab.
APPEND vendtab.
ENDLOOP.
* SORT vendtab BY gjahr belnr lifnr shkzg koart.
SORT vendtab BY gjahr belnr lifnr hkont shkzg koart.
LOOP AT vendtab . " Where koart = 'K'.
*** add 2002.9.8 by johnny, start
*** 如果行项目为反记帐,金额取反,并且借贷互换
IF vendtab-xnegp = 'X'.
vendtab-dmbtr = -1 * vendtab-dmbtr.
wmline = wmline + 1.
IF vendtab-shkzg = 'H'.
vendtab-shkzg = 'S'.
ELSE.
vendtab-shkzg = 'H'.
ENDIF.
ENDIF.
*** end
IF vendtab-shkzg = 'H'.
wtabamt = wtabamt + ( vendtab-dmbtr * -1 ).
ELSE.
wtabamt = wtabamt + vendtab-dmbtr.
ENDIF.
* wmline = wmline + 1.
* AT END OF lifnr.
AT END OF hkont.
SUM.
temp_dmbtr = wtabamt.
add_count = 1.
ENDAT.
IF add_count = 1.
add_count = 0.
MOVE-CORRESPONDING vendtab TO itab2.
IF wmline > 1.
MOVE 'X' TO itab2-xnegp.
ENDIF.
IF temp_dmbtr > 0.
MOVE 'S' TO itab2-shkzg.
ELSE.
MOVE 'H' TO itab2-shkzg.
ENDIF.
itab2-dmbtr = abs( temp_dmbtr ).
CLEAR temp_dmbtr.
APPEND itab2.
CLEAR itab2.
wtabamt = 0.
wmline = 0.
ENDIF.
ENDLOOP.
REFRESH custtab.
wtabamt = 0.
* Account receivable
* Check customer from custtab 客户合并
LOOP AT tab2 Where koart = 'D'.
MOVE-CORRESPONDING tab2 TO custtab.
APPEND custtab.
ENDLOOP.
* SORT custtab BY gjahr belnr kunnr shkzg koart.
SORT custtab BY gjahr belnr kunnr hkont shkzg koart.
LOOP AT custtab. " Where koart = 'D'.
*** add 2002.9.8 by johnny, start
*** 如果行项目为反记帐,金额取反,并且借贷互换
IF custtab-xnegp = 'X'.
custtab-dmbtr = -1 * custtab-dmbtr.
wmline = wmline + 1.
IF custtab-shkzg = 'H'.
custtab-shkzg = 'S'.
ELSE.
custtab-shkzg = 'H'.
ENDIF.
ENDIF.
*** end
IF custtab-shkzg = 'H'.
wtabamt = wtabamt + ( custtab-dmbtr * -1 ).
ELSE.
wtabamt = wtabamt + custtab-dmbtr.
ENDIF.
* wmline = wmline + 1.
* AT END OF kunnr.
AT END OF hkont.
SUM.
temp_dmbtr = wtabamt.
add_count = 1.
ENDAT.
IF add_count = 1.
add_count = 0.
MOVE-CORRESPONDING custtab TO itab2.
IF wmline > 1.
MOVE 'X' TO itab2-xnegp.
ENDIF.
IF temp_dmbtr > 0.
MOVE 'S' TO itab2-shkzg.
ELSE.
MOVE 'H' TO itab2-shkzg.
ENDIF.
itab2-dmbtr = abs( temp_dmbtr ).
CLEAR temp_dmbtr.
APPEND itab2.
CLEAR itab2.
wtabamt = 0.
wmline = 0.
ENDIF.
ENDLOOP.
*---------------------------------------------
* Account payable
* Check vendor from vtab1.
REFRESH vtab1.
LOOP AT tab1 Where koart = 'K'.
MOVE-CORRESPONDING tab1 TO vtab1.
* concatenate vtab1-lifnr vtab1-xnegp into
* vtab1-xkey.
APPEND vtab1.
ENDLOOP.
* SORT vtab1 BY gjahr belnr lifnr shkzg koart.
SORT vtab1 By gjahr belnr lifnr hkont shkzg koart.
wtabamt = 0.
LOOP AT vtab1. " Where koart = 'K'.
*** add 2002.9.8 by johnny, start
*** 如果行项目为反记帐,金额取反,并且借贷互换
IF vtab1-xnegp = 'X'.
vtab1-dmbtr = -1 * vtab1-dmbtr.
wmline = wmline + 1.
IF vtab1-shkzg = 'H'.
vtab1-shkzg = 'S'.
ELSE.
vtab1-shkzg = 'H'.
ENDIF.
ENDIF.
*** end
IF vtab1-shkzg = 'H'.
wtabamt = wtabamt + ( vtab1-dmbtr * -1 ).
ELSE.
wtabamt = wtabamt + vtab1-dmbtr.
ENDIF.
* wmline = wmline + 1.
* AT END OF lifnr.
AT END OF hkont.
SUM.
add_count = 1.
temp_dmbtr = wtabamt.
ENDAT.
IF add_count = 1.
add_count = 0.
MOVE-CORRESPONDING vtab1 TO itab1.
IF wmline > 1.
MOVE 'X' TO itab1-xnegp.
ENDIF.
IF temp_dmbtr > 0.
MOVE 'S' TO itab1-shkzg.
ELSE.
MOVE 'H' TO itab1-shkzg.
ENDIF.
itab1-dmbtr = temp_dmbtr.
itab1-dmbtr = abs( temp_dmbtr ).
CLEAR temp_dmbtr.
APPEND itab1.
CLEAR itab1.
wtabamt = 0.
wmline = 0.
ENDIF.
ENDLOOP.
** Change by Raymond 2002..06.13
* LOOP AT vtab1 Where koart = 'K'.
* IF vtab1-xnegp = 'X'.
* xnegpctr = xnegpctr + 1.
* ENDIF.
*
* AT END OF belnr.
* IF xnegpctr > 1.
* LOOP AT itab1 Where gjahr = vtab1-gjahr
* AND belnr = vtab1-belnr.
* itab1-xnegp = 'X'.
* MODIFY itab1.
* ENDLOOP.
* ENDIF.
* xnegpctr = 0.
* ENDAT.
* ENDLOOP. " Marked by Johnny 2002.9.8
* Account receivable
* Check customer from ctab1.
REFRESH ctab1.
LOOP AT tab1 Where koart = 'D'.
MOVE-CORRESPONDING tab1 TO ctab1.
APPEND ctab1.
ENDLOOP.
* SORT ctab1 BY gjahr belnr kunnr shkzg koart.
SORT ctab1 BY gjahr belnr kunnr hkont shkzg koart.
wtabamt = 0.
LOOP AT ctab1. " Where koart = 'D'.
*** add 2002.9.8 by johnny, start
*** 如果行项目为反记帐,金额取反,并且借贷互换
IF ctab1-xnegp = 'X'.
ctab1-dmbtr = -1 * ctab1-dmbtr.
wmline = wmline + 1.
IF ctab1-shkzg = 'H'.
ctab1-shkzg = 'S'.
ELSE.
ctab1-shkzg = 'H'.
ENDIF.
ENDIF.
*** end
IF ctab1-shkzg = 'H'.
wtabamt = wtabamt + ( ctab1-dmbtr * -1 ).
ELSE.
wtabamt = wtabamt + ctab1-dmbtr.
ENDIF.
wmline = wmline + 1.
* AT END OF kunnr.
AT END OF hkont.
SUM.
add_count = 1.
temp_dmbtr = wtabamt.
ENDAT.
IF add_count = 1.
add_count = 0.
MOVE-CORRESPONDING ctab1 TO itab1.
IF wmline > 1.
MOVE 'X' TO itab1-xnegp.
ENDIF.
IF temp_dmbtr > 0.
MOVE 'S' TO itab1-shkzg.
ELSE.
MOVE 'H' TO itab1-shkzg.
ENDIF.
itab1-dmbtr = temp_dmbtr.
itab1-dmbtr = abs( temp_dmbtr ).
CLEAR temp_dmbtr.
APPEND itab1.
CLEAR itab1.
wtabamt = 0.
wmline = 0.
ENDIF.
ENDLOOP.
** Change by Raymond 2002..06.13
* LOOP AT ctab1. " Where koart = 'D'.
* IF ctab1-xnegp = 'X'.
* xnegpctr = xnegpctr + 1.
* ENDIF.
*
* AT END OF belnr.
* IF xnegpctr > 1.
* LOOP AT itab1 Where gjahr = ctab1-gjahr
* AND belnr = ctab1-belnr.
* itab1-xnegp = 'X'.
* MODIFY itab1.
* ENDLOOP.
* ENDIF.
* xnegpctr = 0.
* ENDAT.
* ENDLOOP. " Marked by Johnny 2002.9.8
wtabamt = 0.
MOVE itab1[] TO itab1b[].
* BREAK-POINT.
CLEAR: tab1,tab2.
REFRESH: tab1,tab2.
ENDFORM. " process_init_data
*&---------------------------------------------------------------------*
*& Form process_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_data.
SORT itab1 BY gjahr belnr hkont.
*break-point.
LOOP AT itab1.
AT NEW belnr.
k = 1.
ENDAT.
IF k = 1.
k = 0.
LOOP AT itab2 Where gjahr = itab1-gjahr
AND belnr = itab1-belnr.
IF itab1-shkzg = itab2-shkzg. "同方向科目
MOVE-CORRESPONDING itab2 TO itab_temp1.
APPEND itab_temp1.
CLEAR itab_temp1.
ELSE. "反方向科目
MOVE-CORRESPONDING itab2 TO itab_temp2.
APPEND itab_temp2.
CLEAR itab_temp2.
ENDIF.
ENDLOOP.
ENDIF.
DESCRIBE TABLE itab_temp1 LINES m.
DESCRIBE TABLE itab_temp2 LINES n.
IF m = 1 AND n = 1 . "情形一
READ TABLE itab_temp2 INDEX 1.
MODIFY itab_temp2 INDEX 1.
doc_result-hkont1 = itab1-hkont.
IF itab1-xnegp = 'X'.
IF itab1-shkzg = 'H'.
doc_result-dmbtrs = 0 - itab1-dmbtr.
ELSE.
doc_result-dmbtrh = 0 - itab1-dmbtr.
ENDIF.
ELSE.
IF itab1-shkzg = 'S'.
doc_result-dmbtrs = itab1-dmbtr.
ELSE.
doc_result-dmbtrh = itab1-dmbtr.
ENDIF.
ENDIF.
doc_result-hkont2 = itab_temp2-hkont.
APPEND doc_result.
CLEAR doc_result.
ELSEIF m = 1 AND n > 1. "情形二
LOOP AT itab_temp2.
IF itab_temp2-status = 0.
itab_temp2-status = 1.
MODIFY itab_temp2.
doc_result-hkont1 = itab1-hkont.
IF itab1-xnegp = 'X'.
IF itab1-shkzg = 'H'.
doc_result-dmbtrs = 0 - itab_temp2-dmbtr.
ELSE.
doc_result-dmbtrh = 0 - itab_temp2-dmbtr.
ENDIF.
ELSE.
IF itab1-shkzg = 'S'.
doc_result-dmbtrs = itab_temp2-dmbtr.
ELSE.
doc_result-dmbtrh = itab_temp2-dmbtr.
ENDIF.
ENDIF.
doc_result-hkont2 = itab_temp2-hkont.
APPEND doc_result.
CLEAR doc_result.
ENDIF.
ENDLOOP.
ELSEIF m > 1 AND n = 1. "情形三
READ TABLE itab_temp2 INDEX 1.
IF itab_temp2-status = 0.
itab_temp2-status = 1.
MODIFY itab_temp2 INDEX 1.
LOOP AT itab_temp1.
READ TABLE itab1b WITH KEY belnr = itab_temp1-belnr
gjahr = itab_temp1-gjahr
hkont = itab_temp1-hkont.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
doc_result-hkont1 = itab_temp1-hkont.
IF itab1-xnegp = 'X'.
IF itab1-shkzg = 'H'.
doc_result-dmbtrs = 0 - itab_temp1-dmbtr.
ELSE.
doc_result-dmbtrh = 0 - itab_temp1-dmbtr.
ENDIF.
ELSE.
IF itab1-shkzg = 'S'.
doc_result-dmbtrs = itab_temp1-dmbtr.
ELSE.
doc_result-dmbtrh = itab_temp1-dmbtr.
ENDIF.
ENDIF.
doc_result-hkont2 = itab_temp2-hkont."???
APPEND doc_result.
CLEAR doc_result.
ENDLOOP.
ENDIF.
ELSEIF m > 1 AND n > 1 . "情形四
LOOP AT itab_temp1.
IF itab_temp1-status = 0.
READ TABLE itab1b WITH KEY belnr = itab_temp1-belnr
gjahr = itab_temp1-gjahr
hkont = itab_temp1-hkont.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
itab_temp1-status = 1.
MODIFY itab_temp1.
doc_result-hkont1 = itab_temp1-hkont.
IF itab1-xnegp = 'X'.
IF itab1-shkzg = 'H'.
doc_result-dmbtrs = 0 - itab_temp1-dmbtr.
ELSE.
doc_result-dmbtrh = 0 - itab_temp1-dmbtr.
ENDIF.
ELSE.
IF itab1-shkzg = 'S'.
doc_result-dmbtrs = itab_temp1-dmbtr.
ELSE.
doc_result-dmbtrh = itab_temp1-dmbtr.
ENDIF.
ENDIF.
APPEND doc_result.
CLEAR doc_result.
ENDIF.
ENDLOOP.
LOOP AT itab_temp2.
IF itab_temp2-status = 0.
READ TABLE itab1b WITH KEY belnr = itab_temp2-belnr
gjahr = itab_temp2-gjahr
hkont = itab_temp2-hkont.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
itab_temp2-status = 1.
MODIFY itab_temp2.
doc_result-hkont1 = itab_temp2-hkont.
IF itab1-xnegp = 'X'.
IF itab1-shkzg = 'S'.
doc_result-dmbtrs = 0 - itab_temp2-dmbtr.
ELSE.
doc_result-dmbtrh = 0 - itab_temp2-dmbtr.
ENDIF.
ELSE.
IF itab1-shkzg = 'H'.
doc_result-dmbtrs = itab_temp2-dmbtr.
ELSE.
doc_result-dmbtrh = itab_temp2-dmbtr.
ENDIF.
ENDIF.
APPEND doc_result.
CLEAR doc_result.
ENDIF.
ENDLOOP.
ENDIF.
AT END OF belnr.
CLEAR: itab_temp1,itab_temp2,m,n.
REFRESH: itab_temp1,itab_temp2.
ENDAT.
ENDLOOP.
*取上月余额
PERFORM getglt0. "取上月余额
ENDFORM. " process_data
*---------------------------------------------------------------------*
* FORM getdata *
*---------------------------------------------------------------------*
* 取描述
*---------------------------------------------------------------------*
FORM getdata.
LOOP AT doc_result.
IF wrpt = 'G'.
PERFORM getdes USING
doc_result-hkont2. "取一级科目的描述
doc_result-txt20 = wgrp.
MODIFY doc_result.
ELSEIF wrpt = 'D'.
Select * FROM skat Where saknr = doc_result-hkont2
AND spras = '1'.
doc_result-txt20 = skat-txt50.
MODIFY doc_result.
ENDSelect.
ENDIF.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM GETDES *
*---------------------------------------------------------------------*
* 取一级科目的描述
*---------------------------------------------------------------------*
FORM getdes CHANGING whkont2.
wgrp = ''.
IF whkont2 >= '1202000000' AND whkont2 < '1202999999'.
whkont2 = '1202'.
wgrp = '物资采购'.
ELSEIF whkont2 >= '2171000000' AND whkont2 < '2171999999'.
whkont2 = '2171'.
wgrp = '应交税金'.
ELSEIF whkont2 >= '2121000000' AND whkont2 < '2121999999'.
whkont2 = '2121'.
wgrp = '应付帐款'.
ELSEIF whkont2 >= '1101000000' AND whkont2 < '1101999999'.
whkont2 = '1101'.
wgrp = '现金'.
ELSEIF whkont2 >= '1111000000' AND whkont2 < '1111999999'.
whkont2 = '1111'.
wgrp = '银行存款'.
ELSEIF whkont2 >= '1003000000' AND whkont2 < '1003999999'.
whkont2 = '1003'.
wgrp = '厂内存款'.
ELSEIF whkont2 >= '1009000000' AND whkont2 < '1009999999'.
whkont2 = '1009'.
wgrp = '其他货币资金'.
ELSEIF whkont2 >= '1131000000' AND whkont2 < '1131999999'.
whkont2 = '1131'.
wgrp = '应收票据'.
ELSEIF whkont2 >= '1141000000' AND whkont2 < '1141999999'.
whkont2 = '1141'.
wgrp = '应收帐款'.
ELSEIF whkont2 >= '1142000000' AND whkont2 < '1142999999'.
whkont2 = '1132'.
wgrp = '坏帐准备'.
ELSEIF whkont2 >= '1191000000' AND whkont2 < '1191999999'.
whkont2 = '1191'.
wgrp = '其他应收款'.
ELSEIF whkont2 >= '1201000000' AND whkont2 < '1201999999'.
whkont2 = '1201'.
wgrp = '原材料'.
ELSEIF whkont2 >= '1221000000' AND whkont2 < '1221999999'.
whkont2 = '1221'.
wgrp = '包装物'.
ELSEIF whkont2 >= '1231000000' AND whkont2 < '1231999999'.
whkont2 = '1231'.
wgrp = '低值易耗品'.
ELSEIF whkont2 >= '1241000000' AND whkont2 < '1241999999'.
whkont2 = '1241'.
wgrp = '库存商品'.
ELSEIF whkont2 >= '1251000000' AND whkont2 < '1251999999'.
whkont2 = '1251'.
wgrp = '委托加工物资'.
ELSEIF whkont2 >= '1252000000' AND whkont2 < '1252999999'.
whkont2 = '1252'.
wgrp = '材料成本差异'.
ELSEIF whkont2 >= '1301000000' AND whkont2 < '1301999999'.
whkont2 = '1301'.
wgrp = '待摊费用'.
ELSEIF whkont2 >= '1401000000' AND whkont2 < '1401999999'.
whkont2 = '1401'.
wgrp = '长期股权投资'.
ELSEIF whkont2 >= '1501000000' AND whkont2 < '1501999999'.
whkont2 = '1501'.
wgrp = '固定资产'.
ELSEIF whkont2 >= '1502000000' AND whkont2 < '1502999999'.
whkont2 = '1502'.
wgrp = '累计折旧'.
ELSEIF whkont2 >= '1505000000' AND whkont2 < '1505999999'.
whkont2 = '1505'.
wgrp = '工程物资'.
ELSEIF whkont2 >= '1506000000' AND whkont2 < '1506999999'.
whkont2 = '1506'.
wgrp = '在建工程'.
ELSEIF whkont2 >= '1601000000' AND whkont2 < '1601999999'.
whkont2 = '1601'.
wgrp = '固定资产清理'.
ELSEIF whkont2 >= '1701000000' AND whkont2 < '1701999999'.
whkont2 = '1701'.
wgrp = '无形资产'.
ELSEIF whkont2 >= '1801000000' AND whkont2 < '1801999999'.
whkont2 = '1801'.
wgrp = '长期待摊费用'.
ELSEIF whkont2 >= '1901000000' AND whkont2 < '1901999999'.
whkont2 = '1901'.
wgrp = '待处理财产损益'.
ELSEIF whkont2 >= '2101000000' AND whkont2 < '2101999999'.
whkont2 = '2101'.
wgrp = '短期借款'.
ELSEIF whkont2 >= '2111000000' AND whkont2 < '2111999999'.
whkont2 = '2111'.
wgrp = '应付票据'.
ELSEIF whkont2 >= '2121000000' AND whkont2 < '2121999999'.
whkont2 = '2121'.
wgrp = '应付帐款'.
ELSEIF whkont2 >= '2131000000' AND whkont2 < '2131999999'.
whkont2 = '2131'.
wgrp = '预收帐款'.
ELSEIF whkont2 >= '2151000000' AND whkont2 <
'2151999999'.
whkont2 = '2151'.
wgrp = '应付工资'.
ELSEIF whkont2 >= '2153000000' AND whkont2 <
'2153999999'.
whkont2 = '2153'.
wgrp = '应付福利费'.
ELSEIF whkont2 >= '2172000000' AND whkont2 <
'2172999999'.
whkont2 = '2172'.
wgrp = '其他应交款'.
ELSEIF whkont2 >= '2181000000' AND whkont2 <
'2181999999'.
whkont2 = '2181'.
wgrp = '其他应付款'.
ELSEIF whkont2 >= '2191000000' AND whkont2 <
'2191999999'.
whkont2 = '2191'.
wgrp = '预提费用'.
ELSEIF whkont2 >= '2201000000' AND whkont2 <
'2201999999'.
whkont2 = '2201'.
wgrp = '长期借款'.
ELSEIF whkont2 >= '2241000000' AND whkont2 <
'2241999999'.
whkont2 = '2241'.
wgrp = '住房周转金'.
ELSEIF whkont2 >= '3101000000' AND whkont2 <
'3101999999'.
whkont2 = '3101'.
wgrp = '股本'.
ELSEIF whkont2 >= '3111000000' AND whkont2 <
'3111999999'.
whkont2 = '3111'.
wgrp = '资本公积金'.
ELSEIF whkont2 >= '3121000000' AND whkont2 <
'3121999999'.
whkont2 = '3121'.
wgrp = '盈余公积'.
ELSEIF whkont2 >= '3131000000' AND whkont2 <
'3131999999'.
whkont2 = '3131'.
wgrp = '本年利润'.
ELSEIF whkont2 >= '3141000000' AND whkont2 <
'3141999999'.
whkont2 = '3141'.
wgrp = '利润分配'.
ELSEIF whkont2 >= '4101000000' AND whkont2 <
'4101999999'.
whkont2 = '4101'.
wgrp = '生产成本'.
ELSEIF whkont2 >= '4105000000' AND whkont2 <
'4105999999'.
whkont2 = '4105'.
wgrp = '制造费用'.
ELSEIF whkont2 >= '5101000000' AND whkont2 <
'5101999999'.
whkont2 = '5101'.
wgrp = '主营业务收入'.
ELSEIF whkont2 >= '5102000000' AND whkont2 <
'5102999999'.
whkont2 = '5102'.
wgrp = '其他业务收入'.
ELSEIF whkont2 >= '5201000000' AND whkont2 <
'5201999999'.
whkont2 = '5201'.
wgrp = '投资收益'.
ELSEIF whkont2 >= '5301000000' AND whkont2 <
'5301999999'.
whkont2 = '5301'.
wgrp = '营业外收入'.
ELSEIF whkont2 >= '5401000000' AND whkont2 <
'5401999999'.
whkont2 = '5401'.
wgrp = '主营业务成本'.
ELSEIF whkont2 >= '5402000000' AND whkont2 <
'5402999999'.
whkont2 = '5402'.
wgrp = '主营业务税金及附加'.
ELSEIF whkont2 >= '5405000000' AND whkont2 <
'5405999999'.
whkont2 = '5405'.
wgrp = '其他业务支出'.
ELSEIF whkont2 >= '5502000000' AND whkont2 <
'5502999999'.
whkont2 = '5502'.
wgrp = '营业费用'.
ELSEIF whkont2 >= '5503000000' AND whkont2 <
'5503999999'.
whkont2 = '5503'.
wgrp = '管理费用'.
ELSEIF whkont2 >= '5504000000' AND whkont2 <
'5504999999'.
whkont2 = '5504'.
wgrp = '财务费用'.
ELSEIF whkont2 >= '5601000000' AND whkont2 <
'5601999999'.
whkont2 = '5601'.
wgrp = '营业外支出'.
ELSEIF whkont2 >= '5701000000' AND whkont2 <
'5701999999'.
whkont2 = '5701'.
wgrp = '所得税'.
ELSEIF whkont2 >= '5810100000' AND whkont2 <
'5801999999'.
whkont2 = '5801'.
wgrp = '以前年度损益调整'.
ELSEIF whkont2 >= '8001000000' AND whkont2 <
'8001999999'.
whkont2 = '8001'.
wgrp = '厂内存款'.
ELSEIF whkont2 >= '8008000000' AND whkont2 <
'8008999999'.
whkont2 = '8008'.
wgrp = '住房公积金'.
ELSEIF whkont2 >= '8014000000' AND whkont2 <
'8014999999'.
whkont2 = '8014'.
wgrp = '公司拨入资金'.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM GETGLT0 *
*---------------------------------------------------------------------*
* 取上月余?
*---------------------------------------------------------------------*
FORM getglt0.
DATA: wsum(1) TYPE c.
Select * FROM glt0 Where ryear = year
AND bukrs = company.
wsum = 'N'.
IF wrpt = 'G'.
IF glt0-racct+0(4) = account.
wsum = 'Y'.
ENDIF.
ELSE.
IF glt0-racct+0(4) = account.
wsum = 'Y'.
ENDIF.
ENDIF.
IF wsum = 'Y'.
ADD glt0-hslvt TO: hslvt.
CLEAR aperiod.
MOVE-CORRESPONDING glt0 TO aperiod.
mon = month - 1.
DO mon TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE aperiod TO <f-fs>.
ADD <f-fs> TO hslvt.
ENDDO.
IF hslvt > 0.
type2 = '借'.
ELSEIF hslvt < 0.
type2 = '贷'.
ELSE.
type2 = ''.
ENDIF.
ENDIF.
bal = abs( hslvt ).
ENDSelect.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form OUTPUT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM output_data.
DATA: wfind TYPE i.
WRITE:/'|',(10) '上月余额' CENTERED,
'|',(86) '',
'|', (2) type2 CENTERED,
'|',(32) bal NO-ZERO NO-GAP, '|'.
ULINE.
SORT doc_result BY hkont2.
LOOP AT doc_result.
wfind = 0.
LOOP AT doc Where hkont2 = doc_result-hkont2.
wfind = 1.
doc-dmbtrs = doc-dmbtrs + doc_result-dmbtrs.
doc-dmbtrh = doc-dmbtrh + doc_result-dmbtrh.
MODIFY doc.
ENDLOOP.
IF wfind = 0.
MOVE-CORRESPONDING doc_result TO doc.
APPEND doc.
ENDIF.
ENDLOOP.
LOOP AT doc INTO doc_result .
hslvt = hslvt + doc_result-dmbtrs - doc_result-dmbtrh.
IF hslvt > 0.
wdrcr = '借'.
ELSE.
wdrcr = '贷'.
ENDIF.
hslvt1 = abs( hslvt ).
WRITE:/'|',(10) doc_result-hkont2,
'|',(30) doc_result-txt20,
'|',(26) doc_result-dmbtrs NO-ZERO NO-GAP,
'|',(26) doc_result-dmbtrh NO-ZERO NO-GAP,
'|',(02) wdrcr,
'|',(32) hslvt1 NO-ZERO NO-GAP, '|'.
ULINE.
ENDLOOP.
LOOP AT doc_result.
SUM.
ENDLOOP.
wdiff = doc_result-dmbtrs - doc_result-dmbtrh.
IF wdiff > 0.
wdrcr = '借'.
ELSE.
wdrcr = '贷'.
ENDIF.
wdiff = abs( wdiff ).
WRITE:/ '|',(10) '发生额' CENTERED,
'|',(30) '',
'|',(26) doc_result-dmbtrs NO-ZERO NO-GAP,
'|',(26) doc_result-dmbtrh NO-ZERO NO-GAP,
'|',(02) wdrcr,
'|',(32) wdiff NO-ZERO NO-GAP, '|'.
ULINE.
IF hslvt > 0.
wdrcr = '借'.
ELSE.
wdrcr = '贷'.
ENDIF.
WRITE:/ '|',(10) '总余额' CENTERED,
'|',(30) '',
'|',(26) doc_result-dmbtrs NO-ZERO NO-GAP,
'|',(26) doc_result-dmbtrh NO-ZERO NO-GAP,
'|',(02) wdrcr,
'|',(32) hslvt1 NO-ZERO NO-GAP, '|'.
ULINE.
NEW-PAGE.
IF sy-subrc <> 0.
WRITE:'没有纪录'.
ENDIF.
ENDFORM. " OUTPUT_DATA
引用通告地址: http://www.washerfitting.com/blog/default.asp/trackback.asp?tbID=302