*&---------------------------------------------------------------------*
*& Report Y_ECCS_DOC_RESET *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT y_eccs_trading_partner_set LINE-SIZE 130.
TABLES: bsis, bsas, bsid, bsad, bsik, bsak.
TABLES: ska1, kna1, lfa1.
TABLES: bseg, bkpf, glt3.
DATA: i_bseg TYPE bseg OCCURS 0 WITH HEADER LINE,
i_bsis TYPE bsis OCCURS 0 WITH HEADER LINE,
i_bsas TYPE bsas OCCURS 0 WITH HEADER LINE,
i_bsid TYPE bsid OCCURS 0 WITH HEADER LINE,
i_bsad TYPE bsad OCCURS 0 WITH HEADER LINE,
i_bsik TYPE bsik OCCURS 0 WITH HEADER LINE,
i_bsak TYPE bsak OCCURS 0 WITH HEADER LINE,
i_glt3 TYPE glt3 OCCURS 0 WITH HEADER LINE.
PARAMETERS: p_bukrs LIKE bsis-bukrs.
SELECT-OPTIONS: s_belnr FOR bsis-belnr NO INTERVALS.
PARAMETERS: p_gjahr LIKE bsis-gjahr.
SELECTION-SCREEN SKIP.
PARAMETERS: p_ovbund LIKE bseg-vbund,
p_nvbund LIKE bseg-vbund.
SELECTION-SCREEN SKIP.
PARAMETERS: p_test AS CHECKBOX DEFAULT 'X',
p_log AS CHECKBOX DEFAULT 'X'.
INITIALIZATION.
AT SELECTION-SCREEN ON s_belnr.
LOOP AT s_belnr.
IF s_belnr-option NE 'EQ' OR
s_belnr-sign NE 'I'.
MESSAGE e001(z3) WITH 'Invalid selection of document numbers'.
ENDIF.
ENDLOOP.
START-OF-SELECTION.
IF sy-uname NE 'JOHN' AND
sy-uname NE 'JIM' AND
sy-uname NE 'JAMES'.
IF p_test IS INITIAL.
p_test = 'X'.
MESSAGE i001(z3) WITH 'You are not authorized to do this!'.
ENDIF.
ENDIF.
SORT s_belnr.
DELETE ADJACENT DUPLICATES FROM s_belnr.
PERFORM run_gl.
PERFORM log.
END-OF-SELECTION.
*&--------------------------------------------------------------------*
*& Form RUN_GL
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM run_gl.
DATA: l_lines TYPE i,
l_belnr LIKE bseg-belnr.
LOOP AT s_belnr.
l_belnr = s_belnr-low.
SELECT * FROM bseg WHERE bukrs EQ p_bukrs
AND gjahr EQ p_gjahr
AND belnr EQ l_belnr.
* Check old TP value
CHECK bseg-vbund = p_ovbund.
CASE bseg-koart.
WHEN 'S'.
* G/L account
i_bseg = bseg.
APPEND i_bseg.
* for update of underlying documents
IF bseg-augbl IS INITIAL.
SELECT SINGLE * FROM bsis WHERE bukrs EQ bseg-bukrs
AND hkont EQ bseg-hkont
AND belnr EQ bseg-belnr
AND gjahr EQ bseg-gjahr
AND buzei EQ bseg-buzei.
i_bsis = bsis.
i_bsis-vbund = p_nvbund.
APPEND i_bsis.
ELSE.
SELECT SINGLE * FROM bsas WHERE bukrs EQ bseg-bukrs
AND hkont EQ bseg-hkont
AND belnr EQ bseg-belnr
AND gjahr EQ bseg-gjahr
AND buzei EQ bseg-buzei.
i_bsas = bsas.
i_bsas-vbund = p_nvbund.
APPEND i_bsas.
ENDIF.
WHEN 'D'.
* Customer
i_bseg = bseg.
APPEND i_bseg.
* for update of underlying documents
IF bseg-augbl IS INITIAL.
SELECT SINGLE * FROM bsid WHERE bukrs EQ bseg-bukrs
AND kunnr EQ bseg-kunnr
AND belnr EQ bseg-belnr
AND gjahr EQ bseg-gjahr
AND buzei EQ bseg-buzei.
i_bsid = bsid.
i_bsid-vbund = p_nvbund.
APPEND i_bsid.
ELSE.
SELECT SINGLE * FROM bsad WHERE bukrs EQ bseg-bukrs
AND kunnr EQ bseg-kunnr
AND belnr EQ bseg-belnr
AND gjahr EQ bseg-gjahr
AND buzei EQ bseg-buzei.
i_bsad = bsad.
i_bsad-vbund = p_nvbund.
APPEND i_bsad.
ENDIF.
WHEN 'K'.
* Vendor
i_bseg = bseg.
APPEND i_bseg.
* for update of underlying documents
IF bseg-augbl IS INITIAL.
SELECT SINGLE * FROM bsik WHERE bukrs EQ bseg-bukrs
AND lifnr EQ bseg-lifnr
AND belnr EQ bseg-belnr
AND gjahr EQ bseg-gjahr
AND buzei EQ bseg-buzei.
i_bsik = bsik.
i_bsik-vbund = p_nvbund.
APPEND i_bsik.
ELSE.
SELECT SINGLE * FROM bsak WHERE bukrs EQ bseg-bukrs
AND lifnr EQ bseg-lifnr
AND belnr EQ bseg-belnr
AND gjahr EQ bseg-gjahr
AND buzei EQ bseg-buzei.
i_bsak = bsak.
i_bsak-vbund = p_nvbund.
APPEND i_bsak.
ENDIF.
WHEN OTHERS.
MESSAGE e001(z3) WITH 'Unexpected line item type in'
bseg-bukrs bseg-belnr.
ENDCASE.
ENDSELECT.
ENDLOOP.
DESCRIBE TABLE i_bseg LINES l_lines.
WRITE : / 'Selected line items :', l_lines.
PERFORM update_glt3.
* updates
CHECK p_test IS INITIAL.
DESCRIBE TABLE i_bseg LINES l_lines.
WRITE : / 'Update of records BSEG:', l_lines.
IF l_lines NE 0.
UPDATE bseg FROM TABLE i_bseg.
IF sy-subrc NE 0.
MESSAGE e001(z3) WITH 'BSEG update error'.
ENDIF.
ENDIF.
DESCRIBE TABLE i_bsis LINES l_lines.
WRITE : / 'Update of records BSIS:', l_lines.
IF l_lines NE 0.
UPDATE bsis FROM TABLE i_bsis.
IF sy-subrc NE 0.
MESSAGE e001(z3) WITH 'BSIS update error'.
ENDIF.
ENDIF.
DESCRIBE TABLE i_bsas LINES l_lines.
WRITE : / 'Update of records BSAS:', l_lines.
IF l_lines NE 0.
UPDATE bsas FROM TABLE i_bsas.
IF sy-subrc NE 0.
MESSAGE e001(z3) WITH 'BSAS update error'.
ENDIF.
ENDIF.
DESCRIBE TABLE i_bsid LINES l_lines.
WRITE : / 'Update of records BSID:', l_lines.
IF l_lines NE 0.
UPDATE bsid FROM TABLE i_bsid.
IF sy-subrc NE 0.
MESSAGE e001(z3) WITH 'BSID update error'.
ENDIF.
ENDIF.
DESCRIBE TABLE i_bsad LINES l_lines.
WRITE : / 'Update of records BSAD:', l_lines.
IF l_lines NE 0.
UPDATE bsad FROM TABLE i_bsad.
IF sy-subrc NE 0.
MESSAGE e001(z3) WITH 'BSAD update error'.
ENDIF.
ENDIF.
DESCRIBE TABLE i_bsik LINES l_lines.
WRITE : / 'Update of records BSIK:', l_lines.
IF l_lines NE 0.
UPDATE bsik FROM TABLE i_bsik.
IF sy-subrc NE 0.
MESSAGE e001(z3) WITH 'BSIK update error'.
ENDIF.
ENDIF.
DESCRIBE TABLE i_bsak LINES l_lines.
WRITE : / 'Update of records BSAK:', l_lines.
IF l_lines NE 0.
UPDATE bsak FROM TABLE i_bsak.
IF sy-subrc NE 0.
MESSAGE e001(z3) WITH 'BSAK update error'.
ENDIF.
ENDIF.
ENDFORM. "RUN_GL
*&--------------------------------------------------------------------*
*& Form UPDATE_GLT3
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM update_glt3 .
DATA: l_lines TYPE i,
l_found,
l_fieldname(12) TYPE c.
FIELD-SYMBOLS <hsl>.
FIELD-SYMBOLS <tsl>.
FIELD-SYMBOLS <ksl>.
REFRESH i_glt3.
LOOP AT i_bseg.
SELECT SINGLE * FROM bkpf WHERE bukrs EQ i_bseg-bukrs
AND gjahr EQ i_bseg-gjahr
AND belnr EQ i_bseg-belnr.
UNASSIGN <hsl>.
UNASSIGN <tsl>.
UNASSIGN <ksl>.
CONCATENATE 'I_GLT3-HSL' bkpf-monat INTO l_fieldname.
ASSIGN (l_fieldname) TO <hsl>.
CONCATENATE 'I_GLT3-TSL' bkpf-monat INTO l_fieldname.
ASSIGN (l_fieldname) TO <tsl>.
CONCATENATE 'I_GLT3-KSL' bkpf-monat INTO l_fieldname.
ASSIGN (l_fieldname) TO <ksl>.
* for the old VBUND value
CLEAR l_found.
LOOP AT i_glt3 WHERE bukrs EQ i_bseg-bukrs
AND ryear EQ i_bseg-gjahr
AND racct EQ i_bseg-hkont
AND rbusa EQ i_bseg-gsber
AND rassc EQ i_bseg-vbund
AND rtcur EQ bkpf-waers
AND drcrk EQ i_bseg-shkzg.
l_found = 'X'.
EXIT.
ENDLOOP.
IF l_found IS INITIAL.
PERFORM create_glt3.
ENDIF.
CLEAR l_found.
LOOP AT i_glt3 WHERE bukrs EQ i_bseg-bukrs
AND ryear EQ i_bseg-gjahr
AND racct EQ i_bseg-hkont
AND rbusa EQ i_bseg-gsber
AND rassc EQ i_bseg-vbund
AND rtcur EQ bkpf-waers
AND drcrk EQ i_bseg-shkzg.
l_found = 'X'.
IF i_bseg-shkzg EQ 'S'.
SUBTRACT i_bseg-wrbtr FROM <tsl>.
SUBTRACT i_bseg-dmbtr FROM <hsl>.
SUBTRACT i_bseg-dmbtr FROM <ksl>.
ELSE.
ADD i_bseg-wrbtr TO <tsl>.
ADD i_bseg-dmbtr TO <hsl>.
ADD i_bseg-dmbtr TO <ksl>.
ENDIF.
MODIFY i_glt3.
EXIT.
ENDLOOP.
IF l_found IS INITIAL.
MESSAGE e001(z3) WITH 'Still no GLT3 ?!'.
ENDIF.
* for the new VBUND value (initial)
i_bseg-vbund = p_nvbund.
CLEAR l_found.
LOOP AT i_glt3 WHERE bukrs EQ i_bseg-bukrs
AND ryear EQ i_bseg-gjahr
AND racct EQ i_bseg-hkont
AND rbusa EQ i_bseg-gsber
AND rassc EQ i_bseg-vbund
AND rtcur EQ bkpf-waers
AND drcrk EQ i_bseg-shkzg.
l_found = 'X'.
EXIT.
ENDLOOP.
IF l_found IS INITIAL.
PERFORM create_glt3.
ENDIF.
CLEAR l_found.
LOOP AT i_glt3 WHERE bukrs EQ i_bseg-bukrs
AND ryear EQ i_bseg-gjahr
AND racct EQ i_bseg-hkont
AND rbusa EQ i_bseg-gsber
AND rassc EQ i_bseg-vbund
AND rtcur EQ bkpf-waers
AND drcrk EQ i_bseg-shkzg.
l_found = 'X'.
IF i_bseg-shkzg EQ 'S'.
ADD i_bseg-wrbtr TO <tsl>.
ADD i_bseg-dmbtr TO <hsl>.
ADD i_bseg-dmbtr TO <ksl>.
ELSE.
SUBTRACT i_bseg-wrbtr FROM <tsl>.
SUBTRACT i_bseg-dmbtr FROM <hsl>.
SUBTRACT i_bseg-dmbtr FROM <ksl>.
ENDIF.
MODIFY i_glt3.
EXIT.
ENDLOOP.
IF l_found IS INITIAL.
MESSAGE e001(z3) WITH 'Still no GLT3 ?!'.
ENDIF.
MODIFY i_bseg.
ENDLOOP.
CHECK p_test IS INITIAL.
DESCRIBE TABLE i_glt3 LINES l_lines.
WRITE : / 'Update of records GLT3:', l_lines.
IF l_lines NE 0.
MODIFY glt3 FROM TABLE i_glt3.
IF sy-subrc NE 0.
MESSAGE e001(z3) WITH 'GLT3 update error'.
ENDIF.
ENDIF.
ENDFORM. "UPDATE_GLT3
*&--------------------------------------------------------------------*
*& Form LOG
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM log.
CHECK p_log IS NOT INITIAL.
LOOP AT i_bseg WHERE shkzg EQ 'S'.
WRITE: / i_bseg-bukrs,
i_bseg-belnr,
i_bseg-gjahr,
i_bseg-buzei,
i_bseg-hkont,
i_bseg-vbund,
i_bseg-gsber,
i_bseg-shkzg,
i_bseg-dmbtr.
ENDLOOP.
LOOP AT i_glt3 WHERE drcrk EQ 'S'.
WRITE: / i_glt3-bukrs,
i_glt3-racct,
i_glt3-rbusa,
i_glt3-rtcur,
i_glt3-rassc,
i_glt3-drcrk.
ENDLOOP.
LOOP AT i_bseg WHERE shkzg EQ 'H'.
WRITE: / i_bseg-bukrs,
i_bseg-belnr,
i_bseg-gjahr,
i_bseg-buzei,
i_bseg-hkont,
i_bseg-vbund,
i_bseg-gsber,
i_bseg-shkzg,
i_bseg-dmbtr.
ENDLOOP.
LOOP AT i_glt3 WHERE drcrk EQ 'H'.
WRITE: / i_glt3-bukrs,
i_glt3-racct,
i_glt3-rbusa,
i_glt3-rtcur,
i_glt3-rassc,
i_glt3-drcrk.
ENDLOOP.
ENDFORM. "LOG
*&--------------------------------------------------------------------*
*& Form CREATE_GLT3
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM create_glt3.
FIELD-SYMBOLS: <feld>.
SELECT SINGLE * FROM glt3 WHERE bukrs EQ i_bseg-bukrs
AND ryear EQ i_bseg-gjahr
AND racct EQ i_bseg-hkont
AND rbusa EQ i_bseg-gsber
AND rassc EQ i_bseg-vbund
AND rtcur EQ bkpf-waers
AND drcrk EQ i_bseg-shkzg.
IF sy-subrc EQ 0.
i_glt3 = glt3.
APPEND i_glt3.
EXIT.
ENDIF.
SELECT SINGLE * FROM glt3 WHERE bukrs EQ i_bseg-bukrs
AND ryear EQ i_bseg-gjahr
AND racct EQ i_bseg-hkont.
IF sy-subrc NE 0.
MESSAGE e001(z3) WITH 'GLT3 not found for:'
i_bseg-bukrs
i_bseg-hkont
i_bseg-gjahr.
ENDIF.
i_glt3 = glt3.
i_glt3-rbusa = i_bseg-gsber.
i_glt3-rassc = i_bseg-vbund.
i_glt3-rtcur = bkpf-waers.
i_glt3-drcrk = i_bseg-shkzg.
* clear amount fields
DO.
CHECK sy-index GT 16.
ASSIGN COMPONENT sy-index OF STRUCTURE i_glt3 TO <feld>.
IF sy-subrc NE 0.
EXIT.
ENDIF.
CLEAR <feld>.
ENDDO.
APPEND i_glt3.
EXIT.
ENDFORM. "CREATE_GLT3
Sonntag, 19. Februar 2012
ABAP - An other great one - Reset Trading Partner in FI
Abonnieren
Kommentare zum Post (Atom)

0 Kommentare:
Kommentar veröffentlichen