fi
Buchen Beleg per BAPI BAPI_ACC_DOCUMENT_POST
Das nachfolgende Coding dient als Hilfestellung, wie der BAPI BAPI_ACC_DOCUMENT_POST mit Daten zu versorgen ist, damit er funzt. Hier haben sich nämlich schon etliche nicht-FI-kundige Entwickler die Ohren gebrochen...
Weiter unten sind 4 Beispielcodings zu diesem Themenkomplex aufgeführt:
- Einfache Sachkontenbuchung ohne Steuer.
- Debitorische Buchung mit normaler Ausgangssteuer
- Kreditorische Buchung mit Reverse Charge-Steuer, also mit zwei Steuerzeilen (Stichwort ESE/ESA).
- Erhaltene Anzahlung (debitorisch) mit Steuer und separater Übergabe in Beleg- und Hauswährung
UPDATE: Im Beratungshinweis "2083799 - Sammelhinweis: Buchungen mit Rechnungswesen-BAPIs" finden sich über das unten beschriebene hinaus wertvolle Informationen und weitere Beispiele.
*&---------------------------------------------------------------------*
*& Report YTEST_SIMPLE_POST
*&
*&---------------------------------------------------------------------*
*& Demoprogramm zur Erläuterung der Aufrufparameter für das BAPI
*& BAPI_ACC_DOCUMENT_POST
*&---------------------------------------------------------------------*
REPORT ytest_simple_post.
* Beispieldaten für Beleginhalte
DATA: bukrs TYPE bukrs VALUE '1000', "Buchungskreis
hkonts TYPE hkont VALUE '0000047011', "Konto Soll
hkonth TYPE hkont VALUE '0000047012', "Konto Haben
waers TYPE waers VALUE 'EUR', "Belegwährung
wrbtr TYPE wrbtr VALUE 100, "Betrag
sgtxt TYPE sgtxt VALUE 'Test', "Belegpos.text
kostl TYPE kostl VALUE '0000001000', "Kostenstelle
zuonr TYPE dzuonr VALUE '23456', "Zuordnung
xblnr TYPE xblnr VALUE 'REFERENZ', "Referenznummer
blart type blart value 'SA', "Belegart
docnum TYPE belnr_d. "Belegnummer
* Schnittstellendaten für Verbuchungs-BAPI
DATA:
* Returnparameter des BAPIs
l_obj_type TYPE bapiache09-obj_type, "Objekttyp
* Objejktschlüssel erhält vom BAPI die Belegidentifikation:
* NNNNNNNNNNYYYYBBBB N = Belegnummer, Y = GJahr, B = Buchungskreis
l_obj_key TYPE bapiache09-obj_key, "Objektschlüssel
l_obj_sys TYPE bapiache09-obj_sys, "log. System
* Belegkopf
ls_documentheader TYPE bapiache09,
* Sachkontenpositionen
lit_accountgl TYPE TABLE OF bapiacgl09,
ls_accountgl TYPE bapiacgl09,
* Steuerzeilen (in vorliegendem Bsp. nicht relevant)
lit_accounttax TYPE TABLE OF bapiactx09,
ls_accounttax TYPE bapiactx09,
* Betragsinformationen
lit_currencyamount TYPE TABLE OF bapiaccr09,
ls_currencyamount TYPE bapiaccr09,
* Meldungen des BAPI's
lit_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2.
DATA:
l_itemno TYPE posnr_acc. "Postionsnummer (s.u.)
*-----------------------------------------------------------------------
* Initialisierung
*-----------------------------------------------------------------------
CLEAR: lit_accountgl[],
lit_accounttax[],
lit_currencyamount[],
lit_return[].
*-----------------------------------------------------------------------
* Positionsnummer (fängt bei 1 an und wird pro Belegpos. um 1 inkr.)
* Hinweis: Es können auch 10er Schritte verwendet werden, wichtig ist
* nur eins: Die Einträge der Tabellen l_accountgl und
* l_currencyamount finden über den jeweiligen Inhalt des Felds
* itemno_acc 'zueinander', d.h. anders ausgedrückt:
* Für jede Belegposition muss jeweils ein Eintrag in den
* genannten Tabellen mit identischer itemno_acc aufgenommen
* werden.
*-----------------------------------------------------------------------
l_itemno = 1.
*-----------------------------------------------------------------------
* Belegkopf
*-----------------------------------------------------------------------
CLEAR ls_documentheader.
ls_documentheader-bus_act = 'RFBU'. "Vorgang (fix)
ls_documentheader-username = sy-uname. "Belegerfasser
ls_documentheader-comp_code = bukrs. "Buchungskreis
ls_documentheader-doc_date = sy-datum. "Belegdatum
ls_documentheader-pstng_date = sy-datum. "Buchungsdatum
ls_documentheader-ref_doc_no = xblnr. "Referenznummer
ls_documentheader-doc_type = blart. "Belegart
*-----------------------------------------------------------------------
* 1. Belegposition (Soll)
*-----------------------------------------------------------------------
CLEAR: ls_accountgl, ls_currencyamount.
ls_accountgl-itemno_acc = l_itemno. "Positionsidentifier
ls_accountgl-gl_account = hkonts. "Sachkonto (Soll)
ls_accountgl-item_text = sgtxt. "Belegtext
ls_accountgl-costcenter = kostl. "Kostenstelle
ls_accountgl-alloc_nmbr = zuonr. "Zuordnung
* Betragssegment zur Sachkontenposition 1 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountgl-itemno_acc.
ls_currencyamount-currency = waers.
ls_currencyamount-amt_doccur = wrbtr. "positiver Betrag = Soll
APPEND: ls_accountgl TO lit_accountgl,
ls_currencyamount TO lit_currencyamount.
*-----------------------------------------------------------------------
* 2. Belegposition (Haben)
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accountgl, ls_currencyamount.
ls_accountgl-itemno_acc = l_itemno.
ls_accountgl-gl_account = hkonth.
ls_accountgl-item_text = sgtxt.
ls_accountgl-alloc_nmbr = zuonr.
* Betragssegment zur Sachkontenposition 2 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountgl-itemno_acc.
ls_currencyamount-currency = waers.
ls_currencyamount-amt_doccur = wrbtr * -1. "Haben --> Minus
APPEND: ls_accountgl TO lit_accountgl,
ls_currencyamount TO lit_currencyamount.
*-----------------------------------------------------------------------
* BAPI-Aufruf
*-----------------------------------------------------------------------
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_documentheader
IMPORTING
obj_type = l_obj_type
obj_key = l_obj_key
obj_sys = l_obj_sys
TABLES
accountgl = lit_accountgl
* ACCOUNTRECEIVABLE =
* ACCOUNTPAYABLE =
* accounttax =
currencyamount = lit_currencyamount
* CRITERIA =
* VALUEFIELD =
* EXTENSION1 =
return = lit_return
* PAYMENTCARD =
* CONTRACTITEM =
* EXTENSION2 =
* REALESTATE =
* ACCOUNTWT =
.
COMMIT WORK.
*-----------------------------------------------------------------------
* BAPI Meldungen ausgeben
*-----------------------------------------------------------------------
IF NOT lit_return[] IS INITIAL.
CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
TABLES
i_bapiret2_tab = lit_return.
ENDIF.
* systemseitig vergebene Belegnummer kommt zurück!
docnum = l_obj_key(10).
...und weil' so schön war, das gleiche nochmal als debitorische Buchung:
per Debitor 119,-- an Sachkonto 100,--, Steuer 19,--
*&---------------------------------------------------------------------*
*& Report YTEST_SIMPLE_POST
*&
*&---------------------------------------------------------------------*
*& Demoprogramm zur Erläuterung der Aufrufparameter für das BAPI
*& BAPI_ACC_DOCUMENT_POST
*&---------------------------------------------------------------------*
REPORT ytest_simple_post.
* Beispieldaten für Beleginhalte
DATA: bukrs TYPE bukrs VALUE '1002', "Buchungskreis
kunnr TYPE kunnr VALUE '0000064756', "Debitor Soll
hkonth TYPE hkont VALUE '0000331000', "Konto Haben
waers TYPE waers VALUE 'EUR', "Belegwährung
wrbtr TYPE wrbtr VALUE 119, "Betrag
sgtxt TYPE sgtxt VALUE 'Test', "Belegpos.text
kostl TYPE kostl VALUE '0000102719', "Kostenstelle
zuonr TYPE dzuonr VALUE '23456', "Zuordnung
xblnr TYPE xblnr VALUE 'REFERENZ', "Referenznummer
blart TYPE blart VALUE 'DR', "Belegart
mwskz TYPE mwskz VALUE 'A1', "Steuerkennzeichen
docnum TYPE belnr_d. "Belegnummer
* Schnittstellendaten für Verbuchungs-BAPI
DATA:
* Returnparameter des BAPIs
l_obj_type TYPE bapiache09-obj_type, "Objekttyp
* Objektschlüssel erhält vom BAPI die Belegidentifikation:
* NNNNNNNNNNYYYYBBBB N = Belegnummer, Y = GJahr, B = Buchungskreis
l_obj_key TYPE bapiache09-obj_key, "Objektschlüssel
l_obj_sys TYPE bapiache09-obj_sys, "log. System
* Belegkopf
ls_documentheader TYPE bapiache09,
* Sachkontenpositionen
lit_accountgl TYPE TABLE OF bapiacgl09,
ls_accountgl TYPE bapiacgl09,
* Debitorenposition
lit_accountrec TYPE TABLE OF bapiacar09,
ls_accountrec TYPE bapiacar09,
* Steuerzeilen
lit_accounttax TYPE TABLE OF bapiactx09,
ls_accounttax TYPE bapiactx09,
* Betragsinformationen
lit_currencyamount TYPE TABLE OF bapiaccr09,
ls_currencyamount TYPE bapiaccr09,
* Meldungen des BAPI's
lit_return TYPE TABLE OF bapiret2.
DATA:
l_itemno TYPE posnr_acc. "Postionsnummer (s.u.)
* Steuerdaten
DATA:
lit_mwdat TYPE TABLE OF rtax1u15,
ls_mwdat TYPE rtax1u15.
*-----------------------------------------------------------------------
* Initialisierung
*-----------------------------------------------------------------------
CLEAR: lit_accountgl[],
lit_accounttax[],
lit_accountrec[],
lit_currencyamount[],
lit_return[].
*-----------------------------------------------------------------------
* Steuerdaten holen
*-----------------------------------------------------------------------
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
EXPORTING
i_bukrs = bukrs
i_mwskz = mwskz
i_waers = waers
i_wrbtr = wrbtr
TABLES
t_mwdat = lit_mwdat
EXCEPTIONS
OTHERS = 16.
IF sy-subrc NE 0.
* Fehlerbehandlung
ELSE.
READ TABLE lit_mwdat INTO ls_mwdat INDEX 1.
ENDIF.
*-----------------------------------------------------------------------
* Positionsnummer (fängt bei 1 an und wird pro Belegpos. um 1 inkr.)
* Hinweis: Es können auch 10er Schritte verwendet werden, wichtig ist
* nur eins: Die Einträge der Tabellen l_accountgl und
* l_currencyamount finden über den jeweiligen Inhalt des Felds
* itemno_acc 'zueinander', d.h. anders ausgedrückt:
* Für jede Belegposition muss jeweils ein Eintrag in den
* genannten Tabellen mit identischer itemno_acc aufgenommen
* werden.
*-----------------------------------------------------------------------
l_itemno = 1.
*-----------------------------------------------------------------------
* Belegkopf
*-----------------------------------------------------------------------
CLEAR ls_documentheader.
ls_documentheader-bus_act = 'RFBU'. "Vorgang (fix)
ls_documentheader-username = sy-uname. "Belegerfasser
ls_documentheader-comp_code = bukrs. "Buchungskreis
ls_documentheader-doc_date = sy-datum. "Belegdatum
ls_documentheader-pstng_date = sy-datum. "Buchungsdatum
ls_documentheader-ref_doc_no = xblnr. "Referenznummer
ls_documentheader-doc_type = blart. "Belegart
*-----------------------------------------------------------------------
* 1. Belegposition (Soll - Debitor)
*-----------------------------------------------------------------------
CLEAR: ls_accountrec, ls_currencyamount.
ls_accountrec-itemno_acc = l_itemno. "Positionsidentifier
ls_accountrec-customer = kunnr. "Debitor (Soll)
ls_accountrec-item_text = sgtxt. "Belegtext
ls_accountrec-alloc_nmbr = zuonr. "Zuordnung
* Betragssegment zur Sachkontenposition 1 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountrec-itemno_acc.
ls_currencyamount-currency = waers.
ls_currencyamount-amt_doccur = wrbtr. "positiver Betrag = Soll
APPEND: ls_accountrec TO lit_accountrec,
ls_currencyamount TO lit_currencyamount.
*-----------------------------------------------------------------------
* 2. Belegposition (Haben - Sachkonto)
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accountgl, ls_currencyamount.
ls_accountgl-itemno_acc = l_itemno.
ls_accountgl-gl_account = hkonth.
ls_accountgl-costcenter = kostl.
ls_accountgl-item_text = sgtxt.
ls_accountgl-tax_code = mwskz.
ls_accountgl-alloc_nmbr = zuonr.
* Betragssegment zur Sachkontenposition 2 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountgl-itemno_acc.
ls_currencyamount-currency = waers.
ls_currencyamount-amt_doccur = ls_mwdat-kawrt * -1. "Nettobetrag / Haben --> Minus
APPEND: ls_accountgl TO lit_accountgl,
ls_currencyamount TO lit_currencyamount.
*-----------------------------------------------------------------------
* Steuerzeile (Haben)
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accounttax, ls_currencyamount.
ls_accounttax-itemno_acc = l_itemno.
ls_accounttax-tax_code = mwskz.
ls_currencyamount-itemno_acc = ls_accounttax-itemno_acc.
ls_currencyamount-currency = waers.
ls_currencyamount-amt_doccur = ls_mwdat-wmwst * -1.
ls_currencyamount-amt_base = ls_mwdat-kawrt * -1.
APPEND: ls_accounttax TO lit_accounttax,
ls_currencyamount TO lit_currencyamount.
*-----------------------------------------------------------------------
* BAPI-Aufruf
*-----------------------------------------------------------------------
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_documentheader
IMPORTING
obj_type = l_obj_type
obj_key = l_obj_key
obj_sys = l_obj_sys
TABLES
accountgl = lit_accountgl
accountreceivable = lit_accountrec
* ACCOUNTPAYABLE =
accounttax = lit_accounttax
currencyamount = lit_currencyamount
* CRITERIA =
* VALUEFIELD =
* EXTENSION1 =
return = lit_return
* PAYMENTCARD =
* CONTRACTITEM =
* EXTENSION2 =
* REALESTATE =
* ACCOUNTWT =
.
COMMIT WORK.
*-----------------------------------------------------------------------
* BAPI Meldungen ausgeben
*-----------------------------------------------------------------------
IF NOT lit_return[] IS INITIAL.
CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
TABLES
i_bapiret2_tab = lit_return.
ENDIF.
* systemseitig vergebene Belegnummer kommt zurück!
docnum = l_obj_key(10).
*&---------------------------------------------------------------------*
*& Report ZTESTBAPI
*&---------------------------------------------------------------------*
*& kreditorische Buchung mit E1 (Reverse Charge, ESA/ESE)
*&---------------------------------------------------------------------*
REPORT ztestbapi.
* Beispieldaten für Beleginhalte
DATA: bukrs TYPE bukrs VALUE '9000', "Buchungskreis
lifnr TYPE lifnr VALUE '0000000117', "Kreditor Haben
hkonts TYPE hkont VALUE '0000688000', "Konto soll
waers TYPE waers VALUE 'EUR', "Belegwährung
wrbtr TYPE wrbtr VALUE 100, "Betrag
sgtxt TYPE sgtxt VALUE 'Test', "Belegpos.text
kostl TYPE kostl VALUE '9000000000', "Kostenstelle
zuonr TYPE dzuonr VALUE '23456', "Zuordnung
xblnr TYPE xblnr VALUE '4711-001', "Referenznummer
blart TYPE blart VALUE 'KR', "Belegart
mwskz TYPE mwskz VALUE 'E1', "Steuerkennzeichen
docnum TYPE belnr_d. "Belegnummer
* Schnittstellendaten für Verbuchungs-BAPI
DATA:
* Returnparameter des BAPIs
l_obj_type TYPE bapiache09-obj_type, "Objekttyp
* Objektschlüssel erhält vom BAPI die Belegidentifikation:
* NNNNNNNNNNYYYYBBBB N = Belegnummer, Y = GJahr, B = Buchungskreis
l_obj_key TYPE bapiache09-obj_key, "Objektschlüssel
l_obj_sys TYPE bapiache09-obj_sys, "log. System
* Belegkopf
ls_documentheader TYPE bapiache09,
* Sachkontenpositionen
lit_accountgl TYPE TABLE OF bapiacgl09,
ls_accountgl TYPE bapiacgl09,
* Kreditorenposition
lit_accountpay TYPE TABLE OF bapiacap09,
ls_accountpay TYPE bapiacap09,
* Steuerzeilen
lit_accounttax TYPE TABLE OF bapiactx09,
ls_accounttax TYPE bapiactx09,
* Betragsinformationen
lit_currencyamount TYPE TABLE OF bapiaccr09,
ls_currencyamount TYPE bapiaccr09,
* Meldungen des BAPI's
lit_return TYPE TABLE OF bapiret2.
DATA:
l_itemno TYPE posnr_acc. "Postionsnummer (s.u.)
* Steuerdaten
DATA:
lit_mwdat TYPE TABLE OF rtax1u15,
ls_mwdat TYPE rtax1u15.
*-----------------------------------------------------------------------
* Initialisierung
*-----------------------------------------------------------------------
CLEAR: lit_accountgl[],
lit_accounttax[],
lit_accountpay[],
lit_currencyamount[],
lit_return[].
*-----------------------------------------------------------------------
* Steuerdaten holen
*-----------------------------------------------------------------------
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
EXPORTING
i_bukrs = bukrs
i_mwskz = mwskz
i_waers = waers
i_wrbtr = wrbtr
TABLES
t_mwdat = lit_mwdat
EXCEPTIONS
OTHERS = 16.
IF sy-subrc NE 0.
* Fehlerbehandlung
ELSE.
break srohde.
ENDIF.
*-----------------------------------------------------------------------
* Positionsnummer (fängt bei 1 an und wird pro Belegpos. um 1 inkr.)
* Hinweis: Es können auch 10er Schritte verwendet werden, wichtig ist
* nur eins: Die Einträge der Tabellen l_accountgl und
* l_currencyamount finden über den jeweiligen Inhalt des Felds
* itemno_acc 'zueinander', d.h. anders ausgedrückt:
* Für jede Belegposition muss jeweils ein Eintrag in den
* genannten Tabellen mit identischer itemno_acc aufgenommen
* werden.
*-----------------------------------------------------------------------
l_itemno = 1.
*-----------------------------------------------------------------------
* Belegkopf
*-----------------------------------------------------------------------
CLEAR ls_documentheader.
ls_documentheader-bus_act = 'RFBU'. "Vorgang (fix)
ls_documentheader-username = sy-uname. "Belegerfasser
ls_documentheader-comp_code = bukrs. "Buchungskreis
ls_documentheader-doc_date = sy-datum. "Belegdatum
ls_documentheader-pstng_date = sy-datum. "Buchungsdatum
ls_documentheader-ref_doc_no = xblnr. "Referenznummer
ls_documentheader-doc_type = blart. "Belegart
*-----------------------------------------------------------------------
* 1. Belegposition (Haben - Kreditor)
*-----------------------------------------------------------------------
CLEAR: ls_accountpay, ls_currencyamount.
ls_accountpay-itemno_acc = l_itemno. "Positionsidentifier
ls_accountpay-vendor_no = lifnr. "Kreditor
ls_accountpay-item_text = sgtxt. "Belegtext
ls_accountpay-alloc_nmbr = zuonr. "Zuordnung
* Betragssegment zur Sachkontenposition 1 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountpay-itemno_acc.
ls_currencyamount-currency = waers.
ls_currencyamount-amt_doccur = wrbtr * -1. "negativer Betrag = Haben
APPEND: ls_accountpay TO lit_accountpay,
ls_currencyamount TO lit_currencyamount.
*-----------------------------------------------------------------------
* 2. Belegposition (Soll - Sachkonto)
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accountgl, ls_currencyamount.
ls_accountgl-itemno_acc = l_itemno.
ls_accountgl-gl_account = hkonts.
ls_accountgl-costcenter = kostl.
ls_accountgl-item_text = sgtxt.
ls_accountgl-tax_code = mwskz.
ls_accountgl-alloc_nmbr = zuonr.
* Betragssegment zur Sachkontenposition 2 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountgl-itemno_acc.
ls_currencyamount-currency = waers.
ls_currencyamount-amt_doccur = wrbtr. "Soll
APPEND: ls_accountgl TO lit_accountgl,
ls_currencyamount TO lit_currencyamount.
*-----------------------------------------------------------------------
* Steuerzeile 1 (HABEN) - ESA
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accounttax, ls_currencyamount.
ls_accounttax-itemno_acc = l_itemno.
ls_accounttax-tax_code = mwskz.
read table lit_mwdat index 1 into ls_mwdat.
ls_accounttax-acct_key = ls_mwdat-ktosl.
ls_currencyamount-itemno_acc = ls_accounttax-itemno_acc.
ls_currencyamount-currency = waers.
ls_currencyamount-amt_doccur = ls_mwdat-wmwst.
ls_currencyamount-amt_base = ls_mwdat-kawrt * -1. "Steuerbasis VZ drehen
APPEND: ls_accounttax TO lit_accounttax,
ls_currencyamount TO lit_currencyamount.
*-----------------------------------------------------------------------
* Steuerzeile 2 (Haben) - ESE
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accounttax, ls_currencyamount.
ls_accounttax-itemno_acc = l_itemno.
ls_accounttax-tax_code = mwskz.
read table lit_mwdat index 2 into ls_mwdat.
ls_accounttax-acct_key = ls_mwdat-ktosl.
ls_currencyamount-itemno_acc = ls_accounttax-itemno_acc.
ls_currencyamount-currency = waers.
ls_currencyamount-amt_doccur = ls_mwdat-wmwst.
ls_currencyamount-amt_base = ls_mwdat-kawrt * -1.
APPEND: ls_accounttax TO lit_accounttax,
ls_currencyamount TO lit_currencyamount.
*-----------------------------------------------------------------------
* BAPI-Aufruf
*-----------------------------------------------------------------------
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_documentheader
IMPORTING
obj_type = l_obj_type
obj_key = l_obj_key
obj_sys = l_obj_sys
TABLES
accountgl = lit_accountgl
accountpayable = lit_accountpay
accounttax = lit_accounttax
currencyamount = lit_currencyamount
* CRITERIA =
* VALUEFIELD =
* EXTENSION1 =
return = lit_return
* PAYMENTCARD =
* CONTRACTITEM =
* EXTENSION2 =
* REALESTATE =
* ACCOUNTWT =
.
COMMIT WORK.
*-----------------------------------------------------------------------
* BAPI Meldungen ausgeben
*-----------------------------------------------------------------------
IF NOT lit_return[] IS INITIAL.
CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
TABLES
i_bapiret2_tab = lit_return.
ENDIF.
* systemseitig vergebene Belegnummer kommt zurück!
docnum = l_obj_key(10). Mein Kollege Markus hatte mal einen Fall im Rahmen einer Migration, dass erhaltene (debitorische) Anzahlungen (Sonderhauptbuch "A") inkl. Steuerzeile übernommen werden sollten. Zudem wurden hier beispielhaft Beträge sowohl in Transaktions- als auch Hauswährung übergeben. Folgender Beleg wird exemplarisch mit dem weiter unten aufgeführten Coding Snippet gebucht:
*&---------------------------------------------------------------------*
*& Report YTEST_MALA
*&---------------------------------------------------------------------*
*& erhaltene Anzahlungen (SHB-Kz.) und Betragsübergabe in Haus- und Belegwährung
*&---------------------------------------------------------------------*
REPORT ytest_mala.
Sachkontenverzeichnis im ALV mit mehrspachigen Texten
Der nachfolgende Report erstellt ein Sachkontenverzeichnis im ALV-Grid, wobei ggf. auch Texte in verschiedenen Spachen nebeneinander ausgegeben werden können. Dies erleichtert z.B. das Übersetzen bzw. die Kontrolle der verschiedenen Texte in internationalen SAP-Installationen/Projekten. Zudem ist die ALV-Liste doppelklick-sensitiv, d.h. es kann vor hier direkt in die Sachkontenpflege zentral (FS00) angesprungen werden.
Quelltext:
**********************************************************************
** REPORT Z_GL_LIST
*--------------------------------------------------------------------*
** AUTHOR:
** LAST UPDATE:
** DEVELOPMENT REQUEST:
**
**********************************************************************
** CONTENT DESCRIPTION
*--------------------------------------------------------------------*
* List of accounts with texts in different languages
* :
*
**********************************************************************
** CHANGE HISTORY
*--------------------------------------------------------------------*
* DATE | USER | DESCRIPTION
* -------------------------------------------------------------------*
* <DATE> | <USERNAME> | <short description of change>
* <DATE> | <USERNAME> | <short description of change>
* : | : | :
*
**********************************************************************
REPORT z_gl_list.
**********************************************************************
** DECLARATIONS
**********************************************************************
* TYPE DECLARATIONS
*--------------------------------------------------------------------*
TYPES: BEGIN OF gt_acclist,
ktopl TYPE ska1-ktopl,
saknr TYPE ska1-saknr,
bilkt TYPE ska1-bilkt,
bukrs TYPE skb1-bukrs,
altkt TYPE skb1-altkt,
txt20_e TYPE skat-txt20,
txt50_e TYPE skat-txt50,
txt20_d TYPE skat-txt20,
txt50_d TYPE skat-txt50,
txt20_f TYPE skat-txt20,
txt50_f TYPE skat-txt50,
* add textfields for addt'l languages here...
ktoks TYPE ska1-ktoks,
xbilk TYPE ska1-xbilk,
mwskz TYPE skb1-mwskz,
mitkz TYPE skb1-mitkz,
xopvw TYPE skb1-xopvw,
xmwno TYPE skb1-xmwno,
fstag TYPE skb1-fstag,
* add addt'l fields here...
END OF gt_acclist.
* CONSTANTS
*--------------------------------------------------------------------*
* INTERNAL TABLES
*--------------------------------------------------------------------*
DATA: git_acclist TYPE TABLE OF gt_acclist.
* STRUCTURES
*--------------------------------------------------------------------*
DATA: gs_ska1 TYPE ska1,
gs_skb1 TYPE skb1,
gs_skat TYPE skat.
DATA: gs_acclist TYPE gt_acclist.
* VARIABLES
*--------------------------------------------------------------------*
TYPE-POOLS: slis.
DATA: g_repid LIKE sy-repid.
DATA: git_fieldcat TYPE slis_t_fieldcat_alv,
wa_feldkatalog TYPE LINE OF slis_t_fieldcat_alv,
gs_layout TYPE slis_layout_alv,
wa_aktuelle_zeile LIKE LINE OF git_acclist
.
* SELECTION CRITERIA (PARAMETERS AND SELECT-OPTIONS)
*--------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-b01.
SELECT-OPTIONS: so_ktopl FOR gs_ska1-ktopl OBLIGATORY MEMORY ID kpl,
so_saknr FOR gs_ska1-saknr,
so_bukrs FOR gs_skb1-bukrs MEMORY ID buk.
SELECTION-SCREEN END OF BLOCK b01.
**********************************************************************
** EVENTS
**********************************************************************
* START-OF-SELECTION
*--------------------------------------------------------------------*
START-OF-SELECTION.
SET PARAMETER ID 'BUK' FIELD so_bukrs-low.
SET PARAMETER ID 'KPL' FIELD so_ktopl-low.
PERFORM read_glmaster_records.
IF git_acclist[] IS INITIAL.
* No list generated
CALL FUNCTION 'POPUP_NO_LIST'.
ELSE.
* ALV-Ouput
PERFORM display_alv.
ENDIF.
**********************************************************************
** FORMS
**********************************************************************
*&---------------------------------------------------------------------*
*& Form READ_GLMASTER_RECORDS
*&---------------------------------------------------------------------*
* Selection of GL master records and filling of internal table
*----------------------------------------------------------------------*
FORM read_glmaster_records .
DATA: ls_skat TYPE skat.
SELECT * FROM ska1 INTO CORRESPONDING FIELDS OF gs_acclist
WHERE ktopl IN so_ktopl
AND saknr IN so_saknr.
SELECT * FROM skb1 INTO CORRESPONDING FIELDS OF gs_acclist
WHERE saknr = gs_acclist-saknr
AND bukrs IN so_bukrs.
SELECT SINGLE * FROM skat INTO ls_skat
WHERE ktopl = gs_acclist-ktopl
AND saknr = gs_acclist-saknr
AND spras = 'EN'.
IF sy-subrc = 0.
gs_acclist-txt20_e = ls_skat-txt20.
gs_acclist-txt50_e = ls_skat-txt50.
ELSE.
gs_acclist-txt20_e = gs_acclist-txt50_e = 'No English text'.
ENDIF.
SELECT SINGLE * FROM skat INTO ls_skat
WHERE ktopl = gs_acclist-ktopl
AND saknr = gs_acclist-saknr
AND spras = 'DE'.
IF sy-subrc = 0.
gs_acclist-txt20_d = ls_skat-txt20.
gs_acclist-txt50_d = ls_skat-txt50.
ELSE.
gs_acclist-txt20_d = gs_acclist-txt50_d = 'K. deutscher Text'.
ENDIF.
SELECT SINGLE * FROM skat INTO ls_skat
WHERE ktopl = gs_acclist-ktopl
AND saknr = gs_acclist-saknr
AND spras = 'FR'.
IF sy-subrc = 0.
gs_acclist-txt20_f = ls_skat-txt20.
gs_acclist-txt50_f = ls_skat-txt50.
ELSE.
gs_acclist-txt20_f = gs_acclist-txt50_f = 'No french text'.
ENDIF.
* Repeat for addt'l languages...
APPEND gs_acclist TO git_acclist.
ENDSELECT.
ENDSELECT.
ENDFORM. " READ_GLMASTER_RECORDS
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*&---------------------------------------------------------------------*
* Give internal table as ALV
*----------------------------------------------------------------------*
FORM display_alv .
* Feldkatalog fuellen.
PERFORM feldkatalog_fuellen.
* Layout bestimmen.
PERFORM layout_allg_build USING gs_layout.
g_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
i_callback_user_command = 'HANDLE_DOUBLE_CLICK'
* i_grid_title = sy-title
i_save = 'U'
it_fieldcat = git_fieldcat
is_layout = gs_layout
TABLES
t_outtab = git_acclist.
IF sy-subrc <> 0.
MESSAGE e600(fr) WITH 'Error in ALV generation'.
ENDIF.
ENDFORM. " DISPLAY_ALV
*---------------------------------------------------------------------
* Unterprogramm fuer Reaktion auf Doppelklick
*---------------------------------------------------------------------
FORM handle_double_click USING i_ucomm
i_selfield TYPE slis_selfield.
CASE i_ucomm.
WHEN '&IC1'. "bei Doppelklick
READ TABLE git_acclist INTO wa_aktuelle_zeile
INDEX i_selfield-tabindex.
PERFORM maintain_glaccount USING wa_aktuelle_zeile-bukrs
wa_aktuelle_zeile-saknr.
ENDCASE.
ENDFORM. "REAKTION_AUF_DOPPELKLICK
*---------------------------------------------------------------------
* Unterprogramm fuer Layoutangaben
*---------------------------------------------------------------------
FORM layout_allg_build USING ls_layout TYPE slis_layout_alv.
ls_layout-zebra = 'X'.
ls_layout-colwidth_optimize = 'X'.
ENDFORM. "layout_allg_build.
*---------------------------------------------------------------------
* Unterprogramm fuer das Fuellen des Feldkatalogs
*---------------------------------------------------------------------
FORM feldkatalog_fuellen.
DATA: ls_dfies TYPE dfies.
CLEAR git_fieldcat.
DEFINE add_field_2_cat.
clear wa_feldkatalog.
wa_feldkatalog-fieldname = &1.
wa_feldkatalog-ref_fieldname = &3.
wa_feldkatalog-ref_tabname = &2.
append wa_feldkatalog to git_fieldcat.
END-OF-DEFINITION.
add_field_2_cat:
'KTOPL' 'SKA1' 'KTOPL',
'SAKNR' 'SKA1' 'SAKNR',
'BILKT' 'SKA1' 'BILKT',
'BUKRS' 'SKB1' 'BUKRS',
'ALTKT' 'SKB1' 'ALTKT',
'TXT20_E' 'SKAT' 'TXT20',
'TXT50_E' 'SKAT' 'TXT50',
'TXT20_D' 'SKAT' 'TXT20',
'TXT50_D' 'SKAT' 'TXT50',
'TXT20_F' 'SKAT' 'TXT20',
'TXT50_F' 'SKAT' 'TXT50',
* add your addt'l text fields here
'KTOKS' 'SKA1' 'KTOKS',
'XBILK' 'SKA1' 'XBILK',
'MWSKZ' 'SKB1' 'MWSKZ',
'MITKZ' 'SKB1' 'MITKZ',
'XOPVW' 'SKB1' 'XOPVW',
'XMWNO' 'SKB1' 'XMWNO',
'FSTAG' 'SKB1' 'FSTAG'.
* add your addt'l field here...
ENDFORM. "feldkatalog_fuellen.
*&---------------------------------------------------------------------*
*& Form MAINTAIN_GLACCOUNT
*&---------------------------------------------------------------------*
* Maintain GL Acct (CALL TRANSACTION)
*----------------------------------------------------------------------*
* -->P_BUKRS Company Code
* -->P_SAKNR G/L AccountNo
*----------------------------------------------------------------------*
FORM maintain_glaccount USING p_bukrs TYPE bukrs
p_saknr TYPE saknr.
* NOTE: doesn't work when tree-display is activated
SET PARAMETER ID 'BUK' FIELD p_bukrs.
SET PARAMETER ID 'SAK' FIELD p_saknr.
CALL TRANSACTION 'FS00' AND SKIP FIRST SCREEN.
ENDFORM. " MAINTAIN_GLACCOUNT
Bilanz- und GuV-Struktur von einem System ins andere kopieren (ohne KTW)
Bilanz- und GuV-Struktur von einem System ins andere kopieren (ohne KTW)
Quellsystem:
Transaktion FSO2 aufrufen. Die jeweilige Bilanzstruktur auswählen. Dann im Kommandofeld (oben links) folgende Zeichen (011Z) eingeben und mit ENTER bestätigen. Dann wird Dir die Bilanzstruktur als Coding angezeigt. Dann kannst Du über Hilfsmittel à Download das Coding in eine Textdatei sichern.
Zielsystem:
Mit Transaktion OB58 die Bezeichnung der Bilanzstruktur anlegen (Neue Einträge). Dann mit Transaktion FSO2 und 011Z im Kommandofeld die Textdatei per Upload importieren. Dann sollte die Bilanzstruktur vorhanden sein.
/image%2F1473637%2F20170207%2Fob_adae32_profilbild.png)
/image%2F1473637%2F20251029%2Fob_c3febb_screenshot-2025-10-29-084043.png)

