Um eine Abrechnungsvorschrift zu einem Innenauftrag automatisiert anzulegen, sollte in neueren Releases die Standardfunktionalität "automatische Generierung von Abrechnungsvorschriften" verwendet werden. Hierüber steht ein umfassendes Framework zur Verfügung, mit dem die meisten Use-Cases abgedeckt sein sollten. Details hierzu finden sich im Customizing-Leitfaden unter Controlling - Innenaufträge - Istbuchungen - Abrechnung - Automatische Generierung von Abrechnungsvorschriften ...
Für Datenübernahmen von Innenaufträgen, d.h. Übernahme der Stammdaten inkl. Abrechnungsvorschrift kann der BAPI BAPI_INTERNALORDER_CREATE verwendet werden.
Sollte es in Ausnahmefällen jedoch nötig sein, per Programm Abrechnungsvorschriften zu bestehenden Innenauftragen zu generieren, steht der Funktionsbaustein: K_ORDER_SRULE_ADD zur Verfügung, der allerdings einen großen Nachteil hat: er wurde von SAP in neueren Releases deaktiviert, d.h. im Coding ist ein sofortiger Rücksprung zur rufenden Anwendung implementiert, der jegliche Ausführung unterbindet:
************************************************************
************************************************************
RETURN. "fm will be deleted within the next releases ...
************************************************************
************************************************************
D.h., um ihn zu verwenden, muss entweder der oben stehende Befehl per Modifikation ausgebaut oder eine Kopie des Funktionsbausteins im Kundennamensraum angelegt werden.
Schade eigentlich, denn der Funktionsbaustein werkelt gut.
Der FuBa kann wie folgt gerufen werden:
*&---------------------------------------------------------------------*
*& Report YDEMO_ORDER_SRULE_ADD
*&
*&---------------------------------------------------------------------*
*& maschinelles Anlegen einer Abrechnungsvorschrift zu CO-Innenaufträgen
*&---------------------------------------------------------------------*
REPORT ydemo_order_srule_add.
* Schnittstelle f. BAPI
DATA: l_objnr LIKE aufk-objnr. "Objektnummer
DATA:
* Tabelle mit Abrechnungsvorschriften
lt_srules TYPE TABLE OF srules_ext,
* Tabelle f. Übergabe CO-PA Felder bei Abrechnung ins Ergebnis
* Angabe der Tabelle ist Pflicht, auch wenn nicht ins CO-PA
* abgerechnet werden soll...
lt_criteria TYPE TABLE OF bapi_copa_data,
l_rule_inserted LIKE sy-batch.
DATA: ls_srule TYPE srules_ext.
* Objektnummer zusammenbauen oder für einen gegebenen Innenauftrag
* einfach aus der Tab. AUFK nachlesen (Feld AUFK-OBJNR)
* Zusammenbauen ist aber auch recht einfach:
* Format Objektnummer f. CO-Aufträge: XX999999999999
* XX = Objektart OR
* 999999999999 = 12-stellige Innenauftragsnummer
l_objnr(2) = 'OR'.
l_objnr+2(12) = '000000400000'.
* Abrechnungsvorschrift zusammenbasteln...
* Abrechnungsart (engl. Festwerte)
* z.B. FUL = Gesamtabrechnung
* PER = periodische Abrechnung
ls_srule-settl_type = 'PER'.
* ls_srule-SOURCE "opt: Ursprungszuordnung
* Aufteilung
ls_srule-percentage = 100. "prozentuale Aufteilung ODER
*ls_srule-equiv_number "Äquivalenzziffer ODER
*ls_srule-amount "Betrag f. Betragsabrechnung
* Das Abrechungsempfängerobjekt ergibt sich aus der selektiven
* Befüllung der folgenden Felder:
*ls_srule-bus_area "Geschäftsbereich
*ls_srule-comp_code "Buchungskreis
*ls_srule-gl_account "Sachkonto
*ls_srule-profit_ctr "Profitcenter
ls_srule-costcenter = '0000002001'. "Kostenstelle
*ls_srule-orderid "Innenaauftrag
*ls_srule-wbs_element "PSP-Element
*ls_srule-asset_no "Anlage
* ...
APPEND ls_srule TO lt_srules.
CALL FUNCTION 'K_ORDER_SRULE_ADD'
EXPORTING
object_no = l_objnr
IMPORTING
flg_rule_inserted = l_rule_inserted
TABLES
srules = lt_srules
criteria = lt_criteria
EXCEPTIONS
wrong_input = 1
error_occurred = 2
object_not_found = 3
activity_not_allowed = 4
OTHERS = 5.
IF sy-subrc <> 0.
WRITE: / 'Fehler', sy-subrc, 'beim Anlegen der Abrechnungsvorschrift'.
ELSE.
IF l_rule_inserted = 'X'.
WRITE: 'Abrechnungsvorschrift hinzugefügt'.
COMMIT WORK.
ELSE.
WRITE: 'Abrechnungsvorschrift nicht hinzugefügt'.
ENDIF.
ENDIF.