Sie sind auf Seite 1von 6

*&---------------------------------------------------------------------*

*& Report ZF_CHECK_XOPVW


*&
*&---------------------------------------------------------------------*
*&
*& Checks BSIS for items with incorrect XOPVW per account per year
*& (SKB1-XOPVW = 'X' => searches for BSIS-XOPVW = ' ' per year
*& SKB1-XOPVW = ' ' => searches for BSIS-XOPVW = 'X' per year)
*&
*&
*&---------------------------------------------------------------------*
REPORT zf_check_xopvw LINE-SIZE 120.
TABLES: bkpf, skb1.
DATA: gs_skb1 TYPE skb1.
TYPES: BEGIN OF account,
bukrs TYPE skb1-bukrs,
saknr TYPE skb1-saknr,
gjahr TYPE bkpf-gjahr,
belnr TYPE bkpf-belnr,
buzei TYPE bsis-buzei,
xbilk TYPE ska1-xbilk,
*
mitkz TYPE skb1-mitkz,
*
xkres TYPE skb1-xkres,
xopvw TYPE skb1-xopvw,
END OF account.
DATA: gt_account TYPE TABLE OF account WITH HEADER LINE.
DATA: gt_error TYPE SORTED TABLE OF account WITH HEADER LINE
WITH UNIQUE KEY bukrs saknr gjahr.
TYPES: BEGIN OF key,
bukrs TYPE skb1-bukrs,
saknr TYPE skb1-saknr,
END OF key.
DATA: gt_key TYPE SORTED TABLE OF KEY WITH HEADER LINE
WITH UNIQUE KEY bukrs saknr.
TYPES: BEGIN OF bukrstab,
bukrs
TYPE t001-bukrs,
ktopl
TYPE t001-ktopl,
yearfrom TYPE bkpf-gjahr,
yearto TYPE bkpf-gjahr,
END OF bukrstab.
DATA: gt_bukrstab TYPE TABLE OF bukrstab WITH HEADER LINE.
DATA: gs_xbilk TYPE ska1-xbilk.
SELECTION-SCREEN BEGIN OF BLOCK 001 WITH FRAME TITLE text_001.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_002 FOR FIELD s_bukrs.
SELECTION-SCREEN POSITION 20.
SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_003 FOR FIELD s_saknr.

SELECTION-SCREEN POSITION 20.


SELECT-OPTIONS: s_saknr FOR skb1-saknr.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_004 FOR FIELD yearfrom.
SELECTION-SCREEN POSITION 23.
PARAMETERS: yearfrom TYPE bkpf-gjahr.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_005 FOR FIELD yearto.
SELECTION-SCREEN POSITION 23.
PARAMETERS: yearto TYPE bkpf-gjahr.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK 001.
INITIALIZATION.
text_001
text_002
text_003
text_004
text_005

=
=
=
=
=

'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

CHECK gs_xbilk = 'X'.


*only accounts with line item display
CHECK gs_skb1-xkres = 'X'.
CLEAR gt_account.
MOVE-CORRESPONDING gs_skb1 TO gt_account.
APPEND gt_account.
ENDSELECT.
ENDLOOP.
ENDFORM.

" 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

Das könnte Ihnen auch gefallen