BitComet 旗下网站

转到日志
相关贴吧:
ABAP code

总分类账

楼主 发表于:2008-08-30 17:00:24 [回复]

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


 

您现在还没有登录,请在登录后发贴