Professional Documents
Culture Documents
Report ZF Delete Duplicat Bset Fica 2
Report ZF Delete Duplicat Bset Fica 2
* Report ZF_DELETE_DUPLICAT_BSET_FICA_2
*&---------------------------------------------------------------------*
* original in P7D - maintained only there
*-----------------------------------------------------------------------
* Select-Options :
* p_belnr FI document number
* p_bukrs company code
* p_gjahr business year
* p_budat posting date
* p_blart document type
* p_awtyp reference procudure i.e. VBRK for SD billing documents
* p_tcode transaction code
* p_awkey bkpf-awkey
* Parameters :
* testrun ON = no databbase changes
* listall ON = list BSET of all selected documents
* OFF = list BSET for only corrupted documents
*-----------------------------------------------------------------------
* output structure
DATA: BEGIN OF xoutput OCCURS 0,
bukrs LIKE bkpf-bukrs,
belnr LIKE bkpf-belnr,
gjahr LIKE bkpf-gjahr,
count_ist TYPE i,
count_soll TYPE i,
deleted TYPE i,
inserted TYPE i,
text(20) TYPE c,
updated TYPE c,
corrupt,
END OF xoutput.
* counter
DATA: exist_bset_count TYPE i,
calc_bset_count TYPE i,
docs_checked TYPE i,
docs_corrupt TYPE i,
docs_not_correctable TYPE i,
xcorrupt TYPE c,
icommit TYPE i.
*
DATA: old_bukrs LIKE bkpf-bukrs.
DATA: e_external,
e_linewise,
e_with_jurcode.
START-OF-SELECTION.
* select documents
SELECT * FROM bkpf WHERE bukrs = p_bukrs
AND belnr IN p_belnr
AND gjahr = p_gjahr
AND budat IN p_budat
AND blart IN p_blart
AND awtyp IN p_awtyp
AND tcode IN p_tcode
AND awkey IN p_awkey
AND bstat = space.
CHECK bkpf-awtyp EQ 'FKKSU'.
MOVE-CORRESPONDING bkpf TO xbkpf.
APPEND xbkpf.
ENDSELECT.
LOOP AT xbkpf.
CLEAR not_sel.
xcorrupt = space.
docs_checked = docs_checked + 1.
IF sy-subrc IS INITIAL.
* then entire document
SELECT * FROM bseg APPENDING TABLE xbseg
WHERE bukrs = xbkpf-bukrs
AND belnr = xbkpf-belnr
AND gjahr = xbkpf-gjahr.
SELECT * FROM bset WHERE bukrs = xbkpf-bukrs
AND belnr = xbkpf-belnr
AND gjahr = xbkpf-gjahr.
exist_bset_count = exist_bset_count + 1.
MOVE-CORRESPONDING bset TO xbset.
MOVE-CORRESPONDING bset TO ybset.
APPEND xbset.
APPEND ybset.
ENDSELECT.
ELSE.
CONTINUE.
ENDIF.
LOOP AT ybset.
calc_bset_count = calc_bset_count + 1.
ENDLOOP.
* no BSET calculated
IF calc_bset_count = 0.
xoutput-text = 'No BSET necessary'.
ENDIF.
EXIT.
ENDLOOP.
IF sy-subrc NE 0.
xcorrupt = 'X'.
EXIT.
ENDIF.
l_fwste = ABS( xbset-fwste - ybset-fwste ).
l_hwste = ABS( xbset-hwste - ybset-hwste ).
l_h2ste = ABS( xbset-h2ste - ybset-h2ste ).
l_h3ste = ABS( xbset-h3ste - ybset-h3ste ).
IF xcorrupt = 'X'.
EXIT.
ENDIF.
ENDLOOP.
ELSE.
* calc_bset_count NE exist_bset_count
xcorrupt = 'X'.
ENDIF.
ENDIF.
xoutput-corrupt = xcorrupt.
bset_output-xcorrupt = xcorrupt.
IF listall = 'X'
OR xcorrupt = 'X'.
* store some old bset data for output list
LOOP AT xbset.
bset_output-status = 'OLD'.
MOVE-CORRESPONDING xbset TO bset_output.
APPEND bset_output.
ENDLOOP.
IF xcorrupt = 'X'.
* store some new bset data for output list
LOOP AT ybset.
bset_output-status = 'NEW'.
MOVE-CORRESPONDING ybset TO bset_output.
APPEND bset_output.
ENDLOOP.
ENDIF.
ENDIF.
IF testrun IS INITIAL
AND xcorrupt = 'X'.
* delete old BSET
DELETE bset FROM TABLE xbset.
xoutput-deleted = sy-dbcnt.
* insert new BSET
INSERT bset FROM TABLE ybset.
xoutput-inserted = sy-dbcnt.
xoutput-updated = 'X'.
icommit = icommit + 1.
ENDIF.
IF listall = 'X'.
APPEND xoutput.
ENDIF.
IF xcorrupt = 'X'.
docs_corrupt = docs_corrupt + 1.
ENDIF.
IF icommit GT 500.
COMMIT WORK.
CLEAR icommit.
ENDIF.
ENDLOOP. "xbkpf
COMMIT WORK.
*----------------------------------------------------------------------------------
-------------------
* write results in different output lists
PERFORM output_documents.
***********************************************************************************
********************
* EVENTS
TOP-OF-PAGE.
CASE sy-tvar0.
WHEN '1'.
IF listall = 'X'.
* summary information
FORMAT COLOR COL_HEADING.
WRITE: / 'BUKRS BELNR GJAHR existBSET calcBSET '.
WRITE: 'deletedBSET insertedBSET updated corrupt comment '.
ULINE.
FORMAT COLOR OFF.
ENDIF.
WHEN '2'.
* BSET changes
IF listall IS INITIAL.
FORMAT COLOR COL_KEY.
WRITE: 'List of Documents that will be corrected: compare old and new
BSET'.
SKIP.
ENDIF.
FORMAT COLOR COL_HEADING.
WRITE: /(3) 'Sta', "state new or old
(4) 'CompC', "company code
(10) 'DocumentNo',
(4) 'Year',
(4) 'item', "buzei
(4) 'code', "tax code
(3) 'D/C', "shkzg debit/credit
(3) 'Key', "ktosl
(4) 'Cond', "kschl
(3) 'Grp', "txgrp
(11) ' Percentage'. "kbetr
WHEN '3'.
FORMAT COLOR COL_NEGATIVE.
WRITE: 'Documents not handled because of error'.
WHEN OTHERS.
CLEAR sy-tvar0.
ENDCASE.
AT LINE-SELECTION.
**********************************************************************
* Form OUTPUT_DOCUMENTS
**********************************************************************
FORM output_documents.
h_bukrs = p_bukrs.
h_gjahr = p_gjahr.
IF listall = 'X'.
LOOP AT xoutput.
IF xoutput-updated = 'X'.
FORMAT COLOR COL_NEGATIVE.
ENDIF.
WRITE: (8) xoutput-updated.
FORMAT COLOR OFF.
IF xoutput-corrupt = 'X'.
FORMAT COLOR COL_NEGATIVE.
ENDIF.
WRITE: (8) xoutput-corrupt.
FORMAT COLOR OFF.
h_belnr = xoutput-belnr.
HIDE: h_bukrs, h_belnr, h_gjahr.
ENDLOOP.
ENDIF.
NEW-LINE. ULINE.
FORMAT COLOR COL_TOTAL.
WRITE: / 'Documents checked: ', docs_checked.
WRITE: / 'Documents corrupt: ', docs_corrupt.
WRITE: / 'Documents not correctable: ', docs_not_correctable.
FORMAT COLOR OFF.
ENDIF.
ENDIF.
ENDON.
IF bset_output-xcorrupt IS INITIAL.
FORMAT COLOR COL_NORMAL.
ENDIF.
(4) bset_output-mwskz,
(3) bset_output-shkzg,
(3) bset_output-ktosl,
(4) bset_output-kschl,
(3) bset_output-txgrp,
(11) bset_output-kbetr.
(4) bset_output-lstml,
(15) bset_output-lwbas,
(15) bset_output-lwste.
h_belnr = bset_output-belnr.
HIDE: h_bukrs, h_belnr, h_gjahr.
ENDLOOP.
ENDIF.
* error list
IF NOT t_error_return[] IS INITIAL.
sy-tvar0 = '3'. "for top-of-page: Error list
NEW-PAGE.
LOOP AT t_error_return.
h_belnr = t_error_return-msort.
HIDE: h_bukrs, h_belnr, h_gjahr.
ENDLOOP.
ENDIF.
ENDFORM. "output_documents
*&---------------------------------------------------------------------*
*& Form REMOVE_DUPLICATE_BSETS
*&---------------------------------------------------------------------*
FORM remove_duplicate_bsets TABLES t_bkpf STRUCTURE bkpf
t_bseg STRUCTURE bseg
t_bset STRUCTURE bset.
IF t_bseg-stbuk IS INITIAL.
lv_bukrs = t_bkpf-bukrs.
ELSE.
lv_bukrs = t_bseg-stbuk.
ENDIF.
CHECK sy-subrc NE 0.
IF xbseg[] IS INITIAL.
EXIT.
ENDIF.
ENDFORM.