FI-Beleg mit Umsatzsteuer buchen
Ausnahmsweise mal ein Ausflug in die Welt der Finanzbuchhaltung. Für mich ein Rotes Tuch mit Sieben Siegeln aus einem böhmischen Dorf… Ich werde trotzdem versuchen, den Sachverhalt nicht nur syntaktisch sondern auch inhaltlich korrekt wiederzugeben. Aus diesem Grund werde ich mich bewusst so schwammig wie möglich ausdrücken und Fachtermini wie “Erlöskonto”, “Bilanz” oder “Buchungsschlüssel” vermeiden.
Aufgabe
Buchen eines FI-Beleges mit Umsatzsteuer. Es soll ein Bruttobetrag auf ein Konto und der zugehörige Nettobetrag auf ein Gegenkonto gebucht werden. Die Umsatzsteuer soll auf das richtige Umsatzsteuerkonto gebucht werden.
Hilfsmittel
Dass nur der BAPI_ACC_DOCUMENT_POST für diese Zwecke infrage kommt, war mir immerhin schnell klar. Wie man mit diesem Baustein bucht, habe ich ebenfalls schnell heraus gefunden. Eine Herausforderung war die Buchung der Umsatzsteuer. Von der irrigen Annahme, der Baustein könnte die Umsatzsteuer selber rechnen, habe ich mich schnell verabschieden müssen. Die Umsatzsteuer muss dem Baustein übergeben werden.
Um die Umsatzsteuer zu berechnen, helfen diese beiden Bausteine:
- CALCULATE_TAX_FROM_NET_AMOUNT
- CALCULATE_TAX_FROM_GROSSAMOUNT
Desweiteren notwendig ist eine Buchungsperiode. Diese lässt sich zwar auch einfach aus dem Datum errechnen, aber der Baustein CON_FIN_CURRENT_PERIOD_GET_2 hilft ebenfalls weiter. Da der Baustein sich auf den MM-Periodenverschieber bezieht, bin ich mir nicht sicher, ob der Baustein wirklich sinnvoll ist, aber in meinem Fall funktioniert er.
Beleg
Dieser Beleg kommt bei so einer Buchung heraus:
Coding
REPORT. PARAMETERs p_bukrs type bukrs DEFAULT '1000'. START-OF-SELECTION. DATA ls_header TYPE bapiache09. DATA lt_return TYPE STANDARD TABLE OF bapiret2. DATA ls_return TYPE bapiret2. DATA lt_acc_gl TYPE STANDARD TABLE OF bapiacgl09. DATA ls_acc_gl LIKE LINE OF lt_acc_gl. DATA lt_cur_am TYPE STANDARD TABLE OF bapiaccr09. DATA ls_cur_am LIKE LINE OF lt_cur_am. DATA lt_acc_tx TYPE STANDARD TABLE OF bapiactx09. DATA ls_acc_tx LIKE LINE OF lt_acc_tx. data lv_period type POPER. data lv_year type BDATJ. *== aktuelle Periode ermitteln CALL FUNCTION 'CON_FIN_CURRENT_PERIOD_GET_2' EXPORTING id_bukrs = p_bukrs IMPORTING ED_CURRENT_YEAR = lv_year ED_CURRENT_PERIOD = lv_period EXCEPTIONS INTERNAL_ERROR = 1 OTHERS = 2. *== Header ls_header-bus_act = 'RFBU'. "Betriebswirtschaftlicher Vorgang ls_header-username = 'ICH'. "Name des Benutzers ls_header-header_txt = 'Test'. "Belegkopftext ls_header-comp_code = p_bukrs. "Buchungskreis ls_header-doc_date = sy-datum. "Belegdatum im Beleg ls_header-pstng_date = sy-datum. "Buchungsdatum im Beleg ls_header-trans_date = sy-datum. "Umrechnungsdatum ls_header-fisc_year = lv_year. "Geschäftsjahr ls_header-fis_period = lv_period. "Geschäftsmonat ls_header-doc_type = 'SB'. "Belegart ls_header-vatdate = sy-datum. "Steuermeldedatum *== Buchungszeile Haben ls_acc_gl-itemno_acc = 1. "Positionsnummer des Rechnungswesenbeleges ls_acc_gl-gl_account = '0000184040'. "Sachkonto der Hauptbuchhaltung ls_acc_gl-item_text = 'Postext Haben'. "Positionstext ls_acc_gl-acct_key = space. "Vorgangsschlüssel ls_acc_gl-acct_type = 'S'. "Kontoart ls_acc_gl-costcenter = ''. ls_acc_gl-value_date = sy-datum. APPEND ls_acc_gl TO lt_acc_gl. *== Buchungszeile Soll ls_acc_gl-itemno_acc = 2. "Positionsnummer des Rechnungswesenbeleges ls_acc_gl-gl_account = '0000420000'. "Sachkonto der Hauptbuchhaltung ls_acc_gl-item_text = 'Postext Soll' . "Positionstext ls_acc_gl-acct_key = space. "Vorgangsschlüssel ls_acc_gl-acct_type = 'S'. "Kontoart ls_acc_gl-costcenter = ''. ls_acc_gl-value_date = sy-datum. ls_acc_gl-orderid = 'XYZ'. "Falls notwendig APPEND ls_acc_gl TO lt_acc_gl. *== Haben Bruttobetrag ls_cur_am-itemno_acc = 1. ls_cur_am-currency = 'EUR'. ls_cur_am-currency_iso = 'EUR'. ls_cur_am-amt_doccur = '11.90-'. ls_cur_am-curr_type = '00'. APPEND ls_cur_am TO lt_cur_am. *== Soll Nettobetrag ls_cur_am-itemno_acc = 2. ls_cur_am-currency = 'EUR'. ls_cur_am-currency_iso = 'EUR'. ls_cur_am-amt_doccur = '10.00'. ls_cur_am-curr_type = '00'. APPEND ls_cur_am TO lt_cur_am. *== Soll Steuerbetrag ls_cur_am-itemno_acc = 3. ls_cur_am-currency = 'EUR'. ls_cur_am-currency_iso = 'EUR'. ls_cur_am-amt_doccur = '01.90'. ls_cur_am-amt_base = '10.00'. ls_cur_am-curr_type = '00'. APPEND ls_cur_am TO lt_cur_am. *== Steuerinformation ls_acc_tx-itemno_acc = 3. ls_acc_tx-tax_code = 'AA'. ls_acc_tx-cond_key = 'MWAS'. APPEND ls_acc_tx TO lt_acc_tx. *== Beleg buchen CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' EXPORTING documentheader = ls_header TABLES accountgl = lt_acc_gl accounttax = lt_acc_tx currencyamount = lt_cur_am return = lt_return. *== Protokoll LOOP AT lt_return INTO ls_return. WRITE: / ls_return-row, ls_return-message, / ls_return-type, ls_return-id, ls_return-number, ls_return-message_v1. ENDLOOP. *== Commit work CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' IMPORTING return = ls_return.
Neuigkeiten
Januar 2015: SAP hat den Hinweis 2070697 zu den BAPIs BAPI_ACC_DOCUMENT_POST + BAPI_ACC_DOCUMENT_CHECK veröffentlicht:
Symptom
Es wird immer Steuer 0 errechnet oder nichtabzugsfähige Beträge werden nicht verteilt bei Verwendung der Methode gemäß Hinweis 1873588.
Ursache und Voraussetzungen
Mit Hinweis 1873588 wurde eine Methode zur Verfügung gestellt zur Ableitung der Steuerdaten für BAPIs. Die Methode soll das Füllen der Steuerdaten für die BAPIs bapi_acc_document_post und bapi_acc_document_check erleichtern, und zwar ursprünglich für die Ermittlung der Parameter für die zeilenweise Steuer mit Hinweis 1873588, weil hier grundlegende Änderungen im SAP Standard vorgenommen worden sind. Mit diesem Hinweis wird die Methode erweitert für die Berechnung von Steuern (VAT, Sales und Use Tax) inklusive Nichtabzugsfähigkeit und Anzahlungen. Es kann nun ein Gesamtsteuerbetrag für den Beleg vorgegeben werden, der dann entsprechend der berechneten Steuern verteilt wird. Ein neuer Parameter wurde eingeführt, mit dem der Methode mitgeteilt werden kann, dass der Belegsaldo die fehlende Steuer ist, die verteilt werden soll. Eine Berechnung wird nur für Belege durchgeführt, die keine Mischbelege sind, d.h. z.B. Belege mit Anzahlungen und steuerrelevanten Aufwandpositionen in einem Beleg werden nicht unterstützt. Steuern für Indien und Brasilien werden nicht durch diese Methode unterstützt. Direkte Steuern (DIRECT_TAX=’X’) werden ebenfalls nicht unterstützt.
Des weiteren sind alle Änderungen inklusive der Änderungen des Hinweises 1873588 auch für SAPKH60000-60404 verfügbar, d.h. die Änderungen sind mit diesem Hinweis runtergezogen worden, wobei die zeilenweise Übergabe der Steuern erst ab SAPKH60405 möglich ist, weil die BAPIS mit SAPKH60405 um den Parameter ITEMNO_TAX erweitert worden sind. Die Serviceklasse ist somit ab SAPKH60000 verfügbar und wird in allen Enhancementpacks ab SAPKH60000 gleich gehalten. Zudem wird der Funktionsbaustein FI_TAX_SERVICES_CALCULATE angeboten, der RFC-fähig ist. Dieser kann über RFC aufgerufen werden und ruft im SAP-System anschließend die obengenannte Methode FI_TAX_SERVICES=>CALCULATE auf und gibt die Parameter zurück.
Lösung
Korrektur
- Meine Eclipse-Plugins - 22. November 2024
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024