REPORT ZRMVKON00
MESSAGE-ID M8
NO
STANDARD
PAGE HEADING
.
*ENHANCEMENT-POINT RMVKON00_G4 SPOTS ES_RMVKON00 STATIC.
*ENHANCEMENT-POINT RMVKON00_G5 SPOTS ES_RMVKON00.
*ENHANCEMENT-POINT RMVKON00_G6 SPOTS ES_RMVKON00 STATIC.
*ENHANCEMENT-POINT RMVKON00_G7 SPOTS ES_RMVKON00.
*---------------------------------------------------------------------*
* Historie
*---------------------------------------------------------------------*
* - zu Release 2.x: erste Version, nur Anzeige möglich
* - zu Release 3.0a: Abrechnen im Dialog möglich
* - zu Release 4.0a: Umstellung von BSEG auf RKWA, Anschluß an NaSt,
* Abrechnen im batch
* - zu Release 4.5a: Abrechnen mit nicht abzugsfähigen Steuern möglich
* - zu Release 4.6C: Liste mit ALV
* - Beleg wird direkt über RWIN gebucht AC_DOCUMENT_CREATE und _POST
*---------------------------------------------------------------------*
* tables *
*---------------------------------------------------------------------*
TABLES :
* benutzt für SELECT
RKWA ,
* benutzt bei externem Perform
BKPF ,
BSEG ,
BSET ,
ITXDAT ,
T001W .
TYPE-POOLS : MRM , SHLP .
INCLUDE : MRM_CONST_COMMON , "allgemeine Konstanten
MRM_CONST_NAST , " Nachrichten
MRM_CONST_MRM ,
MRM_CONST_ME , "aus dem Einkauf
MRM_CONST_MB , "aus der Bestandsführung
MRM_CONST_FI . "aus dem FI
*---------------------------------------------------------------------*
* Typen (TYP_*)
*---------------------------------------------------------------------*
* Meldung
TYPES : BEGIN OF TYP_MSG ,
MSGID LIKE SY -MSGID ,
MSGTY LIKE SY -MSGTY ,
MSGNO LIKE SY -MSGNO ,
MSGV1 LIKE SY -MSGV1 ,
MSGV2 LIKE SY -MSGV2 ,
MSGV3 LIKE SY -MSGV3 ,
MSGV4 LIKE SY -MSGV4 ,
END OF TYP_MSG .
* Block von Warenentnahmen (zu Buchungskreis/Lieferant)
TYPES : BEGIN OF TYP_BLOCK ,
BUKRS LIKE RKWA -BUKRS , "key
LIFNR LIKE RKWA -LIFNR , "key
BWAER LIKE RKWA -BWAER , "key
IT_RKWA LIKE RKWA OCCURS 1 , "Warenentnahmen
BSTAT TYPE C , "Status -> C_BSTAT_*
BELNR LIKE RKWA -BELNR , "Rechnungsbeleg
GJAHR LIKE RKWA -GJAHR , "Rechnungsbeleg
MSGID LIKE SY -MSGID ,
MSGTY LIKE SY -MSGTY ,
MSGNO LIKE SY -MSGNO ,
MSGV1 LIKE SY -MSGV1 ,
MSGV2 LIKE SY -MSGV2 ,
MSGV3 LIKE SY -MSGV3 ,
MSGV4 LIKE SY -MSGV4 ,
END OF TYP_BLOCK .
* zum Berechnen der Steuern
TYPES : BEGIN OF TYP_BSET ,
WRBTR LIKE BSEG -WRBTR , "CURR statt CHAR (Vorzeichen!)
FWSTE LIKE BSET -FWSTE , "CURR statt CHAR (Vorzeichen!)
MWSKZ LIKE RBSET -MWSKZ ,
TXJCD LIKE T001W -TXJCD ,
END OF TYP_BSET .
* Puffer für MWSKZ/TXJCD Abhängigkeit von Material, Lieferant und Werk
TYPES : BEGIN OF TYP_TAX ,
MATNR LIKE BSEG -MATNR , "key
WERKS LIKE T001W -WERKS , "key
LIFNR LIKE VF_KRED -LIFNR , "key
MWSKZ LIKE RBSET -MWSKZ ,
TXJCD LIKE T001W -TXJCD ,
END OF TYP_TAX .
* Tabellentypen (TYP_TAB_*)
TYPES : TYP_TAB_BKPF LIKE BKPF OCCURS 1 ,
TYP_TAB_BSEG LIKE BSEG OCCURS 1 ,
TYP_TAB_BSET LIKE BSET OCCURS 1 ,
TYP_TAB_RKWA LIKE RKWA OCCURS 1 ,
TYP_TAB_BLOCK TYPE TYP_BLOCK OCCURS 1 ,
TYP_TAB_TAX TYPE TYP_TAX OCCURS 1 ,
TYP_TAB_RBWS LIKE RBWS OCCURS 1 .
DATA : S_VARIANT LIKE DISVARIANT ,
S_VAR_USR LIKE DISVARIANT .
*---------------------------------------------------------------------*
* Konstanten (C_*) *
*---------------------------------------------------------------------*
CONSTANTS :
C_SAVE ( 1 ) TYPE C VALUE 'A' ,
C_REPID TYPE SY -REPID VALUE 'ZRMVKON00' ,
C_TOP_OF_LIST TYPE SLIS_FORMNAME VALUE 'TOP_OF_LIST' ,
C_DOKCLASS_NA TYPE DSYSH -DOKCLASS VALUE 'NA' ,
* Transaktionscodes
C_TCODE_MRKO LIKE SY -TCODE VALUE 'MRKO' ,
* RKWA-Status
C_STATUS_NINV LIKE RKWA -STATUS VALUE '00' , "nicht abgerechnet
C_STATUS_INV LIKE RKWA -STATUS VALUE '01' , "abgerechnet
* Block-Abrechnungs-Status
C_BSTAT_NULL TYPE C VALUE SPACE , "nicht verarbeitet
C_BSTAT_OK TYPE C VALUE '1' , "abgerechnet
C_BSTAT_FEHLER TYPE C VALUE '2' , "Fehler bei Abrechnung
* Sonstiges
C_STYPE_N LIKE BBKPF -STYPE VALUE 'N' . "batch-input: no
*---------------------------------------------------------------------*
* globale Felder (G_*, GT_*)
*---------------------------------------------------------------------*
* GT_BLOCK enthält alle Blöcke, GT_BLOCK selber ist sortiert nach
* Buchungskreis und Lieferant.
* Ein Block enthält alle Warenentnahmen zu einem Buch.kreis/Lieferanten.
* Die WE in einem Block sind sortiert nach Matbelegnr und -Position.
DATA : GT_BLOCK TYPE TYP_BLOCK OCCURS 1 .
*---------------------------------------------------------------------*
* globale Felder, lokal genutzt (L_*, LT_*)
*---------------------------------------------------------------------*
TYPES : BEGIN OF TY_CON_ALV .
INCLUDE STRUCTURE RKWA .
TYPES : BOX TYPE C ,
COLINFO TYPE SLIS_T_SPECIALCOL_ALV ,
MSGTY LIKE MESG -MSGTY ,
TEXT LIKE MESG - TEXT ,
ARBGB LIKE MESG -ARBGB ,
TXTNR LIKE MESG -TXTNR ,
MSGV1 LIKE MESG -MSGV1 ,
MSGV2 LIKE MESG -MSGV2 ,
MSGV3 LIKE MESG -MSGV3 ,
MSGV4 LIKE MESG -MSGV4 ,
END OF TY_CON_ALV .
* alle selektierten Warenentnahmen (temporär benutzt)
DATA : LT_RKWA LIKE RKWA OCCURS 1 ,
T_ALV_LIST TYPE TABLE OF TY_CON_ALV . " ALV-Ausgabeliste
*---------------------------------------------------------------------*
* Ranges
*---------------------------------------------------------------------*
RANGES : R_STATUS FOR RKWA -STATUS OCCURS 1 ,
R_SOBKZ FOR RKWA -SOBKZ OCCURS 1 .
*---------------------------------------------------------------------*
* Select-options & Parameter
*---------------------------------------------------------------------*
* Rahmen "Auswahl"
SELECTION-SCREEN BEGIN OF BLOCK AUSWAHL WITH FRAME
TITLE TEXT - 001 .
SELECT-OPTIONS :
SO_BUKRS FOR RKWA -BUKRS OBLIGATORY MEMORY ID BUK ,
SO_LIFNR FOR RKWA -LIFNR MATCHCODE OBJECT KRED ,
SO_WERKS FOR RKWA -WERKS ,
SO_MATNR FOR RKWA -MATNR MATCHCODE OBJECT MAT1 ,
SO_BLDAT FOR RKWA -BLDAT ,
SO_BUDAT FOR RKWA -BUDAT ,
SO_MBLNR FOR RKWA -MBLNR .
SELECTION-SCREEN SKIP .
PARAMETERS :
PA_XKONS LIKE RM08REP0 -KONS_XKONS DEFAULT 'X' ,
PA_XPIPE LIKE RM08REP0 -KONS_XPIPE DEFAULT 'X' .
SELECTION-SCREEN END OF BLOCK AUSWAHL .
* Rahmen "Verarbeitung"
* SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK VERARBEITUNG WITH FRAME
TITLE TEXT - 002 .
SELECTION-SCREEN BEGIN OF LINE .
PARAMETERS : PA_XANZ LIKE RM08REP0 -KONS_XANZ
RADIOBUTTON GROUP MOD DEFAULT 'X' USER-COMMAND KLICK .
SELECTION-SCREEN COMMENT 3 ( 20 ) TEXT - 005 FOR FIELD PA_XANZ .
SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN BEGIN OF LINE .
PARAMETERS : PA_XABR LIKE RM08REP0 -KONS_XABR
RADIOBUTTON GROUP MOD .
SELECTION-SCREEN COMMENT 3 ( 20 ) TEXT - 006 FOR FIELD PA_XABR .
SELECTION-SCREEN END OF LINE .
PARAMETERS :
P_BUDAT LIKE BKPF -BUDAT DEFAULT SY -DATLO OBLIGATORY ,
P_BLDAT LIKE BKPF -BLDAT DEFAULT SY -DATLO OBLIGATORY ,
P_XBLNR LIKE BKPF -XBLNR .
SELECTION-SCREEN END OF BLOCK VERARBEITUNG .
* Rahmen "Anzeigen"
* SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK ANZEIGEN WITH FRAME
TITLE TEXT - 003 .
PARAMETERS :
PA_XNINV LIKE RM08REP0 -KONS_XNINV DEFAULT 'X' MODIF ID K ,
PA_XINV LIKE RM08REP0 -KONS_XINV DEFAULT SPACE MODIF ID K .
SELECT-OPTIONS :
SO_BELNR FOR RKWA -BELNR MODIF ID K .
* Protokoll der Nachrichtenfindung
PARAMETERS :
* Anzeigevariante
PA_VARIA LIKE DISVARIANT -VARIANT MODIF ID K .
SELECTION-SCREEN END OF BLOCK ANZEIGEN .
*---------------------------------------------------------------------**
* Initialization.
*---------------------------------------------------------------------**
INITIALIZATION .
* Schalter Varianten benutzerspezifisch/allgemein speicherbar setzen
PERFORM VARIANT_INIT .
* Get default variant
S_VAR_USR = S_VARIANT .
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
I_SAVE = C_SAVE
CHANGING
CS_VARIANT = S_VAR_USR
EXCEPTIONS
NOT_FOUND = 2 .
IF SY -SUBRC = 0 .
PA_VARIA = S_VAR_USR -VARIANT .
ENDIF .
************************************************************************
* Ereignis AT SELECTION-SCREEN
***********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR PA_VARIA .
PERFORM F4_VARIA CHANGING PA_VARIA .
AT SELECTION-SCREEN .
* Selektion unsinnig?
IF ( ( PA_XKONS = SPACE ) AND
( PA_XPIPE = SPACE ) )
OR ( ( PA_XINV = SPACE ) AND
( NOT SO_BELNR IS INITIAL ) )
OR ( ( PA_XANZ = X ) AND
( PA_XINV IS INITIAL ) AND ( PA_XNINV IS INITIAL ) ) .
MESSAGE W736 .
ENDIF .
IF NOT PA_VARIA IS INITIAL .
MOVE S_VARIANT TO S_VAR_USR .
MOVE PA_VARIA TO S_VAR_USR -VARIANT .
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
I_SAVE = C_SAVE
CHANGING
CS_VARIANT = S_VAR_USR .
S_VARIANT = S_VAR_USR .
ELSE .
PERFORM VARIANT_INIT .
ENDIF .
***********************************************************************
* Reportablauf
***********************************************************************
START-OF-SELECTION .
* R_STATUS füllen
CLEAR R_STATUS[] .
IF ( PA_XNINV = X ) . "nicht abgerechnete
R_STATUS - SIGN = 'I' .
R_STATUS -OPTION = 'EQ' .
R_STATUS -LOW = C_STATUS_NINV .
R_STATUS -HIGH = SPACE .
APPEND R_STATUS .
ENDIF .
IF ( PA_XINV = X ) . "abgerechnete
R_STATUS - SIGN = 'I' .
R_STATUS -OPTION = 'EQ' .
R_STATUS -LOW = C_STATUS_INV .
R_STATUS -HIGH = SPACE .
APPEND R_STATUS .
ENDIF .
* R_SOBKZ füllen
CLEAR R_SOBKZ[] .
IF ( PA_XKONS = X ) .
R_SOBKZ - SIGN = 'I' .
R_SOBKZ -OPTION = 'EQ' .
R_SOBKZ -LOW = C_SOBKZ_KONS . "K
R_SOBKZ -HIGH = SPACE .
APPEND R_SOBKZ .
ENDIF .
IF ( PA_XPIPE = X ) .
R_SOBKZ - SIGN = 'I' .
R_SOBKZ -OPTION = 'EQ' .
R_SOBKZ -LOW = C_SOBKZ_PIPE . "P
R_SOBKZ -HIGH = SPACE .
APPEND R_SOBKZ .
ENDIF .
* SELECT von RKWA
CLEAR LT_RKWA .
IF ( PA_XANZ = X ) .
SELECT * FROM RKWA INTO TABLE LT_RKWA
WHERE BUKRS IN SO_BUKRS
AND LIFNR IN SO_LIFNR
AND WERKS IN SO_WERKS
AND MATNR IN SO_MATNR
AND BLDAT IN SO_BLDAT
AND BUDAT IN SO_BUDAT
AND MBLNR IN SO_MBLNR
AND SOBKZ IN R_SOBKZ
AND STATUS IN R_STATUS "Anzeigeoption
AND BELNR IN SO_BELNR . "Anzeigeoption
ELSE .
SELECT * FROM RKWA INTO TABLE LT_RKWA
WHERE BUKRS IN SO_BUKRS
AND LIFNR IN SO_LIFNR
AND WERKS IN SO_WERKS
AND MATNR IN SO_MATNR
AND BLDAT IN SO_BLDAT
AND BUDAT IN SO_BUDAT
AND MBLNR IN SO_MBLNR
AND SOBKZ IN R_SOBKZ
AND STATUS = C_STATUS_NINV . "nur nicht abgerechnete!
ENDIF .
PERFORM RKWA_PARTITIONIEREN TABLES LT_RKWA "--->
GT_BLOCK . "<---
CLEAR LT_RKWA .
***********************************************************************
* Ereignis END-OF-SELECTION
***********************************************************************
END-OF-SELECTION .
* keine Warenentnahme selektiert?
IF ( GT_BLOCK IS INITIAL ) .
MESSAGE S702 . "es wurden keine Belege selektiert
IF ( SY -BATCH = X ) .
LEAVE PROGRAM . "LEAVE TO TA ist nicht erlaubt
ELSE .
EXIT .
ENDIF .
ENDIF .
IF ( PA_XANZ = X ) .
PERFORM ALV_LIST_PREPARE TABLES GT_BLOCK T_ALV_LIST .
PERFORM ALV_LIST TABLES T_ALV_LIST .
ELSE . " pa_xabr = x
PERFORM ABRECHNEN TABLES GT_BLOCK .
PERFORM ALV_LIST_PREPARE TABLES GT_BLOCK T_ALV_LIST .
PERFORM ALV_LIST TABLES T_ALV_LIST .
ENDIF .
***********************************************************************
* allgemeine Form-Routinen
***********************************************************************
*---------------------------------------------------------------------*
* FORM ALV_LIST_PREPARE
*---------------------------------------------------------------------*
* Ausgabeliste für ALV aus der Tabelle GT_BLOCK bilden *
*---------------------------------------------------------------------*
FORM ALV_LIST_PREPARE TABLES PTI_BLOCK TYPE TYP_TAB_BLOCK
PTX_ALV_LIST LIKE T_ALV_LIST .
DATA : S_BLOCK TYPE TYP_BLOCK .
DATA : S_RKWA LIKE RKWA .
CLEAR : PTX_ALV_LIST , S_BLOCK , S_RKWA .
REFRESH : PTX_ALV_LIST .
LOOP AT PTI_BLOCK INTO S_BLOCK .
CLEAR : S_RKWA .
LOOP AT S_BLOCK -IT_RKWA INTO S_RKWA .
MOVE-CORRESPONDING : S_BLOCK TO PTX_ALV_LIST .
MOVE-CORRESPONDING : S_RKWA TO PTX_ALV_LIST .
PTX_ALV_LIST -ARBGB = S_BLOCK -MSGID .
PTX_ALV_LIST -TXTNR = S_BLOCK -MSGNO .
IF PA_XANZ = 'X' .
IF S_RKWA -STATUS = C_STATUS_INV .
PTX_ALV_LIST - TEXT = TEXT - 010 .
ELSEIF S_RKWA -STATUS = C_STATUS_NINV .
PTX_ALV_LIST - TEXT = TEXT - 012 .
ENDIF .
ENDIF .
APPEND : PTX_ALV_LIST .
CLEAR : S_RKWA .
ENDLOOP .
CLEAR : S_BLOCK .
ENDLOOP .
ENDFORM . "alv_list_prepare
*eject
*---------------------------------------------------------------------*
* FORM EVENTTAB_BUILD *
*---------------------------------------------------------------------*
* Dem ALV-Baustein bekannt geben, daß es zwei Routinen für die *
* Ausgabe der Listüberschriften: *
* TOP_OF_LIST Überschrift wird einmal am Anfang der Liste ausgegeben *
*---------------------------------------------------------------------*
FORM EVENTTAB_BUILD USING IT_EVENTS TYPE SLIS_T_EVENT .
DATA : L_EVENT TYPE SLIS_ALV_EVENT .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = IT_EVENTS .
READ TABLE IT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_LIST
INTO L_EVENT .
IF SY -SUBRC = 0 .
MOVE C_TOP_OF_LIST TO L_EVENT - FORM .
APPEND L_EVENT TO IT_EVENTS .
ENDIF .
ENDFORM . "eventtab_build
*eject
*---------------------------------------------------------------------*
* FORM MSG_FUELLEN_SYSVAR *
*---------------------------------------------------------------------*
* <--- S_MSG *
*---------------------------------------------------------------------*
FORM MSG_FUELLEN_SYSVAR CHANGING S_MSG TYPE TYP_MSG .
CLEAR S_MSG .
S_MSG -MSGID = SY -MSGID .
S_MSG -MSGTY = SY -MSGTY .
S_MSG -MSGNO = SY -MSGNO .
S_MSG -MSGV1 = SY -MSGV1 .
S_MSG -MSGV2 = SY -MSGV2 .
S_MSG -MSGV3 = SY -MSGV3 .
S_MSG -MSGV4 = SY -MSGV4 .
ENDFORM . "msg_fuellen_sysvar
*---------------------------------------------------------------------*
* Form RKWA_PARTITIONIEREN
*---------------------------------------------------------------------*
* Teilt die alle Warenentnahmen in IT_RKWA auf.
* Die Blöcke werden in IT_BLOCK abgelegt.
* ---> IT_RKWA
* <--- IT_BLOCK
*---------------------------------------------------------------------*
FORM RKWA_PARTITIONIEREN TABLES IT_RKWA TYPE TYP_TAB_RKWA
IT_BLOCK TYPE TYP_TAB_BLOCK .
DATA : S_BLOCK TYPE TYP_BLOCK ,
S_RKWA LIKE RKWA ,
IDX LIKE SY -TABIX ,
WRBTR LIKE RKWA -WRBTR ,
S_MSG TYPE TYP_MSG .
DATA : F_WAERS TYPE WAERS ,
F_OBJECT TYPE OBJECT_CURRO .
DATA : F_KURSF LIKE BKPF -KURSF .
F_OBJECT = 'BKPF' .
* baue IT_BLOCK auf (sortiert nach BUKRS/LIFNR)
CLEAR IT_BLOCK .
* Currency expired --> S_RKWA contains new currency (e.g. EUR) -------*
LOOP AT IT_RKWA INTO S_RKWA .
CALL FUNCTION 'CURRENCY_EXPIRATION_CHECK'
EXPORTING
CURRENCY = S_RKWA -BWAER
DATE = SY -DATLO
OBJECT = F_OBJECT
BUKRS = S_RKWA -BUKRS
IMPORTING
CURRENCY_NEW = F_WAERS
EXCEPTIONS
ERROR_MESSAGE = 4 .
IF SY -SUBRC = 0 .
F_WAERS = S_RKWA -BWAER .
ELSEIF F_WAERS IS INITIAL .
MESSAGE E607 WITH 'RKWA_PARTITIONIEREN' .
ENDIF .
IF S_RKWA -BWAER NE F_WAERS .
CLEAR : F_KURSF .
CALL FUNCTION 'READ_EXCHANGE_RATE'
EXPORTING
DATE = SY -DATLO
FOREIGN_CURRENCY = S_RKWA -BWAER
LOCAL_CURRENCY = F_WAERS
IMPORTING
EXCHANGE_RATE = F_KURSF
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF ( SY -SUBRC <> 0 ) .
MESSAGE ID SY -MSGID TYPE 'E'
NUMBER SY -MSGNO WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .
ENDIF .
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
FOREIGN_CURRENCY = S_RKWA -BWAER
LOCAL_CURRENCY = F_WAERS
FOREIGN_AMOUNT = S_RKWA -WRBTR
RATE = F_KURSF
DATE = SY -DATLO
IMPORTING
LOCAL_AMOUNT = S_RKWA -WRBTR
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF ( SY -SUBRC <> 0 ) .
MESSAGE ID SY -MSGID TYPE 'E'
NUMBER SY -MSGNO WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .
ENDIF .
IF NOT S_RKWA -NAVNW IS INITIAL .
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
FOREIGN_CURRENCY = S_RKWA -BWAER
LOCAL_CURRENCY = F_WAERS
FOREIGN_AMOUNT = S_RKWA -NAVNW
RATE = F_KURSF
DATE = SY -DATLO
IMPORTING
LOCAL_AMOUNT = S_RKWA -NAVNW
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF ( SY -SUBRC <> 0 ) .
MESSAGE ID SY -MSGID TYPE 'E'
NUMBER SY -MSGNO WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .
ENDIF .
ENDIF .
ENDIF .
S_RKWA -BWAER = F_WAERS .
READ TABLE IT_BLOCK INTO S_BLOCK
WITH KEY BUKRS = S_RKWA -BUKRS
LIFNR = S_RKWA -LIFNR
BWAER = S_RKWA -BWAER
BINARY SEARCH .
IDX = SY -TABIX .
IF ( SY -SUBRC <> 0 ) . "Block noch nicht vorhanden
CLEAR S_BLOCK .
S_BLOCK -BSTAT = C_BSTAT_NULL .
S_BLOCK -BUKRS = S_RKWA -BUKRS .
S_BLOCK -LIFNR = S_RKWA -LIFNR .
S_BLOCK -BWAER = S_RKWA -BWAER .
APPEND S_RKWA TO S_BLOCK -IT_RKWA .
INSERT S_BLOCK INTO IT_BLOCK INDEX IDX . "Tab. bleibt sortiert!
ELSE . "Block bereits vorhanden
APPEND S_RKWA TO S_BLOCK -IT_RKWA .
MODIFY IT_BLOCK FROM S_BLOCK INDEX IDX .
ENDIF .
ENDLOOP .
* rkwa_pruefen
LOOP AT IT_BLOCK INTO S_BLOCK .
CLEAR : S_RKWA .
LOOP AT S_BLOCK -IT_RKWA INTO S_RKWA .
IF ( S_RKWA -SOBKZ <> C_SOBKZ_KONS ) AND
( S_RKWA -SOBKZ <> C_SOBKZ_PIPE ) .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '008' .
S_MSG -MSGV1 = 'RKWA_PARTITIONIEREN' .
EXIT .
ENDIF .
ENDLOOP .
MOVE-CORRESPONDING S_MSG TO S_BLOCK .
MODIFY IT_BLOCK FROM S_BLOCK .
ENDLOOP .
* Partitionen sortieren
LOOP AT IT_BLOCK INTO S_BLOCK .
SORT S_BLOCK -IT_RKWA BY MJAHR MBLNR ZEILE .
MODIFY IT_BLOCK FROM S_BLOCK .
ENDLOOP .
ENDFORM . "rkwa_partitionieren
*eject
*---------------------------------------------------------------------*
* FORM LONG_MESSAGE_SHOW *
*---------------------------------------------------------------------*
* Langtext der Meldungen in der Ausgabeliste anzeigen *
*---------------------------------------------------------------------*
FORM LONG_TEXT_MESSAGE_SHOW USING I_ALV_LIST TYPE MRM_CON_ALV .
DATA : T_DUMMY LIKE TLINE OCCURS 1 ,
DOKNAME LIKE DOKIL -OBJECT , "CHAR60
TITLE LIKE DSYST -DOKTITLE ,
DYNNR LIKE HELP_INFO - DYNPRO ,
PFKEY LIKE HELP_INFO -PFKEY .
* System-Felder kopieren/konvertieren
TITLE = SY - TITLE .
DYNNR = SY -DYNNR .
PFKEY = SY -PFKEY .
* Dokumentname konstuieren
CALL FUNCTION 'DOCU_OBJECT_NAME_CONCATENATE'
EXPORTING
DOCU_ID = C_DOKCLASS_NA
ELEMENT = I_ALV_LIST -ARBGB
ADDITION = I_ALV_LIST -TXTNR
IMPORTING
OBJECT = DOKNAME .
* Aufruf Popup mit dem Langtext der Meldung
CALL FUNCTION 'HELP_OBJECT_SHOW'
EXPORTING
DOKCLASS = C_DOKCLASS_NA
DOKNAME = DOKNAME
DOKTITLE = TITLE
CALLED_BY_PROGRAM = C_REPID
CALLED_BY_DYNP = DYNNR
MSG_VAR_1 = I_ALV_LIST -MSGV1
MSG_VAR_2 = I_ALV_LIST -MSGV2
MSG_VAR_3 = I_ALV_LIST -MSGV3
MSG_VAR_4 = I_ALV_LIST -MSGV4
CALLED_BY_CUAPROG = C_REPID
CALLED_BY_CUASTAT = PFKEY
TABLES
LINKS = T_DUMMY .
ENDFORM . "long_text_message_show
*---------------------------------------------------------------------*
* FORM LONG_TEXT_MESSAGE_PREPARE *
*---------------------------------------------------------------------*
* ermittelt den Text zu einer von einem Funktionsbaustein zurückge- *
* lieferten Fehlermeldung *
*---------------------------------------------------------------------*
* Parameter: *
* <-> px_mesg: Struktur MESG; enthält die aufzubereitende Fehlermel- *
* dung; im Fehlerfall wird eine Default-Meldung abgelegt *
*---------------------------------------------------------------------*
FORM LONG_TEXT_MESSAGE_PREPARE CHANGING I_MESG STRUCTURE MESG .
DATA : H_MTEXT LIKE SY -LISEL ,
H_MSGNO LIKE SY -MSGNO .
MOVE I_MESG -TXTNR TO H_MSGNO .
CALL FUNCTION 'RPY_MESSAGE_COMPOSE'
EXPORTING
MESSAGE_ID = I_MESG -ARBGB
MESSAGE_NUMBER = H_MSGNO
MESSAGE_VAR1 = I_MESG -MSGV1
MESSAGE_VAR2 = I_MESG -MSGV2
MESSAGE_VAR3 = I_MESG -MSGV3
MESSAGE_VAR4 = I_MESG -MSGV4
IMPORTING
MESSAGE_TEXT = H_MTEXT
EXCEPTIONS
MESSAGE_NOT_FOUND = 1
OTHERS = 2 .
IF SY -SUBRC = 0 .
MOVE H_MTEXT ( 73 ) TO I_MESG - TEXT .
ELSE .
CALL FUNCTION 'RPY_MESSAGE_COMPOSE'
EXPORTING
MESSAGE_ID = SY -MSGID
MESSAGE_NUMBER = SY -MSGNO
MESSAGE_VAR1 = SY -MSGV1
MESSAGE_VAR2 = SY -MSGV2
MESSAGE_VAR3 = SY -MSGV3
MESSAGE_VAR4 = SY -MSGV4
IMPORTING
MESSAGE_TEXT = H_MTEXT
EXCEPTIONS
MESSAGE_NOT_FOUND = 1
OTHERS = 2 .
IF SY -SUBRC EQ 0 .
I_MESG - TEXT = H_MTEXT ( 73 ) .
ELSE .
* Ooops, no text!.
* message x062 with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ?
CLEAR I_MESG - TEXT .
ENDIF .
ENDIF .
ENDFORM . "LONG_TEXT_MESSAGE_PREPARE
***********************************************************************
* Form-Routinen zur Ausgabe
***********************************************************************
*---------------------------------------------------------------------*
* FORM ALV_LIST *
*---------------------------------------------------------------------*
* Protokoll in Form von ALV-Liste ausgeben *
*---------------------------------------------------------------------*
* Parameter: *
* <-> T_ALV_LIST *
*---------------------------------------------------------------------*
FORM ALV_LIST TABLES T_ALV_LIST LIKE T_ALV_LIST .
DATA : TAB_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV , " Feldkatalog
TAB_SORT TYPE SLIS_T_SORTINFO_ALV ,
S_LAYOUT TYPE SLIS_LAYOUT_ALV ,
TAB_EVENTS TYPE SLIS_T_EVENT ,
S_MESG LIKE MESG .
CONSTANTS :
C_PF_STATUS_SET TYPE SLIS_FORMNAME VALUE 'PF_STATUS_SET' ,
C_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND' .
S_LAYOUT -COLWIDTH_OPTIMIZE = 'X' .
S_LAYOUT -ZEBRA = 'X' .
S_LAYOUT -BOX_FIELDNAME = 'BOX' .
S_LAYOUT -GROUP_CHANGE_EDIT = 'X' .
S_LAYOUT -F2CODE = 'DISPLAY' .
PERFORM FIELD_CATALOG_BUILD TABLES TAB_FIELDCAT .
PERFORM EVENTTAB_BUILD USING TAB_EVENTS .
*-- Meldungstexte in Segtab-text aufbauen -----*
LOOP AT T_ALV_LIST WHERE TEXT IS INITIAL .
MOVE-CORRESPONDING T_ALV_LIST TO S_MESG .
PERFORM LONG_TEXT_MESSAGE_PREPARE CHANGING S_MESG .
T_ALV_LIST - TEXT = S_MESG - TEXT .
MODIFY T_ALV_LIST .
ENDLOOP .
*-- Bei Gutschrift Menge und Betrag mit Vorzeichen darstellen --*
LOOP AT T_ALV_LIST WHERE SHKZG = C_SHKZG_SOLL .
T_ALV_LIST -WRBTR = 0 - T_ALV_LIST -WRBTR .
T_ALV_LIST -BSTMG = 0 - T_ALV_LIST -BSTMG .
MODIFY T_ALV_LIST .
ENDLOOP .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BUFFER_ACTIVE = SPACE
I_CALLBACK_PROGRAM = C_REPID
I_CALLBACK_PF_STATUS_SET = C_PF_STATUS_SET
I_CALLBACK_USER_COMMAND = C_USER_COMMAND
I_STRUCTURE_NAME = 'T_ALV_LIST'
IT_FIELDCAT = TAB_FIELDCAT[]
IT_SORT = TAB_SORT[]
IS_LAYOUT = S_LAYOUT
I_SAVE = C_SAVE
IS_VARIANT = S_VARIANT
IT_EVENTS = TAB_EVENTS[]
TABLES
T_OUTTAB = T_ALV_LIST .
ENDFORM . "ALV_LIST
*eject
***********************************************************************
* Form-Routinen zum ABRECHNEN
***********************************************************************
*---------------------------------------------------------------------*
* Form ABRECHNEN
*---------------------------------------------------------------------*
* Rechnet alle selektierten Warenentnahmen ab.
* ---> IT_BLOCK
*---------------------------------------------------------------------*
FORM ABRECHNEN TABLES IT_BLOCK TYPE TYP_TAB_BLOCK .
DATA : S_BLOCK TYPE TYP_BLOCK ,
S_MSG TYPE TYP_MSG ,
BLART LIKE T169F -BLART ,
X_FEHLER TYPE C .
PERFORM BELEGART_BESTIMMEN CHANGING BLART
S_MSG
X_FEHLER .
IF X_FEHLER = X .
LOOP AT IT_BLOCK INTO S_BLOCK .
MOVE-CORRESPONDING S_MSG TO S_BLOCK .
MODIFY IT_BLOCK FROM S_BLOCK .
ENDLOOP .
EXIT .
ENDIF .
LOOP AT IT_BLOCK INTO S_BLOCK .
PERFORM BLOCK_ABRECHNEN TABLES S_BLOCK -IT_RKWA "--->
USING S_BLOCK -BUKRS "--->
S_BLOCK -BWAER "--->
CHANGING S_MSG
X_FEHLER "<---
BLART
S_BLOCK -LIFNR
S_BLOCK -BELNR "<---
S_BLOCK -GJAHR . "<---
* Block-Status setzen
IF ( X_FEHLER = X ) .
S_BLOCK -BSTAT = C_BSTAT_FEHLER .
CLEAR : S_BLOCK -BELNR , S_BLOCK -GJAHR .
MOVE-CORRESPONDING S_MSG TO S_BLOCK .
ROLLBACK WORK .
ELSE .
CLEAR S_MSG .
S_BLOCK -MSGID = C_MSGID_M8 .
S_BLOCK -MSGTY = C_MSGTY_SUCCESS .
S_BLOCK -MSGNO = '327' .
S_BLOCK -BSTAT = C_BSTAT_OK .
COMMIT WORK .
ENDIF .
MODIFY IT_BLOCK FROM S_BLOCK .
ENDLOOP .
ENDFORM . "abrechnen
*---------------------------------------------------------------------*
* FORM BELEGART_BESTIMMEN *
*---------------------------------------------------------------------*
* bestimmt Belegart des Rechnungsbeleges anhand der Transaktion *
*---------------------------------------------------------------------*
* <--- BLART Belegart
*---------------------------------------------------------------------*
FORM BELEGART_BESTIMMEN CHANGING BLART LIKE T169F -BLART
S_MSG TYPE TYP_MSG
X_FEHLER TYPE C .
DATA : S_T169F LIKE T169F .
* lese Belegart aus T169F
CALL FUNCTION 'MRM_DBTAB_T169F_READ'
EXPORTING
I_TCODE = C_TCODE_MRKO
IMPORTING
E_T169F = S_T169F
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF ( SY -SUBRC <> 0 ) .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
BLART = S_T169F -BLART .
ENDFORM . "belegart_bestimmen
*---------------------------------------------------------------------*
* Form BLOCK_ABRECHNEN
*---------------------------------------------------------------------*
* Bucht für einen 'Block' von Warenentnahmen genau eine
* Rechnung. Alle WEs befinden sich in IT_RKWA.
* Alle WEs sind demselben Buchungskreis/Kreditor BUKRS/LIFNR
* zugeordnet.
* Auf die RKWA wird ein DB-Update durchgeführt (-> MR01)
* ---> BUKRS, LIFNR, BWAER: Block
* BLART: Belegart
* <--> IT_RKWA: Warenentnahmen (es werden BELNR und BUZEI gefüllt)
* <--- IT_MSG: Meldungen
* BELNR, GJAHR: Rechnungsbeleg
*---------------------------------------------------------------------*
FORM BLOCK_ABRECHNEN TABLES IT_RKWA TYPE TYP_TAB_RKWA "<-->
USING BUKRS LIKE RKWA -BUKRS "--->
BWAER LIKE RKWA -BWAER "--->
CHANGING S_MSG TYPE TYP_MSG
X_FEHLER TYPE C
BLART LIKE T169F -BLART
LIFNR LIKE RKWA -LIFNR
BELNR LIKE RKWA -BELNR "<---
GJAHR LIKE RKWA -GJAHR . "<---
DATA : TAB_BKPF TYPE TYP_TAB_BKPF ,
TAB_BSEG TYPE TYP_TAB_BSEG ,
TAB_BSET TYPE TYP_TAB_BSET ,
IT_TAX TYPE TYP_TAB_TAX ,
TAB_RBWS TYPE TYP_TAB_RBWS ,
S_BKPF LIKE BKPF ,
S_BSEG LIKE BSEG ,
S_RKWA LIKE RKWA ,
S_TAX TYPE TYP_TAX ,
S_T001 LIKE T001 ,
GSBER LIKE BSEG -GSBER ,
SGTXT LIKE RBSEG -SGTXT ,
WRBTR_TMP LIKE BSEG -WRBTR , "temporär benutzter Betrag
X_UEBERNEHMEN TYPE C ,
F_MONAT LIKE BKPF -MONAT ,
S_T003 LIKE T003 ,
LIFNR_RKWA LIKE RKWA -LIFNR .
*----- Vorbereitungen -------------------------------------------------
PERFORM LOCK_RKWA TABLES IT_RKWA
CHANGING X_FEHLER
S_MSG .
IF X_FEHLER EQ 'X' .
EXIT .
ENDIF .
* re-read RKWA after the lock was set
* Is the RKWA entry still not settled?
LOOP AT IT_RKWA INTO S_RKWA .
SELECT SINGLE * FROM RKWA
WHERE MBLNR = S_RKWA -MBLNR
AND MJAHR = S_RKWA -MJAHR
AND ZEILE = S_RKWA -ZEILE
AND STATUS = C_STATUS_NINV . "not settled
IF SY -SUBRC NE 0 .
IF 1 = 2 .
MESSAGE E863 (M8 ) .
* The material document is already settled.
ENDIF .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '863' .
S_MSG -MSGV1 = S_RKWA -MBLNR .
S_MSG -MSGV2 = S_RKWA -MJAHR .
X_FEHLER = X .
EXIT .
ENDIF .
ENDLOOP .
IF X_FEHLER EQ 'X' .
EXIT .
ENDIF .
* bestimme Währungsschlüssel aus T001
CALL FUNCTION 'FI_COMPANY_CODE_DATA'
EXPORTING
I_BUKRS = BUKRS
IMPORTING
E_T001 = S_T001
EXCEPTIONS
OTHERS = 1 .
IF ( SY -SUBRC <> 0 ) .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT . "---------->
ENDIF .
* table IT_TAX fill
PERFORM MWSKZ_TXJCD_PREFETCH TABLES IT_RKWA "--->
IT_TAX "<---
USING LIFNR "--->
CHANGING X_FEHLER "<---
S_MSG . "<---
IF ( X_FEHLER = X ) .
EXIT . "---------->
ENDIF .
*----- Rechnungsdaten füllen -------------------------------------------
CLEAR : TAB_BKPF ,
TAB_BSEG ,
TAB_BSET ,
TAB_RBWS ,
S_T003 ,
LIFNR_RKWA .
LIFNR_RKWA = LIFNR . " for update in table RKWA
* in user-exit change document type and vendor
PERFORM BADI_HEADERDATA_MODIFY TABLES IT_RKWA
USING BUKRS
CHANGING BLART
LIFNR
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
*--- check Document type
PERFORM DOCUMENT_TYPE_CHECK USING BLART
CHANGING S_T003
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
* header data
PERFORM HEADER_DATA_FILL TABLES TAB_BKPF
USING BLART
BUKRS
BWAER
S_T001
CHANGING GJAHR
F_MONAT .
* item data
PERFORM ITEM_DATA_FILL TABLES TAB_BKPF
TAB_BSEG
TAB_BSET
IT_RKWA
IT_TAX
TAB_RBWS
USING BUKRS
GJAHR
LIFNR_RKWA
BWAER
S_T001
S_T003
CHANGING X_FEHLER
S_MSG
LIFNR . " Zentrale als Rechnungssteller
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
* per user-exit Daten verändern
PERFORM USER_EXIT001_AUFRUFEN TABLES TAB_BKPF "<-->
TAB_BSEG "<-->
TAB_BSET "<-->
IT_RKWA "--->
USING BUKRS "--->
LIFNR "--->
CHANGING X_FEHLER
S_MSG
GJAHR
F_MONAT .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
*----- buche Rechnung --------------------------------------------------
* per user-exit das Customer-Include der RKWA füllen
PERFORM USER_EXIT002_AUFRUFEN TABLES IT_RKWA
CHANGING X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
PERFORM VENDOR_TAXNUM_CHECK TABLES IT_RKWA
USING S_T001
LIFNR
CHANGING X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
PERFORM NULL_LINES_CHECK TABLES TAB_BSEG
CHANGING X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
PERFORM INVOICE_POST TABLES TAB_BKPF
TAB_BSEG
TAB_BSET
IT_RKWA
IT_TAX
TAB_RBWS
USING BLART
GJAHR
F_MONAT
BUKRS
LIFNR_RKWA
S_T003
CHANGING BELNR
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
ENDFORM . "block_abrechnen
*---------------------------------------------------------------------*
* FORM EKORG_BESTIMMEN *
*---------------------------------------------------------------------*
* --> LIFNR, WERKS, MATNR, SOBKZ (Sonderbestandskennzeichen)
* <-- EKORG: ermittelte Einkaufsorganisation,
* wurde keines ermittelt, so ist es SPACE
*---------------------------------------------------------------------*
FORM EKORG_BESTIMMEN USING WERKS LIKE RKWA -WERKS
SOBKZ LIKE RKWA -SOBKZ
CHANGING EKORG LIKE EINE -EKORG .
DATA : X_KONSI TYPE C , "->ME_PRICING_TAX_INDICATOR
X_PIPEL TYPE C . "dito
IF ( SOBKZ = C_SOBKZ_KONS ) .
X_KONSI = X .
X_PIPEL = SPACE .
ELSE .
X_KONSI = SPACE .
X_PIPEL = X .
ENDIF .
* berechne EKORG
CALL FUNCTION 'ME_SELECT_EKORG_FOR_PLANT'
EXPORTING
I_WERKS = WERKS
I_PIPEL = X_PIPEL
I_KONSI = X_KONSI
IMPORTING
E_EKORG = EKORG
EXCEPTIONS
NO_ENTRY_FOUND = 1
NO_DEFAULT_FOUND = 2 .
IF ( SY -SUBRC <> 0 ) .
CLEAR EKORG .
ENDIF .
ENDFORM . "ekorg_bestimmen
*eject
*---------------------------------------------------------------------*
* FORM FIELD_CATALOG_BUILD *
*---------------------------------------------------------------------*
* FELDKATALOG FÜR AUSGABE DER LISTE AUFBAUEN *
* HIER WIRD DEM ALV-BAUSTEIN BEKANNT GEGEBEN WIE DIE SPALTEN DER *
* LISTE AUSSEHEN SOLLEN *
*---------------------------------------------------------------------*
FORM FIELD_CATALOG_BUILD TABLES
T_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV .
*-- Fieldcatalog create automatically --------------------------------*
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = C_REPID
I_INTERNAL_TABNAME = 'RKWA'
I_STRUCTURE_NAME = 'ZCONALV'
CHANGING
CT_FIELDCAT = T_FIELDCAT[] .
LOOP AT T_FIELDCAT .
CASE T_FIELDCAT -FIELDNAME .
WHEN 'BSTME' .
T_FIELDCAT -SELTEXT_L = TEXT - 116 .
T_FIELDCAT -SELTEXT_M = TEXT - 116 .
T_FIELDCAT -SELTEXT_S = TEXT - 116 .
T_FIELDCAT -REPTEXT_DDIC = TEXT - 116 .
WHEN 'BSTMG' .
T_FIELDCAT -SELTEXT_L = TEXT - 115 .
T_FIELDCAT -SELTEXT_M = TEXT - 115 .
T_FIELDCAT -SELTEXT_S = TEXT - 115 .
T_FIELDCAT -REPTEXT_DDIC = TEXT - 115 .
WHEN 'BUKRS' . " Kopffeld andere Farbe
T_FIELDCAT -EMPHASIZE = 'X' .
WHEN 'LIFNR' . " Kopffeld andere Farbe
T_FIELDCAT -EMPHASIZE = 'X' .
WHEN 'TEXT' .
T_FIELDCAT -SELTEXT_L = TEXT - 007 . "Informationstext
T_FIELDCAT -SELTEXT_M = TEXT - 008 . "Infotext
T_FIELDCAT -SELTEXT_S = TEXT - 008 .
T_FIELDCAT -REPTEXT_DDIC = TEXT - 008 .
WHEN 'WRBTR' .
T_FIELDCAT -SELTEXT_L = TEXT - 117 .
T_FIELDCAT -SELTEXT_M = TEXT - 117 .
T_FIELDCAT -SELTEXT_S = TEXT - 117 .
T_FIELDCAT -REPTEXT_DDIC = TEXT - 117 .
WHEN 'ZZJSJE' .
T_FIELDCAT - EDIT = 'X' .
WHEN 'BELNR' .
T_FIELDCAT - HOTSPOT = 'X' .
WHEN 'MBLNR' .
T_FIELDCAT - HOTSPOT = 'X' .
ENDCASE .
MODIFY T_FIELDCAT .
ENDLOOP .
ENDFORM . "field_catalog_build
*eject
*---------------------------------------------------------------------*
* FORM MWSKZ_BESTIMMEN *
*---------------------------------------------------------------------*
* Bestimmt das Steuerkennzeichen über den Einkaufsinfosatz *
*---------------------------------------------------------------------*
* --> LIFNR, WERKS, MATNR, SOBKZ (Sonderbestandskennzeichen)
* <-- MWSKZ: ermitteltes SteuerKz, wurde keines ermittelt, so ist
* es SPACE
*---------------------------------------------------------------------*
FORM MWSKZ_BESTIMMEN USING LIFNR LIKE RKWA -LIFNR
WERKS LIKE RKWA -WERKS
MATNR LIKE RKWA -MATNR
SOBKZ LIKE RKWA -SOBKZ
EKORG LIKE EINE -EKORG
CHANGING MWSKZ LIKE EINE -MWSKZ .
DATA : S_MEICO LIKE MEICO ,
S_EINE LIKE EINE ,
ESOKZ LIKE EINE -ESOKZ . "Typ des Infosatzes
IF ( SOBKZ = C_SOBKZ_KONS ) .
ESOKZ = C_ESOKZ_KONS .
ELSE .
ESOKZ = C_ESOKZ_PIPE .
ENDIF .
* Konsi-/Pipeline-Infosatz lesen
CLEAR S_MEICO .
S_MEICO -ESOKZ = ESOKZ .
S_MEICO -EKORG = EKORG .
S_MEICO -WERKS = WERKS .
S_MEICO -LIFNR = LIFNR .
S_MEICO -MATNR = MATNR .
S_MEICO -ONLYE = SPACE . "sonst geht's nicht!
*{ INSERT
*Note 663537: Variants don't have info records! Look for generic article
PERFORM WRF_READ_INFORECORD_SA_PREPARE CHANGING S_MEICO .
*} INSERT
CALL FUNCTION 'ME_READ_INFORECORD'
EXPORTING
INCOM = S_MEICO
IMPORTING
EINEDATEN = S_EINE
EXCEPTIONS
ERROR_MESSAGE = 1 "nicht auswerten!
OTHERS = 2 .
IF ( SY -SUBRC = 0 ) .
MWSKZ = S_EINE -MWSKZ .
ELSE .
CLEAR MWSKZ .
ENDIF .
ENDFORM . "mwskz_bestimmen
*---------------------------------------------------------------------*
* Form MWSKZ_TXJCD_PREFETCH
*---------------------------------------------------------------------*
* berechne vorsorglich SteuerKz & Tax Jurisdiction Code für alle
* vorkommenden Kombinationen von Material, Werk & Lieferant.
* Die StKz werden in IT_tax abgelegt
* ---> BUKRS, LIFNR, IT_RKWA: Block
* <--- IT_TAX: Steuerkennzeichen
* X_FEHLER: Fehler aufgetreten?
* S_MSG: Meldung
*---------------------------------------------------------------------*
FORM MWSKZ_TXJCD_PREFETCH TABLES IT_RKWA TYPE TYP_TAB_RKWA
IT_TAX TYPE TYP_TAB_TAX
USING LIFNR LIKE BSEG -LIFNR
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : S_T001W LIKE T001W ,
S_RKWA LIKE RKWA ,
S_TAX TYPE TYP_TAX ,
EKORG LIKE EINE -EKORG .
X_FEHLER = SPACE .
CLEAR IT_TAX .
* für alle RKWA-Einträge: bestimme StKz + TaxJcd
LOOP AT IT_RKWA INTO S_RKWA .
CLEAR S_TAX .
S_TAX -MATNR = S_RKWA -MATNR .
S_TAX -WERKS = S_RKWA -WERKS .
S_TAX -LIFNR = LIFNR .
* bestimme Tax Jurisdiction Code über das Werk
CALL FUNCTION 'LOCATION_SELECT_PLANT'
EXPORTING
I_WERKS = S_RKWA -WERKS
IMPORTING
O_T001W = S_T001W
EXCEPTIONS
ERROR_MESSAGE = 1
OTHERS = 2 .
IF ( SY -SUBRC <> 0 ) .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT . "---------->
ENDIF .
S_TAX -TXJCD = S_T001W -TXJCD .
* bestimme Steuerkennzeichen ...
IF S_RKWA -MWSKZ IS INITIAL . "vor 4.5A nicht in der RKWA
* ... über Infosatz
PERFORM EKORG_BESTIMMEN USING S_RKWA -WERKS
S_RKWA -SOBKZ
CHANGING EKORG .
IF ( EKORG = SPACE ) .
S_TAX -MWSKZ = SPACE .
ELSE .
PERFORM MWSKZ_BESTIMMEN USING LIFNR
S_RKWA -WERKS
S_RKWA -MATNR
S_RKWA -SOBKZ
EKORG
CHANGING S_TAX -MWSKZ .
ENDIF .
IF ( S_TAX -MWSKZ = SPACE ) . "kein StKz bestimmt
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '732' .
S_MSG -MSGV1 = LIFNR .
S_MSG -MSGV2 = S_RKWA -MATNR .
S_MSG -MSGV3 = S_RKWA -WERKS .
S_MSG -MSGV4 = EKORG .
X_FEHLER = X .
EXIT . "---------->
ENDIF .
S_RKWA -MWSKZ = S_TAX -MWSKZ .
MODIFY IT_RKWA FROM S_RKWA TRANSPORTING MWSKZ .
ELSE .
* ... über Eintrag in der RKWA
S_TAX -MWSKZ = S_RKWA -MWSKZ . "ab 4.5A in der RKWA
ENDIF .
COLLECT S_TAX INTO IT_TAX .
ENDLOOP . "at it_rkwa
ENDFORM . "mwskz_txjcd_prefetch
*---------------------------------------------------------------------*
* FORM PF_STATUS_SET *
*---------------------------------------------------------------------*
* Status der Liste setzen *
*---------------------------------------------------------------------*
FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB .
CLEAR RT_EXTAB .
SET PF-STATUS '0001' EXCLUDING RT_EXTAB .
ENDFORM . "pf_status_set
*eject
*---------------------------------------------------------------------*
* Form USER_COMMAND *
*---------------------------------------------------------------------*
* Reaktion auf Funktionscodes: *
* Bestellung anzeigen *
* Rechnungsbeleg anzeigen *
* Zeilen aus dem ERS ausschließen *
* Langtext der Meldungen anzeigen *
*---------------------------------------------------------------------*
FORM USER_COMMAND USING F_UCOMM LIKE SY -UCOMM
I_SELFIELD TYPE SLIS_SELFIELD . "#EC CALLED
DATA : F_ANSWER ,
F_EKORG LIKE EINE -EKORG ,
F_ESOKZ LIKE EINE -ESOKZ ,
S_ALV_LIST TYPE MRM_CON_ALV .
CLEAR : S_ALV_LIST .
READ TABLE T_ALV_LIST INDEX I_SELFIELD -TABINDEX INTO S_ALV_LIST .
CASE F_UCOMM .
WHEN 'FB03' . " Buchhaltungsbeleg anzeigen
CHECK NOT S_ALV_LIST -BELNR IS INITIAL .
SET PARAMETER ID 'BLN' FIELD S_ALV_LIST -BELNR .
SET PARAMETER ID 'GJR' FIELD S_ALV_LIST -GJAHR .
SET PARAMETER ID 'BUK' FIELD S_ALV_LIST -BUKRS .
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN .
WHEN 'MB03' .
SET PARAMETER ID 'MBN' FIELD S_ALV_LIST -MBLNR .
SET PARAMETER ID 'MJA' FIELD S_ALV_LIST -MJAHR .
CALL FUNCTION 'MIGO_DIALOG'
EXPORTING
I_ACTION = 'A04'
I_REFDOC = 'R02'
I_NOTREE = 'X'
I_SKIP_FIRST_SCREEN = 'X'
I_DEADEND = 'X'
I_MBLNR = S_ALV_LIST -MBLNR
I_MJAHR = S_ALV_LIST -MJAHR .
WHEN 'ME13' . " Infosatz anzeigen
PERFORM EKORG_BESTIMMEN USING S_ALV_LIST -WERKS
S_ALV_LIST -SOBKZ
CHANGING F_EKORG .
IF S_ALV_LIST -SOBKZ = C_SOBKZ_KONS .
F_ESOKZ = C_ESOKZ_KONS .
ELSE .
F_ESOKZ = C_ESOKZ_PIPE .
ENDIF .
SET PARAMETER ID 'ESO' FIELD F_ESOKZ .
SET PARAMETER ID 'LIF' FIELD S_ALV_LIST -LIFNR .
SET PARAMETER ID 'MAT' FIELD S_ALV_LIST -MATNR .
SET PARAMETER ID 'EKO' FIELD F_EKORG .
SET PARAMETER ID 'WRK' FIELD S_ALV_LIST -WERKS .
CALL TRANSACTION 'ME13' AND SKIP FIRST SCREEN .
WHEN 'MELD' . " Langtext der Meldung anzeigen
PERFORM LONG_TEXT_MESSAGE_SHOW USING S_ALV_LIST .
WHEN 'MM03' . " Materialstammsatz anzeigen
SET PARAMETER ID 'MAT' FIELD S_ALV_LIST -MATNR .
SET PARAMETER ID 'WRK' FIELD S_ALV_LIST -WERKS .
CALL TRANSACTION 'MM03' . "AND SKIP FIRST SCREEN.
WHEN 'MK03' . " Kreditor anzeigen
SET PARAMETER ID 'LIF' FIELD S_ALV_LIST -LIFNR .
SET PARAMETER ID 'KDY' FIELD '/110' .
CALL TRANSACTION 'MK03' AND SKIP FIRST SCREEN .
WHEN 'MR91' . " Nachrichten anzeigen
SET PARAMETER ID 'NAC' FIELD C_KSCHL_KONS .
SET PARAMETER ID 'BLN' FIELD S_ALV_LIST -BELNR .
CALL TRANSACTION 'MR91' . "AND SKIP FIRST SCREEN.
WHEN 'DISPLAY' . " Auf Doppelklick reagierien
CASE I_SELFIELD -SEL_TAB_FIELD .
WHEN 'RKWA-MBLNR' .
SET PARAMETER ID 'MBN' FIELD S_ALV_LIST -MBLNR .
SET PARAMETER ID 'MJA' FIELD S_ALV_LIST -MJAHR .
CALL FUNCTION 'MIGO_DIALOG'
EXPORTING
I_ACTION = 'A04'
I_REFDOC = 'R02'
I_NOTREE = 'X'
I_SKIP_FIRST_SCREEN = 'X'
I_DEADEND = 'X'
I_MBLNR = S_ALV_LIST -MBLNR
I_MJAHR = S_ALV_LIST -MJAHR .
WHEN 'RKWA-MATNR' .
SET PARAMETER ID 'MAT' FIELD S_ALV_LIST -MATNR .
SET PARAMETER ID 'WRK' FIELD S_ALV_LIST -WERKS .
CALL TRANSACTION 'MM03' . "AND SKIP FIRST SCREEN.
WHEN 'RKWA-LIFNR' .
SET PARAMETER ID 'LIF' FIELD S_ALV_LIST -LIFNR .
SET PARAMETER ID 'KDY' FIELD '/110' .
CALL TRANSACTION 'MK03' AND SKIP FIRST SCREEN .
WHEN 'RKWA-BELNR' .
CHECK NOT S_ALV_LIST -BELNR IS INITIAL .
SET PARAMETER ID 'BLN' FIELD S_ALV_LIST -BELNR .
SET PARAMETER ID 'GJR' FIELD S_ALV_LIST -GJAHR .
SET PARAMETER ID 'BUK' FIELD S_ALV_LIST -BUKRS .
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN .
WHEN 'RKWA-TEXT' .
PERFORM LONG_TEXT_MESSAGE_SHOW USING S_ALV_LIST .
ENDCASE .
ENDCASE .
ENDFORM . "USER_COMMAND
*eject
*---------------------------------------------------------------------*
* Form USER_EXIT001_AUFRUFEN
*---------------------------------------------------------------------*
* Der Kunde kann einige Daten vor Aufruf der RW-Schnittstelle *
* noch abändern.
* ---> ...
* <--- X_FEHLER: Fehler aufgetreten?
* SMSG: Meldung bei Fehler
*---------------------------------------------------------------------*
FORM USER_EXIT001_AUFRUFEN TABLES IT_BKPF TYPE TYP_TAB_BKPF
IT_BSEG TYPE TYP_TAB_BSEG
IT_BSET TYPE TYP_TAB_BSET
IT_RKWA TYPE TYP_TAB_RKWA
USING BUKRS LIKE BKPF -BUKRS
LIFNR LIKE BSEG -LIFNR
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG
E_GJAHR TYPE GJAHR
E_MONAT TYPE MONAT .
DATA : TAB_BSET TYPE TYP_TAB_BSET ,
TAB_RKWA TYPE TYP_TAB_RKWA .
DATA : F_GJAHR TYPE GJAHR ,
F_MONAT TYPE MONAT .
DATA : S_BSEG TYPE BSEG , S_BKPF TYPE BKPF .
CLEAR : X_FEHLER ,
TAB_BSET ,
TAB_RKWA .
TAB_BSET[] = IT_BSET[] .
TAB_RKWA[] = IT_RKWA[] .
DATA : S_BSET TYPE BSET .
DATA : F_BSET_GJAHR TYPE BSET -GJAHR .
IF NOT IT_BSET[] IS INITIAL .
READ TABLE IT_BSET INDEX 1 INTO S_BSET .
F_BSET_GJAHR = S_BSET -GJAHR .
ENDIF .
SY -SUBRC = 0 .
CALL CUSTOMER-FUNCTION '001'
EXPORTING
I_BUKRS = BUKRS
I_LIFNR = LIFNR
TABLES
T_BKPF = IT_BKPF
T_BSEG = IT_BSEG
T_BSET = TAB_BSET
T_RKWA = TAB_RKWA
EXCEPTIONS
ERROR = 1 .
IF ( SY -SUBRC <> 0 ) .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT . "---------->
ENDIF .
READ TABLE IT_BKPF INTO S_BKPF INDEX 1 .
IF SY -SUBRC = 0 .
IF NOT S_BKPF -BUKRS IS INITIAL .
CALL FUNCTION 'FI_PERIOD_DETERMINE'
EXPORTING
I_BUDAT = S_BKPF -BUDAT
I_BUKRS = S_BKPF -BUKRS
I_MONAT = S_BKPF -MONAT
IMPORTING
E_GJAHR = F_GJAHR
E_MONAT = F_MONAT .
IF F_GJAHR = S_BKPF -GJAHR AND F_MONAT = S_BKPF -MONAT .
E_GJAHR = F_GJAHR .
E_MONAT = F_MONAT .
ELSE .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '008' .
S_MSG -MSGV1 = 'user_exit001_aufrufen' .
X_FEHLER = X .
EXIT . "---------->
ENDIF .
LOOP AT IT_BSEG INTO S_BSEG WHERE GJAHR <> S_BKPF -GJAHR .
ENDLOOP .
IF SY -SUBRC = 0 .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '008' .
S_MSG -MSGV1 = 'user_exit001_aufrufen' .
X_FEHLER = X .
EXIT .
ENDIF .
ENDIF .
ELSE .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '008' .
S_MSG -MSGV1 = 'user_exit001_aufrufen' .
X_FEHLER = X .
EXIT .
ENDIF .
IF NOT IT_BSET[] IS INITIAL .
IF S_BKPF -GJAHR <> F_BSET_GJAHR .
LOOP AT IT_BSET INTO S_BSET .
S_BSET -GJAHR = S_BKPF -GJAHR .
MODIFY IT_BSET FROM S_BSET .
ENDLOOP .
ENDIF .
ENDIF .
ENDFORM . "user_exit001_aufrufen
*---------------------------------------------------------------------*
* Form USER_EXIT002_AUFRUFEN
*---------------------------------------------------------------------*
* Der Kunde kann vor dem Update auf die RKWA das Customer-Include *
* CI_RKWA füllen.
* ---> IT_RKWA
* <--- X_FEHLER: Fehler aufgetreten?
* S_MSG: Meldung bei Fehler
*---------------------------------------------------------------------*
FORM USER_EXIT002_AUFRUFEN TABLES IT_RKWA TYPE TYP_TAB_RKWA
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : S_RKWA_IN LIKE RKWA ,
S_RKWA_OUT LIKE RKWA ,
S_RKWA_KEY LIKE RKWA_KEY ,
S_RKWA_DATA LIKE RKWA_DATA ,
X_CHECK TYPE C .
CLEAR X_FEHLER .
LOOP AT IT_RKWA INTO S_RKWA_IN .
* SAP-Daten merken
MOVE-CORRESPONDING S_RKWA_IN TO S_RKWA_KEY .
MOVE-CORRESPONDING S_RKWA_IN TO S_RKWA_DATA .
* Aufruf User-Exit
SY -SUBRC = 0 .
X_CHECK = SPACE .
CALL CUSTOMER-FUNCTION '002'
EXPORTING
I_RKWA = S_RKWA_IN
IMPORTING
E_CHECK = X_CHECK
E_RKWA = S_RKWA_OUT
EXCEPTIONS
ERROR = 1
ERROR_MESSAGE = 1 .
IF ( SY -SUBRC = 0 ) .
IF ( X_CHECK = X ) . "Erweiterung wird genutzt
* Kundenänderungen an SAP-Daten rückgängig machen
MOVE-CORRESPONDING S_RKWA_KEY TO S_RKWA_OUT .
MOVE-CORRESPONDING S_RKWA_DATA TO S_RKWA_OUT .
MODIFY IT_RKWA FROM S_RKWA_OUT .
ENDIF .
ELSE . "in Erweiterung wurde Fehlermeldung ausgegeben
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT . "---------->
ENDIF .
ENDLOOP .
ENDFORM . "user_exit002_aufrufen
*---------------------------------------------------------------------*
* FORM TOP_OF_LIST *
*---------------------------------------------------------------------*
* Listüberschriften am Anfang der Gesamtliste *
*---------------------------------------------------------------------*
FORM TOP_OF_LIST .
DATA : TAB_LIST_OF_LIST TYPE SLIS_T_LISTHEADER , "Überschriftstabelle
S_LINE TYPE SLIS_LISTHEADER .
CLEAR : TAB_LIST_OF_LIST , S_LINE .
REFRESH : TAB_LIST_OF_LIST .
S_LINE -TYP = 'S' .
S_LINE -INFO = TEXT - 009 . " Protokoll
APPEND S_LINE TO TAB_LIST_OF_LIST .
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = TAB_LIST_OF_LIST .
ENDFORM . "top_of_list
*&---------------------------------------------------------------------*
*& Form INVOICE_POST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM INVOICE_POST TABLES TI_BKPF TYPE TYP_TAB_BKPF
TI_BSEG TYPE TYP_TAB_BSEG
TI_BSET TYPE TYP_TAB_BSET
TI_RKWA TYPE TYP_TAB_RKWA
TI_TAX TYPE TYP_TAB_TAX
TI_RBWS TYPE TYP_TAB_RBWS
USING I_BLART LIKE T169F -BLART
I_GJAHR LIKE RKWA -GJAHR
I_MONAT LIKE BKPF -MONAT
I_BUKRS LIKE RKWA -BUKRS
I_LIFNR_RKWA LIKE RKWA -LIFNR
S_T003 LIKE T003
CHANGING E_BELNR LIKE RKWA -BELNR
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : TAB_ACCHD LIKE ACCHD OCCURS 0 WITH HEADER LINE ,
TAB_ACCIT LIKE ACCIT OCCURS 0 WITH HEADER LINE ,
TAB_ACCCR LIKE ACCCR OCCURS 0 WITH HEADER LINE ,
TAB_ACCBSET LIKE ACCBSET OCCURS 0 WITH HEADER LINE ,
TAB_ACCIT_WT LIKE ACCIT_WT OCCURS 0 WITH HEADER LINE ,
S_BSET LIKE BSET ,
S_ACCBSET LIKE ACCBSET ,
LS_RKWA_KEY TYPE RKWA_KEY , "1731546
LS_RKWA_KEY_OLD TYPE RKWA_KEY , "1731546
F_ZEILE TYPE ACCTIT -ZEILE , "1731546
F_LENGTH TYPE I , "1731546
F_AWTYP LIKE ACCHD -AWTYP ,
F_AWREF LIKE ACCHD -AWREF ,
F_AWORG LIKE ACCHD -AWORG ,
F_AWSYS LIKE ACCHD -AWSYS ,
F_HWAE1 LIKE BOOLE ,
F_VENDOR_LINE TYPE C .
*ENHANCEMENT-POINT RMVKON00_02 SPOTS ES_RMVKON00.
* convert document into accounting structure
* hier werden nur Zeilen mit Curtp = 00 Belegwährung erzeugt *
* die restlichen Währungszeilen wie Hauswärhung werden durch *
* ac_doc_create erzeugt
CALL FUNCTION 'FI_DOC_TO_ACC_TRANSFORM'
EXPORTING
X_HWAE1 = F_HWAE1
TABLES
T_BKPF = TI_BKPF
T_BSEG = TI_BSEG
T_BSET = TI_BSET "2054048
T_ACCHD = TAB_ACCHD
T_ACCIT = TAB_ACCIT
T_ACCCR = TAB_ACCCR
EXCEPTIONS
SYSTEM_ERROR = 1 .
IF SY -SUBRC <> 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
* Fill ZEILE in TAB_ACCIT in order to enable the FI document split in
* subroutine DOCUMENT_SPLIT_INVOICE_RECEIPT (include LFACIFSP).
* The document split is performed for the following account types:
* material (M), G/L accounts (S) and Assets (A).
LOOP AT TAB_ACCIT WHERE KOART CA 'MSA' "1731546
AND ZUONR IS NOT INITIAL "1731546
AND SGTXT IS NOT INITIAL . "1731546
LS_RKWA_KEY -MBLNR = TAB_ACCIT -ZUONR ( 10 ) . "1731546
LS_RKWA_KEY -MJAHR = TAB_ACCIT -ZUONR+10 ( 4 ) . "1731546
* Last 4 character of SGTXT contain RKWA-ZEILE
F_LENGTH = STRLEN ( TAB_ACCIT -SGTXT ) - 4 . "1731546
LS_RKWA_KEY -ZEILE = TAB_ACCIT -SGTXT+F_LENGTH ( 4 ) . "1731546
* Check whether the material document reference is valid "1731546
READ TABLE TI_RKWA WITH KEY MJAHR = LS_RKWA_KEY -MJAHR "1818133
MBLNR = LS_RKWA_KEY -MBLNR "1818133
ZEILE = LS_RKWA_KEY -ZEILE "1731546
BINARY SEARCH "1731546
TRANSPORTING NO FIELDS . "1731546
IF SY -SUBRC = 0 . "1731546
IF LS_RKWA_KEY NE LS_RKWA_KEY_OLD . "1731546
LS_RKWA_KEY_OLD = LS_RKWA_KEY . "1731546
F_ZEILE = F_ZEILE + 1 . "1731546
ENDIF . "1731546
TAB_ACCIT -ZEILE = TAB_ACCIT -URZEILE = F_ZEILE . "1731546
MODIFY TAB_ACCIT TRANSPORTING ZEILE URZEILE . "1731546
ENDIF . "1731546
ENDLOOP . "1731546
* convert tax data into accounting structure
LOOP AT TI_BSET INTO S_BSET .
MOVE-CORRESPONDING S_BSET TO S_ACCBSET .
S_ACCBSET -MONAT = I_MONAT .
S_ACCBSET -BLART = I_BLART .
CLEAR : S_ACCBSET -HWBAS ,
S_ACCBSET -HWSTE .
APPEND S_ACCBSET TO TAB_ACCBSET .
ENDLOOP .
LOOP AT TAB_ACCIT WHERE POSNR = 1 .
*-- withholding tax flag in table accit
IF NOT TI_RBWS[] IS INITIAL .
TAB_ACCIT -WT_KEY = '000001' .
ENDIF .
MODIFY TAB_ACCIT .
ENDLOOP .
PERFORM WITHHOLDING_TAX_CREATE TABLES TAB_ACCIT_WT
TI_RBWS .
* alle Information aus den Sachkonten, Stammsätzen, Customizingseins
* tellungen werden hier abgeleitet, wir brauchen es nicht zu machen
CALL FUNCTION 'AC_DOCUMENT_CREATE'
TABLES
T_ACCHD = TAB_ACCHD
T_ACCIT = TAB_ACCIT
T_ACCCR = TAB_ACCCR
T_ACCTX = TAB_ACCBSET
T_ACCWT = TAB_ACCIT_WT
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF SY -SUBRC <> 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
PERFORM DOCUMENT_NUMBER_GET USING I_BLART
I_BUKRS
I_GJAHR
S_T003
CHANGING E_BELNR
X_FEHLER
S_MSG .
CALL FUNCTION 'FI_REFERENCE_CREATE'
EXPORTING
I_AWTYP = 'BKPFF'
I_BUKRS = I_BUKRS
I_GJAHR = I_GJAHR
I_BELNR = E_BELNR
IMPORTING
E_AWTYP = F_AWTYP
E_AWREF = F_AWREF
E_AWORG = F_AWORG
E_AWSYS = F_AWSYS .
CALL FUNCTION 'AC_DOCUMENT_POST'
EXPORTING
I_AWTYP = F_AWTYP
I_AWREF = F_AWREF
I_AWORG = F_AWORG
I_AWSYS = F_AWSYS
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF SY -SUBRC <> 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
READ TABLE TI_BSEG WITH KEY KOART = C_KOART_KRED .
IF TI_BSEG -WRBTR > 0 .
F_VENDOR_LINE = X .
ELSE .
CLEAR F_VENDOR_LINE .
ENDIF .
PERFORM RKWA_UPDATE TABLES TI_RKWA
TI_TAX
USING E_BELNR
I_GJAHR
I_LIFNR_RKWA
F_VENDOR_LINE
CHANGING X_FEHLER
S_MSG .
IF X_FEHLER = X .
EXIT .
ENDIF .
PERFORM HEAD_MESSAGE_CREATE TABLES TI_BKPF
TI_BSEG
USING I_BLART
E_BELNR
I_BUKRS
CHANGING X_FEHLER
S_MSG .
IF X_FEHLER = X .
EXIT .
ENDIF .
ENDFORM . " INVOICE_POST
*&---------------------------------------------------------------------*
*& Form DOCUMENT_NUMBER_GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM DOCUMENT_NUMBER_GET USING I_BLART LIKE T169F -BLART
I_BUKRS LIKE RKWA -BUKRS
I_GJAHR LIKE RKWA -GJAHR
S_T003 LIKE T003
CHANGING E_BELNR LIKE RKWA -BELNR
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
CALL FUNCTION 'RF_GET_DOCUMENT_NUMBER'
EXPORTING
COMPANY = I_BUKRS
RANGE = S_T003 -NUMKR
YEAR = I_GJAHR
IMPORTING
DOCUMENT_NUMBER = E_BELNR .
IF SY -DBSYS NE 'ORACLE' .
CALL FUNCTION 'ENQUEUE_EFBKPF'
EXPORTING
BELNR = E_BELNR
BUKRS = I_BUKRS
GJAHR = I_GJAHR
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2 .
CASE SY -SUBRC .
*------- Beleg von anderem Benutzer gesperrt ---------------------------
WHEN 1 .
* MESSAGE A127 WITH E_BELNR I_BUKRS.
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
*------- Systemfehler --------------------------------------------------
WHEN 2 .
* MESSAGE A128 WITH E_BELNR I_BUKRS.
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDCASE .
ENDIF .
ENDFORM . " DOCUMENT_NUMBER_GET
*&---------------------------------------------------------------------*
*& Form HEADER_DATA_FILL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM HEADER_DATA_FILL TABLES TI_BKPF TYPE TYP_TAB_BKPF
USING I_BLART LIKE T169F -BLART
I_BUKRS LIKE RKWA -BUKRS
I_BWAER LIKE RKWA -BWAER
S_T001 LIKE T001
CHANGING E_GJAHR LIKE RKWA -GJAHR
E_MONAT LIKE BKPF -MONAT .
DATA : S_BKPF LIKE BKPF .
CLEAR : S_BKPF .
S_BKPF -MANDT = SY -MANDT .
S_BKPF -BLART = I_BLART .
S_BKPF -BUKRS = I_BUKRS .
S_BKPF -TCODE = TCODE_MRKO .
S_BKPF -WAERS = I_BWAER .
S_BKPF -HWAER = S_T001 -WAERS .
S_BKPF -XMWST = 'X' . "Steuer rechnen
S_BKPF -BLDAT = P_BLDAT . "lokales Datum
S_BKPF -BUDAT = P_BUDAT . "lokales Datum
S_BKPF -WWERT = P_BUDAT . "lokales Datum
S_BKPF -XBLNR = P_XBLNR .
S_BKPF -AWTYP = C_AWTYP_BKPFF .
S_BKPF -GLVOR = C_AWTYP_RMRP .
S_BKPF -USNAM = SY -UNAME .
S_BKPF -XSNET = 'X' .
* month, year get
IF NOT S_BKPF -BUKRS IS INITIAL .
CALL FUNCTION 'FI_PERIOD_DETERMINE'
EXPORTING
I_BUDAT = S_BKPF -BUDAT
I_BUKRS = S_BKPF -BUKRS
I_MONAT = S_BKPF -MONAT
IMPORTING
E_GJAHR = S_BKPF -GJAHR
E_MONAT = S_BKPF -MONAT .
ENDIF .
E_GJAHR = S_BKPF -GJAHR .
E_MONAT = S_BKPF -MONAT .
*-------- Steuerkurs -------------------------------------------------*
CALL FUNCTION 'FI_TAX_GET_TXKRS'
EXPORTING
I_BUKRS = I_BUKRS
I_CURR_FORGN = I_BWAER
I_CURR_LOCAL = S_T001 -WAERS
I_BLDAT = SY -DATLO
I_BUDAT = SY -DATLO
* i_vatdate = ???? "N1023317
IMPORTING
E_TXKRS = S_BKPF -TXKRS .
APPEND S_BKPF TO TI_BKPF .
ENDFORM . " HEADER_DATA_FILL
*&---------------------------------------------------------------------*
*& Form ITEM_DATA_FILL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM ITEM_DATA_FILL TABLES TI_BKPF TYPE TYP_TAB_BKPF
TI_BSEG TYPE TYP_TAB_BSEG
TI_BSET TYPE TYP_TAB_BSET
TI_RKWA TYPE TYP_TAB_RKWA
TI_TAX TYPE TYP_TAB_TAX
TE_RBWS TYPE TYP_TAB_RBWS
USING I_BUKRS LIKE RKWA -BUKRS
I_GJAHR LIKE RKWA -GJAHR
I_LIFNR_RKWA LIKE RKWA -LIFNR
I_BWAER LIKE RKWA -BWAER
S_T001 LIKE T001
S_T003 LIKE T003
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG
E_LIFNR LIKE RKWA -LIFNR .
DATA : T_BSEGT LIKE BSEGT OCCURS 0 ,
S_BSEGT LIKE BSEGT ,
S_BSEG LIKE BSEG ,
S_BSET LIKE BSET ,
S_RKWA LIKE RKWA ,
S_TAX TYPE TYP_TAX ,
S_BKPF LIKE BKPF ,
S_T169 LIKE T169 ,
H_SGTXT LIKE BSEG -SGTXT ,
H_GSBER LIKE RKWA -GSBER ,
F_BUZEI LIKE BSEG -BUZEI ,
F_FWSTE LIKE ITXDAT -FWSTE ,
F_WRBTR LIKE RKWA -WRBTR ,
F_ISPS_NOT_ACTIVE LIKE FMISPS -PS_ACTIVE .
F_BUZEI = 1 .
CONSTANTS : C_T169 ( 4 ) VALUE 'T169' .
CLEAR : X_FEHLER .
CLEAR : S_MSG .
* selections
SELECT SINGLE * FROM T169 INTO S_T169
WHERE TCODE = C_TCODE_MRKO .
IF SY -SUBRC NE 0 .
MESSAGE E100 WITH C_T169 C_TCODE_MRKO .
ENDIF .
* check if IS-PS active
CALL FUNCTION 'FM00_CHECK_ISPS'
IMPORTING
E_FLG_ISPS_NOT_ACTIVE = F_ISPS_NOT_ACTIVE .
* header data
READ TABLE TI_BKPF INDEX 1 INTO S_BKPF .
* bseg fill vendor line
CLEAR : S_BSEG , S_RKWA , F_WRBTR .
LOOP AT TI_RKWA INTO S_RKWA .
IF S_RKWA -SHKZG = C_SHKZG_HABEN .
F_WRBTR = F_WRBTR + ( S_RKWA -WRBTR - S_RKWA -NAVNW ) .
ELSE .
F_WRBTR = F_WRBTR - ( S_RKWA -WRBTR - S_RKWA -NAVNW ) .
ENDIF .
ENDLOOP .
S_BSEG -MANDT = SY -MANDT .
S_BSEG -BUKRS = I_BUKRS .
S_BSEG -GJAHR = S_BKPF -GJAHR .
S_BSEG -BUZEI = C_BUZEI_KRED .
S_BSEG -LIFNR = E_LIFNR .
S_BSEG -ZFBDT = SY -DATLO .
S_BSEG -WRBTR = ABS ( F_WRBTR ) .
* posting key
IF F_WRBTR >= 0 .
S_BSEG -BSCHL = C_BSLKH .
ELSE .
S_BSEG -BSCHL = C_BSLKS .
ENDIF .
PERFORM POSTING_KEY_DATA_GET USING S_T003
S_BSEG -BSCHL
CHANGING S_BSEG -SHKZG
S_BSEG -KOART
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
PERFORM VENDOR_DATA_GET USING I_BUKRS
E_LIFNR
CHANGING X_FEHLER
S_MSG
S_BSEG -LIFNR
S_BSEG -FILKD
S_BSEG -ZTERM
S_BSEG -QSSKZ .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
E_LIFNR = S_BSEG -LIFNR .
PERFORM BUZID_GET USING S_T169 -VGART
S_BSEG -KOART
CHANGING S_BSEG -BUZID
S_BSEG -BUSTW .
PERFORM KTOSL_GET USING S_BSEG -BUSTW
CHANGING S_BSEG -KTOSL .
PERFORM PAYMENT_CONDITIONS_GET USING S_BSEG -ZTERM
S_BKPF -BLDAT
S_BKPF -BUDAT
CHANGING S_BSEG -ZFBDT
S_BSEG -ZLSPR
S_BSEG -ZLSCH
S_BSEG -ZBD1T
S_BSEG -ZBD1P
S_BSEG -ZBD2T
S_BSEG -ZBD2P
S_BSEG -ZBD3T
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
APPEND S_BSEG TO TI_BSEG .
* withholding tax initialization
IF TE_RBWS[] IS INITIAL .
CALL FUNCTION 'FI_WT_ERS_INITIALIZATION'
EXPORTING
I_BUKRS = S_BKPF -BUKRS
I_GJAHR = S_BKPF -GJAHR
I_BLDAT = S_BKPF -BLDAT
I_BUDAT = S_BKPF -BUDAT
I_WWERT = S_BKPF -WWERT
I_WAERS = S_BKPF -WAERS
I_KURSF = S_BKPF -KURSF
I_SHKZG = S_BSEG -SHKZG
I_LIFNR = S_BSEG -LIFNR
TABLES
I_RBWS = TE_RBWS .
ENDIF .
* bseg fill (goods extract)
LOOP AT TI_RKWA INTO S_RKWA .
F_BUZEI = F_BUZEI + 1 .
READ TABLE TI_TAX INTO S_TAX
WITH KEY MATNR = S_RKWA -MATNR
WERKS = S_RKWA -WERKS
MWSKZ = S_RKWA -MWSKZ
LIFNR = I_LIFNR_RKWA .
IF ( SY -SUBRC <> 0 ) .
S_MSG -MSGID = 'XX' .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '300' . "Verbuchungsabbruch
S_MSG -MSGV1 = TEXT - 300 .
X_FEHLER = X .
EXIT .
ENDIF .
CLEAR S_BSEG .
S_BSEG -MANDT = SY -MANDT .
S_BSEG -BUKRS = I_BUKRS .
S_BSEG -GJAHR = S_BKPF -GJAHR .
S_BSEG -BUZEI = F_BUZEI .
S_BSEG -VORGN = C_AWTYP_RMRP .
S_BSEG -BUZID = C_BUZID_SACH .
S_BSEG -MWSKZ = S_TAX -MWSKZ .
S_BSEG -TXJCD = S_TAX -TXJCD .
S_BSEG -SAKNR = S_RKWA -HKONT .
S_BSEG -HKONT = S_RKWA -HKONT .
S_BSEG -GSBER = S_RKWA -GSBER .
S_BSEG -PRCTR = S_RKWA -PRCTR . "ab 4.5A Eintrag in der RKWA
S_BSEG -MENGE = S_RKWA -BSTMG .
S_BSEG -MEINS = S_RKWA -BSTME .
S_BSEG -MATNR = S_RKWA -MATNR . " matnr and werks are important for
S_BSEG -WERKS = S_RKWA -WERKS . " external tax system
* posting key in
IF S_RKWA -SHKZG = C_SHKZG_HABEN .
S_BSEG -BSCHL = C_BSLSS .
ELSEIF S_RKWA -SHKZG = C_SHKZG_SOLL .
S_BSEG -BSCHL = C_BSLSH .
ENDIF .
PERFORM POSTING_KEY_DATA_GET USING S_T003
S_BSEG -BSCHL
CHANGING S_BSEG -SHKZG
S_BSEG -KOART
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
PERFORM BUZID_GET USING S_T169 -VGART
S_BSEG -KOART
CHANGING S_BSEG -BUZID
S_BSEG -BUSTW .
PERFORM KTOSL_GET USING S_BSEG -BUSTW
CHANGING S_BSEG -KTOSL .
* ZuordnungsNr: aus MaterialBelegnr + Jahr zusammenbauen
CONCATENATE S_RKWA -MBLNR S_RKWA -MJAHR INTO S_BSEG -ZUONR .
*ENHANCEMENT-POINT RMVKON00_01 SPOTS ES_RMVKON00.
* Fill XREF3 if IS-PS is active
IF F_ISPS_NOT_ACTIVE IS INITIAL .
MOVE S_BSEG -ZUONR TO S_BSEG -XREF3 .
ENDIF .
* Positionstext: 'Abrechnung zu Materialbeleg &1 &2'
H_SGTXT = TEXT - 011 .
REPLACE '&1' WITH S_RKWA -MBLNR INTO H_SGTXT .
REPLACE '&2' WITH S_RKWA -ZEILE INTO H_SGTXT .
S_BSEG -SGTXT = H_SGTXT .
* Steuerbetrag ist Null
S_BSEG -WMWST = 0 .
* Rechnungsbetrag
S_BSEG -WRBTR = S_RKWA -WRBTR - S_RKWA -NAVNW .
S_BSEG -TXBFW = S_BSEG -WRBTR .
S_BSEG -REWWR = S_BSEG -WRBTR .
S_BSEG -NAVFW = S_RKWA -NAVNW .
* if EA-PS is active take over account assignments
PERFORM FM_ACCOUNT_ASSIGNMENT_GET USING S_RKWA
CHANGING S_BSEG
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
APPEND S_BSEG TO TI_BSEG .
CLEAR S_RKWA .
ENDLOOP .
* tax data
PERFORM BSET_FILL TABLES TI_BKPF
TI_BSEG
TI_BSET
USING I_BUKRS
CHANGING S_MSG
X_FEHLER .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
* bseg fill (tax line)
CALL FUNCTION 'CREATE_TAX_ITEM'
TABLES
T_BSEGT = T_BSEGT .
LOOP AT T_BSEGT INTO S_BSEGT .
S_BSEGT -HWBAS = ABS ( S_BSEGT -HWBAS ) .
S_BSEGT -FWBAS = ABS ( S_BSEGT -FWBAS ) .
CLEAR : S_BSEG .
MOVE-CORRESPONDING S_BSEGT TO S_BSEG .
S_BSEG -VORGN = C_AWTYP_RMRP .
S_BSEG -BUZID = C_BUZID_TAX .
S_BSEG -KOART = 'S' .
APPEND S_BSEG TO TI_BSEG .
ENDLOOP .
PERFORM NAV_VERTEILEN TABLES TI_BSEG .
PERFORM BSEG_LINES_NUMBERING CHANGING TI_BSEG[] .
ENDFORM . " ITEM_DATA_FILL
*&---------------------------------------------------------------------*
*& Form POSTING_KEY_GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM POSTING_KEY_DATA_GET USING S_T003 LIKE T003
E_BSCHL LIKE BSEG -BSCHL
CHANGING E_SHKZG LIKE BSEG -SHKZG
E_KOART LIKE BSEG -KOART
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : S_TBSL LIKE TBSL ,
S_TBSLT LIKE TBSLT .
CALL FUNCTION 'FI_POSTING_KEY_DATA'
EXPORTING
I_BSCHL = E_BSCHL
IMPORTING
E_TBSL = S_TBSL
E_TBSLT = S_TBSLT .
IF S_T003 -KOARS NA S_TBSL -KOART .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '161' .
X_FEHLER = X .
EXIT .
ELSE .
E_SHKZG = S_TBSL -SHKZG .
E_KOART = S_TBSL -KOART .
ENDIF .
ENDFORM . " POSTING_KEY_DATA_GET
*&---------------------------------------------------------------------*
*& Form VENDOR_DATA_GET
*&---------------------------------------------------------------------*
FORM VENDOR_DATA_GET USING I_BUKRS LIKE RKWA -BUKRS
I_LIFNR LIKE RKWA -LIFNR
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG
E_LIFNR LIKE BSEG -LIFNR
E_FILKD LIKE BSEG -FILKD
E_ZTERM LIKE BSEG -ZTERM
E_QSSKZ LIKE BSEG -QSSKZ .
DATA : S_KRED LIKE VF_KRED .
CLEAR : S_KRED .
*- read the vendor data
CALL FUNCTION 'FI_VENDOR_DATA'
EXPORTING
I_BUKRS = I_BUKRS
I_LIFNR = I_LIFNR
IMPORTING
E_KRED = S_KRED
EXCEPTIONS
ERROR_MESSAGE = 01 .
IF SY -SUBRC NE 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
E_QSSKZ = S_KRED -QSSKZ .
E_ZTERM = S_KRED -ZTERM .
IF NOT S_KRED -LNRZE IS INITIAL . " headquater
E_LIFNR = S_KRED -LNRZE .
E_FILKD = I_LIFNR .
CLEAR : S_KRED , E_QSSKZ , E_ZTERM .
CALL FUNCTION 'FI_VENDOR_DATA'
EXPORTING
I_BUKRS = I_BUKRS
I_LIFNR = E_LIFNR
IMPORTING
E_KRED = S_KRED
EXCEPTIONS
ERROR_MESSAGE = 01 .
IF SY -SUBRC NE 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
E_QSSKZ = S_KRED -QSSKZ .
E_ZTERM = S_KRED -ZTERM .
ENDIF .
IF S_KRED -BEGRU NE SPACE .
PERFORM AUTHORITY_CHECK USING 'BEK' 'BRGRU' S_KRED -BEGRU
CHANGING S_MSG
X_FEHLER .
IF X_FEHLER = X .
EXIT .
ENDIF .
ENDIF .
IF S_KRED -BEGRU_B NE SPACE .
PERFORM AUTHORITY_CHECK USING 'BEK' 'BRGRU' S_KRED -BEGRU_B
CHANGING S_MSG
X_FEHLER .
IF X_FEHLER = X .
EXIT .
ENDIF .
ENDIF .
ENDFORM . " VENDOR_DATA_GET
*&---------------------------------------------------------------------*
*& Form BUZID_GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUZID_GET USING I_VGART
I_KOART
CHANGING E_BUZID
E_BUSTW .
*------- Buchungsstring ermitteln, BUZID setzen ----------------------*
CALL FUNCTION 'MR_STRING_DETERMINE'
EXPORTING
I_KNTTP = ' '
I_KOART = I_KOART
I_PSTYP = ' '
I_VGART = I_VGART
IMPORTING
E_BUSTW = E_BUSTW
E_BUZID = E_BUZID .
ENDFORM . " BUZID_GET
*&---------------------------------------------------------------------*
*& Form KTOSL_GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM KTOSL_GET USING I_BUSTW
CHANGING E_KTOSL .
DATA : TAB_T169C LIKE T169C OCCURS 0 ,
S_T169C LIKE T169C ,
S_SGNBU LIKE SGNBU .
CALL FUNCTION 'MR_POSTING_GENERATE'
EXPORTING
I_BUSTW = I_BUSTW
I_SGNBU = S_SGNBU
TABLES
T_T169C = TAB_T169C .
LOOP AT TAB_T169C INTO S_T169C
WHERE BUSTW = I_BUSTW .
E_KTOSL = S_T169C -VORSL .
ENDLOOP .
ENDFORM . " KTOSL_GET
*&---------------------------------------------------------------------*
*& Form PAYMENT_CONDITIONS_GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PAYMENT_CONDITIONS_GET USING I_ZTERM LIKE BSEG -ZTERM
I_BLDAT LIKE BKPF -BLDAT
I_BUDAT LIKE BKPF -BUDAT
CHANGING E_ZFBDT LIKE BSEG -ZFBDT
E_ZLSPR LIKE BSEG -ZLSPR
E_ZLSCH LIKE BSEG -ZLSCH
E_ZBD1T LIKE BSEG -ZBD1T
E_ZBD1P LIKE BSEG -ZBD1P
E_ZBD2T LIKE BSEG -ZBD2T
E_ZBD2P LIKE BSEG -ZBD2P
E_ZBD3T LIKE BSEG -ZBD3T
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : S_T052 LIKE T052 ,
S_SKLIN LIKE SKLIN .
CONSTANTS : C_T052 ( 4 ) VALUE 'T052' .
* ZTERM (*) is needed for substitution paymnt term from headquater
CHECK I_ZTERM NE '*' .
CALL FUNCTION 'FI_FIND_PAYMENT_CONDITIONS'
EXPORTING
I_ZTERM = I_ZTERM
I_BLDAT = I_BLDAT
I_BUDAT = I_BUDAT
IMPORTING
E_T052 = S_T052
E_ZFBDT = E_ZFBDT
E_SKLIN = S_SKLIN
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF SY -SUBRC NE 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ELSE .
*------- Zahlungsschlüssel und Zahlungssperre vorschlagen --------------
E_ZLSPR = S_T052 -ZSCHF .
E_ZLSCH = S_T052 -ZLSCH .
*----------- Tage und Prozente setzen ----------------------------------
E_ZBD1T = S_SKLIN -ZTAG1 .
E_ZBD1P = S_SKLIN -ZPRZ1 .
E_ZBD2T = S_SKLIN -ZTAG2 .
E_ZBD2P = S_SKLIN -ZPRZ2 .
E_ZBD3T = S_SKLIN -ZTAG3 .
ENDIF .
ENDFORM . " PAYMENT_CONDITIONS_GET
*&---------------------------------------------------------------------*
*& Form BSET_FILL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BSET_FILL TABLES TI_BKPF TYPE TYP_TAB_BKPF
TI_BSEG TYPE TYP_TAB_BSEG
TI_BSET TYPE TYP_TAB_BSET
USING I_BUKRS LIKE RKWA -BUKRS
CHANGING S_MSG TYPE TYP_MSG
X_FEHLER TYPE C .
DATA : T_DBSEG LIKE DBSEG OCCURS 0 WITH HEADER LINE ,
S_BSEG LIKE BSEG ,
S_DBSEG LIKE DBSEG ,
S_BKPF LIKE BKPF ,
TAB_BKPF LIKE BKPF OCCURS 0 WITH HEADER LINE ,
F_KALSM LIKE T005 -KALSM .
READ TABLE TI_BKPF INDEX 1 INTO S_BKPF .
S_BKPF -AWTYP = C_AWTYP_RMRP .
APPEND S_BKPF TO TAB_BKPF .
* dbseg fill for cash discount
LOOP AT TI_BSEG INTO S_BSEG .
IF S_BSEG -KOART = C_KOART_KRED .
T_DBSEG -XSKFB = X .
ELSE .
T_DBSEG -XSKFB = SPACE .
ENDIF .
APPEND T_DBSEG .
ENDLOOP .
CALL FUNCTION 'FIND_TAX_SPREADSHEET'
EXPORTING
BUCHUNGSKREIS = I_BUKRS
IMPORTING
SCHEMA = F_KALSM
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF SY -SUBRC NE 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
CALL FUNCTION 'CALCULATE_TAX_DOCUMENT'
EXPORTING
I_BUKRS = I_BUKRS
IMPORTING
E_ITXDAT = ITXDAT
TABLES
T_BKPF = TAB_BKPF
T_BSEG = TI_BSEG
T_DBSEG = T_DBSEG
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF SY -SUBRC NE 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
* amount eligible for cash discount
LOOP AT TI_BSEG INTO S_BSEG WHERE BUZID = C_BUZID_KRED .
READ TABLE T_DBSEG INDEX 1 INTO S_DBSEG .
S_BSEG -SKFBT = S_DBSEG -SKFBT .
MODIFY TI_BSEG FROM S_BSEG .
ENDLOOP .
* bseg fill
CALL FUNCTION 'CREATE_BSET_ITEM'
TABLES
T_BKPF = TI_BKPF
T_BSEG = TI_BSEG
T_BSET = TI_BSET .
* vendor amount incl. taxes
CLEAR : S_BSEG .
LOOP AT TI_BSEG INTO S_BSEG WHERE BUZID = C_BUZID_KRED .
IF ( ( S_BSEG -SHKZG = 'S' ) AND ( ITXDAT -SHKZG = 'S' ) )
OR ( ( S_BSEG -SHKZG = 'H' ) AND ( ITXDAT -SHKZG = 'H' ) ) .
S_BSEG -WRBTR = S_BSEG -WRBTR - ITXDAT -FWSTE .
ELSE .
S_BSEG -WRBTR = S_BSEG -WRBTR + ITXDAT -FWSTE .
ENDIF .
S_BSEG -REWWR = S_BSEG -WRBTR .
S_BSEG -TXBFW = S_BSEG -WRBTR .
MODIFY TI_BSEG FROM S_BSEG .
CLEAR S_BSEG .
ENDLOOP .
ENDFORM . " BSET_FILL
*&---------------------------------------------------------------------*
*& Form RKWA_UPDATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM RKWA_UPDATE TABLES TI_RKWA TYPE TYP_TAB_RKWA
TI_TAX TYPE TYP_TAB_TAX
USING I_BELNR LIKE RKWA -BELNR
I_GJAHR LIKE RKWA -GJAHR
I_LIFNR LIKE RKWA -LIFNR
I_VENDOR_LINE TYPE C
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : S_RKWA LIKE RKWA ,
S_TAX TYPE TYP_TAX .
LOOP AT TI_RKWA INTO S_RKWA .
S_RKWA -STATUS = '01' .
S_RKWA -BELNR = I_BELNR .
S_RKWA -GJAHR = I_GJAHR .
IF NOT I_VENDOR_LINE IS INITIAL .
S_RKWA -BUZEI = SY -TABIX + 1 . "erste Zeile ist Kreditorenzeile
ELSE .
S_RKWA -BUZEI = SY -TABIX .
ENDIF .
* sales tax flag
READ TABLE TI_TAX INTO S_TAX
WITH KEY MATNR = S_RKWA -MATNR
WERKS = S_RKWA -WERKS
LIFNR = I_LIFNR .
IF SY -SUBRC NE 0 .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '008' .
S_MSG -MSGV1 = 'RKWA_UPDATE' .
X_FEHLER = X .
EXIT .
ENDIF .
IF S_RKWA -MWSKZ IS INITIAL . "ab 4.5A Eintrag in der RKWA
S_RKWA -MWSKZ = S_TAX -MWSKZ .
ENDIF .
MODIFY TI_RKWA FROM S_RKWA .
ENDLOOP .
*------ Abrechnung Konsi-Verbindlichkeiten ---------------------------*
DESCRIBE TABLE TI_RKWA LINES SY -TFILL .
IF SY -TFILL GT 0 .
CALL FUNCTION 'MR_RKWA_UPDATE' IN UPDATE TASK
EXPORTING
I_UPDKZ = 'U'
TABLES
T_RKWA = TI_RKWA .
ENDIF .
ENDFORM . " RKWA_UPDATE
*&---------------------------------------------------------------------*
*& Form VARIANT_INIT
*&---------------------------------------------------------------------*
FORM VARIANT_INIT .
CLEAR S_VARIANT .
S_VARIANT - REPORT = C_REPID .
ENDFORM . " VARIANT_INIT
*&---------------------------------------------------------------------*
*& Form F4_VARIA
*&---------------------------------------------------------------------*
FORM F4_VARIA CHANGING CF_VARIA LIKE DISVARIANT -VARIANT .
DATA : F_EXIT ( 1 ) TYPE C .
PERFORM VARIANT_INIT .
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = S_VARIANT
I_SAVE = C_SAVE
IMPORTING
E_EXIT = F_EXIT
ES_VARIANT = S_VAR_USR
EXCEPTIONS
NOT_FOUND = 2 .
IF SY -SUBRC = 2 .
MESSAGE ID SY -MSGID TYPE 'S' NUMBER SY -MSGNO
WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .
ELSE .
IF F_EXIT = SPACE .
CF_VARIA = S_VAR_USR -VARIANT .
ENDIF .
ENDIF .
ENDFORM . " F4_VARIA
*&---------------------------------------------------------------------*
*& Form HEAD_MESSAGE_CREATE
*&---------------------------------------------------------------------*
FORM HEAD_MESSAGE_CREATE TABLES TI_BKPF TYPE TYP_TAB_BKPF
TI_BSEG TYPE TYP_TAB_BSEG
USING I_BLART LIKE T169F -BLART
I_BELNR LIKE RKWA -BELNR
I_BUKRS LIKE RKWA -BUKRS
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : LF_UPDATE LIKE BOOLE -BOOLE .
DATA : H_RBKPV TYPE MRM_RBKPV ,
LS_KOMKBMR LIKE KOMKBMR .
CLEAR : H_RBKPV , S_MSG .
MOVE-CORRESPONDING TI_BKPF TO H_RBKPV .
READ TABLE TI_BSEG INDEX 1 .
H_RBKPV -BELNR = I_BELNR .
H_RBKPV -LIFNR = TI_BSEG -LIFNR .
* create messages
LF_UPDATE = 'X' .
* Kommunikationsstruktur füllen
CLEAR LS_KOMKBMR .
LS_KOMKBMR -BUKRS = I_BUKRS .
LS_KOMKBMR -BELNR = I_BELNR .
LS_KOMKBMR -BLART = I_BLART .
LS_KOMKBMR -USNAM = H_RBKPV -USNAM .
IF NOT TI_BSEG -FILKD IS INITIAL .
LS_KOMKBMR -LIFNR = TI_BSEG -FILKD . " Partner LF
ELSE .
LS_KOMKBMR -LIFNR = TI_BSEG -LIFNR . " Partner LF
ENDIF .
LS_KOMKBMR -LIFRE = TI_BSEG -LIFNR . " Partner RS
LS_KOMKBMR -IDENT = C_IDENT_KONS .
CALL FUNCTION 'MRM_HEAD_MESSAGE_CREATE'
EXPORTING
IF_KAPPL = C_KAPPL_MR
IF_KALSM = C_KALSM_0003
IS_RBKPV = H_RBKPV
IS_KOMKBMR = LS_KOMKBMR
IF_UPDATE = LF_UPDATE
EXCEPTIONS
ERROR_MESSAGE = 2
OTHERS = 3 .
IF SY -SUBRC <> 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
IF SY -MSGTY = 'A' . "Ausgabe der A-Meldung als E-Meldung:
S_MSG -MSGTY = 'E' .
ENDIF .
X_FEHLER = X .
EXIT .
ENDIF .
ENDFORM . " HEAD_MESSAGE_CREATE
*&---------------------------------------------------------------------*
*& Form authority_check
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM AUTHORITY_CHECK USING AUTH_OBJ
AUTH_ID
AUTH_VAL TYPE LFA1 -BEGRU
CHANGING S_MSG TYPE TYP_MSG
X_FEHLER TYPE C .
CASE AUTH_OBJ .
WHEN 'BEK' .
AUTHORITY-CHECK OBJECT 'F_BKPF_BEK'
ID 'ACTVT' FIELD '01'
ID AUTH_ID FIELD AUTH_VAL .
IF SY -SUBRC NE 0 .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '120' .
S_MSG -MSGV1 = AUTH_VAL .
X_FEHLER = X .
EXIT .
ENDIF .
ENDCASE .
ENDFORM . " authority_check
*&---------------------------------------------------------------------*
*& Form bseg_lines_numbering
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_TI_BSEG[] text
*----------------------------------------------------------------------*
FORM BSEG_LINES_NUMBERING CHANGING TI_BSEG TYPE TYP_TAB_BSEG .
DATA : S_BSEG LIKE BSEG ,
F_BUZEI LIKE BSEG -BUZEI .
CLEAR : F_BUZEI .
LOOP AT TI_BSEG INTO S_BSEG .
F_BUZEI = F_BUZEI + 1 .
S_BSEG -BUZEI = F_BUZEI .
MODIFY TI_BSEG FROM S_BSEG TRANSPORTING BUZEI .
ENDLOOP .
ENDFORM . " bseg_lines_numbering
*&---------------------------------------------------------------------*
*& Form nav_verteilen
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TI_BSEG text
*----------------------------------------------------------------------*
FORM NAV_VERTEILEN TABLES TI_BSEG STRUCTURE BSEG .
DATA : LT_BSEG_OUTPUT TYPE STANDARD TABLE OF BSEG ,
LT_BSEG_INPUT TYPE STANDARD TABLE OF BSEG .
DATA : LS_BSEG LIKE BSEG . "1824213 start
DATA : LV_COUNTER TYPE I .
FIELD-SYMBOLS : <LS_BSEG> TYPE BSEG ,
<LS_BSEG_OUTPUT> TYPE BSEG .
LOOP AT TI_BSEG ASSIGNING <LS_BSEG>
WHERE BUZID = C_BUZID_SACH
AND KOART = C_KOART_SACH .
LV_COUNTER = LV_COUNTER + 1 .
<LS_BSEG> -XREF1 = LV_COUNTER .
LS_BSEG = <LS_BSEG> .
APPEND LS_BSEG TO LT_BSEG_INPUT .
ENDLOOP .
CLEAR : LS_BSEG .
CALL FUNCTION 'NDVAT_ADJUSTMENT'
EXPORTING
I_BSEG = LS_BSEG
READ_BSEG = 'X'
CALCULATE = 'M'
IMPORTING
E_BSEG = LS_BSEG
TABLES
T_BSEG_INPUT = LT_BSEG_INPUT
T_BSEG_OUTPUT = LT_BSEG_OUTPUT .
LOOP AT TI_BSEG ASSIGNING <LS_BSEG>
WHERE BUZID = C_BUZID_SACH
AND KOART = C_KOART_SACH .
READ TABLE LT_BSEG_OUTPUT ASSIGNING <LS_BSEG_OUTPUT>
WITH KEY XREF1 = <LS_BSEG> -XREF1 .
IF <LS_BSEG_OUTPUT> IS ASSIGNED .
<LS_BSEG> -WRBTR = <LS_BSEG_OUTPUT> -WRBTR .
DELETE TABLE LT_BSEG_OUTPUT FROM <LS_BSEG_OUTPUT> .
CLEAR <LS_BSEG> -XREF1 .
ENDIF .
ENDLOOP . "1824213 end
ENDFORM . " nav_verteilen
*&---------------------------------------------------------------------*
*& Form null_lines_check *
*&---------------------------------------------------------------------*
* Prüft ob der Beleg nur 0-Zeilen beinhaltet *
*----------------------------------------------------------------------*
* -->P_TAB_BSEG text
* <--P_X_FEHLER text
* <--P_S_MSG text
*----------------------------------------------------------------------*
FORM NULL_LINES_CHECK TABLES TI_BSEG STRUCTURE BSEG
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : XNULLPOS LIKE BOOLE -BOOLE .
*--- Überprüfung, ob der zu erzeugende FI-Beleg nicht nur Nullzeilen --*
*--- enthält: --*
MOVE 'X' TO XNULLPOS .
LOOP AT TI_BSEG .
IF XNULLPOS = SPACE .
EXIT .
ELSE .
IF TI_BSEG -WRBTR <> 0 OR TI_BSEG -FWBAS <> 0 .
CLEAR XNULLPOS .
ENDIF .
ENDIF .
ENDLOOP .
IF XNULLPOS = 'X' .
CLEAR : S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '278' .
X_FEHLER = X .
EXIT .
ENDIF .
ENDFORM . " null_lines_check
*&---------------------------------------------------------------------*
*& Form BADI_HEADERDATA_MODIFY
*&---------------------------------------------------------------------*
* in this BAdI the vendor and the invoice type can be changed
*----------------------------------------------------------------------*
FORM BADI_HEADERDATA_MODIFY TABLES IT_RKWA TYPE TYP_TAB_RKWA
USING I_BUKRS LIKE BKPF -BUKRS
CHANGING X_BLART LIKE T169F -BLART
X_LIFNR LIKE RKWA -LIFNR
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
CALL FUNCTION 'MRMBADI_MRKO_HDAT_MODIFY'
EXPORTING
I_BUKRS = I_BUKRS
I_LIFNR = X_LIFNR
I_BLART = X_BLART
TI_RKWA = IT_RKWA[]
IMPORTING
E_LIFNR = X_LIFNR
E_BLART = X_BLART
EXCEPTIONS
BADI_ERROR = 01 .
IF ( SY -SUBRC <> 0 ) .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
ENDFORM . " badi_headerdata_modify
*eject
*&---------------------------------------------------------------------*
*& Form DOCUMENT_TYPE_CHECK
*&---------------------------------------------------------------------*
* netto document type is not allowed
*----------------------------------------------------------------------*
FORM DOCUMENT_TYPE_CHECK USING BLART LIKE T169F -BLART
CHANGING S_T003 LIKE T003
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
CLEAR : S_T003 .
* gefundene Belegart darf nicht NettoBelegart sein
CALL FUNCTION 'FI_DOCUMENT_TYPE_DATA'
EXPORTING
I_BLART = BLART
IMPORTING
E_T003 = S_T003
EXCEPTIONS
ERROR_MESSAGE = 1
OTHERS = 2 .
IF ( SY -SUBRC <> 0 ) .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
IF ( S_T003 -XNETB = X ) .
CLEAR : S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '733' .
S_MSG -MSGV1 = C_TCODE_MRKO .
S_MSG -MSGV2 = BLART .
X_FEHLER = X .
EXIT .
ENDIF .
ENDFORM . "document_type_check
*&--------------------------------------------------------------------*
*& Form fm_account_assignment_get
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->S_RKWA text
* -->S_BSEG text
* -->X_FEHLER text
* -->S_MSG text
*---------------------------------------------------------------------*
FORM FM_ACCOUNT_ASSIGNMENT_GET USING S_RKWA STRUCTURE RKWA
CHANGING S_BSEG STRUCTURE BSEG
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
INCLUDE : IFIFMCON_APPL ,
IFIFMCON_BOOL .
DATA : L_F_MSEG LIKE ACCTIT ,
L_FLAG_FMAKT TYPE C ,
L_FLG_ISPS_NOT_ACTIVE TYPE C .
* definitions for reading archived documents from AIS
DATA : LT_ARCMKPF TYPE TY_T_MKPF ,
LT_ARCMSEG TYPE TY_T_MSEG ,
LS_ARCMSEG TYPE MSEG ,
LS_BORIDENT TYPE BORIDENT .
*----- Nur Aufrufen wenn IS-PS aktiv ist
CALL FUNCTION 'FM00_CHECK_ISPS'
IMPORTING
E_FLG_ISPS_NOT_ACTIVE = L_FLG_ISPS_NOT_ACTIVE .
CHECK L_FLG_ISPS_NOT_ACTIVE IS INITIAL .
CALL FUNCTION 'FMFK_BUKRS_CHECK_FMAKTIV'
EXPORTING
IP_BUKRS = S_RKWA -BUKRS
IP_APPLC = APPLC_CA
IMPORTING
OP_IS_ACTIVE = L_FLAG_FMAKT
EXCEPTIONS
NO_FIKRS_FOR_BUKRS = 01
WRONG_INPUT_FLAG = 02 . "#EC *
CHECK L_FLAG_FMAKT = CON_JA AND SY -SUBRC IS INITIAL .
*----- HHM Kontierung aus dem Materialbeleg holen
SELECT SINGLE FIPOS FISTL FKBER GEBER BUDGET_PD GRANT_NBR
FROM ACCTIT
INTO CORRESPONDING FIELDS OF L_F_MSEG
WHERE AWTYP = 'MKPF'
AND AWREF = S_RKWA -MBLNR
AND AWORG = S_RKWA -MJAHR
AND ZEILE = S_RKWA -ZEILE
AND KTOSL = 'GBB' .
IF SY -SUBRC <> 0 OR L_F_MSEG -FIPOS IS INITIAL .
SELECT SINGLE FIPOS FISTL GEBER FKBER GRANT_NBR
FROM MSEG
INTO CORRESPONDING FIELDS OF L_F_MSEG
WHERE MBLNR = S_RKWA -MBLNR
AND MJAHR = S_RKWA -MJAHR
AND ZEILE = S_RKWA -ZEILE .
IF SY -SUBRC <> 0 .
* read MM doc data from AIS (archive)
REFRESH LT_ARCMKPF .
REFRESH LT_ARCMSEG .
CLEAR LS_BORIDENT .
CONCATENATE S_RKWA -MBLNR S_RKWA -MJAHR
INTO LS_BORIDENT -OBJKEY .
CALL FUNCTION 'ASH_MM_MATBEL_READ'
EXPORTING
I_BORIDENT = LS_BORIDENT
TABLES
ET_MKPF = LT_ARCMKPF
ET_MSEG = LT_ARCMSEG
EXCEPTIONS
ERROR_MESSAGE = 1
OTHERS = 4 .
IF SY -SUBRC = 0 .
LOOP AT LT_ARCMSEG INTO LS_ARCMSEG
WHERE ZEILE = S_RKWA -ZEILE .
L_F_MSEG -FIPOS = LS_ARCMSEG -FIPOS .
L_F_MSEG -FISTL = LS_ARCMSEG -FISTL .
L_F_MSEG -GEBER = LS_ARCMSEG -GEBER .
L_F_MSEG -FKBER = LS_ARCMSEG -FKBER .
L_F_MSEG -GRANT_NBR = LS_ARCMSEG -GRANT_NBR .
ENDLOOP .
ELSE .
IF 1 = 2 .
MESSAGE E298 (FI ) .
* MSEG Zeile nicht gefunden! Ableitung der HHM Kontierung nicht möglic
ENDIF .
CLEAR : S_MSG .
S_MSG -MSGID = 'FI' .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '298' .
X_FEHLER = 'X' .
EXIT .
ENDIF .
ENDIF .
ENDIF .
S_BSEG -GRANT_NBR = L_F_MSEG -GRANT_NBR .
S_BSEG -FKBER_LONG = L_F_MSEG -FKBER .
S_BSEG -FIPOS = L_F_MSEG -FIPOS .
S_BSEG -GEBER = L_F_MSEG -GEBER .
* Budget Period EhP4
IF CL_OPS_SWITCH_CHECK =>OPS_SFWS_BUD_PER ( ) IS NOT INITIAL .
S_BSEG -BUDGET_PD = L_F_MSEG -BUDGET_PD .
ENDIF .
S_BSEG -FISTL = L_F_MSEG -FISTL .
ENDFORM . "fm_account_assignment_get
*&---------------------------------------------------------------------*
*& Form withholding_tax_create
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TAB_ACCIT_WT text
* -->P_TI_RBWS text
*----------------------------------------------------------------------*
FORM WITHHOLDING_TAX_CREATE TABLES TE_ACCIT_WT STRUCTURE ACCIT_WT
TI_RBWS TYPE TYP_TAB_RBWS .
CHECK NOT TI_RBWS[] IS INITIAL .
DATA : S_RBWS LIKE RBWS .
LOOP AT TI_RBWS INTO S_RBWS .
CLEAR TE_ACCIT_WT .
MOVE-CORRESPONDING S_RBWS TO TE_ACCIT_WT .
TE_ACCIT_WT -WT_KEY = S_RBWS -SPLIT_KEY .
APPEND TE_ACCIT_WT .
ENDLOOP .
ENDFORM . " withholding_tax_create
*&---------------------------------------------------------------------*
*& Form vendor_taxnum_check
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_RKWA text
* -->P_S_T001 text
* -->P_LIFNR text
* <--P_X_FEHLER text
* <--P_S_MSG text
*----------------------------------------------------------------------*
FORM VENDOR_TAXNUM_CHECK TABLES TI_RKWA TYPE TYP_TAB_RKWA
USING S_T001 LIKE T001
I_LIFNR LIKE RKWA -LIFNR
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : S_TAXDATA TYPE MRM_TAX_2 ,
S_RKWA LIKE RKWA ,
S_KRED LIKE VF_KRED ,
TAB_TAXDATA TYPE MRM_TAB_TAXES ,
S_T005 LIKE T005 .
CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE'
EXPORTING
I_ARBGB = 'M8'
I_DTYPE = 'W'
I_MSGNR = '759'
IMPORTING
E_MSGTY = SY -MSGTY .
CHECK SY -MSGTY = 'E' .
* read vendor
CALL FUNCTION 'FI_VENDOR_DATA'
EXPORTING
I_LIFNR = I_LIFNR
IMPORTING
E_KRED = S_KRED
EXCEPTIONS
VENDOR_MISSING = 1
OTHERS = 2 .
IF SY -SUBRC NE 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
* check country of vendor
CALL FUNCTION 'T005_SINGLE_READ'
EXPORTING
T005_LAND1 = S_KRED -LAND1
IMPORTING
WT005 = S_T005
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2 .
IF SY -SUBRC <> 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ELSEIF S_T005 -XEGLD IS INITIAL .
EXIT .
ENDIF .
* fill table taxdata
LOOP AT TI_RKWA INTO S_RKWA WHERE MWSKZ NE SPACE .
S_TAXDATA -MWSKZ = S_RKWA -MWSKZ .
COLLECT S_TAXDATA INTO TAB_TAXDATA .
ENDLOOP .
* read country data of company code
CALL FUNCTION 'MRM_T005_READ'
EXPORTING
TI_T001 = S_T001
IMPORTING
TE_T005 = S_T005
TABLES
TI_TAXDATA = TAB_TAXDATA . "#EC FB_NORC
IF SY -SUBRC <> 0 . "#EC FB_NORC
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ELSEIF S_T005 -XEGLD IS INITIAL .
EXIT .
ENDIF .
* check tax number
IF ( ( S_T005 -INTCA <> 'DE' AND S_KRED -STENR IS INITIAL )
OR ( S_T005 -INTCA = 'DE' AND S_KRED -STENR IS INITIAL
AND S_KRED -STCD1 IS INITIAL ) ) AND S_KRED -STCEG IS INITIAL .
SY -MSGTY = 'E' .
SY -MSGID = 'M8' .
SY -MSGNO = '759' .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
ENDFORM . " vendor_taxnum_check
*&---------------------------------------------------------------------*
*& Form LOCK_RKWA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_RKWA text
* <--P_X_FEHLER text
* <--P_S_MSG text
*----------------------------------------------------------------------*
FORM LOCK_RKWA TABLES IT_RKWA TYPE TYP_TAB_RKWA
CHANGING X_FEHLER
S_MSG TYPE TYP_MSG .
DATA : LS_RKWA LIKE RKWA .
CLEAR X_FEHLER .
LOOP AT IT_RKWA INTO LS_RKWA .
CALL FUNCTION 'ENQUEUE_E_RKWA'
EXPORTING
MBLNR = LS_RKWA -MBLNR
MJAHR = LS_RKWA -MJAHR
ZEILE = LS_RKWA -ZEILE
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
OTHERS = 3 .
IF SY -SUBRC <> 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = 'X' .
EXIT .
ENDIF .
ENDLOOP .
ENDFORM . " lock_rkwa
*{ INSERT
INCLUDE WRF_RMVKON00F01 . "Note 663537
*ENHANCEMENT-POINT RMVKON00_G4 SPOTS ES_RMVKON00 STATIC.
*ENHANCEMENT-POINT RMVKON00_G5 SPOTS ES_RMVKON00.
*ENHANCEMENT-POINT RMVKON00_G6 SPOTS ES_RMVKON00 STATIC.
*ENHANCEMENT-POINT RMVKON00_G7 SPOTS ES_RMVKON00.
*---------------------------------------------------------------------*
* Historie
*---------------------------------------------------------------------*
* - zu Release 2.x: erste Version, nur Anzeige möglich
* - zu Release 3.0a: Abrechnen im Dialog möglich
* - zu Release 4.0a: Umstellung von BSEG auf RKWA, Anschluß an NaSt,
* Abrechnen im batch
* - zu Release 4.5a: Abrechnen mit nicht abzugsfähigen Steuern möglich
* - zu Release 4.6C: Liste mit ALV
* - Beleg wird direkt über RWIN gebucht AC_DOCUMENT_CREATE und _POST
*---------------------------------------------------------------------*
* tables *
*---------------------------------------------------------------------*
TABLES :
* benutzt für SELECT
RKWA ,
* benutzt bei externem Perform
BKPF ,
BSEG ,
BSET ,
ITXDAT ,
T001W .
TYPE-POOLS : MRM , SHLP .
INCLUDE : MRM_CONST_COMMON , "allgemeine Konstanten
MRM_CONST_NAST , " Nachrichten
MRM_CONST_MRM ,
MRM_CONST_ME , "aus dem Einkauf
MRM_CONST_MB , "aus der Bestandsführung
MRM_CONST_FI . "aus dem FI
*---------------------------------------------------------------------*
* Typen (TYP_*)
*---------------------------------------------------------------------*
* Meldung
TYPES : BEGIN OF TYP_MSG ,
MSGID LIKE SY -MSGID ,
MSGTY LIKE SY -MSGTY ,
MSGNO LIKE SY -MSGNO ,
MSGV1 LIKE SY -MSGV1 ,
MSGV2 LIKE SY -MSGV2 ,
MSGV3 LIKE SY -MSGV3 ,
MSGV4 LIKE SY -MSGV4 ,
END OF TYP_MSG .
* Block von Warenentnahmen (zu Buchungskreis/Lieferant)
TYPES : BEGIN OF TYP_BLOCK ,
BUKRS LIKE RKWA -BUKRS , "key
LIFNR LIKE RKWA -LIFNR , "key
BWAER LIKE RKWA -BWAER , "key
IT_RKWA LIKE RKWA OCCURS 1 , "Warenentnahmen
BSTAT TYPE C , "Status -> C_BSTAT_*
BELNR LIKE RKWA -BELNR , "Rechnungsbeleg
GJAHR LIKE RKWA -GJAHR , "Rechnungsbeleg
MSGID LIKE SY -MSGID ,
MSGTY LIKE SY -MSGTY ,
MSGNO LIKE SY -MSGNO ,
MSGV1 LIKE SY -MSGV1 ,
MSGV2 LIKE SY -MSGV2 ,
MSGV3 LIKE SY -MSGV3 ,
MSGV4 LIKE SY -MSGV4 ,
END OF TYP_BLOCK .
* zum Berechnen der Steuern
TYPES : BEGIN OF TYP_BSET ,
WRBTR LIKE BSEG -WRBTR , "CURR statt CHAR (Vorzeichen!)
FWSTE LIKE BSET -FWSTE , "CURR statt CHAR (Vorzeichen!)
MWSKZ LIKE RBSET -MWSKZ ,
TXJCD LIKE T001W -TXJCD ,
END OF TYP_BSET .
* Puffer für MWSKZ/TXJCD Abhängigkeit von Material, Lieferant und Werk
TYPES : BEGIN OF TYP_TAX ,
MATNR LIKE BSEG -MATNR , "key
WERKS LIKE T001W -WERKS , "key
LIFNR LIKE VF_KRED -LIFNR , "key
MWSKZ LIKE RBSET -MWSKZ ,
TXJCD LIKE T001W -TXJCD ,
END OF TYP_TAX .
* Tabellentypen (TYP_TAB_*)
TYPES : TYP_TAB_BKPF LIKE BKPF OCCURS 1 ,
TYP_TAB_BSEG LIKE BSEG OCCURS 1 ,
TYP_TAB_BSET LIKE BSET OCCURS 1 ,
TYP_TAB_RKWA LIKE RKWA OCCURS 1 ,
TYP_TAB_BLOCK TYPE TYP_BLOCK OCCURS 1 ,
TYP_TAB_TAX TYPE TYP_TAX OCCURS 1 ,
TYP_TAB_RBWS LIKE RBWS OCCURS 1 .
DATA : S_VARIANT LIKE DISVARIANT ,
S_VAR_USR LIKE DISVARIANT .
*---------------------------------------------------------------------*
* Konstanten (C_*) *
*---------------------------------------------------------------------*
CONSTANTS :
C_SAVE ( 1 ) TYPE C VALUE 'A' ,
C_REPID TYPE SY -REPID VALUE 'ZRMVKON00' ,
C_TOP_OF_LIST TYPE SLIS_FORMNAME VALUE 'TOP_OF_LIST' ,
C_DOKCLASS_NA TYPE DSYSH -DOKCLASS VALUE 'NA' ,
* Transaktionscodes
C_TCODE_MRKO LIKE SY -TCODE VALUE 'MRKO' ,
* RKWA-Status
C_STATUS_NINV LIKE RKWA -STATUS VALUE '00' , "nicht abgerechnet
C_STATUS_INV LIKE RKWA -STATUS VALUE '01' , "abgerechnet
* Block-Abrechnungs-Status
C_BSTAT_NULL TYPE C VALUE SPACE , "nicht verarbeitet
C_BSTAT_OK TYPE C VALUE '1' , "abgerechnet
C_BSTAT_FEHLER TYPE C VALUE '2' , "Fehler bei Abrechnung
* Sonstiges
C_STYPE_N LIKE BBKPF -STYPE VALUE 'N' . "batch-input: no
*---------------------------------------------------------------------*
* globale Felder (G_*, GT_*)
*---------------------------------------------------------------------*
* GT_BLOCK enthält alle Blöcke, GT_BLOCK selber ist sortiert nach
* Buchungskreis und Lieferant.
* Ein Block enthält alle Warenentnahmen zu einem Buch.kreis/Lieferanten.
* Die WE in einem Block sind sortiert nach Matbelegnr und -Position.
DATA : GT_BLOCK TYPE TYP_BLOCK OCCURS 1 .
*---------------------------------------------------------------------*
* globale Felder, lokal genutzt (L_*, LT_*)
*---------------------------------------------------------------------*
TYPES : BEGIN OF TY_CON_ALV .
INCLUDE STRUCTURE RKWA .
TYPES : BOX TYPE C ,
COLINFO TYPE SLIS_T_SPECIALCOL_ALV ,
MSGTY LIKE MESG -MSGTY ,
TEXT LIKE MESG - TEXT ,
ARBGB LIKE MESG -ARBGB ,
TXTNR LIKE MESG -TXTNR ,
MSGV1 LIKE MESG -MSGV1 ,
MSGV2 LIKE MESG -MSGV2 ,
MSGV3 LIKE MESG -MSGV3 ,
MSGV4 LIKE MESG -MSGV4 ,
END OF TY_CON_ALV .
* alle selektierten Warenentnahmen (temporär benutzt)
DATA : LT_RKWA LIKE RKWA OCCURS 1 ,
T_ALV_LIST TYPE TABLE OF TY_CON_ALV . " ALV-Ausgabeliste
*---------------------------------------------------------------------*
* Ranges
*---------------------------------------------------------------------*
RANGES : R_STATUS FOR RKWA -STATUS OCCURS 1 ,
R_SOBKZ FOR RKWA -SOBKZ OCCURS 1 .
*---------------------------------------------------------------------*
* Select-options & Parameter
*---------------------------------------------------------------------*
* Rahmen "Auswahl"
SELECTION-SCREEN BEGIN OF BLOCK AUSWAHL WITH FRAME
TITLE TEXT - 001 .
SELECT-OPTIONS :
SO_BUKRS FOR RKWA -BUKRS OBLIGATORY MEMORY ID BUK ,
SO_LIFNR FOR RKWA -LIFNR MATCHCODE OBJECT KRED ,
SO_WERKS FOR RKWA -WERKS ,
SO_MATNR FOR RKWA -MATNR MATCHCODE OBJECT MAT1 ,
SO_BLDAT FOR RKWA -BLDAT ,
SO_BUDAT FOR RKWA -BUDAT ,
SO_MBLNR FOR RKWA -MBLNR .
SELECTION-SCREEN SKIP .
PARAMETERS :
PA_XKONS LIKE RM08REP0 -KONS_XKONS DEFAULT 'X' ,
PA_XPIPE LIKE RM08REP0 -KONS_XPIPE DEFAULT 'X' .
SELECTION-SCREEN END OF BLOCK AUSWAHL .
* Rahmen "Verarbeitung"
* SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK VERARBEITUNG WITH FRAME
TITLE TEXT - 002 .
SELECTION-SCREEN BEGIN OF LINE .
PARAMETERS : PA_XANZ LIKE RM08REP0 -KONS_XANZ
RADIOBUTTON GROUP MOD DEFAULT 'X' USER-COMMAND KLICK .
SELECTION-SCREEN COMMENT 3 ( 20 ) TEXT - 005 FOR FIELD PA_XANZ .
SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN BEGIN OF LINE .
PARAMETERS : PA_XABR LIKE RM08REP0 -KONS_XABR
RADIOBUTTON GROUP MOD .
SELECTION-SCREEN COMMENT 3 ( 20 ) TEXT - 006 FOR FIELD PA_XABR .
SELECTION-SCREEN END OF LINE .
PARAMETERS :
P_BUDAT LIKE BKPF -BUDAT DEFAULT SY -DATLO OBLIGATORY ,
P_BLDAT LIKE BKPF -BLDAT DEFAULT SY -DATLO OBLIGATORY ,
P_XBLNR LIKE BKPF -XBLNR .
SELECTION-SCREEN END OF BLOCK VERARBEITUNG .
* Rahmen "Anzeigen"
* SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK ANZEIGEN WITH FRAME
TITLE TEXT - 003 .
PARAMETERS :
PA_XNINV LIKE RM08REP0 -KONS_XNINV DEFAULT 'X' MODIF ID K ,
PA_XINV LIKE RM08REP0 -KONS_XINV DEFAULT SPACE MODIF ID K .
SELECT-OPTIONS :
SO_BELNR FOR RKWA -BELNR MODIF ID K .
* Protokoll der Nachrichtenfindung
PARAMETERS :
* Anzeigevariante
PA_VARIA LIKE DISVARIANT -VARIANT MODIF ID K .
SELECTION-SCREEN END OF BLOCK ANZEIGEN .
*---------------------------------------------------------------------**
* Initialization.
*---------------------------------------------------------------------**
INITIALIZATION .
* Schalter Varianten benutzerspezifisch/allgemein speicherbar setzen
PERFORM VARIANT_INIT .
* Get default variant
S_VAR_USR = S_VARIANT .
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
I_SAVE = C_SAVE
CHANGING
CS_VARIANT = S_VAR_USR
EXCEPTIONS
NOT_FOUND = 2 .
IF SY -SUBRC = 0 .
PA_VARIA = S_VAR_USR -VARIANT .
ENDIF .
************************************************************************
* Ereignis AT SELECTION-SCREEN
***********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR PA_VARIA .
PERFORM F4_VARIA CHANGING PA_VARIA .
AT SELECTION-SCREEN .
* Selektion unsinnig?
IF ( ( PA_XKONS = SPACE ) AND
( PA_XPIPE = SPACE ) )
OR ( ( PA_XINV = SPACE ) AND
( NOT SO_BELNR IS INITIAL ) )
OR ( ( PA_XANZ = X ) AND
( PA_XINV IS INITIAL ) AND ( PA_XNINV IS INITIAL ) ) .
MESSAGE W736 .
ENDIF .
IF NOT PA_VARIA IS INITIAL .
MOVE S_VARIANT TO S_VAR_USR .
MOVE PA_VARIA TO S_VAR_USR -VARIANT .
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
I_SAVE = C_SAVE
CHANGING
CS_VARIANT = S_VAR_USR .
S_VARIANT = S_VAR_USR .
ELSE .
PERFORM VARIANT_INIT .
ENDIF .
***********************************************************************
* Reportablauf
***********************************************************************
START-OF-SELECTION .
* R_STATUS füllen
CLEAR R_STATUS[] .
IF ( PA_XNINV = X ) . "nicht abgerechnete
R_STATUS - SIGN = 'I' .
R_STATUS -OPTION = 'EQ' .
R_STATUS -LOW = C_STATUS_NINV .
R_STATUS -HIGH = SPACE .
APPEND R_STATUS .
ENDIF .
IF ( PA_XINV = X ) . "abgerechnete
R_STATUS - SIGN = 'I' .
R_STATUS -OPTION = 'EQ' .
R_STATUS -LOW = C_STATUS_INV .
R_STATUS -HIGH = SPACE .
APPEND R_STATUS .
ENDIF .
* R_SOBKZ füllen
CLEAR R_SOBKZ[] .
IF ( PA_XKONS = X ) .
R_SOBKZ - SIGN = 'I' .
R_SOBKZ -OPTION = 'EQ' .
R_SOBKZ -LOW = C_SOBKZ_KONS . "K
R_SOBKZ -HIGH = SPACE .
APPEND R_SOBKZ .
ENDIF .
IF ( PA_XPIPE = X ) .
R_SOBKZ - SIGN = 'I' .
R_SOBKZ -OPTION = 'EQ' .
R_SOBKZ -LOW = C_SOBKZ_PIPE . "P
R_SOBKZ -HIGH = SPACE .
APPEND R_SOBKZ .
ENDIF .
* SELECT von RKWA
CLEAR LT_RKWA .
IF ( PA_XANZ = X ) .
SELECT * FROM RKWA INTO TABLE LT_RKWA
WHERE BUKRS IN SO_BUKRS
AND LIFNR IN SO_LIFNR
AND WERKS IN SO_WERKS
AND MATNR IN SO_MATNR
AND BLDAT IN SO_BLDAT
AND BUDAT IN SO_BUDAT
AND MBLNR IN SO_MBLNR
AND SOBKZ IN R_SOBKZ
AND STATUS IN R_STATUS "Anzeigeoption
AND BELNR IN SO_BELNR . "Anzeigeoption
ELSE .
SELECT * FROM RKWA INTO TABLE LT_RKWA
WHERE BUKRS IN SO_BUKRS
AND LIFNR IN SO_LIFNR
AND WERKS IN SO_WERKS
AND MATNR IN SO_MATNR
AND BLDAT IN SO_BLDAT
AND BUDAT IN SO_BUDAT
AND MBLNR IN SO_MBLNR
AND SOBKZ IN R_SOBKZ
AND STATUS = C_STATUS_NINV . "nur nicht abgerechnete!
ENDIF .
PERFORM RKWA_PARTITIONIEREN TABLES LT_RKWA "--->
GT_BLOCK . "<---
CLEAR LT_RKWA .
***********************************************************************
* Ereignis END-OF-SELECTION
***********************************************************************
END-OF-SELECTION .
* keine Warenentnahme selektiert?
IF ( GT_BLOCK IS INITIAL ) .
MESSAGE S702 . "es wurden keine Belege selektiert
IF ( SY -BATCH = X ) .
LEAVE PROGRAM . "LEAVE TO TA ist nicht erlaubt
ELSE .
EXIT .
ENDIF .
ENDIF .
IF ( PA_XANZ = X ) .
PERFORM ALV_LIST_PREPARE TABLES GT_BLOCK T_ALV_LIST .
PERFORM ALV_LIST TABLES T_ALV_LIST .
ELSE . " pa_xabr = x
PERFORM ABRECHNEN TABLES GT_BLOCK .
PERFORM ALV_LIST_PREPARE TABLES GT_BLOCK T_ALV_LIST .
PERFORM ALV_LIST TABLES T_ALV_LIST .
ENDIF .
***********************************************************************
* allgemeine Form-Routinen
***********************************************************************
*---------------------------------------------------------------------*
* FORM ALV_LIST_PREPARE
*---------------------------------------------------------------------*
* Ausgabeliste für ALV aus der Tabelle GT_BLOCK bilden *
*---------------------------------------------------------------------*
FORM ALV_LIST_PREPARE TABLES PTI_BLOCK TYPE TYP_TAB_BLOCK
PTX_ALV_LIST LIKE T_ALV_LIST .
DATA : S_BLOCK TYPE TYP_BLOCK .
DATA : S_RKWA LIKE RKWA .
CLEAR : PTX_ALV_LIST , S_BLOCK , S_RKWA .
REFRESH : PTX_ALV_LIST .
LOOP AT PTI_BLOCK INTO S_BLOCK .
CLEAR : S_RKWA .
LOOP AT S_BLOCK -IT_RKWA INTO S_RKWA .
MOVE-CORRESPONDING : S_BLOCK TO PTX_ALV_LIST .
MOVE-CORRESPONDING : S_RKWA TO PTX_ALV_LIST .
PTX_ALV_LIST -ARBGB = S_BLOCK -MSGID .
PTX_ALV_LIST -TXTNR = S_BLOCK -MSGNO .
IF PA_XANZ = 'X' .
IF S_RKWA -STATUS = C_STATUS_INV .
PTX_ALV_LIST - TEXT = TEXT - 010 .
ELSEIF S_RKWA -STATUS = C_STATUS_NINV .
PTX_ALV_LIST - TEXT = TEXT - 012 .
ENDIF .
ENDIF .
APPEND : PTX_ALV_LIST .
CLEAR : S_RKWA .
ENDLOOP .
CLEAR : S_BLOCK .
ENDLOOP .
ENDFORM . "alv_list_prepare
*eject
*---------------------------------------------------------------------*
* FORM EVENTTAB_BUILD *
*---------------------------------------------------------------------*
* Dem ALV-Baustein bekannt geben, daß es zwei Routinen für die *
* Ausgabe der Listüberschriften: *
* TOP_OF_LIST Überschrift wird einmal am Anfang der Liste ausgegeben *
*---------------------------------------------------------------------*
FORM EVENTTAB_BUILD USING IT_EVENTS TYPE SLIS_T_EVENT .
DATA : L_EVENT TYPE SLIS_ALV_EVENT .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = IT_EVENTS .
READ TABLE IT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_LIST
INTO L_EVENT .
IF SY -SUBRC = 0 .
MOVE C_TOP_OF_LIST TO L_EVENT - FORM .
APPEND L_EVENT TO IT_EVENTS .
ENDIF .
ENDFORM . "eventtab_build
*eject
*---------------------------------------------------------------------*
* FORM MSG_FUELLEN_SYSVAR *
*---------------------------------------------------------------------*
* <--- S_MSG *
*---------------------------------------------------------------------*
FORM MSG_FUELLEN_SYSVAR CHANGING S_MSG TYPE TYP_MSG .
CLEAR S_MSG .
S_MSG -MSGID = SY -MSGID .
S_MSG -MSGTY = SY -MSGTY .
S_MSG -MSGNO = SY -MSGNO .
S_MSG -MSGV1 = SY -MSGV1 .
S_MSG -MSGV2 = SY -MSGV2 .
S_MSG -MSGV3 = SY -MSGV3 .
S_MSG -MSGV4 = SY -MSGV4 .
ENDFORM . "msg_fuellen_sysvar
*---------------------------------------------------------------------*
* Form RKWA_PARTITIONIEREN
*---------------------------------------------------------------------*
* Teilt die alle Warenentnahmen in IT_RKWA auf.
* Die Blöcke werden in IT_BLOCK abgelegt.
* ---> IT_RKWA
* <--- IT_BLOCK
*---------------------------------------------------------------------*
FORM RKWA_PARTITIONIEREN TABLES IT_RKWA TYPE TYP_TAB_RKWA
IT_BLOCK TYPE TYP_TAB_BLOCK .
DATA : S_BLOCK TYPE TYP_BLOCK ,
S_RKWA LIKE RKWA ,
IDX LIKE SY -TABIX ,
WRBTR LIKE RKWA -WRBTR ,
S_MSG TYPE TYP_MSG .
DATA : F_WAERS TYPE WAERS ,
F_OBJECT TYPE OBJECT_CURRO .
DATA : F_KURSF LIKE BKPF -KURSF .
F_OBJECT = 'BKPF' .
* baue IT_BLOCK auf (sortiert nach BUKRS/LIFNR)
CLEAR IT_BLOCK .
* Currency expired --> S_RKWA contains new currency (e.g. EUR) -------*
LOOP AT IT_RKWA INTO S_RKWA .
CALL FUNCTION 'CURRENCY_EXPIRATION_CHECK'
EXPORTING
CURRENCY = S_RKWA -BWAER
DATE = SY -DATLO
OBJECT = F_OBJECT
BUKRS = S_RKWA -BUKRS
IMPORTING
CURRENCY_NEW = F_WAERS
EXCEPTIONS
ERROR_MESSAGE = 4 .
IF SY -SUBRC = 0 .
F_WAERS = S_RKWA -BWAER .
ELSEIF F_WAERS IS INITIAL .
MESSAGE E607 WITH 'RKWA_PARTITIONIEREN' .
ENDIF .
IF S_RKWA -BWAER NE F_WAERS .
CLEAR : F_KURSF .
CALL FUNCTION 'READ_EXCHANGE_RATE'
EXPORTING
DATE = SY -DATLO
FOREIGN_CURRENCY = S_RKWA -BWAER
LOCAL_CURRENCY = F_WAERS
IMPORTING
EXCHANGE_RATE = F_KURSF
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF ( SY -SUBRC <> 0 ) .
MESSAGE ID SY -MSGID TYPE 'E'
NUMBER SY -MSGNO WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .
ENDIF .
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
FOREIGN_CURRENCY = S_RKWA -BWAER
LOCAL_CURRENCY = F_WAERS
FOREIGN_AMOUNT = S_RKWA -WRBTR
RATE = F_KURSF
DATE = SY -DATLO
IMPORTING
LOCAL_AMOUNT = S_RKWA -WRBTR
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF ( SY -SUBRC <> 0 ) .
MESSAGE ID SY -MSGID TYPE 'E'
NUMBER SY -MSGNO WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .
ENDIF .
IF NOT S_RKWA -NAVNW IS INITIAL .
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
FOREIGN_CURRENCY = S_RKWA -BWAER
LOCAL_CURRENCY = F_WAERS
FOREIGN_AMOUNT = S_RKWA -NAVNW
RATE = F_KURSF
DATE = SY -DATLO
IMPORTING
LOCAL_AMOUNT = S_RKWA -NAVNW
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF ( SY -SUBRC <> 0 ) .
MESSAGE ID SY -MSGID TYPE 'E'
NUMBER SY -MSGNO WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .
ENDIF .
ENDIF .
ENDIF .
S_RKWA -BWAER = F_WAERS .
READ TABLE IT_BLOCK INTO S_BLOCK
WITH KEY BUKRS = S_RKWA -BUKRS
LIFNR = S_RKWA -LIFNR
BWAER = S_RKWA -BWAER
BINARY SEARCH .
IDX = SY -TABIX .
IF ( SY -SUBRC <> 0 ) . "Block noch nicht vorhanden
CLEAR S_BLOCK .
S_BLOCK -BSTAT = C_BSTAT_NULL .
S_BLOCK -BUKRS = S_RKWA -BUKRS .
S_BLOCK -LIFNR = S_RKWA -LIFNR .
S_BLOCK -BWAER = S_RKWA -BWAER .
APPEND S_RKWA TO S_BLOCK -IT_RKWA .
INSERT S_BLOCK INTO IT_BLOCK INDEX IDX . "Tab. bleibt sortiert!
ELSE . "Block bereits vorhanden
APPEND S_RKWA TO S_BLOCK -IT_RKWA .
MODIFY IT_BLOCK FROM S_BLOCK INDEX IDX .
ENDIF .
ENDLOOP .
* rkwa_pruefen
LOOP AT IT_BLOCK INTO S_BLOCK .
CLEAR : S_RKWA .
LOOP AT S_BLOCK -IT_RKWA INTO S_RKWA .
IF ( S_RKWA -SOBKZ <> C_SOBKZ_KONS ) AND
( S_RKWA -SOBKZ <> C_SOBKZ_PIPE ) .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '008' .
S_MSG -MSGV1 = 'RKWA_PARTITIONIEREN' .
EXIT .
ENDIF .
ENDLOOP .
MOVE-CORRESPONDING S_MSG TO S_BLOCK .
MODIFY IT_BLOCK FROM S_BLOCK .
ENDLOOP .
* Partitionen sortieren
LOOP AT IT_BLOCK INTO S_BLOCK .
SORT S_BLOCK -IT_RKWA BY MJAHR MBLNR ZEILE .
MODIFY IT_BLOCK FROM S_BLOCK .
ENDLOOP .
ENDFORM . "rkwa_partitionieren
*eject
*---------------------------------------------------------------------*
* FORM LONG_MESSAGE_SHOW *
*---------------------------------------------------------------------*
* Langtext der Meldungen in der Ausgabeliste anzeigen *
*---------------------------------------------------------------------*
FORM LONG_TEXT_MESSAGE_SHOW USING I_ALV_LIST TYPE MRM_CON_ALV .
DATA : T_DUMMY LIKE TLINE OCCURS 1 ,
DOKNAME LIKE DOKIL -OBJECT , "CHAR60
TITLE LIKE DSYST -DOKTITLE ,
DYNNR LIKE HELP_INFO - DYNPRO ,
PFKEY LIKE HELP_INFO -PFKEY .
* System-Felder kopieren/konvertieren
TITLE = SY - TITLE .
DYNNR = SY -DYNNR .
PFKEY = SY -PFKEY .
* Dokumentname konstuieren
CALL FUNCTION 'DOCU_OBJECT_NAME_CONCATENATE'
EXPORTING
DOCU_ID = C_DOKCLASS_NA
ELEMENT = I_ALV_LIST -ARBGB
ADDITION = I_ALV_LIST -TXTNR
IMPORTING
OBJECT = DOKNAME .
* Aufruf Popup mit dem Langtext der Meldung
CALL FUNCTION 'HELP_OBJECT_SHOW'
EXPORTING
DOKCLASS = C_DOKCLASS_NA
DOKNAME = DOKNAME
DOKTITLE = TITLE
CALLED_BY_PROGRAM = C_REPID
CALLED_BY_DYNP = DYNNR
MSG_VAR_1 = I_ALV_LIST -MSGV1
MSG_VAR_2 = I_ALV_LIST -MSGV2
MSG_VAR_3 = I_ALV_LIST -MSGV3
MSG_VAR_4 = I_ALV_LIST -MSGV4
CALLED_BY_CUAPROG = C_REPID
CALLED_BY_CUASTAT = PFKEY
TABLES
LINKS = T_DUMMY .
ENDFORM . "long_text_message_show
*---------------------------------------------------------------------*
* FORM LONG_TEXT_MESSAGE_PREPARE *
*---------------------------------------------------------------------*
* ermittelt den Text zu einer von einem Funktionsbaustein zurückge- *
* lieferten Fehlermeldung *
*---------------------------------------------------------------------*
* Parameter: *
* <-> px_mesg: Struktur MESG; enthält die aufzubereitende Fehlermel- *
* dung; im Fehlerfall wird eine Default-Meldung abgelegt *
*---------------------------------------------------------------------*
FORM LONG_TEXT_MESSAGE_PREPARE CHANGING I_MESG STRUCTURE MESG .
DATA : H_MTEXT LIKE SY -LISEL ,
H_MSGNO LIKE SY -MSGNO .
MOVE I_MESG -TXTNR TO H_MSGNO .
CALL FUNCTION 'RPY_MESSAGE_COMPOSE'
EXPORTING
MESSAGE_ID = I_MESG -ARBGB
MESSAGE_NUMBER = H_MSGNO
MESSAGE_VAR1 = I_MESG -MSGV1
MESSAGE_VAR2 = I_MESG -MSGV2
MESSAGE_VAR3 = I_MESG -MSGV3
MESSAGE_VAR4 = I_MESG -MSGV4
IMPORTING
MESSAGE_TEXT = H_MTEXT
EXCEPTIONS
MESSAGE_NOT_FOUND = 1
OTHERS = 2 .
IF SY -SUBRC = 0 .
MOVE H_MTEXT ( 73 ) TO I_MESG - TEXT .
ELSE .
CALL FUNCTION 'RPY_MESSAGE_COMPOSE'
EXPORTING
MESSAGE_ID = SY -MSGID
MESSAGE_NUMBER = SY -MSGNO
MESSAGE_VAR1 = SY -MSGV1
MESSAGE_VAR2 = SY -MSGV2
MESSAGE_VAR3 = SY -MSGV3
MESSAGE_VAR4 = SY -MSGV4
IMPORTING
MESSAGE_TEXT = H_MTEXT
EXCEPTIONS
MESSAGE_NOT_FOUND = 1
OTHERS = 2 .
IF SY -SUBRC EQ 0 .
I_MESG - TEXT = H_MTEXT ( 73 ) .
ELSE .
* Ooops, no text!.
* message x062 with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ?
CLEAR I_MESG - TEXT .
ENDIF .
ENDIF .
ENDFORM . "LONG_TEXT_MESSAGE_PREPARE
***********************************************************************
* Form-Routinen zur Ausgabe
***********************************************************************
*---------------------------------------------------------------------*
* FORM ALV_LIST *
*---------------------------------------------------------------------*
* Protokoll in Form von ALV-Liste ausgeben *
*---------------------------------------------------------------------*
* Parameter: *
* <-> T_ALV_LIST *
*---------------------------------------------------------------------*
FORM ALV_LIST TABLES T_ALV_LIST LIKE T_ALV_LIST .
DATA : TAB_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV , " Feldkatalog
TAB_SORT TYPE SLIS_T_SORTINFO_ALV ,
S_LAYOUT TYPE SLIS_LAYOUT_ALV ,
TAB_EVENTS TYPE SLIS_T_EVENT ,
S_MESG LIKE MESG .
CONSTANTS :
C_PF_STATUS_SET TYPE SLIS_FORMNAME VALUE 'PF_STATUS_SET' ,
C_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND' .
S_LAYOUT -COLWIDTH_OPTIMIZE = 'X' .
S_LAYOUT -ZEBRA = 'X' .
S_LAYOUT -BOX_FIELDNAME = 'BOX' .
S_LAYOUT -GROUP_CHANGE_EDIT = 'X' .
S_LAYOUT -F2CODE = 'DISPLAY' .
PERFORM FIELD_CATALOG_BUILD TABLES TAB_FIELDCAT .
PERFORM EVENTTAB_BUILD USING TAB_EVENTS .
*-- Meldungstexte in Segtab-text aufbauen -----*
LOOP AT T_ALV_LIST WHERE TEXT IS INITIAL .
MOVE-CORRESPONDING T_ALV_LIST TO S_MESG .
PERFORM LONG_TEXT_MESSAGE_PREPARE CHANGING S_MESG .
T_ALV_LIST - TEXT = S_MESG - TEXT .
MODIFY T_ALV_LIST .
ENDLOOP .
*-- Bei Gutschrift Menge und Betrag mit Vorzeichen darstellen --*
LOOP AT T_ALV_LIST WHERE SHKZG = C_SHKZG_SOLL .
T_ALV_LIST -WRBTR = 0 - T_ALV_LIST -WRBTR .
T_ALV_LIST -BSTMG = 0 - T_ALV_LIST -BSTMG .
MODIFY T_ALV_LIST .
ENDLOOP .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BUFFER_ACTIVE = SPACE
I_CALLBACK_PROGRAM = C_REPID
I_CALLBACK_PF_STATUS_SET = C_PF_STATUS_SET
I_CALLBACK_USER_COMMAND = C_USER_COMMAND
I_STRUCTURE_NAME = 'T_ALV_LIST'
IT_FIELDCAT = TAB_FIELDCAT[]
IT_SORT = TAB_SORT[]
IS_LAYOUT = S_LAYOUT
I_SAVE = C_SAVE
IS_VARIANT = S_VARIANT
IT_EVENTS = TAB_EVENTS[]
TABLES
T_OUTTAB = T_ALV_LIST .
ENDFORM . "ALV_LIST
*eject
***********************************************************************
* Form-Routinen zum ABRECHNEN
***********************************************************************
*---------------------------------------------------------------------*
* Form ABRECHNEN
*---------------------------------------------------------------------*
* Rechnet alle selektierten Warenentnahmen ab.
* ---> IT_BLOCK
*---------------------------------------------------------------------*
FORM ABRECHNEN TABLES IT_BLOCK TYPE TYP_TAB_BLOCK .
DATA : S_BLOCK TYPE TYP_BLOCK ,
S_MSG TYPE TYP_MSG ,
BLART LIKE T169F -BLART ,
X_FEHLER TYPE C .
PERFORM BELEGART_BESTIMMEN CHANGING BLART
S_MSG
X_FEHLER .
IF X_FEHLER = X .
LOOP AT IT_BLOCK INTO S_BLOCK .
MOVE-CORRESPONDING S_MSG TO S_BLOCK .
MODIFY IT_BLOCK FROM S_BLOCK .
ENDLOOP .
EXIT .
ENDIF .
LOOP AT IT_BLOCK INTO S_BLOCK .
PERFORM BLOCK_ABRECHNEN TABLES S_BLOCK -IT_RKWA "--->
USING S_BLOCK -BUKRS "--->
S_BLOCK -BWAER "--->
CHANGING S_MSG
X_FEHLER "<---
BLART
S_BLOCK -LIFNR
S_BLOCK -BELNR "<---
S_BLOCK -GJAHR . "<---
* Block-Status setzen
IF ( X_FEHLER = X ) .
S_BLOCK -BSTAT = C_BSTAT_FEHLER .
CLEAR : S_BLOCK -BELNR , S_BLOCK -GJAHR .
MOVE-CORRESPONDING S_MSG TO S_BLOCK .
ROLLBACK WORK .
ELSE .
CLEAR S_MSG .
S_BLOCK -MSGID = C_MSGID_M8 .
S_BLOCK -MSGTY = C_MSGTY_SUCCESS .
S_BLOCK -MSGNO = '327' .
S_BLOCK -BSTAT = C_BSTAT_OK .
COMMIT WORK .
ENDIF .
MODIFY IT_BLOCK FROM S_BLOCK .
ENDLOOP .
ENDFORM . "abrechnen
*---------------------------------------------------------------------*
* FORM BELEGART_BESTIMMEN *
*---------------------------------------------------------------------*
* bestimmt Belegart des Rechnungsbeleges anhand der Transaktion *
*---------------------------------------------------------------------*
* <--- BLART Belegart
*---------------------------------------------------------------------*
FORM BELEGART_BESTIMMEN CHANGING BLART LIKE T169F -BLART
S_MSG TYPE TYP_MSG
X_FEHLER TYPE C .
DATA : S_T169F LIKE T169F .
* lese Belegart aus T169F
CALL FUNCTION 'MRM_DBTAB_T169F_READ'
EXPORTING
I_TCODE = C_TCODE_MRKO
IMPORTING
E_T169F = S_T169F
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF ( SY -SUBRC <> 0 ) .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
BLART = S_T169F -BLART .
ENDFORM . "belegart_bestimmen
*---------------------------------------------------------------------*
* Form BLOCK_ABRECHNEN
*---------------------------------------------------------------------*
* Bucht für einen 'Block' von Warenentnahmen genau eine
* Rechnung. Alle WEs befinden sich in IT_RKWA.
* Alle WEs sind demselben Buchungskreis/Kreditor BUKRS/LIFNR
* zugeordnet.
* Auf die RKWA wird ein DB-Update durchgeführt (-> MR01)
* ---> BUKRS, LIFNR, BWAER: Block
* BLART: Belegart
* <--> IT_RKWA: Warenentnahmen (es werden BELNR und BUZEI gefüllt)
* <--- IT_MSG: Meldungen
* BELNR, GJAHR: Rechnungsbeleg
*---------------------------------------------------------------------*
FORM BLOCK_ABRECHNEN TABLES IT_RKWA TYPE TYP_TAB_RKWA "<-->
USING BUKRS LIKE RKWA -BUKRS "--->
BWAER LIKE RKWA -BWAER "--->
CHANGING S_MSG TYPE TYP_MSG
X_FEHLER TYPE C
BLART LIKE T169F -BLART
LIFNR LIKE RKWA -LIFNR
BELNR LIKE RKWA -BELNR "<---
GJAHR LIKE RKWA -GJAHR . "<---
DATA : TAB_BKPF TYPE TYP_TAB_BKPF ,
TAB_BSEG TYPE TYP_TAB_BSEG ,
TAB_BSET TYPE TYP_TAB_BSET ,
IT_TAX TYPE TYP_TAB_TAX ,
TAB_RBWS TYPE TYP_TAB_RBWS ,
S_BKPF LIKE BKPF ,
S_BSEG LIKE BSEG ,
S_RKWA LIKE RKWA ,
S_TAX TYPE TYP_TAX ,
S_T001 LIKE T001 ,
GSBER LIKE BSEG -GSBER ,
SGTXT LIKE RBSEG -SGTXT ,
WRBTR_TMP LIKE BSEG -WRBTR , "temporär benutzter Betrag
X_UEBERNEHMEN TYPE C ,
F_MONAT LIKE BKPF -MONAT ,
S_T003 LIKE T003 ,
LIFNR_RKWA LIKE RKWA -LIFNR .
*----- Vorbereitungen -------------------------------------------------
PERFORM LOCK_RKWA TABLES IT_RKWA
CHANGING X_FEHLER
S_MSG .
IF X_FEHLER EQ 'X' .
EXIT .
ENDIF .
* re-read RKWA after the lock was set
* Is the RKWA entry still not settled?
LOOP AT IT_RKWA INTO S_RKWA .
SELECT SINGLE * FROM RKWA
WHERE MBLNR = S_RKWA -MBLNR
AND MJAHR = S_RKWA -MJAHR
AND ZEILE = S_RKWA -ZEILE
AND STATUS = C_STATUS_NINV . "not settled
IF SY -SUBRC NE 0 .
IF 1 = 2 .
MESSAGE E863 (M8 ) .
* The material document is already settled.
ENDIF .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '863' .
S_MSG -MSGV1 = S_RKWA -MBLNR .
S_MSG -MSGV2 = S_RKWA -MJAHR .
X_FEHLER = X .
EXIT .
ENDIF .
ENDLOOP .
IF X_FEHLER EQ 'X' .
EXIT .
ENDIF .
* bestimme Währungsschlüssel aus T001
CALL FUNCTION 'FI_COMPANY_CODE_DATA'
EXPORTING
I_BUKRS = BUKRS
IMPORTING
E_T001 = S_T001
EXCEPTIONS
OTHERS = 1 .
IF ( SY -SUBRC <> 0 ) .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT . "---------->
ENDIF .
* table IT_TAX fill
PERFORM MWSKZ_TXJCD_PREFETCH TABLES IT_RKWA "--->
IT_TAX "<---
USING LIFNR "--->
CHANGING X_FEHLER "<---
S_MSG . "<---
IF ( X_FEHLER = X ) .
EXIT . "---------->
ENDIF .
*----- Rechnungsdaten füllen -------------------------------------------
CLEAR : TAB_BKPF ,
TAB_BSEG ,
TAB_BSET ,
TAB_RBWS ,
S_T003 ,
LIFNR_RKWA .
LIFNR_RKWA = LIFNR . " for update in table RKWA
* in user-exit change document type and vendor
PERFORM BADI_HEADERDATA_MODIFY TABLES IT_RKWA
USING BUKRS
CHANGING BLART
LIFNR
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
*--- check Document type
PERFORM DOCUMENT_TYPE_CHECK USING BLART
CHANGING S_T003
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
* header data
PERFORM HEADER_DATA_FILL TABLES TAB_BKPF
USING BLART
BUKRS
BWAER
S_T001
CHANGING GJAHR
F_MONAT .
* item data
PERFORM ITEM_DATA_FILL TABLES TAB_BKPF
TAB_BSEG
TAB_BSET
IT_RKWA
IT_TAX
TAB_RBWS
USING BUKRS
GJAHR
LIFNR_RKWA
BWAER
S_T001
S_T003
CHANGING X_FEHLER
S_MSG
LIFNR . " Zentrale als Rechnungssteller
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
* per user-exit Daten verändern
PERFORM USER_EXIT001_AUFRUFEN TABLES TAB_BKPF "<-->
TAB_BSEG "<-->
TAB_BSET "<-->
IT_RKWA "--->
USING BUKRS "--->
LIFNR "--->
CHANGING X_FEHLER
S_MSG
GJAHR
F_MONAT .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
*----- buche Rechnung --------------------------------------------------
* per user-exit das Customer-Include der RKWA füllen
PERFORM USER_EXIT002_AUFRUFEN TABLES IT_RKWA
CHANGING X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
PERFORM VENDOR_TAXNUM_CHECK TABLES IT_RKWA
USING S_T001
LIFNR
CHANGING X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
PERFORM NULL_LINES_CHECK TABLES TAB_BSEG
CHANGING X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
PERFORM INVOICE_POST TABLES TAB_BKPF
TAB_BSEG
TAB_BSET
IT_RKWA
IT_TAX
TAB_RBWS
USING BLART
GJAHR
F_MONAT
BUKRS
LIFNR_RKWA
S_T003
CHANGING BELNR
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
ENDFORM . "block_abrechnen
*---------------------------------------------------------------------*
* FORM EKORG_BESTIMMEN *
*---------------------------------------------------------------------*
* --> LIFNR, WERKS, MATNR, SOBKZ (Sonderbestandskennzeichen)
* <-- EKORG: ermittelte Einkaufsorganisation,
* wurde keines ermittelt, so ist es SPACE
*---------------------------------------------------------------------*
FORM EKORG_BESTIMMEN USING WERKS LIKE RKWA -WERKS
SOBKZ LIKE RKWA -SOBKZ
CHANGING EKORG LIKE EINE -EKORG .
DATA : X_KONSI TYPE C , "->ME_PRICING_TAX_INDICATOR
X_PIPEL TYPE C . "dito
IF ( SOBKZ = C_SOBKZ_KONS ) .
X_KONSI = X .
X_PIPEL = SPACE .
ELSE .
X_KONSI = SPACE .
X_PIPEL = X .
ENDIF .
* berechne EKORG
CALL FUNCTION 'ME_SELECT_EKORG_FOR_PLANT'
EXPORTING
I_WERKS = WERKS
I_PIPEL = X_PIPEL
I_KONSI = X_KONSI
IMPORTING
E_EKORG = EKORG
EXCEPTIONS
NO_ENTRY_FOUND = 1
NO_DEFAULT_FOUND = 2 .
IF ( SY -SUBRC <> 0 ) .
CLEAR EKORG .
ENDIF .
ENDFORM . "ekorg_bestimmen
*eject
*---------------------------------------------------------------------*
* FORM FIELD_CATALOG_BUILD *
*---------------------------------------------------------------------*
* FELDKATALOG FÜR AUSGABE DER LISTE AUFBAUEN *
* HIER WIRD DEM ALV-BAUSTEIN BEKANNT GEGEBEN WIE DIE SPALTEN DER *
* LISTE AUSSEHEN SOLLEN *
*---------------------------------------------------------------------*
FORM FIELD_CATALOG_BUILD TABLES
T_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV .
*-- Fieldcatalog create automatically --------------------------------*
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = C_REPID
I_INTERNAL_TABNAME = 'RKWA'
I_STRUCTURE_NAME = 'ZCONALV'
CHANGING
CT_FIELDCAT = T_FIELDCAT[] .
LOOP AT T_FIELDCAT .
CASE T_FIELDCAT -FIELDNAME .
WHEN 'BSTME' .
T_FIELDCAT -SELTEXT_L = TEXT - 116 .
T_FIELDCAT -SELTEXT_M = TEXT - 116 .
T_FIELDCAT -SELTEXT_S = TEXT - 116 .
T_FIELDCAT -REPTEXT_DDIC = TEXT - 116 .
WHEN 'BSTMG' .
T_FIELDCAT -SELTEXT_L = TEXT - 115 .
T_FIELDCAT -SELTEXT_M = TEXT - 115 .
T_FIELDCAT -SELTEXT_S = TEXT - 115 .
T_FIELDCAT -REPTEXT_DDIC = TEXT - 115 .
WHEN 'BUKRS' . " Kopffeld andere Farbe
T_FIELDCAT -EMPHASIZE = 'X' .
WHEN 'LIFNR' . " Kopffeld andere Farbe
T_FIELDCAT -EMPHASIZE = 'X' .
WHEN 'TEXT' .
T_FIELDCAT -SELTEXT_L = TEXT - 007 . "Informationstext
T_FIELDCAT -SELTEXT_M = TEXT - 008 . "Infotext
T_FIELDCAT -SELTEXT_S = TEXT - 008 .
T_FIELDCAT -REPTEXT_DDIC = TEXT - 008 .
WHEN 'WRBTR' .
T_FIELDCAT -SELTEXT_L = TEXT - 117 .
T_FIELDCAT -SELTEXT_M = TEXT - 117 .
T_FIELDCAT -SELTEXT_S = TEXT - 117 .
T_FIELDCAT -REPTEXT_DDIC = TEXT - 117 .
WHEN 'ZZJSJE' .
T_FIELDCAT - EDIT = 'X' .
WHEN 'BELNR' .
T_FIELDCAT - HOTSPOT = 'X' .
WHEN 'MBLNR' .
T_FIELDCAT - HOTSPOT = 'X' .
ENDCASE .
MODIFY T_FIELDCAT .
ENDLOOP .
ENDFORM . "field_catalog_build
*eject
*---------------------------------------------------------------------*
* FORM MWSKZ_BESTIMMEN *
*---------------------------------------------------------------------*
* Bestimmt das Steuerkennzeichen über den Einkaufsinfosatz *
*---------------------------------------------------------------------*
* --> LIFNR, WERKS, MATNR, SOBKZ (Sonderbestandskennzeichen)
* <-- MWSKZ: ermitteltes SteuerKz, wurde keines ermittelt, so ist
* es SPACE
*---------------------------------------------------------------------*
FORM MWSKZ_BESTIMMEN USING LIFNR LIKE RKWA -LIFNR
WERKS LIKE RKWA -WERKS
MATNR LIKE RKWA -MATNR
SOBKZ LIKE RKWA -SOBKZ
EKORG LIKE EINE -EKORG
CHANGING MWSKZ LIKE EINE -MWSKZ .
DATA : S_MEICO LIKE MEICO ,
S_EINE LIKE EINE ,
ESOKZ LIKE EINE -ESOKZ . "Typ des Infosatzes
IF ( SOBKZ = C_SOBKZ_KONS ) .
ESOKZ = C_ESOKZ_KONS .
ELSE .
ESOKZ = C_ESOKZ_PIPE .
ENDIF .
* Konsi-/Pipeline-Infosatz lesen
CLEAR S_MEICO .
S_MEICO -ESOKZ = ESOKZ .
S_MEICO -EKORG = EKORG .
S_MEICO -WERKS = WERKS .
S_MEICO -LIFNR = LIFNR .
S_MEICO -MATNR = MATNR .
S_MEICO -ONLYE = SPACE . "sonst geht's nicht!
*{ INSERT
*Note 663537: Variants don't have info records! Look for generic article
PERFORM WRF_READ_INFORECORD_SA_PREPARE CHANGING S_MEICO .
*} INSERT
CALL FUNCTION 'ME_READ_INFORECORD'
EXPORTING
INCOM = S_MEICO
IMPORTING
EINEDATEN = S_EINE
EXCEPTIONS
ERROR_MESSAGE = 1 "nicht auswerten!
OTHERS = 2 .
IF ( SY -SUBRC = 0 ) .
MWSKZ = S_EINE -MWSKZ .
ELSE .
CLEAR MWSKZ .
ENDIF .
ENDFORM . "mwskz_bestimmen
*---------------------------------------------------------------------*
* Form MWSKZ_TXJCD_PREFETCH
*---------------------------------------------------------------------*
* berechne vorsorglich SteuerKz & Tax Jurisdiction Code für alle
* vorkommenden Kombinationen von Material, Werk & Lieferant.
* Die StKz werden in IT_tax abgelegt
* ---> BUKRS, LIFNR, IT_RKWA: Block
* <--- IT_TAX: Steuerkennzeichen
* X_FEHLER: Fehler aufgetreten?
* S_MSG: Meldung
*---------------------------------------------------------------------*
FORM MWSKZ_TXJCD_PREFETCH TABLES IT_RKWA TYPE TYP_TAB_RKWA
IT_TAX TYPE TYP_TAB_TAX
USING LIFNR LIKE BSEG -LIFNR
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : S_T001W LIKE T001W ,
S_RKWA LIKE RKWA ,
S_TAX TYPE TYP_TAX ,
EKORG LIKE EINE -EKORG .
X_FEHLER = SPACE .
CLEAR IT_TAX .
* für alle RKWA-Einträge: bestimme StKz + TaxJcd
LOOP AT IT_RKWA INTO S_RKWA .
CLEAR S_TAX .
S_TAX -MATNR = S_RKWA -MATNR .
S_TAX -WERKS = S_RKWA -WERKS .
S_TAX -LIFNR = LIFNR .
* bestimme Tax Jurisdiction Code über das Werk
CALL FUNCTION 'LOCATION_SELECT_PLANT'
EXPORTING
I_WERKS = S_RKWA -WERKS
IMPORTING
O_T001W = S_T001W
EXCEPTIONS
ERROR_MESSAGE = 1
OTHERS = 2 .
IF ( SY -SUBRC <> 0 ) .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT . "---------->
ENDIF .
S_TAX -TXJCD = S_T001W -TXJCD .
* bestimme Steuerkennzeichen ...
IF S_RKWA -MWSKZ IS INITIAL . "vor 4.5A nicht in der RKWA
* ... über Infosatz
PERFORM EKORG_BESTIMMEN USING S_RKWA -WERKS
S_RKWA -SOBKZ
CHANGING EKORG .
IF ( EKORG = SPACE ) .
S_TAX -MWSKZ = SPACE .
ELSE .
PERFORM MWSKZ_BESTIMMEN USING LIFNR
S_RKWA -WERKS
S_RKWA -MATNR
S_RKWA -SOBKZ
EKORG
CHANGING S_TAX -MWSKZ .
ENDIF .
IF ( S_TAX -MWSKZ = SPACE ) . "kein StKz bestimmt
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '732' .
S_MSG -MSGV1 = LIFNR .
S_MSG -MSGV2 = S_RKWA -MATNR .
S_MSG -MSGV3 = S_RKWA -WERKS .
S_MSG -MSGV4 = EKORG .
X_FEHLER = X .
EXIT . "---------->
ENDIF .
S_RKWA -MWSKZ = S_TAX -MWSKZ .
MODIFY IT_RKWA FROM S_RKWA TRANSPORTING MWSKZ .
ELSE .
* ... über Eintrag in der RKWA
S_TAX -MWSKZ = S_RKWA -MWSKZ . "ab 4.5A in der RKWA
ENDIF .
COLLECT S_TAX INTO IT_TAX .
ENDLOOP . "at it_rkwa
ENDFORM . "mwskz_txjcd_prefetch
*---------------------------------------------------------------------*
* FORM PF_STATUS_SET *
*---------------------------------------------------------------------*
* Status der Liste setzen *
*---------------------------------------------------------------------*
FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB .
CLEAR RT_EXTAB .
SET PF-STATUS '0001' EXCLUDING RT_EXTAB .
ENDFORM . "pf_status_set
*eject
*---------------------------------------------------------------------*
* Form USER_COMMAND *
*---------------------------------------------------------------------*
* Reaktion auf Funktionscodes: *
* Bestellung anzeigen *
* Rechnungsbeleg anzeigen *
* Zeilen aus dem ERS ausschließen *
* Langtext der Meldungen anzeigen *
*---------------------------------------------------------------------*
FORM USER_COMMAND USING F_UCOMM LIKE SY -UCOMM
I_SELFIELD TYPE SLIS_SELFIELD . "#EC CALLED
DATA : F_ANSWER ,
F_EKORG LIKE EINE -EKORG ,
F_ESOKZ LIKE EINE -ESOKZ ,
S_ALV_LIST TYPE MRM_CON_ALV .
CLEAR : S_ALV_LIST .
READ TABLE T_ALV_LIST INDEX I_SELFIELD -TABINDEX INTO S_ALV_LIST .
CASE F_UCOMM .
WHEN 'FB03' . " Buchhaltungsbeleg anzeigen
CHECK NOT S_ALV_LIST -BELNR IS INITIAL .
SET PARAMETER ID 'BLN' FIELD S_ALV_LIST -BELNR .
SET PARAMETER ID 'GJR' FIELD S_ALV_LIST -GJAHR .
SET PARAMETER ID 'BUK' FIELD S_ALV_LIST -BUKRS .
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN .
WHEN 'MB03' .
SET PARAMETER ID 'MBN' FIELD S_ALV_LIST -MBLNR .
SET PARAMETER ID 'MJA' FIELD S_ALV_LIST -MJAHR .
CALL FUNCTION 'MIGO_DIALOG'
EXPORTING
I_ACTION = 'A04'
I_REFDOC = 'R02'
I_NOTREE = 'X'
I_SKIP_FIRST_SCREEN = 'X'
I_DEADEND = 'X'
I_MBLNR = S_ALV_LIST -MBLNR
I_MJAHR = S_ALV_LIST -MJAHR .
WHEN 'ME13' . " Infosatz anzeigen
PERFORM EKORG_BESTIMMEN USING S_ALV_LIST -WERKS
S_ALV_LIST -SOBKZ
CHANGING F_EKORG .
IF S_ALV_LIST -SOBKZ = C_SOBKZ_KONS .
F_ESOKZ = C_ESOKZ_KONS .
ELSE .
F_ESOKZ = C_ESOKZ_PIPE .
ENDIF .
SET PARAMETER ID 'ESO' FIELD F_ESOKZ .
SET PARAMETER ID 'LIF' FIELD S_ALV_LIST -LIFNR .
SET PARAMETER ID 'MAT' FIELD S_ALV_LIST -MATNR .
SET PARAMETER ID 'EKO' FIELD F_EKORG .
SET PARAMETER ID 'WRK' FIELD S_ALV_LIST -WERKS .
CALL TRANSACTION 'ME13' AND SKIP FIRST SCREEN .
WHEN 'MELD' . " Langtext der Meldung anzeigen
PERFORM LONG_TEXT_MESSAGE_SHOW USING S_ALV_LIST .
WHEN 'MM03' . " Materialstammsatz anzeigen
SET PARAMETER ID 'MAT' FIELD S_ALV_LIST -MATNR .
SET PARAMETER ID 'WRK' FIELD S_ALV_LIST -WERKS .
CALL TRANSACTION 'MM03' . "AND SKIP FIRST SCREEN.
WHEN 'MK03' . " Kreditor anzeigen
SET PARAMETER ID 'LIF' FIELD S_ALV_LIST -LIFNR .
SET PARAMETER ID 'KDY' FIELD '/110' .
CALL TRANSACTION 'MK03' AND SKIP FIRST SCREEN .
WHEN 'MR91' . " Nachrichten anzeigen
SET PARAMETER ID 'NAC' FIELD C_KSCHL_KONS .
SET PARAMETER ID 'BLN' FIELD S_ALV_LIST -BELNR .
CALL TRANSACTION 'MR91' . "AND SKIP FIRST SCREEN.
WHEN 'DISPLAY' . " Auf Doppelklick reagierien
CASE I_SELFIELD -SEL_TAB_FIELD .
WHEN 'RKWA-MBLNR' .
SET PARAMETER ID 'MBN' FIELD S_ALV_LIST -MBLNR .
SET PARAMETER ID 'MJA' FIELD S_ALV_LIST -MJAHR .
CALL FUNCTION 'MIGO_DIALOG'
EXPORTING
I_ACTION = 'A04'
I_REFDOC = 'R02'
I_NOTREE = 'X'
I_SKIP_FIRST_SCREEN = 'X'
I_DEADEND = 'X'
I_MBLNR = S_ALV_LIST -MBLNR
I_MJAHR = S_ALV_LIST -MJAHR .
WHEN 'RKWA-MATNR' .
SET PARAMETER ID 'MAT' FIELD S_ALV_LIST -MATNR .
SET PARAMETER ID 'WRK' FIELD S_ALV_LIST -WERKS .
CALL TRANSACTION 'MM03' . "AND SKIP FIRST SCREEN.
WHEN 'RKWA-LIFNR' .
SET PARAMETER ID 'LIF' FIELD S_ALV_LIST -LIFNR .
SET PARAMETER ID 'KDY' FIELD '/110' .
CALL TRANSACTION 'MK03' AND SKIP FIRST SCREEN .
WHEN 'RKWA-BELNR' .
CHECK NOT S_ALV_LIST -BELNR IS INITIAL .
SET PARAMETER ID 'BLN' FIELD S_ALV_LIST -BELNR .
SET PARAMETER ID 'GJR' FIELD S_ALV_LIST -GJAHR .
SET PARAMETER ID 'BUK' FIELD S_ALV_LIST -BUKRS .
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN .
WHEN 'RKWA-TEXT' .
PERFORM LONG_TEXT_MESSAGE_SHOW USING S_ALV_LIST .
ENDCASE .
ENDCASE .
ENDFORM . "USER_COMMAND
*eject
*---------------------------------------------------------------------*
* Form USER_EXIT001_AUFRUFEN
*---------------------------------------------------------------------*
* Der Kunde kann einige Daten vor Aufruf der RW-Schnittstelle *
* noch abändern.
* ---> ...
* <--- X_FEHLER: Fehler aufgetreten?
* SMSG: Meldung bei Fehler
*---------------------------------------------------------------------*
FORM USER_EXIT001_AUFRUFEN TABLES IT_BKPF TYPE TYP_TAB_BKPF
IT_BSEG TYPE TYP_TAB_BSEG
IT_BSET TYPE TYP_TAB_BSET
IT_RKWA TYPE TYP_TAB_RKWA
USING BUKRS LIKE BKPF -BUKRS
LIFNR LIKE BSEG -LIFNR
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG
E_GJAHR TYPE GJAHR
E_MONAT TYPE MONAT .
DATA : TAB_BSET TYPE TYP_TAB_BSET ,
TAB_RKWA TYPE TYP_TAB_RKWA .
DATA : F_GJAHR TYPE GJAHR ,
F_MONAT TYPE MONAT .
DATA : S_BSEG TYPE BSEG , S_BKPF TYPE BKPF .
CLEAR : X_FEHLER ,
TAB_BSET ,
TAB_RKWA .
TAB_BSET[] = IT_BSET[] .
TAB_RKWA[] = IT_RKWA[] .
DATA : S_BSET TYPE BSET .
DATA : F_BSET_GJAHR TYPE BSET -GJAHR .
IF NOT IT_BSET[] IS INITIAL .
READ TABLE IT_BSET INDEX 1 INTO S_BSET .
F_BSET_GJAHR = S_BSET -GJAHR .
ENDIF .
SY -SUBRC = 0 .
CALL CUSTOMER-FUNCTION '001'
EXPORTING
I_BUKRS = BUKRS
I_LIFNR = LIFNR
TABLES
T_BKPF = IT_BKPF
T_BSEG = IT_BSEG
T_BSET = TAB_BSET
T_RKWA = TAB_RKWA
EXCEPTIONS
ERROR = 1 .
IF ( SY -SUBRC <> 0 ) .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT . "---------->
ENDIF .
READ TABLE IT_BKPF INTO S_BKPF INDEX 1 .
IF SY -SUBRC = 0 .
IF NOT S_BKPF -BUKRS IS INITIAL .
CALL FUNCTION 'FI_PERIOD_DETERMINE'
EXPORTING
I_BUDAT = S_BKPF -BUDAT
I_BUKRS = S_BKPF -BUKRS
I_MONAT = S_BKPF -MONAT
IMPORTING
E_GJAHR = F_GJAHR
E_MONAT = F_MONAT .
IF F_GJAHR = S_BKPF -GJAHR AND F_MONAT = S_BKPF -MONAT .
E_GJAHR = F_GJAHR .
E_MONAT = F_MONAT .
ELSE .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '008' .
S_MSG -MSGV1 = 'user_exit001_aufrufen' .
X_FEHLER = X .
EXIT . "---------->
ENDIF .
LOOP AT IT_BSEG INTO S_BSEG WHERE GJAHR <> S_BKPF -GJAHR .
ENDLOOP .
IF SY -SUBRC = 0 .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '008' .
S_MSG -MSGV1 = 'user_exit001_aufrufen' .
X_FEHLER = X .
EXIT .
ENDIF .
ENDIF .
ELSE .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '008' .
S_MSG -MSGV1 = 'user_exit001_aufrufen' .
X_FEHLER = X .
EXIT .
ENDIF .
IF NOT IT_BSET[] IS INITIAL .
IF S_BKPF -GJAHR <> F_BSET_GJAHR .
LOOP AT IT_BSET INTO S_BSET .
S_BSET -GJAHR = S_BKPF -GJAHR .
MODIFY IT_BSET FROM S_BSET .
ENDLOOP .
ENDIF .
ENDIF .
ENDFORM . "user_exit001_aufrufen
*---------------------------------------------------------------------*
* Form USER_EXIT002_AUFRUFEN
*---------------------------------------------------------------------*
* Der Kunde kann vor dem Update auf die RKWA das Customer-Include *
* CI_RKWA füllen.
* ---> IT_RKWA
* <--- X_FEHLER: Fehler aufgetreten?
* S_MSG: Meldung bei Fehler
*---------------------------------------------------------------------*
FORM USER_EXIT002_AUFRUFEN TABLES IT_RKWA TYPE TYP_TAB_RKWA
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : S_RKWA_IN LIKE RKWA ,
S_RKWA_OUT LIKE RKWA ,
S_RKWA_KEY LIKE RKWA_KEY ,
S_RKWA_DATA LIKE RKWA_DATA ,
X_CHECK TYPE C .
CLEAR X_FEHLER .
LOOP AT IT_RKWA INTO S_RKWA_IN .
* SAP-Daten merken
MOVE-CORRESPONDING S_RKWA_IN TO S_RKWA_KEY .
MOVE-CORRESPONDING S_RKWA_IN TO S_RKWA_DATA .
* Aufruf User-Exit
SY -SUBRC = 0 .
X_CHECK = SPACE .
CALL CUSTOMER-FUNCTION '002'
EXPORTING
I_RKWA = S_RKWA_IN
IMPORTING
E_CHECK = X_CHECK
E_RKWA = S_RKWA_OUT
EXCEPTIONS
ERROR = 1
ERROR_MESSAGE = 1 .
IF ( SY -SUBRC = 0 ) .
IF ( X_CHECK = X ) . "Erweiterung wird genutzt
* Kundenänderungen an SAP-Daten rückgängig machen
MOVE-CORRESPONDING S_RKWA_KEY TO S_RKWA_OUT .
MOVE-CORRESPONDING S_RKWA_DATA TO S_RKWA_OUT .
MODIFY IT_RKWA FROM S_RKWA_OUT .
ENDIF .
ELSE . "in Erweiterung wurde Fehlermeldung ausgegeben
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT . "---------->
ENDIF .
ENDLOOP .
ENDFORM . "user_exit002_aufrufen
*---------------------------------------------------------------------*
* FORM TOP_OF_LIST *
*---------------------------------------------------------------------*
* Listüberschriften am Anfang der Gesamtliste *
*---------------------------------------------------------------------*
FORM TOP_OF_LIST .
DATA : TAB_LIST_OF_LIST TYPE SLIS_T_LISTHEADER , "Überschriftstabelle
S_LINE TYPE SLIS_LISTHEADER .
CLEAR : TAB_LIST_OF_LIST , S_LINE .
REFRESH : TAB_LIST_OF_LIST .
S_LINE -TYP = 'S' .
S_LINE -INFO = TEXT - 009 . " Protokoll
APPEND S_LINE TO TAB_LIST_OF_LIST .
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = TAB_LIST_OF_LIST .
ENDFORM . "top_of_list
*&---------------------------------------------------------------------*
*& Form INVOICE_POST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM INVOICE_POST TABLES TI_BKPF TYPE TYP_TAB_BKPF
TI_BSEG TYPE TYP_TAB_BSEG
TI_BSET TYPE TYP_TAB_BSET
TI_RKWA TYPE TYP_TAB_RKWA
TI_TAX TYPE TYP_TAB_TAX
TI_RBWS TYPE TYP_TAB_RBWS
USING I_BLART LIKE T169F -BLART
I_GJAHR LIKE RKWA -GJAHR
I_MONAT LIKE BKPF -MONAT
I_BUKRS LIKE RKWA -BUKRS
I_LIFNR_RKWA LIKE RKWA -LIFNR
S_T003 LIKE T003
CHANGING E_BELNR LIKE RKWA -BELNR
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : TAB_ACCHD LIKE ACCHD OCCURS 0 WITH HEADER LINE ,
TAB_ACCIT LIKE ACCIT OCCURS 0 WITH HEADER LINE ,
TAB_ACCCR LIKE ACCCR OCCURS 0 WITH HEADER LINE ,
TAB_ACCBSET LIKE ACCBSET OCCURS 0 WITH HEADER LINE ,
TAB_ACCIT_WT LIKE ACCIT_WT OCCURS 0 WITH HEADER LINE ,
S_BSET LIKE BSET ,
S_ACCBSET LIKE ACCBSET ,
LS_RKWA_KEY TYPE RKWA_KEY , "1731546
LS_RKWA_KEY_OLD TYPE RKWA_KEY , "1731546
F_ZEILE TYPE ACCTIT -ZEILE , "1731546
F_LENGTH TYPE I , "1731546
F_AWTYP LIKE ACCHD -AWTYP ,
F_AWREF LIKE ACCHD -AWREF ,
F_AWORG LIKE ACCHD -AWORG ,
F_AWSYS LIKE ACCHD -AWSYS ,
F_HWAE1 LIKE BOOLE ,
F_VENDOR_LINE TYPE C .
*ENHANCEMENT-POINT RMVKON00_02 SPOTS ES_RMVKON00.
* convert document into accounting structure
* hier werden nur Zeilen mit Curtp = 00 Belegwährung erzeugt *
* die restlichen Währungszeilen wie Hauswärhung werden durch *
* ac_doc_create erzeugt
CALL FUNCTION 'FI_DOC_TO_ACC_TRANSFORM'
EXPORTING
X_HWAE1 = F_HWAE1
TABLES
T_BKPF = TI_BKPF
T_BSEG = TI_BSEG
T_BSET = TI_BSET "2054048
T_ACCHD = TAB_ACCHD
T_ACCIT = TAB_ACCIT
T_ACCCR = TAB_ACCCR
EXCEPTIONS
SYSTEM_ERROR = 1 .
IF SY -SUBRC <> 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
* Fill ZEILE in TAB_ACCIT in order to enable the FI document split in
* subroutine DOCUMENT_SPLIT_INVOICE_RECEIPT (include LFACIFSP).
* The document split is performed for the following account types:
* material (M), G/L accounts (S) and Assets (A).
LOOP AT TAB_ACCIT WHERE KOART CA 'MSA' "1731546
AND ZUONR IS NOT INITIAL "1731546
AND SGTXT IS NOT INITIAL . "1731546
LS_RKWA_KEY -MBLNR = TAB_ACCIT -ZUONR ( 10 ) . "1731546
LS_RKWA_KEY -MJAHR = TAB_ACCIT -ZUONR+10 ( 4 ) . "1731546
* Last 4 character of SGTXT contain RKWA-ZEILE
F_LENGTH = STRLEN ( TAB_ACCIT -SGTXT ) - 4 . "1731546
LS_RKWA_KEY -ZEILE = TAB_ACCIT -SGTXT+F_LENGTH ( 4 ) . "1731546
* Check whether the material document reference is valid "1731546
READ TABLE TI_RKWA WITH KEY MJAHR = LS_RKWA_KEY -MJAHR "1818133
MBLNR = LS_RKWA_KEY -MBLNR "1818133
ZEILE = LS_RKWA_KEY -ZEILE "1731546
BINARY SEARCH "1731546
TRANSPORTING NO FIELDS . "1731546
IF SY -SUBRC = 0 . "1731546
IF LS_RKWA_KEY NE LS_RKWA_KEY_OLD . "1731546
LS_RKWA_KEY_OLD = LS_RKWA_KEY . "1731546
F_ZEILE = F_ZEILE + 1 . "1731546
ENDIF . "1731546
TAB_ACCIT -ZEILE = TAB_ACCIT -URZEILE = F_ZEILE . "1731546
MODIFY TAB_ACCIT TRANSPORTING ZEILE URZEILE . "1731546
ENDIF . "1731546
ENDLOOP . "1731546
* convert tax data into accounting structure
LOOP AT TI_BSET INTO S_BSET .
MOVE-CORRESPONDING S_BSET TO S_ACCBSET .
S_ACCBSET -MONAT = I_MONAT .
S_ACCBSET -BLART = I_BLART .
CLEAR : S_ACCBSET -HWBAS ,
S_ACCBSET -HWSTE .
APPEND S_ACCBSET TO TAB_ACCBSET .
ENDLOOP .
LOOP AT TAB_ACCIT WHERE POSNR = 1 .
*-- withholding tax flag in table accit
IF NOT TI_RBWS[] IS INITIAL .
TAB_ACCIT -WT_KEY = '000001' .
ENDIF .
MODIFY TAB_ACCIT .
ENDLOOP .
PERFORM WITHHOLDING_TAX_CREATE TABLES TAB_ACCIT_WT
TI_RBWS .
* alle Information aus den Sachkonten, Stammsätzen, Customizingseins
* tellungen werden hier abgeleitet, wir brauchen es nicht zu machen
CALL FUNCTION 'AC_DOCUMENT_CREATE'
TABLES
T_ACCHD = TAB_ACCHD
T_ACCIT = TAB_ACCIT
T_ACCCR = TAB_ACCCR
T_ACCTX = TAB_ACCBSET
T_ACCWT = TAB_ACCIT_WT
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF SY -SUBRC <> 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
PERFORM DOCUMENT_NUMBER_GET USING I_BLART
I_BUKRS
I_GJAHR
S_T003
CHANGING E_BELNR
X_FEHLER
S_MSG .
CALL FUNCTION 'FI_REFERENCE_CREATE'
EXPORTING
I_AWTYP = 'BKPFF'
I_BUKRS = I_BUKRS
I_GJAHR = I_GJAHR
I_BELNR = E_BELNR
IMPORTING
E_AWTYP = F_AWTYP
E_AWREF = F_AWREF
E_AWORG = F_AWORG
E_AWSYS = F_AWSYS .
CALL FUNCTION 'AC_DOCUMENT_POST'
EXPORTING
I_AWTYP = F_AWTYP
I_AWREF = F_AWREF
I_AWORG = F_AWORG
I_AWSYS = F_AWSYS
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF SY -SUBRC <> 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
READ TABLE TI_BSEG WITH KEY KOART = C_KOART_KRED .
IF TI_BSEG -WRBTR > 0 .
F_VENDOR_LINE = X .
ELSE .
CLEAR F_VENDOR_LINE .
ENDIF .
PERFORM RKWA_UPDATE TABLES TI_RKWA
TI_TAX
USING E_BELNR
I_GJAHR
I_LIFNR_RKWA
F_VENDOR_LINE
CHANGING X_FEHLER
S_MSG .
IF X_FEHLER = X .
EXIT .
ENDIF .
PERFORM HEAD_MESSAGE_CREATE TABLES TI_BKPF
TI_BSEG
USING I_BLART
E_BELNR
I_BUKRS
CHANGING X_FEHLER
S_MSG .
IF X_FEHLER = X .
EXIT .
ENDIF .
ENDFORM . " INVOICE_POST
*&---------------------------------------------------------------------*
*& Form DOCUMENT_NUMBER_GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM DOCUMENT_NUMBER_GET USING I_BLART LIKE T169F -BLART
I_BUKRS LIKE RKWA -BUKRS
I_GJAHR LIKE RKWA -GJAHR
S_T003 LIKE T003
CHANGING E_BELNR LIKE RKWA -BELNR
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
CALL FUNCTION 'RF_GET_DOCUMENT_NUMBER'
EXPORTING
COMPANY = I_BUKRS
RANGE = S_T003 -NUMKR
YEAR = I_GJAHR
IMPORTING
DOCUMENT_NUMBER = E_BELNR .
IF SY -DBSYS NE 'ORACLE' .
CALL FUNCTION 'ENQUEUE_EFBKPF'
EXPORTING
BELNR = E_BELNR
BUKRS = I_BUKRS
GJAHR = I_GJAHR
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2 .
CASE SY -SUBRC .
*------- Beleg von anderem Benutzer gesperrt ---------------------------
WHEN 1 .
* MESSAGE A127 WITH E_BELNR I_BUKRS.
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
*------- Systemfehler --------------------------------------------------
WHEN 2 .
* MESSAGE A128 WITH E_BELNR I_BUKRS.
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDCASE .
ENDIF .
ENDFORM . " DOCUMENT_NUMBER_GET
*&---------------------------------------------------------------------*
*& Form HEADER_DATA_FILL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM HEADER_DATA_FILL TABLES TI_BKPF TYPE TYP_TAB_BKPF
USING I_BLART LIKE T169F -BLART
I_BUKRS LIKE RKWA -BUKRS
I_BWAER LIKE RKWA -BWAER
S_T001 LIKE T001
CHANGING E_GJAHR LIKE RKWA -GJAHR
E_MONAT LIKE BKPF -MONAT .
DATA : S_BKPF LIKE BKPF .
CLEAR : S_BKPF .
S_BKPF -MANDT = SY -MANDT .
S_BKPF -BLART = I_BLART .
S_BKPF -BUKRS = I_BUKRS .
S_BKPF -TCODE = TCODE_MRKO .
S_BKPF -WAERS = I_BWAER .
S_BKPF -HWAER = S_T001 -WAERS .
S_BKPF -XMWST = 'X' . "Steuer rechnen
S_BKPF -BLDAT = P_BLDAT . "lokales Datum
S_BKPF -BUDAT = P_BUDAT . "lokales Datum
S_BKPF -WWERT = P_BUDAT . "lokales Datum
S_BKPF -XBLNR = P_XBLNR .
S_BKPF -AWTYP = C_AWTYP_BKPFF .
S_BKPF -GLVOR = C_AWTYP_RMRP .
S_BKPF -USNAM = SY -UNAME .
S_BKPF -XSNET = 'X' .
* month, year get
IF NOT S_BKPF -BUKRS IS INITIAL .
CALL FUNCTION 'FI_PERIOD_DETERMINE'
EXPORTING
I_BUDAT = S_BKPF -BUDAT
I_BUKRS = S_BKPF -BUKRS
I_MONAT = S_BKPF -MONAT
IMPORTING
E_GJAHR = S_BKPF -GJAHR
E_MONAT = S_BKPF -MONAT .
ENDIF .
E_GJAHR = S_BKPF -GJAHR .
E_MONAT = S_BKPF -MONAT .
*-------- Steuerkurs -------------------------------------------------*
CALL FUNCTION 'FI_TAX_GET_TXKRS'
EXPORTING
I_BUKRS = I_BUKRS
I_CURR_FORGN = I_BWAER
I_CURR_LOCAL = S_T001 -WAERS
I_BLDAT = SY -DATLO
I_BUDAT = SY -DATLO
* i_vatdate = ???? "N1023317
IMPORTING
E_TXKRS = S_BKPF -TXKRS .
APPEND S_BKPF TO TI_BKPF .
ENDFORM . " HEADER_DATA_FILL
*&---------------------------------------------------------------------*
*& Form ITEM_DATA_FILL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM ITEM_DATA_FILL TABLES TI_BKPF TYPE TYP_TAB_BKPF
TI_BSEG TYPE TYP_TAB_BSEG
TI_BSET TYPE TYP_TAB_BSET
TI_RKWA TYPE TYP_TAB_RKWA
TI_TAX TYPE TYP_TAB_TAX
TE_RBWS TYPE TYP_TAB_RBWS
USING I_BUKRS LIKE RKWA -BUKRS
I_GJAHR LIKE RKWA -GJAHR
I_LIFNR_RKWA LIKE RKWA -LIFNR
I_BWAER LIKE RKWA -BWAER
S_T001 LIKE T001
S_T003 LIKE T003
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG
E_LIFNR LIKE RKWA -LIFNR .
DATA : T_BSEGT LIKE BSEGT OCCURS 0 ,
S_BSEGT LIKE BSEGT ,
S_BSEG LIKE BSEG ,
S_BSET LIKE BSET ,
S_RKWA LIKE RKWA ,
S_TAX TYPE TYP_TAX ,
S_BKPF LIKE BKPF ,
S_T169 LIKE T169 ,
H_SGTXT LIKE BSEG -SGTXT ,
H_GSBER LIKE RKWA -GSBER ,
F_BUZEI LIKE BSEG -BUZEI ,
F_FWSTE LIKE ITXDAT -FWSTE ,
F_WRBTR LIKE RKWA -WRBTR ,
F_ISPS_NOT_ACTIVE LIKE FMISPS -PS_ACTIVE .
F_BUZEI = 1 .
CONSTANTS : C_T169 ( 4 ) VALUE 'T169' .
CLEAR : X_FEHLER .
CLEAR : S_MSG .
* selections
SELECT SINGLE * FROM T169 INTO S_T169
WHERE TCODE = C_TCODE_MRKO .
IF SY -SUBRC NE 0 .
MESSAGE E100 WITH C_T169 C_TCODE_MRKO .
ENDIF .
* check if IS-PS active
CALL FUNCTION 'FM00_CHECK_ISPS'
IMPORTING
E_FLG_ISPS_NOT_ACTIVE = F_ISPS_NOT_ACTIVE .
* header data
READ TABLE TI_BKPF INDEX 1 INTO S_BKPF .
* bseg fill vendor line
CLEAR : S_BSEG , S_RKWA , F_WRBTR .
LOOP AT TI_RKWA INTO S_RKWA .
IF S_RKWA -SHKZG = C_SHKZG_HABEN .
F_WRBTR = F_WRBTR + ( S_RKWA -WRBTR - S_RKWA -NAVNW ) .
ELSE .
F_WRBTR = F_WRBTR - ( S_RKWA -WRBTR - S_RKWA -NAVNW ) .
ENDIF .
ENDLOOP .
S_BSEG -MANDT = SY -MANDT .
S_BSEG -BUKRS = I_BUKRS .
S_BSEG -GJAHR = S_BKPF -GJAHR .
S_BSEG -BUZEI = C_BUZEI_KRED .
S_BSEG -LIFNR = E_LIFNR .
S_BSEG -ZFBDT = SY -DATLO .
S_BSEG -WRBTR = ABS ( F_WRBTR ) .
* posting key
IF F_WRBTR >= 0 .
S_BSEG -BSCHL = C_BSLKH .
ELSE .
S_BSEG -BSCHL = C_BSLKS .
ENDIF .
PERFORM POSTING_KEY_DATA_GET USING S_T003
S_BSEG -BSCHL
CHANGING S_BSEG -SHKZG
S_BSEG -KOART
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
PERFORM VENDOR_DATA_GET USING I_BUKRS
E_LIFNR
CHANGING X_FEHLER
S_MSG
S_BSEG -LIFNR
S_BSEG -FILKD
S_BSEG -ZTERM
S_BSEG -QSSKZ .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
E_LIFNR = S_BSEG -LIFNR .
PERFORM BUZID_GET USING S_T169 -VGART
S_BSEG -KOART
CHANGING S_BSEG -BUZID
S_BSEG -BUSTW .
PERFORM KTOSL_GET USING S_BSEG -BUSTW
CHANGING S_BSEG -KTOSL .
PERFORM PAYMENT_CONDITIONS_GET USING S_BSEG -ZTERM
S_BKPF -BLDAT
S_BKPF -BUDAT
CHANGING S_BSEG -ZFBDT
S_BSEG -ZLSPR
S_BSEG -ZLSCH
S_BSEG -ZBD1T
S_BSEG -ZBD1P
S_BSEG -ZBD2T
S_BSEG -ZBD2P
S_BSEG -ZBD3T
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
APPEND S_BSEG TO TI_BSEG .
* withholding tax initialization
IF TE_RBWS[] IS INITIAL .
CALL FUNCTION 'FI_WT_ERS_INITIALIZATION'
EXPORTING
I_BUKRS = S_BKPF -BUKRS
I_GJAHR = S_BKPF -GJAHR
I_BLDAT = S_BKPF -BLDAT
I_BUDAT = S_BKPF -BUDAT
I_WWERT = S_BKPF -WWERT
I_WAERS = S_BKPF -WAERS
I_KURSF = S_BKPF -KURSF
I_SHKZG = S_BSEG -SHKZG
I_LIFNR = S_BSEG -LIFNR
TABLES
I_RBWS = TE_RBWS .
ENDIF .
* bseg fill (goods extract)
LOOP AT TI_RKWA INTO S_RKWA .
F_BUZEI = F_BUZEI + 1 .
READ TABLE TI_TAX INTO S_TAX
WITH KEY MATNR = S_RKWA -MATNR
WERKS = S_RKWA -WERKS
MWSKZ = S_RKWA -MWSKZ
LIFNR = I_LIFNR_RKWA .
IF ( SY -SUBRC <> 0 ) .
S_MSG -MSGID = 'XX' .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '300' . "Verbuchungsabbruch
S_MSG -MSGV1 = TEXT - 300 .
X_FEHLER = X .
EXIT .
ENDIF .
CLEAR S_BSEG .
S_BSEG -MANDT = SY -MANDT .
S_BSEG -BUKRS = I_BUKRS .
S_BSEG -GJAHR = S_BKPF -GJAHR .
S_BSEG -BUZEI = F_BUZEI .
S_BSEG -VORGN = C_AWTYP_RMRP .
S_BSEG -BUZID = C_BUZID_SACH .
S_BSEG -MWSKZ = S_TAX -MWSKZ .
S_BSEG -TXJCD = S_TAX -TXJCD .
S_BSEG -SAKNR = S_RKWA -HKONT .
S_BSEG -HKONT = S_RKWA -HKONT .
S_BSEG -GSBER = S_RKWA -GSBER .
S_BSEG -PRCTR = S_RKWA -PRCTR . "ab 4.5A Eintrag in der RKWA
S_BSEG -MENGE = S_RKWA -BSTMG .
S_BSEG -MEINS = S_RKWA -BSTME .
S_BSEG -MATNR = S_RKWA -MATNR . " matnr and werks are important for
S_BSEG -WERKS = S_RKWA -WERKS . " external tax system
* posting key in
IF S_RKWA -SHKZG = C_SHKZG_HABEN .
S_BSEG -BSCHL = C_BSLSS .
ELSEIF S_RKWA -SHKZG = C_SHKZG_SOLL .
S_BSEG -BSCHL = C_BSLSH .
ENDIF .
PERFORM POSTING_KEY_DATA_GET USING S_T003
S_BSEG -BSCHL
CHANGING S_BSEG -SHKZG
S_BSEG -KOART
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
PERFORM BUZID_GET USING S_T169 -VGART
S_BSEG -KOART
CHANGING S_BSEG -BUZID
S_BSEG -BUSTW .
PERFORM KTOSL_GET USING S_BSEG -BUSTW
CHANGING S_BSEG -KTOSL .
* ZuordnungsNr: aus MaterialBelegnr + Jahr zusammenbauen
CONCATENATE S_RKWA -MBLNR S_RKWA -MJAHR INTO S_BSEG -ZUONR .
*ENHANCEMENT-POINT RMVKON00_01 SPOTS ES_RMVKON00.
* Fill XREF3 if IS-PS is active
IF F_ISPS_NOT_ACTIVE IS INITIAL .
MOVE S_BSEG -ZUONR TO S_BSEG -XREF3 .
ENDIF .
* Positionstext: 'Abrechnung zu Materialbeleg &1 &2'
H_SGTXT = TEXT - 011 .
REPLACE '&1' WITH S_RKWA -MBLNR INTO H_SGTXT .
REPLACE '&2' WITH S_RKWA -ZEILE INTO H_SGTXT .
S_BSEG -SGTXT = H_SGTXT .
* Steuerbetrag ist Null
S_BSEG -WMWST = 0 .
* Rechnungsbetrag
S_BSEG -WRBTR = S_RKWA -WRBTR - S_RKWA -NAVNW .
S_BSEG -TXBFW = S_BSEG -WRBTR .
S_BSEG -REWWR = S_BSEG -WRBTR .
S_BSEG -NAVFW = S_RKWA -NAVNW .
* if EA-PS is active take over account assignments
PERFORM FM_ACCOUNT_ASSIGNMENT_GET USING S_RKWA
CHANGING S_BSEG
X_FEHLER
S_MSG .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
APPEND S_BSEG TO TI_BSEG .
CLEAR S_RKWA .
ENDLOOP .
* tax data
PERFORM BSET_FILL TABLES TI_BKPF
TI_BSEG
TI_BSET
USING I_BUKRS
CHANGING S_MSG
X_FEHLER .
IF ( X_FEHLER = X ) .
EXIT .
ENDIF .
* bseg fill (tax line)
CALL FUNCTION 'CREATE_TAX_ITEM'
TABLES
T_BSEGT = T_BSEGT .
LOOP AT T_BSEGT INTO S_BSEGT .
S_BSEGT -HWBAS = ABS ( S_BSEGT -HWBAS ) .
S_BSEGT -FWBAS = ABS ( S_BSEGT -FWBAS ) .
CLEAR : S_BSEG .
MOVE-CORRESPONDING S_BSEGT TO S_BSEG .
S_BSEG -VORGN = C_AWTYP_RMRP .
S_BSEG -BUZID = C_BUZID_TAX .
S_BSEG -KOART = 'S' .
APPEND S_BSEG TO TI_BSEG .
ENDLOOP .
PERFORM NAV_VERTEILEN TABLES TI_BSEG .
PERFORM BSEG_LINES_NUMBERING CHANGING TI_BSEG[] .
ENDFORM . " ITEM_DATA_FILL
*&---------------------------------------------------------------------*
*& Form POSTING_KEY_GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM POSTING_KEY_DATA_GET USING S_T003 LIKE T003
E_BSCHL LIKE BSEG -BSCHL
CHANGING E_SHKZG LIKE BSEG -SHKZG
E_KOART LIKE BSEG -KOART
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : S_TBSL LIKE TBSL ,
S_TBSLT LIKE TBSLT .
CALL FUNCTION 'FI_POSTING_KEY_DATA'
EXPORTING
I_BSCHL = E_BSCHL
IMPORTING
E_TBSL = S_TBSL
E_TBSLT = S_TBSLT .
IF S_T003 -KOARS NA S_TBSL -KOART .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '161' .
X_FEHLER = X .
EXIT .
ELSE .
E_SHKZG = S_TBSL -SHKZG .
E_KOART = S_TBSL -KOART .
ENDIF .
ENDFORM . " POSTING_KEY_DATA_GET
*&---------------------------------------------------------------------*
*& Form VENDOR_DATA_GET
*&---------------------------------------------------------------------*
FORM VENDOR_DATA_GET USING I_BUKRS LIKE RKWA -BUKRS
I_LIFNR LIKE RKWA -LIFNR
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG
E_LIFNR LIKE BSEG -LIFNR
E_FILKD LIKE BSEG -FILKD
E_ZTERM LIKE BSEG -ZTERM
E_QSSKZ LIKE BSEG -QSSKZ .
DATA : S_KRED LIKE VF_KRED .
CLEAR : S_KRED .
*- read the vendor data
CALL FUNCTION 'FI_VENDOR_DATA'
EXPORTING
I_BUKRS = I_BUKRS
I_LIFNR = I_LIFNR
IMPORTING
E_KRED = S_KRED
EXCEPTIONS
ERROR_MESSAGE = 01 .
IF SY -SUBRC NE 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
E_QSSKZ = S_KRED -QSSKZ .
E_ZTERM = S_KRED -ZTERM .
IF NOT S_KRED -LNRZE IS INITIAL . " headquater
E_LIFNR = S_KRED -LNRZE .
E_FILKD = I_LIFNR .
CLEAR : S_KRED , E_QSSKZ , E_ZTERM .
CALL FUNCTION 'FI_VENDOR_DATA'
EXPORTING
I_BUKRS = I_BUKRS
I_LIFNR = E_LIFNR
IMPORTING
E_KRED = S_KRED
EXCEPTIONS
ERROR_MESSAGE = 01 .
IF SY -SUBRC NE 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
E_QSSKZ = S_KRED -QSSKZ .
E_ZTERM = S_KRED -ZTERM .
ENDIF .
IF S_KRED -BEGRU NE SPACE .
PERFORM AUTHORITY_CHECK USING 'BEK' 'BRGRU' S_KRED -BEGRU
CHANGING S_MSG
X_FEHLER .
IF X_FEHLER = X .
EXIT .
ENDIF .
ENDIF .
IF S_KRED -BEGRU_B NE SPACE .
PERFORM AUTHORITY_CHECK USING 'BEK' 'BRGRU' S_KRED -BEGRU_B
CHANGING S_MSG
X_FEHLER .
IF X_FEHLER = X .
EXIT .
ENDIF .
ENDIF .
ENDFORM . " VENDOR_DATA_GET
*&---------------------------------------------------------------------*
*& Form BUZID_GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUZID_GET USING I_VGART
I_KOART
CHANGING E_BUZID
E_BUSTW .
*------- Buchungsstring ermitteln, BUZID setzen ----------------------*
CALL FUNCTION 'MR_STRING_DETERMINE'
EXPORTING
I_KNTTP = ' '
I_KOART = I_KOART
I_PSTYP = ' '
I_VGART = I_VGART
IMPORTING
E_BUSTW = E_BUSTW
E_BUZID = E_BUZID .
ENDFORM . " BUZID_GET
*&---------------------------------------------------------------------*
*& Form KTOSL_GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM KTOSL_GET USING I_BUSTW
CHANGING E_KTOSL .
DATA : TAB_T169C LIKE T169C OCCURS 0 ,
S_T169C LIKE T169C ,
S_SGNBU LIKE SGNBU .
CALL FUNCTION 'MR_POSTING_GENERATE'
EXPORTING
I_BUSTW = I_BUSTW
I_SGNBU = S_SGNBU
TABLES
T_T169C = TAB_T169C .
LOOP AT TAB_T169C INTO S_T169C
WHERE BUSTW = I_BUSTW .
E_KTOSL = S_T169C -VORSL .
ENDLOOP .
ENDFORM . " KTOSL_GET
*&---------------------------------------------------------------------*
*& Form PAYMENT_CONDITIONS_GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PAYMENT_CONDITIONS_GET USING I_ZTERM LIKE BSEG -ZTERM
I_BLDAT LIKE BKPF -BLDAT
I_BUDAT LIKE BKPF -BUDAT
CHANGING E_ZFBDT LIKE BSEG -ZFBDT
E_ZLSPR LIKE BSEG -ZLSPR
E_ZLSCH LIKE BSEG -ZLSCH
E_ZBD1T LIKE BSEG -ZBD1T
E_ZBD1P LIKE BSEG -ZBD1P
E_ZBD2T LIKE BSEG -ZBD2T
E_ZBD2P LIKE BSEG -ZBD2P
E_ZBD3T LIKE BSEG -ZBD3T
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : S_T052 LIKE T052 ,
S_SKLIN LIKE SKLIN .
CONSTANTS : C_T052 ( 4 ) VALUE 'T052' .
* ZTERM (*) is needed for substitution paymnt term from headquater
CHECK I_ZTERM NE '*' .
CALL FUNCTION 'FI_FIND_PAYMENT_CONDITIONS'
EXPORTING
I_ZTERM = I_ZTERM
I_BLDAT = I_BLDAT
I_BUDAT = I_BUDAT
IMPORTING
E_T052 = S_T052
E_ZFBDT = E_ZFBDT
E_SKLIN = S_SKLIN
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF SY -SUBRC NE 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ELSE .
*------- Zahlungsschlüssel und Zahlungssperre vorschlagen --------------
E_ZLSPR = S_T052 -ZSCHF .
E_ZLSCH = S_T052 -ZLSCH .
*----------- Tage und Prozente setzen ----------------------------------
E_ZBD1T = S_SKLIN -ZTAG1 .
E_ZBD1P = S_SKLIN -ZPRZ1 .
E_ZBD2T = S_SKLIN -ZTAG2 .
E_ZBD2P = S_SKLIN -ZPRZ2 .
E_ZBD3T = S_SKLIN -ZTAG3 .
ENDIF .
ENDFORM . " PAYMENT_CONDITIONS_GET
*&---------------------------------------------------------------------*
*& Form BSET_FILL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BSET_FILL TABLES TI_BKPF TYPE TYP_TAB_BKPF
TI_BSEG TYPE TYP_TAB_BSEG
TI_BSET TYPE TYP_TAB_BSET
USING I_BUKRS LIKE RKWA -BUKRS
CHANGING S_MSG TYPE TYP_MSG
X_FEHLER TYPE C .
DATA : T_DBSEG LIKE DBSEG OCCURS 0 WITH HEADER LINE ,
S_BSEG LIKE BSEG ,
S_DBSEG LIKE DBSEG ,
S_BKPF LIKE BKPF ,
TAB_BKPF LIKE BKPF OCCURS 0 WITH HEADER LINE ,
F_KALSM LIKE T005 -KALSM .
READ TABLE TI_BKPF INDEX 1 INTO S_BKPF .
S_BKPF -AWTYP = C_AWTYP_RMRP .
APPEND S_BKPF TO TAB_BKPF .
* dbseg fill for cash discount
LOOP AT TI_BSEG INTO S_BSEG .
IF S_BSEG -KOART = C_KOART_KRED .
T_DBSEG -XSKFB = X .
ELSE .
T_DBSEG -XSKFB = SPACE .
ENDIF .
APPEND T_DBSEG .
ENDLOOP .
CALL FUNCTION 'FIND_TAX_SPREADSHEET'
EXPORTING
BUCHUNGSKREIS = I_BUKRS
IMPORTING
SCHEMA = F_KALSM
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF SY -SUBRC NE 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
CALL FUNCTION 'CALCULATE_TAX_DOCUMENT'
EXPORTING
I_BUKRS = I_BUKRS
IMPORTING
E_ITXDAT = ITXDAT
TABLES
T_BKPF = TAB_BKPF
T_BSEG = TI_BSEG
T_DBSEG = T_DBSEG
EXCEPTIONS
ERROR_MESSAGE = 1 .
IF SY -SUBRC NE 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
* amount eligible for cash discount
LOOP AT TI_BSEG INTO S_BSEG WHERE BUZID = C_BUZID_KRED .
READ TABLE T_DBSEG INDEX 1 INTO S_DBSEG .
S_BSEG -SKFBT = S_DBSEG -SKFBT .
MODIFY TI_BSEG FROM S_BSEG .
ENDLOOP .
* bseg fill
CALL FUNCTION 'CREATE_BSET_ITEM'
TABLES
T_BKPF = TI_BKPF
T_BSEG = TI_BSEG
T_BSET = TI_BSET .
* vendor amount incl. taxes
CLEAR : S_BSEG .
LOOP AT TI_BSEG INTO S_BSEG WHERE BUZID = C_BUZID_KRED .
IF ( ( S_BSEG -SHKZG = 'S' ) AND ( ITXDAT -SHKZG = 'S' ) )
OR ( ( S_BSEG -SHKZG = 'H' ) AND ( ITXDAT -SHKZG = 'H' ) ) .
S_BSEG -WRBTR = S_BSEG -WRBTR - ITXDAT -FWSTE .
ELSE .
S_BSEG -WRBTR = S_BSEG -WRBTR + ITXDAT -FWSTE .
ENDIF .
S_BSEG -REWWR = S_BSEG -WRBTR .
S_BSEG -TXBFW = S_BSEG -WRBTR .
MODIFY TI_BSEG FROM S_BSEG .
CLEAR S_BSEG .
ENDLOOP .
ENDFORM . " BSET_FILL
*&---------------------------------------------------------------------*
*& Form RKWA_UPDATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM RKWA_UPDATE TABLES TI_RKWA TYPE TYP_TAB_RKWA
TI_TAX TYPE TYP_TAB_TAX
USING I_BELNR LIKE RKWA -BELNR
I_GJAHR LIKE RKWA -GJAHR
I_LIFNR LIKE RKWA -LIFNR
I_VENDOR_LINE TYPE C
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : S_RKWA LIKE RKWA ,
S_TAX TYPE TYP_TAX .
LOOP AT TI_RKWA INTO S_RKWA .
S_RKWA -STATUS = '01' .
S_RKWA -BELNR = I_BELNR .
S_RKWA -GJAHR = I_GJAHR .
IF NOT I_VENDOR_LINE IS INITIAL .
S_RKWA -BUZEI = SY -TABIX + 1 . "erste Zeile ist Kreditorenzeile
ELSE .
S_RKWA -BUZEI = SY -TABIX .
ENDIF .
* sales tax flag
READ TABLE TI_TAX INTO S_TAX
WITH KEY MATNR = S_RKWA -MATNR
WERKS = S_RKWA -WERKS
LIFNR = I_LIFNR .
IF SY -SUBRC NE 0 .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '008' .
S_MSG -MSGV1 = 'RKWA_UPDATE' .
X_FEHLER = X .
EXIT .
ENDIF .
IF S_RKWA -MWSKZ IS INITIAL . "ab 4.5A Eintrag in der RKWA
S_RKWA -MWSKZ = S_TAX -MWSKZ .
ENDIF .
MODIFY TI_RKWA FROM S_RKWA .
ENDLOOP .
*------ Abrechnung Konsi-Verbindlichkeiten ---------------------------*
DESCRIBE TABLE TI_RKWA LINES SY -TFILL .
IF SY -TFILL GT 0 .
CALL FUNCTION 'MR_RKWA_UPDATE' IN UPDATE TASK
EXPORTING
I_UPDKZ = 'U'
TABLES
T_RKWA = TI_RKWA .
ENDIF .
ENDFORM . " RKWA_UPDATE
*&---------------------------------------------------------------------*
*& Form VARIANT_INIT
*&---------------------------------------------------------------------*
FORM VARIANT_INIT .
CLEAR S_VARIANT .
S_VARIANT - REPORT = C_REPID .
ENDFORM . " VARIANT_INIT
*&---------------------------------------------------------------------*
*& Form F4_VARIA
*&---------------------------------------------------------------------*
FORM F4_VARIA CHANGING CF_VARIA LIKE DISVARIANT -VARIANT .
DATA : F_EXIT ( 1 ) TYPE C .
PERFORM VARIANT_INIT .
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = S_VARIANT
I_SAVE = C_SAVE
IMPORTING
E_EXIT = F_EXIT
ES_VARIANT = S_VAR_USR
EXCEPTIONS
NOT_FOUND = 2 .
IF SY -SUBRC = 2 .
MESSAGE ID SY -MSGID TYPE 'S' NUMBER SY -MSGNO
WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .
ELSE .
IF F_EXIT = SPACE .
CF_VARIA = S_VAR_USR -VARIANT .
ENDIF .
ENDIF .
ENDFORM . " F4_VARIA
*&---------------------------------------------------------------------*
*& Form HEAD_MESSAGE_CREATE
*&---------------------------------------------------------------------*
FORM HEAD_MESSAGE_CREATE TABLES TI_BKPF TYPE TYP_TAB_BKPF
TI_BSEG TYPE TYP_TAB_BSEG
USING I_BLART LIKE T169F -BLART
I_BELNR LIKE RKWA -BELNR
I_BUKRS LIKE RKWA -BUKRS
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : LF_UPDATE LIKE BOOLE -BOOLE .
DATA : H_RBKPV TYPE MRM_RBKPV ,
LS_KOMKBMR LIKE KOMKBMR .
CLEAR : H_RBKPV , S_MSG .
MOVE-CORRESPONDING TI_BKPF TO H_RBKPV .
READ TABLE TI_BSEG INDEX 1 .
H_RBKPV -BELNR = I_BELNR .
H_RBKPV -LIFNR = TI_BSEG -LIFNR .
* create messages
LF_UPDATE = 'X' .
* Kommunikationsstruktur füllen
CLEAR LS_KOMKBMR .
LS_KOMKBMR -BUKRS = I_BUKRS .
LS_KOMKBMR -BELNR = I_BELNR .
LS_KOMKBMR -BLART = I_BLART .
LS_KOMKBMR -USNAM = H_RBKPV -USNAM .
IF NOT TI_BSEG -FILKD IS INITIAL .
LS_KOMKBMR -LIFNR = TI_BSEG -FILKD . " Partner LF
ELSE .
LS_KOMKBMR -LIFNR = TI_BSEG -LIFNR . " Partner LF
ENDIF .
LS_KOMKBMR -LIFRE = TI_BSEG -LIFNR . " Partner RS
LS_KOMKBMR -IDENT = C_IDENT_KONS .
CALL FUNCTION 'MRM_HEAD_MESSAGE_CREATE'
EXPORTING
IF_KAPPL = C_KAPPL_MR
IF_KALSM = C_KALSM_0003
IS_RBKPV = H_RBKPV
IS_KOMKBMR = LS_KOMKBMR
IF_UPDATE = LF_UPDATE
EXCEPTIONS
ERROR_MESSAGE = 2
OTHERS = 3 .
IF SY -SUBRC <> 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
IF SY -MSGTY = 'A' . "Ausgabe der A-Meldung als E-Meldung:
S_MSG -MSGTY = 'E' .
ENDIF .
X_FEHLER = X .
EXIT .
ENDIF .
ENDFORM . " HEAD_MESSAGE_CREATE
*&---------------------------------------------------------------------*
*& Form authority_check
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM AUTHORITY_CHECK USING AUTH_OBJ
AUTH_ID
AUTH_VAL TYPE LFA1 -BEGRU
CHANGING S_MSG TYPE TYP_MSG
X_FEHLER TYPE C .
CASE AUTH_OBJ .
WHEN 'BEK' .
AUTHORITY-CHECK OBJECT 'F_BKPF_BEK'
ID 'ACTVT' FIELD '01'
ID AUTH_ID FIELD AUTH_VAL .
IF SY -SUBRC NE 0 .
CLEAR S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '120' .
S_MSG -MSGV1 = AUTH_VAL .
X_FEHLER = X .
EXIT .
ENDIF .
ENDCASE .
ENDFORM . " authority_check
*&---------------------------------------------------------------------*
*& Form bseg_lines_numbering
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_TI_BSEG[] text
*----------------------------------------------------------------------*
FORM BSEG_LINES_NUMBERING CHANGING TI_BSEG TYPE TYP_TAB_BSEG .
DATA : S_BSEG LIKE BSEG ,
F_BUZEI LIKE BSEG -BUZEI .
CLEAR : F_BUZEI .
LOOP AT TI_BSEG INTO S_BSEG .
F_BUZEI = F_BUZEI + 1 .
S_BSEG -BUZEI = F_BUZEI .
MODIFY TI_BSEG FROM S_BSEG TRANSPORTING BUZEI .
ENDLOOP .
ENDFORM . " bseg_lines_numbering
*&---------------------------------------------------------------------*
*& Form nav_verteilen
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TI_BSEG text
*----------------------------------------------------------------------*
FORM NAV_VERTEILEN TABLES TI_BSEG STRUCTURE BSEG .
DATA : LT_BSEG_OUTPUT TYPE STANDARD TABLE OF BSEG ,
LT_BSEG_INPUT TYPE STANDARD TABLE OF BSEG .
DATA : LS_BSEG LIKE BSEG . "1824213 start
DATA : LV_COUNTER TYPE I .
FIELD-SYMBOLS : <LS_BSEG> TYPE BSEG ,
<LS_BSEG_OUTPUT> TYPE BSEG .
LOOP AT TI_BSEG ASSIGNING <LS_BSEG>
WHERE BUZID = C_BUZID_SACH
AND KOART = C_KOART_SACH .
LV_COUNTER = LV_COUNTER + 1 .
<LS_BSEG> -XREF1 = LV_COUNTER .
LS_BSEG = <LS_BSEG> .
APPEND LS_BSEG TO LT_BSEG_INPUT .
ENDLOOP .
CLEAR : LS_BSEG .
CALL FUNCTION 'NDVAT_ADJUSTMENT'
EXPORTING
I_BSEG = LS_BSEG
READ_BSEG = 'X'
CALCULATE = 'M'
IMPORTING
E_BSEG = LS_BSEG
TABLES
T_BSEG_INPUT = LT_BSEG_INPUT
T_BSEG_OUTPUT = LT_BSEG_OUTPUT .
LOOP AT TI_BSEG ASSIGNING <LS_BSEG>
WHERE BUZID = C_BUZID_SACH
AND KOART = C_KOART_SACH .
READ TABLE LT_BSEG_OUTPUT ASSIGNING <LS_BSEG_OUTPUT>
WITH KEY XREF1 = <LS_BSEG> -XREF1 .
IF <LS_BSEG_OUTPUT> IS ASSIGNED .
<LS_BSEG> -WRBTR = <LS_BSEG_OUTPUT> -WRBTR .
DELETE TABLE LT_BSEG_OUTPUT FROM <LS_BSEG_OUTPUT> .
CLEAR <LS_BSEG> -XREF1 .
ENDIF .
ENDLOOP . "1824213 end
ENDFORM . " nav_verteilen
*&---------------------------------------------------------------------*
*& Form null_lines_check *
*&---------------------------------------------------------------------*
* Prüft ob der Beleg nur 0-Zeilen beinhaltet *
*----------------------------------------------------------------------*
* -->P_TAB_BSEG text
* <--P_X_FEHLER text
* <--P_S_MSG text
*----------------------------------------------------------------------*
FORM NULL_LINES_CHECK TABLES TI_BSEG STRUCTURE BSEG
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : XNULLPOS LIKE BOOLE -BOOLE .
*--- Überprüfung, ob der zu erzeugende FI-Beleg nicht nur Nullzeilen --*
*--- enthält: --*
MOVE 'X' TO XNULLPOS .
LOOP AT TI_BSEG .
IF XNULLPOS = SPACE .
EXIT .
ELSE .
IF TI_BSEG -WRBTR <> 0 OR TI_BSEG -FWBAS <> 0 .
CLEAR XNULLPOS .
ENDIF .
ENDIF .
ENDLOOP .
IF XNULLPOS = 'X' .
CLEAR : S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '278' .
X_FEHLER = X .
EXIT .
ENDIF .
ENDFORM . " null_lines_check
*&---------------------------------------------------------------------*
*& Form BADI_HEADERDATA_MODIFY
*&---------------------------------------------------------------------*
* in this BAdI the vendor and the invoice type can be changed
*----------------------------------------------------------------------*
FORM BADI_HEADERDATA_MODIFY TABLES IT_RKWA TYPE TYP_TAB_RKWA
USING I_BUKRS LIKE BKPF -BUKRS
CHANGING X_BLART LIKE T169F -BLART
X_LIFNR LIKE RKWA -LIFNR
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
CALL FUNCTION 'MRMBADI_MRKO_HDAT_MODIFY'
EXPORTING
I_BUKRS = I_BUKRS
I_LIFNR = X_LIFNR
I_BLART = X_BLART
TI_RKWA = IT_RKWA[]
IMPORTING
E_LIFNR = X_LIFNR
E_BLART = X_BLART
EXCEPTIONS
BADI_ERROR = 01 .
IF ( SY -SUBRC <> 0 ) .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
ENDFORM . " badi_headerdata_modify
*eject
*&---------------------------------------------------------------------*
*& Form DOCUMENT_TYPE_CHECK
*&---------------------------------------------------------------------*
* netto document type is not allowed
*----------------------------------------------------------------------*
FORM DOCUMENT_TYPE_CHECK USING BLART LIKE T169F -BLART
CHANGING S_T003 LIKE T003
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
CLEAR : S_T003 .
* gefundene Belegart darf nicht NettoBelegart sein
CALL FUNCTION 'FI_DOCUMENT_TYPE_DATA'
EXPORTING
I_BLART = BLART
IMPORTING
E_T003 = S_T003
EXCEPTIONS
ERROR_MESSAGE = 1
OTHERS = 2 .
IF ( SY -SUBRC <> 0 ) .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
IF ( S_T003 -XNETB = X ) .
CLEAR : S_MSG .
S_MSG -MSGID = C_MSGID_M8 .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '733' .
S_MSG -MSGV1 = C_TCODE_MRKO .
S_MSG -MSGV2 = BLART .
X_FEHLER = X .
EXIT .
ENDIF .
ENDFORM . "document_type_check
*&--------------------------------------------------------------------*
*& Form fm_account_assignment_get
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->S_RKWA text
* -->S_BSEG text
* -->X_FEHLER text
* -->S_MSG text
*---------------------------------------------------------------------*
FORM FM_ACCOUNT_ASSIGNMENT_GET USING S_RKWA STRUCTURE RKWA
CHANGING S_BSEG STRUCTURE BSEG
X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
INCLUDE : IFIFMCON_APPL ,
IFIFMCON_BOOL .
DATA : L_F_MSEG LIKE ACCTIT ,
L_FLAG_FMAKT TYPE C ,
L_FLG_ISPS_NOT_ACTIVE TYPE C .
* definitions for reading archived documents from AIS
DATA : LT_ARCMKPF TYPE TY_T_MKPF ,
LT_ARCMSEG TYPE TY_T_MSEG ,
LS_ARCMSEG TYPE MSEG ,
LS_BORIDENT TYPE BORIDENT .
*----- Nur Aufrufen wenn IS-PS aktiv ist
CALL FUNCTION 'FM00_CHECK_ISPS'
IMPORTING
E_FLG_ISPS_NOT_ACTIVE = L_FLG_ISPS_NOT_ACTIVE .
CHECK L_FLG_ISPS_NOT_ACTIVE IS INITIAL .
CALL FUNCTION 'FMFK_BUKRS_CHECK_FMAKTIV'
EXPORTING
IP_BUKRS = S_RKWA -BUKRS
IP_APPLC = APPLC_CA
IMPORTING
OP_IS_ACTIVE = L_FLAG_FMAKT
EXCEPTIONS
NO_FIKRS_FOR_BUKRS = 01
WRONG_INPUT_FLAG = 02 . "#EC *
CHECK L_FLAG_FMAKT = CON_JA AND SY -SUBRC IS INITIAL .
*----- HHM Kontierung aus dem Materialbeleg holen
SELECT SINGLE FIPOS FISTL FKBER GEBER BUDGET_PD GRANT_NBR
FROM ACCTIT
INTO CORRESPONDING FIELDS OF L_F_MSEG
WHERE AWTYP = 'MKPF'
AND AWREF = S_RKWA -MBLNR
AND AWORG = S_RKWA -MJAHR
AND ZEILE = S_RKWA -ZEILE
AND KTOSL = 'GBB' .
IF SY -SUBRC <> 0 OR L_F_MSEG -FIPOS IS INITIAL .
SELECT SINGLE FIPOS FISTL GEBER FKBER GRANT_NBR
FROM MSEG
INTO CORRESPONDING FIELDS OF L_F_MSEG
WHERE MBLNR = S_RKWA -MBLNR
AND MJAHR = S_RKWA -MJAHR
AND ZEILE = S_RKWA -ZEILE .
IF SY -SUBRC <> 0 .
* read MM doc data from AIS (archive)
REFRESH LT_ARCMKPF .
REFRESH LT_ARCMSEG .
CLEAR LS_BORIDENT .
CONCATENATE S_RKWA -MBLNR S_RKWA -MJAHR
INTO LS_BORIDENT -OBJKEY .
CALL FUNCTION 'ASH_MM_MATBEL_READ'
EXPORTING
I_BORIDENT = LS_BORIDENT
TABLES
ET_MKPF = LT_ARCMKPF
ET_MSEG = LT_ARCMSEG
EXCEPTIONS
ERROR_MESSAGE = 1
OTHERS = 4 .
IF SY -SUBRC = 0 .
LOOP AT LT_ARCMSEG INTO LS_ARCMSEG
WHERE ZEILE = S_RKWA -ZEILE .
L_F_MSEG -FIPOS = LS_ARCMSEG -FIPOS .
L_F_MSEG -FISTL = LS_ARCMSEG -FISTL .
L_F_MSEG -GEBER = LS_ARCMSEG -GEBER .
L_F_MSEG -FKBER = LS_ARCMSEG -FKBER .
L_F_MSEG -GRANT_NBR = LS_ARCMSEG -GRANT_NBR .
ENDLOOP .
ELSE .
IF 1 = 2 .
MESSAGE E298 (FI ) .
* MSEG Zeile nicht gefunden! Ableitung der HHM Kontierung nicht möglic
ENDIF .
CLEAR : S_MSG .
S_MSG -MSGID = 'FI' .
S_MSG -MSGTY = C_MSGTY_ERROR .
S_MSG -MSGNO = '298' .
X_FEHLER = 'X' .
EXIT .
ENDIF .
ENDIF .
ENDIF .
S_BSEG -GRANT_NBR = L_F_MSEG -GRANT_NBR .
S_BSEG -FKBER_LONG = L_F_MSEG -FKBER .
S_BSEG -FIPOS = L_F_MSEG -FIPOS .
S_BSEG -GEBER = L_F_MSEG -GEBER .
* Budget Period EhP4
IF CL_OPS_SWITCH_CHECK =>OPS_SFWS_BUD_PER ( ) IS NOT INITIAL .
S_BSEG -BUDGET_PD = L_F_MSEG -BUDGET_PD .
ENDIF .
S_BSEG -FISTL = L_F_MSEG -FISTL .
ENDFORM . "fm_account_assignment_get
*&---------------------------------------------------------------------*
*& Form withholding_tax_create
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TAB_ACCIT_WT text
* -->P_TI_RBWS text
*----------------------------------------------------------------------*
FORM WITHHOLDING_TAX_CREATE TABLES TE_ACCIT_WT STRUCTURE ACCIT_WT
TI_RBWS TYPE TYP_TAB_RBWS .
CHECK NOT TI_RBWS[] IS INITIAL .
DATA : S_RBWS LIKE RBWS .
LOOP AT TI_RBWS INTO S_RBWS .
CLEAR TE_ACCIT_WT .
MOVE-CORRESPONDING S_RBWS TO TE_ACCIT_WT .
TE_ACCIT_WT -WT_KEY = S_RBWS -SPLIT_KEY .
APPEND TE_ACCIT_WT .
ENDLOOP .
ENDFORM . " withholding_tax_create
*&---------------------------------------------------------------------*
*& Form vendor_taxnum_check
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_RKWA text
* -->P_S_T001 text
* -->P_LIFNR text
* <--P_X_FEHLER text
* <--P_S_MSG text
*----------------------------------------------------------------------*
FORM VENDOR_TAXNUM_CHECK TABLES TI_RKWA TYPE TYP_TAB_RKWA
USING S_T001 LIKE T001
I_LIFNR LIKE RKWA -LIFNR
CHANGING X_FEHLER TYPE C
S_MSG TYPE TYP_MSG .
DATA : S_TAXDATA TYPE MRM_TAX_2 ,
S_RKWA LIKE RKWA ,
S_KRED LIKE VF_KRED ,
TAB_TAXDATA TYPE MRM_TAB_TAXES ,
S_T005 LIKE T005 .
CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE'
EXPORTING
I_ARBGB = 'M8'
I_DTYPE = 'W'
I_MSGNR = '759'
IMPORTING
E_MSGTY = SY -MSGTY .
CHECK SY -MSGTY = 'E' .
* read vendor
CALL FUNCTION 'FI_VENDOR_DATA'
EXPORTING
I_LIFNR = I_LIFNR
IMPORTING
E_KRED = S_KRED
EXCEPTIONS
VENDOR_MISSING = 1
OTHERS = 2 .
IF SY -SUBRC NE 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
* check country of vendor
CALL FUNCTION 'T005_SINGLE_READ'
EXPORTING
T005_LAND1 = S_KRED -LAND1
IMPORTING
WT005 = S_T005
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2 .
IF SY -SUBRC <> 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ELSEIF S_T005 -XEGLD IS INITIAL .
EXIT .
ENDIF .
* fill table taxdata
LOOP AT TI_RKWA INTO S_RKWA WHERE MWSKZ NE SPACE .
S_TAXDATA -MWSKZ = S_RKWA -MWSKZ .
COLLECT S_TAXDATA INTO TAB_TAXDATA .
ENDLOOP .
* read country data of company code
CALL FUNCTION 'MRM_T005_READ'
EXPORTING
TI_T001 = S_T001
IMPORTING
TE_T005 = S_T005
TABLES
TI_TAXDATA = TAB_TAXDATA . "#EC FB_NORC
IF SY -SUBRC <> 0 . "#EC FB_NORC
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ELSEIF S_T005 -XEGLD IS INITIAL .
EXIT .
ENDIF .
* check tax number
IF ( ( S_T005 -INTCA <> 'DE' AND S_KRED -STENR IS INITIAL )
OR ( S_T005 -INTCA = 'DE' AND S_KRED -STENR IS INITIAL
AND S_KRED -STCD1 IS INITIAL ) ) AND S_KRED -STCEG IS INITIAL .
SY -MSGTY = 'E' .
SY -MSGID = 'M8' .
SY -MSGNO = '759' .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = X .
EXIT .
ENDIF .
ENDFORM . " vendor_taxnum_check
*&---------------------------------------------------------------------*
*& Form LOCK_RKWA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_RKWA text
* <--P_X_FEHLER text
* <--P_S_MSG text
*----------------------------------------------------------------------*
FORM LOCK_RKWA TABLES IT_RKWA TYPE TYP_TAB_RKWA
CHANGING X_FEHLER
S_MSG TYPE TYP_MSG .
DATA : LS_RKWA LIKE RKWA .
CLEAR X_FEHLER .
LOOP AT IT_RKWA INTO LS_RKWA .
CALL FUNCTION 'ENQUEUE_E_RKWA'
EXPORTING
MBLNR = LS_RKWA -MBLNR
MJAHR = LS_RKWA -MJAHR
ZEILE = LS_RKWA -ZEILE
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
OTHERS = 3 .
IF SY -SUBRC <> 0 .
PERFORM MSG_FUELLEN_SYSVAR CHANGING S_MSG .
X_FEHLER = 'X' .
EXIT .
ENDIF .
ENDLOOP .
ENDFORM . " lock_rkwa
*{ INSERT
INCLUDE WRF_RMVKON00F01 . "Note 663537
*} INSERT