Beruflich Dokumente
Kultur Dokumente
=
=
=
=
=
'Account Selection'.
'Company Code'.
'GL Account'.
'From Year'.
'To Year'.
AT SELECTION-SCREEN.
PERFORM check_input.
TOP-OF-PAGE.
PERFORM top.
START-OF-SELECTION.
*get bukrs master
PERFORM get_bukrs.
*get GL master data
PERFORM get_skb1.
*process accounts
PERFORM process_accounts.
*output results.
PERFORM output.
*&---------------------------------------------------------------------*
*&
Form GET_SKB1
*&---------------------------------------------------------------------*
FORM get_skb1 .
LOOP AT gt_bukrstab.
SELECT * FROM skb1 INTO gs_skb1
WHERE bukrs EQ gt_bukrstab-bukrs
AND saknr IN s_saknr
*exclude recon accounts
AND mitkz EQ space.
SELECT SINGLE xbilk FROM ska1 INTO gs_xbilk
WHERE ktopl = gt_bukrstab-ktopl
AND saknr = gs_skb1-saknr.
*only balance sheet accounts
" GET_SKB1
*&---------------------------------------------------------------------*
*&
Form PROCESS_ACCOUNTS
*&---------------------------------------------------------------------*
FORM process_accounts .
DATA: ls_gjahr TYPE bkpf-gjahr.
DATA: ls_bsis TYPE bsis.
LOOP AT gt_account.
READ TABLE gt_bukrstab WITH KEY
bukrs = gt_account-bukrs.
ls_gjahr = gt_bukrstab-yearto.
DO.
IF gt_account-xopvw = 'X'.
*search BSIS with XOPVW = space
SELECT SINGLE * FROM bsis INTO ls_bsis
WHERE bukrs = gt_account-bukrs
AND hkont = gt_account-saknr
AND gjahr = ls_gjahr
AND xopvw = space.
IF sy-subrc = 0.
CLEAR gt_error.
MOVE-CORRESPONDING gt_account TO gt_error.
gt_error-gjahr = ls_gjahr.
gt_error-belnr = ls_bsis-belnr.
gt_error-buzei = ls_bsis-buzei.
INSERT gt_error INTO TABLE gt_error.
*save key
CLEAR gt_key.
MOVE-CORRESPONDING gt_account TO gt_key.
INSERT gt_key INTO TABLE gt_key.
ENDIF.
ELSE.
*search BSIS with XOPVW = X
SELECT SINGLE * FROM bsis INTO ls_bsis
WHERE bukrs = gt_account-bukrs
AND hkont = gt_account-saknr
AND gjahr = ls_gjahr
AND xopvw = 'X'.
IF sy-subrc = 0.
CLEAR gt_error.
MOVE-CORRESPONDING gt_account TO gt_error.
gt_error-gjahr = ls_gjahr.
gt_error-belnr = ls_bsis-belnr.
gt_error-buzei = ls_bsis-buzei.
INSERT gt_error INTO TABLE gt_error.
*save key
CLEAR gt_key.
MOVE-CORRESPONDING gt_account TO gt_key.
INSERT gt_key INTO TABLE gt_key.
ENDIF.
ENDIF.
ls_gjahr = ls_gjahr - 1.
IF ls_gjahr < gt_bukrstab-yearfrom.
EXIT.
ENDIF.
ENDDO.
ENDLOOP.
ENDFORM.
" PROCESS_ACCOUNTS
*&---------------------------------------------------------------------*
*&
Form GET_BUKRS
*&---------------------------------------------------------------------*
FORM get_bukrs .
DATA: ls_bkpf TYPE bkpf.
DATA: ls_gjahr TYPE bkpf-gjahr.
SELECT * FROM t001 INTO CORRESPONDING FIELDS OF gt_bukrstab
WHERE bukrs IN s_bukrs.
*no fiscal year entered at selection screen => determine years
IF yearfrom EQ space.
IF yearto = space.
*determine current fiscal year
CALL FUNCTION 'GET_CURRENT_YEAR'
EXPORTING
bukrs = gt_bukrstab-bukrs
date = sy-datum
IMPORTING
curry = gt_bukrstab-yearto.
ELSE.
gt_bukrstab-yearto = yearto.
ENDIF.
*set YEARFROM to CURRY
gt_bukrstab-yearfrom = gt_bukrstab-yearto.
*determine oldest fiscal year
ls_gjahr = gt_bukrstab-yearto.
DO.
SELECT SINGLE * FROM bkpf INTO ls_bkpf
WHERE bukrs = gt_bukrstab-bukrs
AND gjahr = ls_gjahr.
IF sy-subrc = 0.
gt_bukrstab-yearfrom = ls_gjahr.
ls_gjahr = ls_gjahr - 1.
ELSE.
EXIT.
ENDIF.
ENDDO.
*fiscal year range entered at selection screen
ELSE.
gt_bukrstab-yearfrom = yearfrom.
IF yearto = space.
gt_bukrstab-yearto = yearfrom.
ELSE.
gt_bukrstab-yearto = yearto.
ENDIF.
ENDIF.
*save bukrs
APPEND gt_bukrstab.
ENDSELECT.
ENDFORM.
" GET_BUKRS
*&---------------------------------------------------------------------*
*&
Form OUTPUT
*&---------------------------------------------------------------------*
FORM output .
DESCRIBE TABLE gt_error LINES sy-tfill.
IF sy-tfill = 0.
WRITE:/ 'No affected accounts found.' COLOR 3.
EXIT.
ENDIF.
LOOP AT gt_key.
LOOP AT gt_error
WHERE bukrs = gt_key-bukrs
AND saknr = gt_key-saknr.
FORMAT COLOR 2 INTENSIFIED OFF.
WRITE:/ sy-vline NO-GAP,
(5) gt_error-bukrs,
(10) gt_error-saknr,
(5) gt_error-gjahr,
(10) gt_error-belnr,
(5) gt_error-buzei,
(5) gt_error-xopvw.
IF gt_error-xopvw = 'X'.
WRITE: 'BSIS with XOPVW not set' COLOR 3.
ELSE.
WRITE: 'BSIS with XOPVW set' COLOR 4.
ENDIF.
WRITE: 100 sy-vline NO-GAP.
ENDLOOP.
AT END OF saknr.
NEW-LINE.
ULINE (100).
ENDAT.
ENDLOOP.
ENDFORM.
" OUTPUT
*&---------------------------------------------------------------------*
*&
Form TOP
*&---------------------------------------------------------------------*
FORM top .
NEW-LINE.
ULINE (100).
FORMAT COLOR 1 INTENSIFIED OFF.
WRITE:/ sy-vline NO-GAP,
'Affected G/L accounts:',
100 sy-vline NO-GAP.
WRITE:/ sy-vline NO-GAP,
(5) 'BUKRS',
(10) 'HKONT',
(5) 'GJAHR',
(10) 'BELNR',
(5) 'BUZEI',
(5) 'XOPVW',
(10) 'Comment:',
100 sy-vline NO-GAP.
NEW-LINE.
ULINE (100).
ENDFORM.
" TOP
*&---------------------------------------------------------------------*
*&
Form CHECK_INPUT
*&---------------------------------------------------------------------*
FORM check_input .
IF yearfrom NE space AND yearto NE space.
IF yearto < yearfrom.
MESSAGE e016(gu)
WITH 'Yearto less than Yearfrom'.
ENDIF.
ENDIF.
ENDFORM.
" CHECK_INPUT