10-29-2007 1:53 PM
this sap standard program....here in this program..it should select the records and list place according the requirement,,,,(some enhancement is required)
example: here i will give
validity date : 29.10.2008
Accounting settlement period: AM
Settlement date : 30.10.2007
here is the program
check this program when we give the validitiy date it should show that month bill but it shows all months
*N744242 Clean up for Selection Screens
REPORT RV15C001 NO STANDARD PAGE HEADING LINE-SIZE 132
MESSAGE-ID VK.
*----
*
Data deklarationen *
*----
*
INCLUDE RV15CI03.
Hilfsfelder:
DATA: CURRCH,
CURRENCY LIKE TCURV-BWAER,
AUTO_EXTEND VALUE ' ',
ABRDAT_L LIKE SY-DATUM,
PADAT_L LIKE SY-DATUM,
PERIO LIKE RWM01-VPERIOD.
RANGES: IDENT2 FOR KONA-IDENT2.
*----
*
Selektion-Parameter und Options *
*----
*
Überschrift
SELECTION-SCREEN COMMENT 1(79) TEXT-S01 MODIF ID INT.
SELECT-OPTIONS:
Bonusabsprache
KNUMA FOR KONA-KNUMA MEMORY ID VBO MATCHCODE OBJECT VMBO,
Bonusempfänger
BONEM FOR KONA-BONEM MEMORY ID VBE MATCHCODE OBJECT DEBI.
Abrechnungsdatum
PARAMETERS:
ABRDATE LIKE KONA-DATBI DEFAULT SY-DATLO OBLIGATORY.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN COMMENT 1(79) TEXT-S02 MODIF ID INT.
Organisationsdaten
SELECT-OPTIONS:
VKORG FOR KONA-VKORG MEMORY ID VKO,
VTWEG FOR KONA-VTWEG MEMORY ID VTW,
SPART FOR KONA-SPART MEMORY ID SPA.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN COMMENT 1(79) TEXT-S05 MODIF ID INT.
Periodische Teilauszahlung
SELECT-OPTIONS:
IDENT3 FOR KONA-IDENT3.
PARAMETERS PADAT LIKE RV13A-PADAT.
INITIALIZATION.
PADAT = SY-DATLO.
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING
CORRECT_OPTION = '-'
DATE = SY-DATLO
FACTORY_CALENDAR_ID = 'AM'
IMPORTING
DATE = PADAT
EXCEPTIONS
OTHERS = 4.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN COMMENT 1(79) TEXT-S03 MODIF ID INT.
Nur offene selektieren
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS BOPEN AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(25) TEXT-B01. "N744242
SELECTION-SCREEN COMMENT 3(25) TEXT-B01 FOR FIELD BOPEN. "N744242
SELECTION-SCREEN END OF LINE.
nur zu prüfende selketieren
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS BCHECK AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(25) TEXT-B02. "N744242
SELECTION-SCREEN COMMENT 3(25) TEXT-B02 FOR FIELD BCHECK. "N744242
SELECTION-SCREEN POSITION 32.
Nur freigegebene selektieren
PARAMETERS BREADY AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 35(25) TEXT-B03. "N744242
SELECTION-SCREEN COMMENT 35(25) TEXT-B03 FOR FIELD BREADY. "N744242
SELECTION-SCREEN END OF LINE.
nur solche mit erzeugter Gutschrift
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS BCREDI AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(25) TEXT-B04. "N744242
SELECTION-SCREEN COMMENT 3(25) TEXT-B04 FOR FIELD BCREDI. "N744242
SELECTION-SCREEN POSITION 32.
Nur zu prüfende selektieren
PARAMETERS BSETTLE AS CHECKBOX.
SELECTION-SCREEN COMMENT 35(25) TEXT-B05. "N744242
SELECTION-SCREEN COMMENT 35(25) TEXT-B05 FOR FIELD BSETTLE. "N744242
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 2.
Funktionen
SELECTION-SCREEN COMMENT 1(79) TEXT-S04 MODIF ID INT.
Abrechnung durchführen ?
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS SETTLE RADIOBUTTON GROUP RADI.
SELECTION-SCREEN COMMENT 3(25) TEXT-B06. "N744242
SELECTION-SCREEN COMMENT 3(25) TEXT-B06 FOR FIELD SETTLE. "N744242
SELECTION-SCREEN POSITION 32.
PARAMETERS BOPRINT AS CHECKBOX.
SELECTION-SCREEN COMMENT 35(25) TEXT-B07. "N744242
SELECTION-SCREEN COMMENT 35(25) TEXT-B07 FOR FIELD BOPRINT. "N744242
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS PARTIAL RADIOBUTTON GROUP RADI.
SELECTION-SCREEN COMMENT 3(26) TEXT-B08. "N744242
SELECTION-SCREEN COMMENT 3(26) TEXT-B08 FOR FIELD PARTIAL. "N744242
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS DUMMY RADIOBUTTON GROUP RADI DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(26) TEXT-B10. "N744242
SELECTION-SCREEN COMMENT 3(26) TEXT-B10 FOR FIELD DUMMY. "N744242
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS CONTROL RADIOBUTTON GROUP RADI.
SELECTION-SCREEN COMMENT 3(26) TEXT-B11. "N744242
SELECTION-SCREEN COMMENT 3(26) TEXT-B11 FOR FIELD CONTROL. "N744242
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS CONTTST RADIOBUTTON GROUP RADI.
SELECTION-SCREEN COMMENT 3(26) TEXT-B12. "N744242
SELECTION-SCREEN COMMENT 3(26) TEXT-B12 FOR FIELD CONTTST. "N744242
SELECTION-SCREEN END OF LINE.
kennzeichen: Tabellen aus memory
PARAMETERS: FMEMORY NO-DISPLAY,
Nur Anzeigefunktionen
LISTONLY NO-DISPLAY.
*----
*
AT SELECTION-SCREEN *
*----
*
INCLUDE RV15CI01.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
CHECK SCREEN-GROUP1 = 'INT'.
SCREEN-INTENSIFIED = '1'.
MODIFY SCREEN.
ENDLOOP.
*----
*
Die Verarbeitung durchführen *
*----
*
INCLUDE RV15CI02.
Message was edited by:
SAP Trainee
10-29-2007 1:56 PM
INCLUDE RV15CI02.
*----
*
START-OF_SELECTION *
*----
*
START-OF-SELECTION.
PERFORM ALV_PREPARE.
Auswahl der Selektionsmethode
PERFORM PREPARE_SELECTION.
IF FMEMORY IS INITIAL.
IF KNUMA_LINES > 0.
PERFORM SELECTION_VIA_KNUMA.
ELSEIF BONEM_LINES > 0.
PERFORM SELECTION_VIA_BONEM.
Ist die Anforderung aus dem Verlängern
ELSEIF NOT ABRDAT_L IS INITIAL.
PERFORM SELECTION_VIA_KNUMA.
Matchcode enthält Satus 'C' und 'D' nicht
ELSEIF 'C' IN X_BOSTA OR
'D' IN X_BOSTA.
PERFORM SELECTION_VIA_KNUMA.
ELSE.
PERFORM SELECTION_VIA_BOSTA.
ENDIF.
ELSE.
Daten aus dem memory holen
IMPORT KONA FROM MEMORY ID 'RV15CXXX'.
REFRESH XKONA.
XKONA = KONA.
APPEND XKONA.
ENDIF.
SORT XKONA.
IF NOT CURRCH IS INITIAL.
Prüfung auf auslaufende Währung
Prüfung, ob Kurs für EURO-Umrechnung fixiert ist
LOOP AT XKONA.
CALL FUNCTION 'CURRENCY_EXPIRATION_CHECK'
EXPORTING
CURRENCY = CURRENCY
DATE = XKONA-DATBI
OBJECT = 'BUS3031'
BUKRS = XKONA-BUKRS
IMPORTING
CURRENCY_NEW = L_currency_new
EXCEPTIONS
WARNING_OCCURRED = 1
ERROR_OCCURRED = 2
OTHERS = 3
.
IF SY-SUBRC > 1.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'READ_EXCHANGE_RATE'
EXPORTING
DATE = XKONA-DATBI
FOREIGN_CURRENCY = XKONA-WAERS
LOCAL_CURRENCY = CURRENCY
TYPE_OF_RATE = TCURV-KURST
importing
fixed_rate = da_fixed_rate
EXCEPTIONS
NO_RATE_FOUND = 1.
IF SY-SUBRC NE 0.
MESSAGE I366 WITH XKONA-KNUMA XKONA-WAERS CURRENCY.
ENDIF.
ENDLOOP.
ENDIF.
Sortierung gemäß Kunde herstellen
LOOP AT XKONA.
MOVE-CORRESPONDING XKONA TO SORT_KUNNR.
SORT_KUNNR-TABIX = SY-TABIX.
APPEND SORT_KUNNR.
ENDLOOP.
Kein satz gefunden
IF SY-SUBRC <> 0.
MESSAGE I026.
EXIT.
ENDIF.
SORT SORT_KUNNR.
Aufbereiten
LOOP AT SORT_KUNNR.
Lesen der Vereinbarung
READ TABLE XKONA INDEX SORT_KUNNR-TABIX.
KONA = XKONA.
CLEAR KNUMA_WITH_ERROR.
IF ( SORT_KUNNR(8) <> ORGA_DATA ) OR
( OLD_BOART <> KONA-BOART ).
Berechtigungsprüfung / Anzeigen
CALL FUNCTION 'SD_COND_AUTH_CHECK'
EXPORTING
I_VKORG = KONA-VKORG
I_VTWEG = KONA-VTWEG
I_SPART = KONA-SPART
I_BOART = KONA-BOART
I_ACTIVITY = '03'
EXCEPTIONS
NO_AUTHORITY = 1
OTHERS = 2.
Berechtigung vorhanden ?
IF SY-SUBRC <> 0.
ERROR_AUTH_CHECK = 1.
ELSE.
ERROR_AUTH_CHECK = 0.
IF SETTLE = YES OR
CURRCH = YES OR
AUTO_EXTEND = YES.
Berechtigungsprüfung / Ändern
CALL FUNCTION 'SD_COND_AUTH_CHECK'
EXPORTING
I_VKORG = KONA-VKORG
I_VTWEG = KONA-VTWEG
I_SPART = KONA-SPART
I_BOART = KONA-BOART
I_ACTIVITY = '02'
EXCEPTIONS
NO_AUTHORITY = 1
OTHERS = 2.
Berechtigung vorhanden ?
IF SY-SUBRC <> 0.
ERROR_AUTH_CHECK = 1.
ENDIF.
ENDIF.
IF PARTIAL = YES.
Berechtigungsprüfung / Teilauszahlung
CALL FUNCTION 'SD_COND_AUTH_CHECK'
EXPORTING
I_VKORG = KONA-VKORG
I_VTWEG = KONA-VTWEG
I_SPART = KONA-SPART
I_BOART = KONA-BOART
I_ACTIVITY = 'A2'
EXCEPTIONS
NO_AUTHORITY = 1
OTHERS = 2.
Berechtigung vorhanden ?
IF SY-SUBRC <> 0.
ERROR_AUTH_CHECK = 1.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
neue Organisationsdaten ?
IF SORT_KUNNR(8) <> ORGA_DATA.
PERFORM NEW_ORGA_DATA.
ENDIF.
Wechsel der Kundenummer ?
IF SORT_KUNNR-BONEM <> OLD_BONEM.
PERFORM NEW_BONEM.
ENDIF.
Ausgabe der Bonusabsprache
PERFORM NEW_AGREEMENT.
Alten Bonusempfänger merken
OLD_BONEM = SORT_KUNNR-BONEM.
OLD_BOART = KONA-BOART.
ORGA_DATA = SORT_KUNNR(8).
PERFORM BUILD_HEADER_INFO.
ENDLOOP.
Clear Hide-bereich
CLEAR: KONA, VBAK.
Call ABAP/4 List Viewer
DESCRIBE TABLE REPORT_TAB LINES SY-TFILL.
IF SY-TFILL > 0 OR
ERROR_ORDER_CREATE <> 0 OR
ERROR_AUTO_EXTEND <> 0 OR
ERROR_AUTH_CHECK <> 0 OR
ERROR_ACTUAL_CHECK <> 0.
PERFORM ALV_CALL.
ENDIF.
IF SY-BATCH = YES.
Protokoll ausgeben
DESCRIBE TABLE ERROR_TAB LINES SY-TFILL.
IF SY-TFILL > 0.
PERFORM UMSATZ_PROTOKOLL.
ENDIF.
ENDIF.
*----
*
Lesen der Konditionssätze zur Bonusvereinbarung *
*----
*
FORM BONUS_RECORD_READ.
DATA:
X_SETTLE.
DATA: BEGIN OF BRR_PERIODS OCCURS 10,
DATAB LIKE RV13A-DATAB,
DATBI LIKE RV13A-DATBI.
DATA: END OF BRR_PERIODS.
DATA: BRR_CURRENCY_OLD LIKE KONA-WAERS.
DATA: BRR_PADAT LIKE PADAT.
DATA: BRR_NEXT_DAY LIKE PADAT.
DATA: BRR_NEW_REBATE_PROCESSING LIKE YES.
DATA ERROR_TEXT(72).
CHECK ERROR_AUTH_CHECK = 0.
Zurücksetzen der internen Tabellen
REFRESH: XVAKE, XKONH, XKONP, STAFFEL, XVALUE.
CLEAR: ERROR_ENQUEUE, ERROR_ORDER_CREATE.
Sicherheitsabfrage; sollte nie vorkommen
IF SETTLE = YES AND PARTIAL = YES.
CLEAR PARTIAL.
ENDIF.
BAdI to prevent enhanced agreements from processing
DATA: L_SD_ENH_REBATE TYPE REF TO IF_EX_SD_ENH_REBATES,
L_BADI_ACTIVE TYPE XFELD.
CALL FUNCTION 'GET_HANDLE_SD_ENH_REBATES'
IMPORTING
E_BADI_INSTANCE = L_SD_ENH_REBATE
E_BADI_ACTIVE = L_BADI_ACTIVE.
IF L_BADI_ACTIVE = 'X'.
CALL METHOD L_SD_ENH_REBATE->RV15C001_EXIT
EXPORTING
I_KONA = xkona
CHANGING
I_E_ERROR_TAB = error_tab[]
I_E_SETTLE = settle
I_E_PARTIAL = partial
EXCEPTIONS
ENH_REBATES_ACTIVE = 1
others = 2.
IF SY-SUBRC = 1.
exit.
ENDIF.
ENDIF.
Sperren der Bonusgutschrift
IF SETTLE <> SPACE OR
CURRCH <> SPACE OR
PARTIAL <> SPACE.
PERFORM SPERREN_KONA USING XKONA-KNUMA NO READ_SUBRC.
IF READ_SUBRC <> 0.
ERROR_ENQUEUE = YES.
X_SETTLE = NO.
ELSEIF SETTLE = YES OR PARTIAL = YES.
X_SETTLE = YES.
ELSEIF CURRCH = YES.
X_SETTLE = NO.
ENDIF.
ELSE.
X_SETTLE = NO.
ENDIF.
Lesen der zugehörigen Bonus Konditionen
IF FMEMORY IS INITIAL.
CALL FUNCTION 'SD_BONUS_READ'
EXPORTING
BONUS_AGREEMENT_IN = XKONA
CONDITION_READ = YES
SCALE_READ = YES
TABLES
CONDITION = XKONP
CONDITION_HEADER = XKONH
CONDITION_SCALE = STAFFEL
VARIABLE_KEY = XVAKE.
ELSE.
Daten aus dem memory holen
IMPORT XVAKE XKONP STAFFEL FROM MEMORY ID 'RV15CXXX'.
KONA = XKONA.
ENDIF.
Währung -> EURO
IF CURRCH = YES.
BRR_CURRENCY_OLD = XKONA-WAERS.
XKONA-WAERS = CURRENCY.
ENDIF.
Umsatz aktuell ?
ERROR_ACTUAL_CHECK = 0.
IF CURRCH IS INITIAL.
Neues Verfahren ?
CALL FUNCTION 'SD_INDEX_UPDATE_CHECK'
IMPORTING
INDEX_UPDATED = BRR_NEW_REBATE_PROCESSING.
IF BRR_NEW_REBATE_PROCESSING = YES.
LOOP AT XKONP
WHERE KSPAE = YES.
MESSAGE E780(VK) WITH XKONP-KNUMA_BO INTO ERROR_TEXT.
SY-SUBRC = 11.
ERROR_ACTUAL_CHECK = SY-SUBRC.
EXIT.
ENDLOOP.
IF ERROR_ACTUAL_CHECK NE 0.
SY-SUBRC = 11.
ENDIF.
ENDIF.
ELSE.
BADI for Maintenance Check
DATA: BADI_INSTANCE TYPE REF TO IF_EX_AGR_MAINTENANCE_CHCK.
DATA: BADI_ACTIVE TYPE XFELD.
CALL FUNCTION 'AGR_MNT_BADI_INSTANCE_GET'
IMPORTING
E_BADI_INSTANCE = BADI_INSTANCE
E_BADI_ACTIVE = BADI_ACTIVE.
IF NOT BADI_ACTIVE IS INITIAL.
Check whether changing this agreement is allowed
CALL METHOD BADI_INSTANCE->AGR_MNT_CHANGE_CHECK
EXPORTING
I_KNUMA = XKONA-KNUMA
EXCEPTIONS
OTHERS = 1.
ERROR_ACTUAL_CHECK = SY-SUBRC.
ENDIF.
ENDIF.
IF ERROR_ACTUAL_CHECK = 0.
IF NEW_CURR IS INITIAL.
Abrechnung durchführen ?
IF LISTONLY IS INITIAL.
Automatische Teilabrechnung
IF PARTIAL = YES.
IF T6B1-BOART NE XKONA-BOART.
SELECT SINGLE * FROM T6B1 WHERE BOART = XKONA-BOART.
ENDIF.
IF T6B1-MAVER NA 'AB'.
Prüfen, ob Vorschlagswert ermittelt werden kann
MESSAGE S294.
SY-SUBRC = 11.
Fehler merken
ERROR_ORDER_CREATE = SY-SUBRC.
ELSE.
Sonderbehandlung Periodische Auszahlung
REFRESH BRR_PERIODS.
CLEAR BRR_PERIODS.
CLEAR SY-SUBRC.
IF NOT XKONA-IDENT3 IS INITIAL.
Prüfung, dass für Absprachen mit periodischer Teilabrechnung der
Abrechnungstermin im Gültigkeitszeitraum liegt
IF PADAT IS INITIAL.
MESSAGE S480(VK).
SY-SUBRC = 11.
ERROR_ORDER_CREATE = SY-SUBRC.
ELSE.
IF XKONA-DATAB > PADAT.
MESSAGE S475(VK) WITH PADAT XKONA-DATAB.
SY-SUBRC = 11.
ERROR_ORDER_CREATE = SY-SUBRC.
ELSE.
IF XKONA-DATBI < PADAT.
MESSAGE S476(VK) WITH PADAT XKONA-DATBI.
SY-SUBRC = 11.
ERROR_ORDER_CREATE = SY-SUBRC.
ELSE.
DATA: PADAT2 LIKE PADAT.
Prüfung, ob Abrechnungstermin im Fabrikkalender
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING
CORRECT_OPTION = '+'
DATE = PADAT
FACTORY_CALENDAR_ID = XKONA-IDENT3
IMPORTING
DATE = PADAT2
EXCEPTIONS
OTHERS = 4.
IF PADAT NE PADAT2 OR SY-SUBRC NE 0.
MESSAGE S478(VK) WITH PADAT XKONA-IDENT3.
SY-SUBRC = 11.
ERROR_ORDER_CREATE = SY-SUBRC.
ELSE.
BRR_PERIODS-DATAB = '00010101'.
BRR_PERIODS-DATBI = PADAT.
Prüfung, ob bereits manuelle Teilauszahlungen existieren
BRR_NEXT_DAY = PADAT + 1.
CALL FUNCTION 'SD_BONUS_MANUAL_PAYMENT_CHECK'
EXPORTING
AGREEMENT_KNUMA = XKONA-KNUMA
PERIOD_DATAB = BRR_NEXT_DAY
PERIOD_DATBI = '99991231'
TABLES
CONDITION = XKONP
EXCEPTIONS
MANUAL_PAYMENT_EXISTS = 4.
IF SY-SUBRC <> 0.
MESSAGE S467(VK).
SY-SUBRC = 11.
ERROR_ORDER_CREATE = SY-SUBRC.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF ERROR_ORDER_CREATE IS INITIAL.
CALL FUNCTION 'SD_BONUS_SETTLEMENT'
EXPORTING
BONUS_AGREEMENT = XKONA
CREATE_CREDIT_NOTE = NO
SAVE_CREDIT_NOTE = NO
BRING_DIALOG = NO
PERIOD_DATAB = BRR_PERIODS-DATAB
PERIOD_DATBI = BRR_PERIODS-DATBI
BONUS_CONTROL = CONTROL
TABLES
CONDITION = XKONP
CONDITION_SCALE = STAFFEL
SETTLEMENT_VALUES = XVALUE
VARIABLE_KEY = XVAKE
EXCEPTIONS
CURRENCY_CONVERSION = 01
DIFFERENT_UOM = 02
ERROR_IN_ORDER_CREATION = 03
ERROR_MESSAGE = 04
INVALID_BONUS_TYPE = 05
NOT_READY_FOR_SETTLEMENT = 06
NO_ORDER_TYPE = 07
UNIT_CONVERSION = 08
OPEN_DOCUMENTS_EXIST = 09
NO_TURNOVER = 10
NO_SALES = 11.
Fehler merken
IF ERROR_ORDER_CREATE IS INITIAL.
ERROR_ORDER_CREATE = SY-SUBRC.
ENDIF.
CALL FUNCTION 'SD_BONUS_KONPD_FILL'
EXPORTING
REBATE_AGREEMENT = XKONA
REBATE_AGREEMENT_TYPE = T6B1
PERIOD_DATAB = BRR_PERIODS-DATAB
PERIOD_DATBI = BRR_PERIODS-DATBI
IMPORTING
OPEN_CORRECTIONS = OPEN_B2_EXISTS
TABLES
COND_ITEM = XKONP
COND_SCALES = STAFFEL
COND_KEYS = XVAKE
EXCEPTIONS
INVALID_BONUS_TYPE = 1
OTHERS = 2.
Fehler merken
IF ERROR_ORDER_CREATE IS INITIAL.
ERROR_ORDER_CREATE = SY-SUBRC.
ENDIF.
ENDIF.
Fehlerhandling
IF SY-SUBRC = 0.
Vorschlagswerte übernehmen
LOOP AT XKONP.
XKONP-BZWRT = XKONP-MPWRT.
MODIFY XKONP.
ENDLOOP.
Für periodische Teilabrechnung Auszahlungsdatum ermitteln
IF XKONA-IDENT3 IS INITIAL.
CLEAR BRR_PADAT.
ELSE.
BRR_PADAT = PADAT.
ENDIF.
LOOP AT XKONP WHERE NOT BZWRT IS INITIAL.
EXIT.
ENDLOOP.
DESCRIBE TABLE XKONP LINES SY-TFILL.
IF ( SY-SUBRC EQ 0 ) AND
( SY-TFILL > 0 ).
CALL FUNCTION 'SD_BONUS_MANUAL_PAYMENT'
EXPORTING
BONUS_AGREEMENT = XKONA
BONUS_AGREEMENT_TYPE = T6B1
BONUS_FBUDA = BRR_PADAT
TABLES
CONDITION = XKONP
CONDITION_SCALE = STAFFEL
EXCEPTIONS
ERROR_IN_ORDER_CREATION = 1
ERROR_MESSAGE = 2
INVALID_BONUS_TYPE = 3
NO_ORDER_TYPE = 4
OTHERS = 5.
ELSE.
MESSAGE S469(VK) WITH XKONA-KNUMA.
SY-SUBRC = 11.
ERROR_ORDER_CREATE = SY-SUBRC.
ENDIF.
Fehler merken
IF ERROR_ORDER_CREATE IS INITIAL.
ERROR_ORDER_CREATE = SY-SUBRC.
ENDIF.
ENDIF.
ENDIF.
ELSE.
CALL FUNCTION 'SD_BONUS_SETTLEMENT'
EXPORTING
BONUS_AGREEMENT = XKONA
CREATE_CREDIT_NOTE = X_SETTLE
SAVE_CREDIT_NOTE = NO
BRING_DIALOG = NO
BONUS_CONTROL = CONTROL
TABLES
CONDITION = XKONP
CONDITION_SCALE = STAFFEL
SETTLEMENT_VALUES = XVALUE
VARIABLE_KEY = XVAKE
EXCEPTIONS
CURRENCY_CONVERSION = 01
DIFFERENT_UOM = 02
ERROR_IN_ORDER_CREATION = 03
ERROR_MESSAGE = 04
INVALID_BONUS_TYPE = 05
NOT_READY_FOR_SETTLEMENT = 06
NO_ORDER_TYPE = 07
UNIT_CONVERSION = 08
OPEN_DOCUMENTS_EXIST = 09
NO_TURNOVER = 10
NO_SALES = 11.
Fehler merken
ERROR_ORDER_CREATE = SY-SUBRC.
ENDIF.
CASE SY-SUBRC.
WHEN 0.
IF X_SETTLE = YES.
Auftrag sichen
CLEAR VBAK-VBELN.
CALL FUNCTION 'SD_SALES_DOCUMENT_SAVE'
IMPORTING
EVBAK = VBAK
EXCEPTIONS
ERROR_MESSAGE = 09.
Fehler beim Sichern
IF SY-SUBRC = 0.
IF NOT PARTIAL = YES.
Bonusstatus setzen
PERFORM SET_BOSTA.
ENDIF.
COMMIT WORK.
ELSE.
ERROR_ORDER_CREATE = SY-SUBRC.
Sperren aufheben
PERFORM SPERREN_KONA_AUFHEBEN USING XKONA-KNUMA.
ENDIF.
elseif currch = yes.
Währung ändern
perform set_currency using xkona-knuma
brr_currency_old currency.
Sperren aufheben
PERFORM SPERREN_KONA_AUFHEBEN USING XKONA-KNUMA.
ENDIF.
WHEN OTHERS.
Fehler beim Erzeugen: => Sperre aufheben
IF X_SETTLE = YES OR CURRCH = YES.
PERFORM SPERREN_KONA_AUFHEBEN USING XKONA-KNUMA.
ENDIF.
ENDCASE.
ENDIF.
ELSE.
IF LISTONLY IS INITIAL.
Umsätze nicht aktuell - trotzdem Umsatz anzeigen
CALL FUNCTION 'SD_BONUS_SETTLEMENT'
EXPORTING
BONUS_AGREEMENT = XKONA
CREATE_CREDIT_NOTE = SPACE
SAVE_CREDIT_NOTE = NO
BRING_DIALOG = NO
BONUS_CONTROL = CONTROL
TABLES
CONDITION = XKONP
CONDITION_SCALE = STAFFEL
SETTLEMENT_VALUES = XVALUE
VARIABLE_KEY = XVAKE
EXCEPTIONS
CURRENCY_CONVERSION = 01
DIFFERENT_UOM = 02
ERROR_IN_ORDER_CREATION = 03
ERROR_MESSAGE = 04
INVALID_BONUS_TYPE = 05
NOT_READY_FOR_SETTLEMENT = 06
NO_ORDER_TYPE = 07
UNIT_CONVERSION = 08
OPEN_DOCUMENTS_EXIST = 09
NO_TURNOVER = 10
NO_SALES = 11.
ENDIF.
ENDIF.
währung ändern
IF NEW_CURR EQ YES.
IF CURRCH EQ YES.
PERFORM SET_CURRENCY USING XKONA-KNUMA
BRR_CURRENCY_OLD CURRENCY.
ENDIF.
listonly for the small protocol.
LISTONLY = 'X'.
ENDIF.
ENDIF.
Sortieren der interne Tabelle
SORT XVAKE BY KSCHL KOTABNR VAKEY.
SORT XKONP BY MANDT KNUMH KOPOS.
SORT STAFFEL BY KNUMH KOPOS KLFN1.
SORT XVALUE BY KNUMH KOPOS.
ENDFORM. "BONUS_RECORD_READ
*----
*
FORM DISPLAY_AGREEMENT *
*----
*
Anzeige der Bonusabsprache *
*----
*
FORM DISPLAY_AGREEMENT.
DATA: ICON(80).
IF KONA-BOSTA <> SPACE.
READ TABLE BO WITH KEY KONA-BOSTA BINARY SEARCH.
MOVE: 'I' TO ERROR_TAB-MSGTY,
'VK' TO ERROR_TAB-MSGID,
'783' TO ERROR_TAB-MSGNO,
KONA-KNUMA TO ERROR_TAB-VBELN,
KONA-BOSTA TO ERROR_TAB-MSGV1,
BO-TEXT TO ERROR_TAB-MSGV2.
APPEND ERROR_TAB.
ENDIF.
Abrechnung erfolgt ?
IF ( SETTLE <> SPACE OR
PARTIAL <> SPACE ) AND
ERROR_ENQUEUE = NO AND
ERROR_ORDER_CREATE = 0 AND
ERROR_ACTUAL_CHECK = 0.
CLEAR ERROR_TAB.
MOVE: 'I' TO ERROR_TAB-MSGTY,
'VK' TO ERROR_TAB-MSGID,
'782' TO ERROR_TAB-MSGNO,
KONA-KNUMA TO ERROR_TAB-VBELN,
VBAK-VBELN TO ERROR_TAB-MSGV1.
APPEND ERROR_TAB.
ENDIF.
Fehler bei der Gutschriftserstellung/Verlängerung/Berechtigung
IF ERROR_ORDER_CREATE <> 0 OR
ERROR_AUTO_EXTEND <> 0 OR
ERROR_AUTH_CHECK <> 0 OR
ERROR_ACTUAL_CHECK <> 0.
Fehler zählen
IF KNUMA_WITH_ERROR NE KONA-KNUMA.
ADD 1 TO ERROR_COUNT.
KNUMA_WITH_ERROR = KONA-KNUMA.
ENDIF.
SELECT SINGLE * FROM T100 WHERE SPRSL = SY-LANGU
AND ARBGB = SY-MSGID
AND MSGNR = SY-MSGNO.
IF SY-SUBRC <> 0.
OUT250 = TEXT-016.
OUT250+10(2) = SY-MSGID.
OUT250+13(3) = SY-MSGNO.
OUT250+17(8) = '& & & &'.
ELSE.
OUT250 = T100-TEXT.
ENDIF.
REPLACE '&' WITH SY-MSGV1 INTO OUT250.
REPLACE '&' WITH SY-MSGV2 INTO OUT250.
REPLACE '&' WITH SY-MSGV3 INTO OUT250.
REPLACE '&' WITH SY-MSGV4 INTO OUT250. CONDENSE OUT250.
Merken Fehler
SY_MSGNO = SY-MSGNO.
SY_MSGID = SY-MSGID.
SY_MSGV1 = SY-MSGV1.
SY_MSGV2 = SY-MSGV2.
SY_MSGV3 = SY-MSGV3.
SY_MSGV4 = SY-MSGV4.
füllen Fehlertabelle für Protokoll
MOVE: SY-MSGID TO ERROR_TAB-MSGID,
SY-MSGNO TO ERROR_TAB-MSGNO,
SY-MSGTY TO ERROR_TAB-MSGTY,
SY-MSGV1 TO ERROR_TAB-MSGV1,
SY-MSGV2 TO ERROR_TAB-MSGV2,
SY-MSGV3 TO ERROR_TAB-MSGV3,
SY-MSGV4 TO ERROR_TAB-MSGV4,
KONA-KNUMA TO ERROR_TAB-VBELN.
APPEND ERROR_TAB.
ausgabe des Fehlers
ELSEIF WARN_AUTO_EXTEND <> 0.
füllen Fehlertabelle für Protokoll
LOOP at ERROR_MESSAGES.
MOVE-CORRESPONDING ERROR_MESSAGES TO ERROR_TAB.
MOVE KONA-KNUMA TO ERROR_TAB-VBELN.
APPEND ERROR_TAB.
ENDLOOP.
ELSEIF ERROR_ENQUEUE = YES.
Fehler zählen
IF KNUMA_WITH_ERROR NE KONA-KNUMA.
ADD 1 TO ERROR_COUNT.
KNUMA_WITH_ERROR = KONA-KNUMA.
ENDIF.
MOVE: KONA-KNUMA TO ERROR_TAB-VBELN,
'VK' TO ERROR_TAB-MSGID,
'784' TO ERROR_TAB-MSGNO,
'W' TO ERROR_TAB-MSGTY.
APPEND ERROR_TAB.
ENDIF.
ENDFORM. "DISPLAY_AGREEMENT
*----
*
FORM DISPLAY_AGREEMENT_END *
*----
*
Anzeige am Ende der Bonusabsprache *
*----
*
FORM DISPLAY_AGREEMENT_END.
DATA:
SUM_AUWRT LIKE BONUSVALUE-AUWRT,
SUM_RUWRT LIKE BONUSVALUE-RUWRT,
X_LINES LIKE SY-TABIX.
DESCRIBE TABLE XVALUE LINES X_LINES.
CHECK X_LINES > 1.
Summieren der Werte
LOOP AT XVALUE.
ADD XVALUE-AUWRT TO SUM_AUWRT.
ADD XVALUE-RUWRT TO SUM_RUWRT.
ENDLOOP.
FORMAT COLOR OFF.
ENDFORM. "DISPLAY_AGREEMENT_END
*----
*
FORM DISPLAY_CONDITION_TYPE *
*----
*
Anzeige der Konditionsart *
*----
*
FORM DISPLAY_CONDITION_TYPE.
IF XVAKE-KSCHL <> OLD_KSCHL.
SELECT SINGLE * FROM T685T WHERE KVEWE = 'A'
AND SPRAS = SY-LANGU
AND KAPPL = XKONA-KAPPL
AND KSCHL = XVAKE-KSCHL.
IF SY-SUBRC <> 0.
CLEAR T685T-VTEXT.
ENDIF.
ENDIF.
ENDFORM. "DISPLAY_CONDITION_TYPE
*----
*
FORM DISPLAY_SETTLEMENT *
*----
*
Ausgabe der Abrechnung *
*----
*
--> DS_KNUMH *
*----
*
FORM DISPLAY_SETTLEMENT USING DS_KNUMH.
Key für Zugriff auf Tabelle XKONP
DATA:
BEGIN OF XKONP_KEY,
MANDT LIKE SY-MANDT,
KNUMH LIKE KONP-KNUMH,
END OF XKONP_KEY.
Füllen Key
XKONP_KEY-MANDT = SY-MANDT.
XKONP_KEY-KNUMH = DS_KNUMH.
READ TABLE XKONP WITH KEY XKONP_KEY BINARY SEARCH.
READ TABLE XVALUE WITH KEY DS_KNUMH BINARY SEARCH.
IF SY-SUBRC NE 0.
CLEAR XVALUE.
ENDIF.
Ausgabe der Löschvormerkung
if xkonp-loevm_ko eq yes.
report_tab-dummy_txt = text-v12.
endif.
if listonly eq yes.
exit.
endif.
Ausgabe des Bonuswertes
MOVE: XVALUE-AUWRT TO REPORT_TAB-AUWRT,
XKONA-WAERS TO REPORT_TAB-WAERS,
XKONA-WAERS TO REPORT_TAB-WAERS_AU.
Ausgabe des Betrages
MOVE: XVALUE-KBETR TO REPORT_TAB-KBETR,
XVALUE-KONWA TO REPORT_TAB-KONWA.
IF XKONP-KRECH CA 'AHI'.
prozentual
MOVE DECIMALS_3 TO REPORT_TAB-KBETR_AUF.
ELSE.
relativ oder fixer Betrag
MOVE XVALUE-KONWA TO REPORT_TAB-KBETR_AUF.
IF XKONP-KRECH <> 'B'.
relativ
MOVE: TEXT-V01 TO REPORT_TAB-KMEIN_TEXT,
XKONP-KPEIN TO REPORT_TAB-KPEIN,
XKONP-KMEIN TO REPORT_TAB-KMEIN.
ENDIF.
ENDIF.
Konditionsbasis
MOVE XVALUE-KAWRT TO REPORT_TAB-KAWRT.
IF XKONP-KRECH CA 'ABHI'.
MOVE: XVALUE-KWAEH TO REPORT_TAB-KWAEH_AUF,
XVALUE-KWAEH TO REPORT_TAB-KWAEH.
ELSE.
MOVE: DECIMALS_3 TO REPORT_TAB-KWAEH_AUF.
WRITE XVALUE-KMEIN TO REPORT_TAB-KWAEH.
ENDIF.
Staffelbasis
IF XKONP-KZBZG <> SPACE.
MOVE XVALUE-KSTBS TO REPORT_TAB-KSTBS.
IF XKONP-KZBZG = 'B'.
MOVE: XKONP-KONWS TO REPORT_TAB-KONWS_AUF,
XKONP-KONWS TO REPORT_TAB-KONWS.
ELSE.
MOVE: DECIMALS_3 TO REPORT_TAB-KONWS_AUF.
WRITE XKONP-KONMS TO REPORT_TAB-KONWS.
ENDIF.
ENDIF.
Ausgabe des RÜckstellungswertes
MOVE: XVALUE-RUWRT TO REPORT_TAB-RUWRT,
XKONA-WAERS TO REPORT_TAB-RR_WAERS.
ENDFORM. "DISPLAY_SETTLEMENT
*----
*
FORM NACHWEIS *
*----
*
Anzeige des Einzelnachweise *
*----
*
--> FB_EINZEL : Einzelnachweis (YES/NO) *
*----
*
FORM NACHWEIS USING FB_EINZEL AGREEMENT.
DATA:
LLINES LIKE SY-TABIX,
TEMP_ABSPZ LIKE KONA-ABSPZ,
HLP_AGREEMENT(10) TYPE N.
Absprachenummer bekannt
DESCRIBE TABLE XKONA LINES LLINES.
IF AGREEMENT EQ '0000000000' AND
LLINES NE 1.
MESSAGE I310.
EXIT.
ENDIF.
Lesen der Absprache
IF LLINES = 1. "Genau eine Absprache
READ TABLE XKONA INDEX 1.
ELSE.
KONA_KEY-MANDT = SY-MANDT.
KONA_KEY-KNUMA = AGREEMENT.
READ TABLE XKONA WITH KEY KONA_KEY BINARY SEARCH.
ENDIF.
IF FMEMORY EQ NO.
REFRESH: XKONP, XVAKE.
Lesen der Bonusgutschrift
CALL FUNCTION 'SD_BONUS_READ'
EXPORTING
BONUS_AGREEMENT_IN = XKONA
CONDITION_READ = YES
TABLES
CONDITION = XKONP
CONDITION_HEADER = XKONH
CONDITION_SCALE = STAFFEL
VARIABLE_KEY = XVAKE.
ENDIF.
Spezifikationsgrad setzen
IF FB_EINZEL = YES.
TEMP_ABSPZ = SPACE.
ELSE.
TEMP_ABSPZ = XKONA-ABSPZ.
ENDIF.
Bonusempfänger lesen
PERFORM NEW_BONEM.
Nachweis anzeigen
IF PARTIAL = YES AND NOT XKONA-IDENT3 IS INITIAL.
CALL FUNCTION 'SD_BONUS_DRILL_DOWN_DISPLAY'
STARTING NEW TASK 'BONUS_UMSATZ'
EXPORTING
DD_ABSPZ = TEMP_ABSPZ
DD_KURGV = KURGV
DD_KONA = XKONA
DD_DATAB = XKONA-DATAB
DD_DATBI = PADAT
DD_LIST = 'X'
TABLES
ZVAKE_TAB = XVAKE
ZKONP_TAB = XKONP.
ELSE.
CALL FUNCTION 'SD_BONUS_DRILL_DOWN_DISPLAY'
STARTING NEW TASK 'BONUS_UMSATZ'
EXPORTING
DD_KONA = XKONA
DD_KURGV = KURGV
DD_ABSPZ = TEMP_ABSPZ
DD_LIST = 'X'
TABLES
ZVAKE_TAB = XVAKE
ZKONP_TAB = XKONP.
ENDIF.
ENDFORM. "NACHWEIS
*----
*
FORM NEW_AGREEMENT *
*----
*
Ausgabe der Bonusabsprache *
*----
*
FORM NEW_AGREEMENT.
Initialisierung
CLEAR ERROR_AUTO_EXTEND.
CLEAR WARN_AUTO_EXTEND.
REFRESH ERROR_MESSAGES.
CLEAR: OLD_KSCHL, OLD_KOTABNR.
Lesen der Konditionen
IF AUTO_EXTEND = NO.
PERFORM BONUS_RECORD_READ.
ELSE.
CHECK ERROR_AUTH_CHECK = 0.
BADI for Maintenance Check
DATA: BADI_INSTANCE TYPE REF TO IF_EX_AGR_MAINTENANCE_CHCK.
DATA: BADI_ACTIVE TYPE XFELD.
CALL FUNCTION 'AGR_MNT_BADI_INSTANCE_GET'
IMPORTING
E_BADI_INSTANCE = BADI_INSTANCE
E_BADI_ACTIVE = BADI_ACTIVE.
IF NOT BADI_ACTIVE IS INITIAL.
Check whether copying this agreement is allowed
CALL METHOD BADI_INSTANCE->AGR_MNT_COPY_CHECK
EXPORTING
I_KNUMA = KONA-KNUMA
EXCEPTIONS
OTHERS = 1.
ERROR_AUTO_EXTEND = SY-SUBRC.
ENDIF.
IF ERROR_AUTO_EXTEND IS INITIAL.
Verlängerung gemäß Kalender durchführen
BOOL = YES.
CALL FUNCTION 'MM_ARRANGEMENT_NEW_PERIOD'
EXPORTING
ARRANGEMENT = XKONA
I_PERIODS_AHEAD = PERIO
USE_OUTBOUND_CALL = BOOL
IMPORTING
ARRANGEMENT_NEW = *KONA "Verlängerte Absprache
TABLES
VARIABLE_KEY_NEW = XVAKE
ERROR_MESSAGES = ERROR_MESSAGES
EXCEPTIONS
OTHERS = 1.
Fehler merken
ERROR_AUTO_EXTEND = SY-SUBRC.
LOOP AT ERROR_MESSAGES WHERE MSGTY <> 'S'.
ENDLOOP.
IF SY-SUBRC = 0.
Es gab vermutlich Warnungen -> merken.
WARN_AUTO_EXTEND = 1.
ENDIF.
ENDIF.
ENDIF.
Ausgabe der zugehörigen Konditionen
NEW-PAGE.
TOPPAGE = 'A'.
Ausgabe der Bonusvereinbarung
CLEAR OLD_ALV_KSCHL.
OLD_KONA_KNUMA = KONA-KNUMA.
OLD_KONA_DATAB = KONA-DATAB.
OLD_KONA_DATBI = KONA-DATBI.
CLEAR REPORT_TAB.
LOOP AT XVAKE.
Anzeige der Konditionsart
PERFORM DISPLAY_CONDITION_TYPE.
IF ERROR_AUTH_CHECK = 0.
Aufbereitung des varaiablen Schlüssel
PERFORM XVAKE_AUFBEREITEN.
ENDIF.
Ausgabe der Bonusabrechnung
IF ERROR_ORDER_CREATE = 0 AND
ERROR_AUTH_CHECK = 0.
PERFORM DISPLAY_SETTLEMENT USING XVAKE-KNUMH.
ENDIF.
Gruppenwechsel
OLD_KSCHL = XVAKE-KSCHL.
OLD_KOTABNR = XVAKE-KOTABNR.
APPEND REPORT_TAB.
IF ERROR_AUTH_CHECK IS INITIAL AND
ERROR_AUTO_EXTEND = 0.
IF OLD_ALV_KSCHL NE XVAKE-KSCHL.
MOVE: KONA-BONEM TO BO_ALV_HEADER-BONEM,
HELP130 TO BO_ALV_HEADER-NAME1.
MOVE: OLD_KONA_KNUMA TO BO_ALV_HEADER-KNUMA,
KONA-BOTEXT TO BO_ALV_HEADER-KNUMA_TXT.
MOVE: OLD_KONA_DATAB TO BO_ALV_HEADER-DATAB,
OLD_KONA_DATBI TO BO_ALV_HEADER-DATBI.
MOVE: KONA-BOSTA TO BO_ALV_HEADER-BOSTA.
Auto Verlängerung erfolgt
IF AUTO_EXTEND <> SPACE AND
ERROR_AUTO_EXTEND = 0.
KONA = *KONA.
MOVE: *KONA-DATAB TO BO_ALV_HEADER-DATAB_NEW,
*KONA-DATBI TO BO_ALV_HEADER-DATBI_NEW,
*KONA-BONEM TO BO_ALV_HEADER-BONEM_NEW,
HELP130 TO BO_ALV_HEADER-NAME1_NEW,
*KONA-KNUMA TO BO_ALV_HEADER-KNUMA_NEW,
*KONA-BOTEXT TO BO_ALV_HEADER-KNUMA_TXT_NEW.
ENDIF.
MOVE: XVAKE-KSCHL TO BO_ALV_HEADER-KSCHL,
T685T-VTEXT TO BO_ALV_HEADER-KOND_TEXT,
RV13A-VAKEY1 TO BO_ALV_HEADER-VAKEY1.
Datum auf Konditionsebene abweichend ?
IF BO_ALV_HEADER-DATAB NE XVAKE-DATAB OR
BO_ALV_HEADER-DATBI NE XVAKE-DATBI.
MOVE: XVAKE-DATAB TO BO_ALV_HEADER-KOND_DATAB,
XVAKE-DATBI TO BO_ALV_HEADER-KOND_DATBI.
ELSE.
CLEAR: BO_ALV_HEADER-KOND_DATAB,
BO_ALV_HEADER-KOND_DATBI.
ENDIF.
APPEND BO_ALV_HEADER.
ENDIF.
OLD_ALV_KSCHL = XVAKE-KSCHL.
ENDIF.
ENDLOOP.
Ausgabe der Bonusabrechnung
IF ERROR_ORDER_CREATE = 0 AND
ERROR_AUTH_CHECK = 0.
PERFORM DISPLAY_AGREEMENT_END.
ENDIF.
Einzelnachweis anzeigen
IF BOPRINT <> SPACE AND
ERROR_AUTH_CHECK = 0 AND
SY-BATCH = YES.
NEW-PAGE.
TOPPAGE = 'B'.
IF PARTIAL = YES AND NOT XKONA-IDENT3 IS INITIAL.
CALL FUNCTION 'SD_BONUS_REPORT_NO_READ'
EXPORTING
RR_ABSPZ = XKONA-ABSPZ
RR_KONA = XKONA
RR_KURGV = KURGV
RR_LEAVE_TO_LIST_PROCESSING = NO
RR_DATAB = XKONA-DATAB
RR_DATBI = PADAT
TABLES
ZVAKE_TAB = XVAKE
ZKONP_TAB = XKONP.
ELSE.
CALL FUNCTION 'SD_BONUS_REPORT_NO_READ'
EXPORTING
RR_ABSPZ = XKONA-ABSPZ
RR_KONA = XKONA
RR_KURGV = KURGV
RR_LEAVE_TO_LIST_PROCESSING = NO
RR_LIST = LIST_NUMBER
TABLES
ZVAKE_TAB = XVAKE
ZKONP_TAB = XKONP.
ENDIF.
ENDIF.
ENDFORM. "NEW_AGREEMENT
*----
*
FORM NEW_BONEM *
*----
*
Neuer Kunde *
*----
*
FORM NEW_BONEM.
Bonusempfänger bereits gelesen ?
IF VTCOM-KUNNR NE XKONA-BONEM OR
VTCOM-VKORG NE XKONA-VKORG OR
VTCOM-VTWEG NE XKONA-VTWEG OR
VTCOM-SPART NE XKONA-SPART.
CLEAR VTCOM.
VTCOM-KUNNR = XKONA-BONEM.
VTCOM-VKORG = XKONA-VKORG.
VTCOM-VTWEG = XKONA-VTWEG.
VTCOM-SPART = XKONA-SPART.
Lesen Bonusempfänger
CALL FUNCTION 'VIEW_KURGV'
EXPORTING
COMWA = VTCOM
IMPORTING
RGWA = KURGV
EXCEPTIONS
OTHERS = 1.
Bonusempfänger nicht vorhanden ?
IF SY-SUBRC <> 0.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = SY-MSGID
MSGNR = SY-MSGNO
MSGV1 = SY-MSGV1
MSGV2 = SY-MSGV2
MSGV3 = SY-MSGV3
MSGV4 = SY-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = HELP130
EXCEPTIONS
OTHERS = 1.
EXIT.
ENDIF.
HELP130 = KURGV-NAME1.
OFFSET = STRLEN( KURGV-NAME1 ).
WRITE ',' TO HELP130+OFFSET(1).
HELP130+42(40) = KURGV-ORT01.
IF NOT KURGV-TELF1 IS INITIAL.
HELP130+80(1) = ','.
HELP130+82(40) = KURGV-TELF1.
ENDIF.
CONDENSE HELP130.
ENDIF.
ENDFORM. "NEW_BONEM
*----
*
FORM NEW_ORGA_DATA *
*----
*
Ermitteln der Organisationsdaten *
*----
*
FORM NEW_ORGA_DATA .
OLD_BONEM = '$$%%&&%%'.
ENDFORM. "NEW_ORGA_DATA
*----
*
FORM ORG_DATEN_SETZEN *
*----
*
........ *
*----
*
--> ODS_KNUMA *
*----
*
FORM ORG_DATEN_SETZEN USING ODS_KNUMA.
Bonusabsprache lesen
KONA_KEY-MANDT = SY-MANDT.
KONA_KEY-KNUMA = ODS_KNUMA.
READ TABLE XKONA WITH KEY KONA_KEY BINARY SEARCH.
Reset der Organisationsdaten
IF SY-SUBRC <> 0.
CLEAR: XKONA-VKORG, XKONA-VTWEG, XKONA-SPART.
ENDIF.
ENDFORM. "ORG_DATEN_SETZEN
*----
*
FORM SELECTION_VIA_KNUMA *
*----
*
SELECTION über die Absprachenummer *
*----
*
FORM SELECTION_VIA_KNUMA.
SELECT * FROM KONA INTO TABLE XKONA
WHERE KNUMA IN KNUMA
AND BONEM IN BONEM
AND BOSTA IN X_BOSTA
AND DATBI >= ABRDAT_L
AND DATBI <= ABRDATE
AND VKORG IN VKORG
AND VTWEG IN VTWEG
AND SPART IN SPART
AND IDENT2 IN IDENT2
AND IDENT3 IN IDENT3
AND ABTYP EQ 'A'
AND KAPPL EQ 'V '.
ENDFORM. "SELECTION_VIA_KNUMA
*----
*
FORM SELECTION_VIA_BONEM *
*----
*
SELECTION über den Bonusempfänger *
*----
*
FORM SELECTION_VIA_BONEM.
SELECT * FROM M_VMBOA WHERE BONEM IN BONEM
AND BOSTA IN X_BOSTA
AND KODATBI >= ABRDAT_L
AND KODATBI <= ABRDATE
AND VKORG IN VKORG
AND VTWEG IN VTWEG
AND SPART IN SPART.
SELECTIONstabelle füllen
X_KNUMA-SIGN = 'I'.
X_KNUMA-OPTION = 'EQ'.
X_KNUMA-LOW = M_VMBOA-KNUMA.
APPEND X_KNUMA.
ENDSELECT.
SELECTION über KNUMA durchführen
PERFORM SELECTION_VIA_X_KNUMA.
ENDFORM. "SELECTION_VIA_BONEM
*----
*
FORM SELECTION_VIA_BOSTA *
*----
*
SELECTION gemäß Status *
*----
*
FORM SELECTION_VIA_BOSTA.
SELECT * FROM M_VMBOC WHERE BOSTA IN X_BOSTA
AND BONEM IN BONEM
AND KODATBI >= ABRDAT_L
AND KODATBI <= ABRDATE
AND VKORG IN VKORG
AND VTWEG IN VTWEG
AND SPART IN SPART.
SELECTIONstabelle füllen
X_KNUMA-SIGN = 'I'.
X_KNUMA-OPTION = 'EQ'.
X_KNUMA-LOW = M_VMBOC-KNUMA.
APPEND X_KNUMA.
ENDSELECT.
SELECTION über KNUMA durchführen
PERFORM SELECTION_VIA_X_KNUMA.
ENDFORM. "SELECTION_VIA_BOSTA
*----
*
FORM SELECTION_VIA_X_KNUMA *
*----
*
SELECTION über die Absprachenummer *
*----
*
FORM SELECTION_VIA_X_KNUMA.
Anzahl der aktuellen Sätze
DATA:
NUMBER_KNUMA_ACT(2) TYPE P.
Initialisierung
CLEAR NUMBER_KNUMA_ACT.
REFRESH KNUMA.
Sortieren der SELECTIONstabelle
SORT X_KNUMA BY SIGN OPTION LOW.
Abarbeiten der SELECTIONstabelle
LOOP AT X_KNUMA.
Übernahem in SELECTIONstabelle
MOVE X_KNUMA TO KNUMA.
APPEND KNUMA.
ADD 1 TO NUMBER_KNUMA_ACT.
maximale Anzahl in SELECTIONstabelle erreicht ?
IF NUMBER_KNUMA_ACT = 50.
Aufnahme in interne Tabelle
SELECT * FROM KONA APPENDING TABLE XKONA
WHERE KNUMA IN KNUMA
AND IDENT2 IN IDENT2
AND IDENT3 IN IDENT3
ORDER BY KNUMA.
Initialisierung
CLEAR NUMBER_KNUMA_ACT.
REFRESH KNUMA.
ENDIF.
ENDLOOP.
Lesen der übrigen Einträge ( Es sind noch Einträge in KNUMA )
IF NUMBER_KNUMA_ACT <> 0.
Aufnahme in interne Tabelle
SELECT * FROM KONA APPENDING TABLE XKONA
WHERE KNUMA IN KNUMA
AND IDENT2 IN IDENT2
AND IDENT3 IN IDENT3
ORDER BY KNUMA.
Initialisierung
CLEAR NUMBER_KNUMA_ACT.
REFRESH KNUMA.
ENDIF.
ENDFORM. "SELECTION_VIA_X_KNUMA
*----
*
FORM SET_BOSTA *
*----
*
Setzen des Status für die Bonusabsprache *
*----
*
FORM SET_BOSTA.
DATA:
NUMBER_KNUMA_ACT(2) TYPE P.
DATA: L_XKONA LIKE KONA,
L_YKONA LIKE KONA.
DATA: TL_XKONP LIKE KONPDB OCCURS 0 WITH HEADER LINE,
TL_YKONP LIKE KONPDB OCCURS 0 WITH HEADER LINE.
CHECK XKONA-BOSTA NE 'D'.
Bereiche für die KONP-selektion
RANGES KNUMH_SELECT FOR KONP-KNUMH.
RANGES SB_KNUMH FOR KONP-KNUMH.
Setzen Status in der Absprache
UPDATE KONA SET BOSTA = 'C' WHERE KNUMA = XKONA-KNUMA.
Änderungsbelege
L_XKONA-BOSTA = 'C'.
L_XKONA-KNUMA = XKONA-KNUMA.
L_YKONA-KNUMA = XKONA-KNUMA.
L_YKONA-BOSTA = XKONA-BOSTA.
CALL FUNCTION 'SD_AGREEMENT_CHANGE_DOCS_WRITE'
EXPORTING
P_XKONA = L_XKONA
P_YKONA = L_YKONA
UPDATE_SIGN = 'U'.
Initialisierung
REFRESH SB_KNUMH.
LOOP AT XKONP.
SB_KNUMH-SIGN = 'I'.
SB_KNUMH-OPTION = 'EQ'.
SB_KNUMH-LOW = XKONP-KNUMH.
APPEND SB_KNUMH.
ENDLOOP.
CLEAR NUMBER_KNUMA_ACT.
REFRESH KNUMH_SELECT.
Abarbeiten der Selektionstabelle
LOOP AT SB_KNUMH.
Übernahem in Selektionstabelle
MOVE SB_KNUMH TO KNUMH_SELECT.
APPEND KNUMH_SELECT.
ADD 1 TO NUMBER_KNUMA_ACT.
maximale Anzahl in Selektionstabelle erreicht ?
IF NUMBER_KNUMA_ACT = 50.
Setzen des Status
UPDATE KONP SET BOSTA = 'C'
WHERE KNUMH IN KNUMH_SELECT.
Initialisierung
CLEAR NUMBER_KNUMA_ACT.
REFRESH KNUMH_SELECT.
ENDIF.
ENDLOOP.
Lesen der übrigen Einträge ( Es sind noch Einträge in KNUMH_SELECT )
IF NUMBER_KNUMA_ACT <> 0.
Setzen des Status
UPDATE KONP SET BOSTA = 'C'
WHERE KNUMH IN KNUMH_SELECT.
Initialisierung
CLEAR NUMBER_KNUMA_ACT.
REFRESH KNUMH_SELECT.
ENDIF.
Änderungsbelege
TL_XKONP-BOSTA = 'C'.
TL_XKONP-MANDT = SY-MANDT.
LOOP AT XKONP.
TL_XKONP-KNUMH = XKONP-KNUMH.
TL_YKONP-KNUMH = XKONP-KNUMH.
TL_YKONP-MANDT = SY-MANDT.
TL_YKONP-BOSTA = XKONP-BOSTA.
APPEND TL_XKONP.
APPEND TL_YKONP.
ENDLOOP.
CALL FUNCTION 'SD_KONP_CHANGE_DOCS_WRITE'
TABLES
P_XKONP = TL_XKONP
P_YKONP = TL_YKONP.
Send Changes of Rebate Status to Middleware
LOOP AT XKONP.
MOVE-CORRESPONDING XKONP TO TL_XKONP.
MOVE-CORRESPONDING XKONP TO TL_YKONP.
TL_XKONP-BOSTA = 'C'.
TL_XKONP-UPDKZ = 'U'.
MODIFY TL_XKONP INDEX SY-TABIX.
MODIFY TL_YKONP INDEX SY-TABIX.
ENDLOOP.
CALL FUNCTION 'OPEN_FI_PERFORM_00503301_BOSTA'
EXPORTING
I_XKONP_COMPLETE = 'X'
I_NEW_BOSTA = 'C'
TABLES
T_XKONP = TL_XKONP
T_YKONP = TL_YKONP
T_XVAKE = XVAKE.
DATA: BEGIN OF TL_XKONA OCCURS 0.
INCLUDE STRUCTURE KONA.
DATA: END OF TL_XKONA.
DATA: BEGIN OF TL_YKONA OCCURS 0.
INCLUDE STRUCTURE KONA.
DATA: END OF TL_YKONA.
TL_XKONA = L_XKONA.
APPEND TL_XKONA.
TL_YKONA = L_YKONA.
APPEND TL_YKONA.
CALL FUNCTION 'OPEN_FI_PERFORM_00503310_BOSTA'
EXPORTING
I_NEW_BOSTA = 'C'
TABLES
T_XKONA = TL_XKONA
T_YKONA = TL_YKONA.
ENDFORM. "SET_BOSTA
*----
*
FORM SET_CURRENCY *
*----
*
........ *
*----
*
FORM SET_CURRENCY USING VALUE(DA_KNUMA) LIKE KONA-KNUMA
VALUE(DA_CURRENCY_OLD) LIKE KONA-WAERS
VALUE(DA_CURRENCY_NEW) LIKE KONA-WAERS.
DATA: L_XKONA LIKE KONA,
L_YKONA LIKE KONA.
Bonusabsprache initial ?
CHECK NOT DA_KNUMA IS INITIAL.
Setzen der Absprachewährung auf EURO
UPDATE KONA SET WAERS = DA_CURRENCY_NEW WHERE KNUMA = DA_KNUMA.
Änderungsbelege
L_XKONA-KNUMA = DA_KNUMA.
L_XKONA-WAERS = DA_CURRENCY_NEW.
L_YKONA-KNUMA = DA_KNUMA.
L_YKONA-WAERS = DA_CURRENCY_OLD.
CALL FUNCTION 'SD_AGREEMENT_CHANGE_DOCS_WRITE'
EXPORTING
P_XKONA = L_XKONA
P_YKONA = L_YKONA
UPDATE_SIGN = 'U'.
ENDFORM. "SET_CURRENCY
*----
*
FORM SPERREN_KONA_AUFHEBEN *
*----
*
Die Bonusabsprache wird entsperrt *
*----
*
--> KE_KNUMA : BONUSABSPRACHE *
*----
*
FORM SPERREN_KONA_AUFHEBEN USING SKA_KNUMA.
Bonusabsprache initial ?
CHECK NOT SKA_KNUMA IS INITIAL.
Entsperren Kontakt
CALL FUNCTION 'DEQUEUE_EVKONAE'
EXPORTING
KNUMA = SKA_KNUMA
MANDT = SY-MANDT.
ENDFORM. "SPERREN_KONA_AUFHEBEN
*----
*
FORM SPERREN_KONA *
*----
*
Die Bonusabsprache wird entsperrt *
*----
*
--> SK_KNUMA : Bonusabsprache *
--> SK_ERROR : Ausgabe einer Fehlermeldung (YES/NO) *
--> SK_SUBRC : Returncode : 0 - Kontakt wurde gesperrt *
2 - Kontakt ist bereits gesperrt *
3 - Fehler beim Sperren *
*----
*
FORM SPERREN_KONA USING SK_KNUMA SK_ERROR SK_SUBRC.
Reset Returncode
CLEAR SK_SUBRC.
Kontaktnummer nicht initial ?
CHECK NOT SK_KNUMA IS INITIAL.
Sperren Kontakt
CALL FUNCTION 'ENQUEUE_EVKONAE'
EXPORTING
MANDT = SY-MANDT
KNUMA = SK_KNUMA
EXCEPTIONS
FOREIGN_LOCK = 2
SYSTEM_FAILURE = 3.
Fehlermeldung ausgaben
IF SK_ERROR = YES AND
SY-SUBRC <> 0.
CASE SY-SUBRC.
WHEN 2.
MESSAGE E162 WITH SK_KNUMA.
WHEN 3.
MESSAGE E163.
ENDCASE.
ENDIF.
Zurückgeben Returncode
SK_SUBRC = SY-SUBRC.
ENDFORM. "SPERREN_KONA
*----
*
FORM PREPARE_SELECTION *
*----
*
SELECTIONsdaten vorbereiten *
*----
*
FORM PREPARE_SELECTION.
DATA:
HELP_CHAR LIKE KONA-BOSTA,
ABCD(5) VALUE 'ABCD'.
Pf-Status setzen
IF FMEMORY = SPACE.
IF LISTONLY IS INITIAL.
Abrechnung
WRITE ABRDATE DD/MM/YYYY TO OUT_10.
SET PF-STATUS 'LISTN'.
SET TITLEBAR 'LI1' WITH OUT_10.
ELSE.
Listanzeigen
SET PF-STATUS 'LISTO'.
SET TITLEBAR 'LI2' WITH OUT_10.
ENDIF.
ELSE.
Call über Memory
SET PF-STATUS 'LISTM'.
SET TITLEBAR 'LI3'.
ENDIF.
Kennzeichen für Abrechnung setzen
IF SETTLE CA NO_ENTRY.
SETTLE = NO.
ELSE.
SETTLE = YES.
ENDIF.
Kenzeichen für Nachweis setzen
IF BOPRINT CA NO_ENTRY.
BOPRINT = NO.
ELSE.
BOPRINT = YES.
ENDIF.
offene selektieren
IF BOPEN CN NO_ENTRY.
X_BOSTA-SIGN = 'I'.
X_BOSTA-OPTION = 'EQ'.
X_BOSTA-LOW = SPACE.
APPEND X_BOSTA.
ENDIF.
zu prüfende selektieren
IF BCHECK CN NO_ENTRY.
X_BOSTA-SIGN = 'I'.
X_BOSTA-OPTION = 'EQ'.
X_BOSTA-LOW = 'A'.
APPEND X_BOSTA.
ENDIF.
freigegebene selektieren
IF BREADY CN NO_ENTRY.
X_BOSTA-SIGN = 'I'.
X_BOSTA-OPTION = 'EQ'.
X_BOSTA-LOW = 'B'.
APPEND X_BOSTA.
ENDIF.
Gutschriftsanforderung erstellt
IF SETTLE = NO.
IF BCREDI CN NO_ENTRY.
X_BOSTA-SIGN = 'I'.
X_BOSTA-OPTION = 'EQ'.
X_BOSTA-LOW = 'C'.
APPEND X_BOSTA.
ENDIF.
endabgerechnet
IF BSETTLE CN NO_ENTRY.
X_BOSTA-SIGN = 'I'.
X_BOSTA-OPTION = 'EQ'.
X_BOSTA-LOW = 'D'.
APPEND X_BOSTA.
ENDIF.
ENDIF.
Kontrollauf ==> nur Status 'D' selektieren
IF CONTROL CN NO_ENTRY.
CLEAR X_BOSTA.
REFRESH X_BOSTA.
X_BOSTA-SIGN = 'I'.
X_BOSTA-OPTION = 'EQ'.
X_BOSTA-LOW = 'D'.
APPEND X_BOSTA.
SETTLE = YES. "Absprache nochmals abrechnen
ENDIF.
IF CONTTST CN NO_ENTRY.
CLEAR X_BOSTA.
REFRESH X_BOSTA.
X_BOSTA-SIGN = 'I'.
X_BOSTA-OPTION = 'EQ'.
X_BOSTA-LOW = 'D'.
APPEND X_BOSTA.
SETTLE = NO. "Nur Umsatzanzeige
CONTROL = YES.
ENDIF.
Größe der Selektionstabellen
DESCRIBE TABLE KNUMA LINES KNUMA_LINES.
DESCRIBE TABLE BONEM LINES BONEM_LINES.
Überschrift
IF FMEMORY IS INITIAL.
OUT_132 = TEXT-001.
WRITE ABRDATE DD/MM/YYYY TO OUT_10.
REPLACE '&1' WITH OUT_10 INTO OUT_132.
WRITE SY-DATLO DD/MM/YYYY TO OUT_10.
REPLACE '&2' WITH OUT_10 INTO OUT_132.
ENDIF.
Ermitteln der Texte zum Bonusstatus
DO 4 TIMES VARYING HELP_CHAR FROM ABCD(1) NEXT ABCD+1(1) RANGE ABCD.
DD07V-DOMNAME = 'BOSTA'.
DD07V-DOMVALUE_L = HELP_CHAR.
CALL FUNCTION 'RV_DOMAIN_VALUE_TEXTS'
EXPORTING
DOMNAME = DD07V-DOMNAME
DOMVALUE = DD07V-DOMVALUE_L
IMPORTING
DDTEXT = BO-TEXT.
BO-BOSTA = HELP_CHAR.
APPEND BO.
ENDDO.
SORT BO BY BOSTA.
ENDFORM. "PREPARE_SELECTION
*----
*
FORM SET_STATUS *
*----
*
Setzen des Bonusstatus *
*----
*
--> SS_KNUMA : Bonusabsprache *
--> SS_BOSTA : Zu setzender Status *
*----
*
FORM SET_STATUS USING SS_KNUMA SS_BOSTA.
Bonusabsprache übergeben ?
IF SS_KNUMA IS INITIAL.
MESSAGE I310.
EXIT.
ENDIF.
Bonusabsprache lesen
KONA_KEY-MANDT = SY-MANDT.
KONA_KEY-KNUMA = SS_KNUMA.
READ TABLE XKONA WITH KEY KONA_KEY BINARY SEARCH.
KONA = XKONA.
READ_TABIX = SY-TABIX.
BADI for Maintenance Check
DATA: BADI_INSTANCE TYPE REF TO if_ex_agr_maintenance_chck.
DATA: BADI_ACTIVE TYPE XFELD.
CALL FUNCTION 'AGR_MNT_BADI_INSTANCE_GET'
IMPORTING
E_BADI_INSTANCE = BADI_INSTANCE
E_BADI_ACTIVE = BADI_ACTIVE.
IF NOT BADI_ACTIVE IS INITIAL.
Check whether changing this agreement is allowed
CALL METHOD BADI_INSTANCE->AGR_MNT_CHANGE_CHECK
EXPORTING
I_KNUMA = KONA-KNUMA
I_DISPLAY_MESSAGE = 'X'
I_MESSAGE_TYPE = 'I'
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
ENDIF.
Freigabe prüfen: Status ist offen ?
IF SS_BOSTA = 'A' AND
KONA-BOSTA <> ' ' .
MESSAGE I311 WITH KONA-KNUMA KONA-BOSTA.
Freigabe Status ist offen oder Freigabe prüfen ?
ELSEIF SS_BOSTA = 'B' AND
KONA-BOSTA NA ' A'.
MESSAGE I312 WITH KONA-KNUMA KONA-BOSTA.
ELSE.
Sperren Bonus
CHECK KONA-BOSTA NE 'D'. "nur, wenn noch nicht gesperrt
PERFORM SPERREN_KONA USING SS_KNUMA NO READ_SUBRC.
IF READ_SUBRC <> 0.
MESSAGE I162 WITH SS_KNUMA.
EXIT.
ENDIF.
Setzen des Status
XKONA-BOSTA = SS_BOSTA.
CALL FUNCTION 'SD_BONUS_STATUS_SET' IN UPDATE TASK
EXPORTING
BONUS_AGREEMENT = KONA
NEW_STATUS = SS_BOSTA
TABLES
KONP_DB = XKONP.
COMMIT WORK.
Status in interne Tabelle zurückschreiben
MODIFY XKONA INDEX READ_TABIX.
MESSAGE I313 WITH KONA-KNUMA SS_BOSTA.
ENDIF.
ENDFORM. "SET_STATUS
*----
*
FORM XVAKE_AUFBEREITEN *
*----
*
Aufbereitung des varaiablen Schlüssels für die Anzeige *
*----
*
FORM XVAKE_AUFBEREITEN.
DATA:
OLD_COMP(101), NEW_COMP(101), XXX_KEY(101),
KEY_130(130),
POSI(2) TYPE P,
LENGTH_LINE(2) TYPE P,
LENGTH_SPACE(2) TYPE P,
CURRENT_OFFSET(3) TYPE P,
LENGTH_FIELD(3) TYPE P.
Tabelle T681 für DB-Konditionstabell ermitteln
IF T681-KVEWE <> BONUS_KVEWE OR
T681-KOTABNR <> XVAKE-KOTABNR.
SELECT SINGLE * FROM T681 WHERE KVEWE = BONUS_KVEWE
AND KOTABNR = XVAKE-KOTABNR.
Setzen des Programms für den Aufbau
PERFORM SET_ACCESS_PROGRAM(SAPMV130)
USING BONUS_KVEWE XVAKE-KOTABNR ACCESS_PROGRAM.
ENDIF.
KOMG aus dem ersten Eintrag füllen
PERFORM FILL_KOMG_FROM_VAKEY IN PROGRAM (ACCESS_PROGRAM)
USING KOMG XVAKE-VAKEY.
Aufbereiten des Variablen Schlüssels
CALL FUNCTION 'KOMG_TO_2LINES_OFFSET'
EXPORTING
COMM_FIELDS = KOMG
CONDITION_STRUCTURE = T681-KOTAB
IMPORTING
FIELDS_STRING = RV13A-VAKEY2
TEXT_STRING = RV13A-VAKEY1
TABLES
OFFSET_TAB = OFFSET_TAB
EXCEPTIONS
OTHERS = 1.
Nächste Position ermitteln
LOOP AT OFFSET_TAB.
OFFSET = OFFSET_TAB-CURRENT.
LENGTH_LINE = LENGTH_LINE + 1.
ENDLOOP.
ADD OFFSET TO LENGTH_LINE.
Ermitteln der Zeilenlänge
LENGTH_LINE = LENGTH_LINE + 66.
LENGTH_SPACE = SY-LINSZ - LENGTH_LINE.
IF LENGTH_SPACE GT 0.
ASSIGN X_SPACE(LENGTH_SPACE) TO .
ENDIF.
Ausgabe des Datums
ADD 46 TO OFFSET.
Ausgabe des variablen Schlüssels
IF OLD_KOTABNR <> XVAKE-KOTABNR OR
XVAKE-KSCHL <> OLD_KSCHL.
X_INTENSIFIED = YES.
Anzeige der Keyfelder
LOOP AT OFFSET_TAB.
LENGTH_FIELD = OFFSET_TAB-CURRENT - CURRENT_OFFSET.
IF SY-TABIX <> 1.
ASSIGN RV13A-VAKEY1+CURRENT_OFFSET(LENGTH_FIELD) TO <OUTPUT>.
MOVE <OUTPUT> TO REPORT_TAB-VAKEY1+POSI.
POSI = POSI + LENGTH_FIELD + 1.
ENDIF.
CURRENT_OFFSET = OFFSET_TAB-CURRENT.
OFFSET = OFFSET_TAB-CURRENT.
ENDLOOP.
ASSIGN RV13A-VAKEY1+OFFSET(18) TO <OUTPUT>.
MOVE RV13A-VAKEY1 TO REPORT_TAB-VAKEY1.
POSI = POSI + 19.
CLEAR OLD_KEY.
ENDIF.
MOVE: XVAKE-KSCHL TO REPORT_TAB-KSCHL,
T685T-VTEXT TO REPORT_TAB-KOND_TEXT,
XVAKE-KNUMA TO REPORT_TAB-KNUMA,
XVAKE-DATAB TO REPORT_TAB-DATAB,
XVAKE-DATBI TO REPORT_TAB-DATBI,
SPACE TO REPORT_TAB-DUMMY_TXT.
IF AUTO_EXTEND = YES. "Verlängerung der Absprache
MOVE: OLD_KONA_KNUMA TO REPORT_TAB-KNUMA. "alte Absprachenummer
ENDIF.
Aufbereitung KEY
LOOP AT OFFSET_TAB.
LENGTH_FIELD = OFFSET_TAB-CURRENT - CURRENT_OFFSET.
IF SY-TABIX <> 1.
ASSIGN RV13A-VAKEY2+CURRENT_OFFSET(LENGTH_FIELD) TO <OUTPUT>.
MOVE <OUTPUT> TO REPORT_TAB-VAKEY2+POSI.
POSI = POSI + LENGTH_FIELD + 1.
ENDIF.
CURRENT_OFFSET = OFFSET_TAB-CURRENT.
OFFSET = OFFSET_TAB-CURRENT.
ENDLOOP.
WRITE: RV13A-VAKEY1 TO REPORT_TAB-VAKEY1,
RV13A-VAKEY2 TO REPORT_TAB-VAKEY2.
move RV13A-VAKEY2 to report_tab-vakey2.
Alten Key sichern
NEW_KEY = XVAKE-KSCHL.
NEW_KEY+5(20) = T685T-VTEXT.
NEW_KEY+26(75) = RV13A-VAKEY2.
XXX_KEY = OLD_KEY.
OLD_KEY = NEW_KEY.
gleiche Key-Felder ausblenden
LOOP AT OFFSET_TAB.
CLEAR: OLD_COMP, NEW_COMP.
ADD 25 TO OFFSET_TAB-CURRENT.
WRITE XXX_KEY TO OLD_COMP(OFFSET_TAB-CURRENT).
WRITE NEW_KEY TO NEW_COMP(OFFSET_TAB-CURRENT).
Gleichheit in den Feldern
IF OLD_COMP = NEW_COMP.
WRITE SPACE TO NEW_KEY(OFFSET_TAB-CURRENT).
WRITE SPACE TO XXX_KEY(OFFSET_TAB-CURRENT).
ELSE.
EXIT.
ENDIF.
ENDLOOP.
Ausgabe der Keyfelder
KEY_130 = NEW_KEY.
ENDFORM. "XVAKE_AUFBEREITEN
*----
*
FORM alv_fieldcat_build *
*----
*
........ *
*----
*
FORM ALV_FIELDCAT_BUILD.
IF LISTONLY EQ YES AND
AUTO_EXTEND NE YES.
PERFORM ALV_FIELDCAT_LIST.
ELSEIF AUTO_EXTEND EQ YES.
PERFORM ALV_FIELDCAT_EXTEND.
ELSEIF CHANGE_CURR EQ YES.
PERFORM ALV_FIELDCAT_ABSPRACH.
ELSE.
PERFORM ALV_FIELDCAT_UMSATZ.
ENDIF.
ENDFORM. "ALV_FIELDCAT_BUILD
*----
*
FORM alv_fieldcat_umsatz *
*----
*
........ *
*----
*
FORM ALV_FIELDCAT_UMSATZ.
DATA: BO_ALV_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
Feldkatalog Listkopf
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = B_REPID
I_INTERNAL_TABNAME = 'BO_ALV_HEADER'
I_INCLNAME = 'RV15CI03'
CHANGING
CT_FIELDCAT = BO_FIELDCAT.
LOOP AT BO_FIELDCAT INTO BO_ALV_FIELDCAT.
CHECK BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
CASE BO_ALV_FIELDCAT-FIELDNAME.
WHEN 'CHECKBOX'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-HOTSPOT = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA_TXT'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 2.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'BONEM'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 3.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'NAME1'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 4.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H01.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATAB'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 5.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATBI'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 6.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KSCHL'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_TEXT'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 2.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_DATAB'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 3.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_DATBI'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 4.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY1'.
BO_ALV_FIELDCAT-ROW_POS = 3.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H02.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'BONEM_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'NAME1_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA_TXT_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATAB_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATBI_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
ENDCASE.
ENDLOOP.
Feldkatalog
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = 'RV15CI03'
I_INTERNAL_TABNAME = 'REPORT_TAB'
I_INCLNAME = 'RV15CI03'
CHANGING
CT_FIELDCAT = BO_FIELDCAT.
LOOP AT BO_FIELDCAT INTO BO_ALV_FIELDCAT.
CHECK BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
CASE BO_ALV_FIELDCAT-FIELDNAME.
WHEN 'KAPPL'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'MATNR'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATAB'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATBI'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KWAEH_AUF'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONWS_AUF'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KBETR_AUF'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONBAS'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONSTA'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DECIMALS'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'WAERS'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KPEIN'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KMEIN'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KMEIN_TEXT'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY1'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KSCHL'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_TEXT'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY2'.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H02.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'AUWRT'.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-DO_SUM = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'WAERS_AU'.
BO_ALV_FIELDCAT-COL_POS = 2.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KBETR'.
BO_ALV_FIELDCAT-COL_POS = 3.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONWA'.
BO_ALV_FIELDCAT-COL_POS = 4.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KAWRT'.
BO_ALV_FIELDCAT-COL_POS = 5.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KWAEH'.
BO_ALV_FIELDCAT-COL_POS = 6.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KSTBS'.
BO_ALV_FIELDCAT-COL_POS = 7.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONWS'.
BO_ALV_FIELDCAT-COL_POS = 8.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'RUWRT'.
BO_ALV_FIELDCAT-COL_POS = 9.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-DO_SUM = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'RR_WAERS'.
BO_ALV_FIELDCAT-COL_POS = 10.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DUMMY_TXT'.
bo_alv_fieldcat-col_pos = 11.
bo_alv_fieldcat-row_pos = 2.
bo_alv_fieldcat-key = ' '.
bo_alv_fieldcat-tabname = b_tabname_item.
MODIFY bo_fieldcat FROM bo_alv_fieldcat.
ENDCASE.
ENDLOOP.
ENDFORM. "ALV_FIELDCAT_UMSATZ
*----
*
FORM ALV_FIELDCAT_LIST *
*----
*
........ *
*----
*
FORM ALV_FIELDCAT_LIST.
DATA: BO_ALV_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
Feldkatalog Listkopf
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = B_REPID
I_INTERNAL_TABNAME = 'BO_ALV_HEADER'
I_INCLNAME = 'RV15CI03'
CHANGING
CT_FIELDCAT = BO_FIELDCAT.
LOOP AT BO_FIELDCAT INTO BO_ALV_FIELDCAT.
CHECK BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
CASE BO_ALV_FIELDCAT-FIELDNAME.
WHEN 'CHECKBOX'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-KEY = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA_TXT'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 2.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'BONEM'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 3.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'NAME1'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 4.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H01.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATAB'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 5.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATBI'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 6.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'BOSTA'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 7.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KSCHL'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_TEXT'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 2.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_DATAB'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 3.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_DATBI'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 4.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY1'.
BO_ALV_FIELDCAT-ROW_POS = 3.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H02.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'BONEM_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'NAME1_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA_TXT_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATAB_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATBI_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
ENDCASE.
ENDLOOP.
Feldkatalog
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = 'RV15CI03'
I_INTERNAL_TABNAME = 'REPORT_TAB'
I_INCLNAME = 'RV15CI03'
CHANGING
CT_FIELDCAT = BO_FIELDCAT.
LOOP AT BO_FIELDCAT INTO BO_ALV_FIELDCAT.
CHECK BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
CASE BO_ALV_FIELDCAT-FIELDNAME.
WHEN 'KAPPL'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'AUWRT'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-DO_SUM = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'WAERS_AU'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KBETR'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONWA'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KAWRT'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KWAEH'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KSTBS'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONWS'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'RUWRT'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-DO_SUM = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'RR_WAERS'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KWAEH_AUF'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONWS_AUF'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KBETR_AUF'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONBAS'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONSTA'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DECIMALS'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'WAERS'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KPEIN'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KMEIN'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KMEIN_TEXT'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'MATNR'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KSCHL'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_TEXT'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATAB'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATBI'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY1'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY2'.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H02.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DUMMY_TXT'.
bo_alv_fieldcat-col_pos = 2.
bo_alv_fieldcat-row_pos = 1.
bo_alv_fieldcat-key = ' '.
bo_alv_fieldcat-tabname = b_tabname_item.
MODIFY bo_fieldcat FROM bo_alv_fieldcat.
ENDCASE.
ENDLOOP.
ENDFORM. "ALV_FIELDCAT_LIST
*----
*
FORM ALV_FIELDCAT_Absprach *
*----
*
........ *
*----
*
FORM ALV_FIELDCAT_ABSPRACH.
DATA: BO_ALV_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
Feldkatalog Listkopf
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = B_REPID
I_INTERNAL_TABNAME = 'BO_ALV_HEADER'
I_INCLNAME = 'RV15CI03'
CHANGING
CT_FIELDCAT = BO_FIELDCAT.
LOOP AT BO_FIELDCAT INTO BO_ALV_FIELDCAT.
CHECK BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
CASE BO_ALV_FIELDCAT-FIELDNAME.
WHEN 'CHECKBOX'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-KEY = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA_TXT'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 2.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'BONEM'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 3.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'NAME1'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 4.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H01.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATAB'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 5.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATBI'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 6.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KSCHL'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_TEXT'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 2.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_DATAB'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 3.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_DATBI'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 4.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY1'.
BO_ALV_FIELDCAT-ROW_POS = 3.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H02.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'BONEM_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'NAME1_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA_TXT_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATAB_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATBI_NEW'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
ENDCASE.
ENDLOOP.
Feldkatalog
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = 'RV15CI03'
I_INTERNAL_TABNAME = 'REPORT_TAB'
I_INCLNAME = 'RV15CI03'
CHANGING
CT_FIELDCAT = BO_FIELDCAT.
LOOP AT BO_FIELDCAT INTO BO_ALV_FIELDCAT.
CHECK BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
CASE BO_ALV_FIELDCAT-FIELDNAME.
WHEN 'KAPPL'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'MATNR'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATAB'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATBI'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KWAEH_AUF'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONWS_AUF'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KBETR_AUF'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONBAS'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONSTA'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DECIMALS'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'WAERS'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KPEIN'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KMEIN'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KMEIN_TEXT'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY1'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KSCHL'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_TEXT'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY2'.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H02.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'AUWRT'.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-DO_SUM = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'WAERS_AU'.
BO_ALV_FIELDCAT-COL_POS = 2.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KBETR'.
BO_ALV_FIELDCAT-COL_POS = 3.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONWA'.
BO_ALV_FIELDCAT-COL_POS = 4.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KAWRT'.
BO_ALV_FIELDCAT-COL_POS = 5.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KWAEH'.
BO_ALV_FIELDCAT-COL_POS = 6.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KSTBS'.
BO_ALV_FIELDCAT-COL_POS = 7.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONWS'.
BO_ALV_FIELDCAT-COL_POS = 8.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'RUWRT'.
BO_ALV_FIELDCAT-COL_POS = 9.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-DO_SUM = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'RR_WAERS'.
BO_ALV_FIELDCAT-COL_POS = 10.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DUMMY_TXT'.
bo_alv_fieldcat-col_pos = 11.
bo_alv_fieldcat-row_pos = 2.
bo_alv_fieldcat-key = ' '.
bo_alv_fieldcat-tabname = b_tabname_item.
MODIFY bo_fieldcat FROM bo_alv_fieldcat.
ENDCASE.
ENDLOOP.
ENDFORM. "ALV_FIELDCAT_ABSPRACH
*----
*
FORM ALV_FIELDCAT_EXTEND *
*----
*
........ *
*----
*
FORM ALV_FIELDCAT_EXTEND.
DATA: BO_ALV_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
Feldkatalog Listkopf
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = B_REPID
I_INTERNAL_TABNAME = 'BO_ALV_HEADER'
I_INCLNAME = 'RV15CI03'
CHANGING
CT_FIELDCAT = BO_FIELDCAT.
LOOP AT BO_FIELDCAT INTO BO_ALV_FIELDCAT.
CHECK BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
CASE BO_ALV_FIELDCAT-FIELDNAME.
WHEN 'CHECKBOX'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-KEY = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA_TXT'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 2.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'BONEM'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 3.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'NAME1'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 4.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H01.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATAB'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 5.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATBI'.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-COL_POS = 6.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA_NEW'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-KEY = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA_TXT_NEW'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 2.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'BONEM_NEW'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 3.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'NAME1_NEW'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 4.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H01.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATAB_NEW'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 5.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATBI_NEW'.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-COL_POS = 6.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KSCHL'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_TEXT'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_DATAB'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_DATBI'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY1'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_HEADER.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
ENDCASE.
ENDLOOP.
Feldkatalog
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = 'RV15CI03'
I_INTERNAL_TABNAME = 'REPORT_TAB'
I_INCLNAME = 'RV15CI03'
CHANGING
CT_FIELDCAT = BO_FIELDCAT.
LOOP AT BO_FIELDCAT INTO BO_ALV_FIELDCAT.
CHECK BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
CASE BO_ALV_FIELDCAT-FIELDNAME.
WHEN 'KAPPL'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KNUMA'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'AUWRT'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-DO_SUM = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'WAERS_AU'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KBETR'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONWA'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KAWRT'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KWAEH'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KSTBS'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONWS'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'RUWRT'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-DO_SUM = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'RR_WAERS'.
BO_ALV_FIELDCAT-NO_OUT = 'X'.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'MATNR'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-KEY = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KWAEH_AUF'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONWS_AUF'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KBETR_AUF'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONBAS'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KONSTA'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DECIMALS'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'WAERS'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KPEIN'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KMEIN'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KMEIN_TEXT'.
BO_ALV_FIELDCAT-TECH = 'X'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KSCHL'.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'KOND_TEXT'.
BO_ALV_FIELDCAT-COL_POS = 2.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATAB'.
BO_ALV_FIELDCAT-COL_POS = 4.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DATBI'.
BO_ALV_FIELDCAT-COL_POS = 5.
BO_ALV_FIELDCAT-ROW_POS = 1.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY1'.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-ROW_POS = 2.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H02.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'VAKEY2'.
BO_ALV_FIELDCAT-COL_POS = 1.
BO_ALV_FIELDCAT-ROW_POS = 3.
BO_ALV_FIELDCAT-KEY = ' '.
BO_ALV_FIELDCAT-SELTEXT_M = TEXT-H02.
BO_ALV_FIELDCAT-DDICTXT = 'M'.
BO_ALV_FIELDCAT-TABNAME = B_TABNAME_ITEM.
MODIFY BO_FIELDCAT FROM BO_ALV_FIELDCAT.
WHEN 'DUMMY_TXT'.
bo_alv_fieldcat-col_pos = 6.
bo_alv_fieldcat-row_pos = 2.
bo_alv_fieldcat-key = ' '.
bo_alv_fieldcat-tabname = b_tabname_item.
MODIFY bo_fieldcat FROM bo_alv_fieldcat.
ENDCASE.
ENDLOOP.
ENDFORM. "ALV_FIELDCAT_EXTEND
*----
*
FORM alv_event_build *
*----
*
........ *
*----
*
FORM ALV_EVENT_BUILD.
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
LS_EVENT-NAME = SLIS_EV_TOP_OF_PAGE.
LS_EVENT-FORM = 'TOP_OF_PAGE'.
APPEND LS_EVENT TO BO_EVENTS.
ENDFORM. "ALV_EVENT_BUILD
*----
*
FORM alv_layout_build *
*----
*
........ *
*----
*
FORM ALV_LAYOUT_BUILD.
BO_LAYOUT-NO_TOTALLINE = 'X'.
BO_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
BO_LAYOUT-KEY_HOTSPOT = 'X'.
BO_LAYOUT-NO_SUMCHOICE = 'X'.
BO_LAYOUT-GROUP_CHANGE_EDIT = 'X'.
BO_LAYOUT-F2CODE = 'BELE'.
BO_LAYOUT-BOX_FIELDNAME = 'CHECKBOX'.
BO_LAYOUT-BOX_TABNAME = B_TABNAME_HEADER.
BO_LAYOUT-NO_INPUT = ' '.
ENDFORM. "ALV_LAYOUT_BUILD
*----
*
FORM alv_sort_build *
*----
*
........ *
*----
*
FORM ALV_SORT_BUILD.
DATA: LS_SORT TYPE SLIS_SORTINFO_ALV.
MOVE: 1 TO LS_SORT-SPOS,
'KNUMA' TO LS_SORT-FIELDNAME,
'BO_ALV_HEADER' TO LS_SORT-TABNAME,
'X' TO LS_SORT-SUBTOT,
'*' TO LS_SORT-GROUP.
APPEND LS_SORT TO IT_SORT_001.
ENDFORM. "ALV_SORT_BUILD
*----
*
FORM BUILD_HEADER_INFO *
*----
*
........ *
*----
*
FORM BUILD_HEADER_INFO.
Überschrift Einzelnachweis
PERFORM DISPLAY_AGREEMENT.
IF TOPPAGE = 'B'.
INCLUDE LV15BLI1.
ENDIF.
ENDFORM. "BUILD_HEADER_INFO
*----
*
FORM top_of_page *
*----
*
........ *
*----
*
FORM TOP_OF_PAGE.
DATA: TAB_LINES LIKE SY-TABIX,
ICON(80).
DESCRIBE TABLE ERROR_TAB LINES TAB_LINES.
IF TAB_LINES > 0.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
NAME = 'ICON_WARNING'
IMPORTING
RESULT = ICON.
CLEAR LS_LINE.
REFRESH GT_LIST_TOP_OF_PAGE.
LS_LINE-TYP = 'H'.
LS_LINE-INFO(3) = ICON.
LS_LINE-INFO+3(1) = '@'.
LS_LINE-INFO+4 = TEXT-016.
APPEND LS_LINE TO GT_LIST_TOP_OF_PAGE.
Ausgabe der Überschrift
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.
ENDIF.
ENDFORM. "TOP_OF_PAGE
*----
*
FORM prot_umsatz *
*----
*
........ *
*----
*
FORM PROT_UMSATZ USING RT_EXTAB TYPE SLIS_T_EXTAB.
DATA: LT_EXTAB TYPE SLIS_T_EXTAB.
DATA: BEGIN OF EXCTAB OCCURS 1,
OKCOD(4) TYPE C,
END OF EXCTAB.
REFRESH EXCTAB.
EXCTAB-OKCOD = '&XXL'.
APPEND EXCTAB.
EXCTAB-OKCOD = '&ABC'.
APPEND EXCTAB.
EXCTAB-OKCOD = '%PC'.
APPEND EXCTAB.
EXCTAB-OKCOD = '&XXL'.
APPEND EXCTAB.
EXCTAB-OKCOD = '&AQW'.
APPEND EXCTAB.
EXCTAB-OKCOD = '&NFO'.
APPEND EXCTAB.
EXCTAB-OKCOD = '&NTE'.
APPEND EXCTAB.
EXCTAB-OKCOD = '%SL'.
APPEND EXCTAB.
EXCTAB-OKCOD = '&EB3'.
APPEND EXCTAB.
IF FMEMORY = YES AND
B_REPID = 'RV15C001'.
EXCTAB-OKCOD = 'BANZ'.
APPEND EXCTAB.
ENDIF.
APPEND LINES OF EXCTAB TO LT_EXTAB.
SET PF-STATUS 'PROT_UMSATZ' EXCLUDING LT_EXTAB.
ENDFORM. "PROT_UMSATZ
*----
*
FORM USER_COMMAND *
*----
*
........ *
*----
*
--> R_UCOMM *
--> RS_SELFIELD *
*----
*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: TAB_COUNTER LIKE SY-TABIX.
DATA: TMP_KNUMA LIKE BO_ALV_HEADER-KNUMA.
DATA: ERROR_FLAG(1).
IF R_UCOMM NE 'PROT' AND "nicht bei Hinweis-Anzeige
R_UCOMM NE 'STAA' AND
R_UCOMM NE 'STAB'.
TAB_COUNTER = 0.
LOOP AT BO_ALV_HEADER WHERE CHECKBOX = YES.
ADD 1 TO TAB_COUNTER.
IF TAB_COUNTER GE 2.
EXIT.
ENDIF.
ENDLOOP.
IF TAB_COUNTER > 1.
LOOP AT BO_ALV_HEADER WHERE CHECKBOX = YES.
IF TMP_KNUMA IS INITIAL.
TMP_KNUMA = BO_ALV_HEADER-KNUMA.
ELSE.
IF TMP_KNUMA NE BO_ALV_HEADER-KNUMA.
ERROR_FLAG = YES.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
IF ERROR_FLAG EQ YES.
MESSAGE I384.
EXIT.
ENDIF.
ELSEIF TAB_COUNTER = 0.
LOOP AT BO_ALV_HEADER.
IF SY-TABIX = 1.
TMP_KNUMA = BO_ALV_HEADER-KNUMA.
ELSE.
IF TMP_KNUMA NE BO_ALV_HEADER-KNUMA.
ERROR_FLAG = YES.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
IF ERROR_FLAG EQ YES.
MESSAGE I383.
EXIT.
ENDIF.
ENDIF.
ENDIF.
CASE R_UCOMM.
Absprache anzeigen
WHEN 'BANZ'.
PERFORM ABSPRACHE_ANZEIGEN USING BO_ALV_HEADER-KNUMA.
Absprache ändern
WHEN 'BAEN'.
PERFORM ABSPRACHE_AENDERN USING BO_ALV_HEADER-KNUMA.
Bonusempfänger anzeigen ?
WHEN 'BONE'.
PERFORM BONEM_ANZEIGEN USING BO_ALV_HEADER-BONEM
BO_ALV_HEADER-KNUMA.
Nachweis anzeigen
WHEN 'NAWN'.
PERFORM NACHWEIS USING NO BO_ALV_HEADER-KNUMA.
Einzelnachweis
WHEN 'NAWE'.
PERFORM NACHWEIS USING YES BO_ALV_HEADER-KNUMA.
Kennzeichen in Prüfung setzen
WHEN 'STAA'.
LOOP AT BO_ALV_HEADER WHERE CHECKBOX = YES.
PERFORM SET_STATUS USING BO_ALV_HEADER-KNUMA 'A'.
ENDLOOP.
Freigabe zur Abrechnung setzen
WHEN 'STAB'.
LOOP AT BO_ALV_HEADER WHERE CHECKBOX = YES.
PERFORM SET_STATUS USING BO_ALV_HEADER-KNUMA 'B'.
ENDLOOP.
Freigabe zur Abrechnung setzen
WHEN 'ANGU'.
PERFORM ABRECHNUNG_SETZEN USING RS_SELFIELD-VALUE.
Protokoll ausgeben
WHEN 'PROT'.
PERFORM UMSATZ_PROTOKOLL.
ENDCASE.
ENDFORM. "USER_COMMAND
*----
*
FORM ALV_PREPARE *
*----
*
Vorbereitung für ALV *
*----
*
FORM ALV_PREPARE.
Vorbereitung ALV
B_TABNAME_HEADER = 'BO_ALV_HEADER'.
B_TABNAME_ITEM = 'REPORT_TAB'.
IF LISTONLY = YES AND
AUTO_EXTEND NE YES.
B_REPID = 'RV15C002'.
ELSEIF AUTO_EXTEND = YES.
B_REPID = 'RV15C005'.
ELSEIF CHANGE_CURR = YES.
B_REPID = 'RV15C006'.
ELSE.
B_REPID = 'RV15C001'.
ENDIF.
DEFINE KEYINFO FOR ALV
CLEAR BO_KEYINFO.
BO_KEYINFO-HEADER01 = 'KNUMA'.
BO_KEYINFO-ITEM01 = 'KNUMA'.
BO_KEYINFO-HEADER02 = 'KSCHL'.
BO_KEYINFO-ITEM02 = 'KSCHL'.
PERFORM ALV_FIELDCAT_BUILD.
PERFORM ALV_EVENT_BUILD.
PERFORM ALV_LAYOUT_BUILD.
PERFORM ALV_PRINT_BUILD.
PERFORM ALV_SORT_BUILD.
PERFORM ALV_VARIANT_INIT.
ENDFORM. "ALV_PREPARE
*----
*
FORM ALV_CALL *
*----
*
Aufruf des List-Viewer *
*----
*
FORM ALV_CALL.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = B_REPID
I_CALLBACK_PF_STATUS_SET = 'PROT_UMSATZ'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = BO_LAYOUT
IT_FIELDCAT = BO_FIELDCAT[]
IT_EXCLUDING =
IT_SPECIAL_GROUPS = BO_SP_GROUP[]
IT_SORT = IT_SORT_001
IT_FILTER =
IS_SEL_HIDE =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
i_default = g_default
I_SAVE = B_SAVE
IS_VARIANT = B_VARIANT
IT_EVENTS = BO_EVENTS[]
IT_EVENT_EXIT =
I_TABNAME_HEADER = B_TABNAME_HEADER
I_TABNAME_ITEM = B_TABNAME_ITEM
IS_KEYINFO = BO_KEYINFO
IS_PRINT = BO_PRINT
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
TABLES
T_OUTTAB_HEADER = BO_ALV_HEADER
T_OUTTAB_ITEM = REPORT_TAB.
ENDFORM. "ALV_CALL
*----
*
FORM absprache_anzeigen *
*----
*
........ *
*----
*
FORM ABSPRACHE_ANZEIGEN USING AGREEMENT.
CALL FUNCTION 'SD_BONUS_AGREEMENT_CHDISP'
STARTING NEW TASK 'BONUS_UMSATZ'
EXPORTING
I_KNUMA = AGREEMENT
I_ACTION = 'DIS'.
ENDFORM. "ABSPRACHE_ANZEIGEN
*----
*
FORM absprache_aendern *
*----
*
........ *
*----
*
FORM ABSPRACHE_AENDERN USING AGREEMENT.
READ TABLE BO_ALV_HEADER WITH KEY CHECKBOX = 'X'.
CALL FUNCTION 'SD_BONUS_AGREEMENT_CHDISP'
STARTING NEW TASK 'BONUS_UMSATZ'
EXPORTING
I_KNUMA = AGREEMENT
I_ACTION = 'CHA'.
ENDFORM. "ABSPRACHE_AENDERN
*----
*
FORM bonem_anzeigen *
*----
*
........ *
*----
*
FORM BONEM_ANZEIGEN USING BONEM AGREEMENT.
Parameter setzen
PERFORM ORG_DATEN_SETZEN USING AGREEMENT.
CALL FUNCTION 'SD_BONUS_BONEM_DISPLAY'
STARTING NEW TASK 'BONUS_UMSATZ'
EXPORTING
I_BONEM = XKONA-BONEM
I_VKORG = XKONA-VKORG
I_VTWEG = XKONA-VTWEG
I_SPART = XKONA-SPART
I_ANKREUZ = KUND_ANKREUZ.
ENDFORM. "BONEM_ANZEIGEN
*----
*
FORM abrechnung_setzen *
*----
*
........ *
*----
*
--> document *
*----
*
FORM ABRECHNUNG_SETZEN USING DOCUMENT.
CALL FUNCTION 'SD_BONUS_SETTLEMENT_SET'
STARTING NEW TASK 'BONUS_UMSATZ'
EXPORTING
I_VBELN = DOCUMENT.
ENDFORM. "ABRECHNUNG_SETZEN
*----
*
FORM alv_variant_init *
*----
*
........ *
*----
*
FORM ALV_VARIANT_INIT.
Schalter Varianten benutzerspezifisch/allgemein speicherbar setzen
Set Options: save variants userspecific or general
B_SAVE = 'A'.
CLEAR B_VARIANT.
B_VARIANT-REPORT = B_REPID.
Get default variant
BO_VARIANT = B_VARIANT.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
I_SAVE = B_SAVE
CHANGING
CS_VARIANT = BO_VARIANT
EXCEPTIONS
NOT_FOUND = 2.
IF SY-SUBRC = 0.
P_VARI = BO_VARIANT-VARIANT.
ENDIF.
ENDFORM. "ALV_VARIANT_INIT
*----
*
FORM display_drill_down_list *
*----
*
........ *
*----
*
FORM DISPLAY_DRILL_DOWN_LIST.
CALL FUNCTION 'SD_BONUS_DRILL_DOWN_DISPLAY'
STARTING NEW TASK 'BONUS_UMSATZ'
EXPORTING
DD_KURGV = KURGV
DD_LIST = LIST_NUMBER
DD_KONA = XKONA
TABLES
ZVAKE_TAB = XVAKE
ZKONP_TAB = XKONP.
ENDFORM. "DISPLAY_DRILL_DOWN_LIST
*----
*
FORM umsatz_protokoll *
*----
*
........ *
*----
*
FORM UMSATZ_PROTOKOLL.
DATA: DA_TREE_TITLE LIKE SY-LISEL.
DA_TREE_TITLE = TEXT-018.
CALL FUNCTION 'VBFS_TREE_LIST_DISPLAY'
EXPORTING
I_TREE_TITLE = DA_TREE_TITLE
I_VBTYP = 'Y'
TABLES
I_VBFS = ERROR_TAB.
ENDFORM. "UMSATZ_PROTOKOLL
INCLUDE RV15CI04.
*&----
*
*& Form alv_print_build
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM ALV_PRINT_BUILD.
BO_PRINT-NO_PRINT_SELINFOS = YES.
BO_PRINT-NO_PRINT_LISTINFOS = YES.
BO_PRINT-NO_COVERPAGE = YES.
ENDFORM. " alv_print_build