Ändern von Daten im Userexit beim Sichern eines Fertigungsauftrags in SAP
In vielen Fällen ist es notwendig, Daten im Fertigungsauftrag per ABAP Coding zu ändern. Leider gibt es im SAP Fertigungsauftrag nur wenige Userexits, wo man Daten manipulieren kann. Häufig muss man auf den zentralen Userexit bzw. Badi beim Sichern eines Fertigungsauftrags zurückgreifen. In diesem Userexit bzw. Badi ist es nicht ohne weiters möglich, Daten im Fertigungsauftrag zu ändern. Vielmehr ist er dafür gedacht, Daten in eigenen Tabellen fortzuschreiben oder Folgeaktionen per ABAP Coding anzustoßen.
Im folgenden möchte ich eine Methode vorstellen, wie auf einfache Art und Weise Daten im Fertigungsauftrag nachträglich im Userexit beim Sichern eines Fertigungsauftrag geändert werden können.
Szenario
In den Vorgängen zum Fertigungsauftrag soll das Feld „Abladestelle“ mit dem Arbeitsplatz des vorhergehenden Arbeitsvorgangs gefüllt werden. Da kein passender Userexit für diese Anforderung existiert, wird das Feld „Abladestelle“ im Userexit beim Sichern des Fertigungsauftrags gefüllt. Der Userexit soll nur beim Anlegen des Fertigungsauftrags durchlaufen werden.
Anlegen eines Funktionsbausteins/Verbuchungsbausteins
Leider können bestimmte Funktionsbausteine bzw. BAPIs zum Ändern von Daten eines Fertigungsauftrags nicht verwendet werden. Diese sind nur für Service- und Instandhaltungsaufträge gedacht. Es betrifft u.a. folgende Funktionsbausteine:
- BAPI_ALM_ORDER_MAINTAIN
- CO_SE_PRODORD_CHANGE
- IBAPI_ORDER_OPERATION_CHANGE
Es wird ein Funktionsbaustein/Verbuchungsbaustein angelegt, in dem das Coding zum Ändern des Fertigungsauftrags eingefügt wird.Wichtig ist, dass in den Eigenschaften des Funktionsbsusteins das Attribut „Start verzögert“ markiert wird. In diesem Fall wird der Funktionsbaustein im V2-Verbucher durchlaufen.
FUNCTION z_pp_change_avfc_ablad.
*“———————————————————————-
*“*“Verbuchungsfunktionsbaustein:
*“
*“*“Lokale Schnittstelle:
*“ TABLES
*“ HEADER_TABLE STRUCTURE CAUFVDB OPTIONAL
*“ OPERATION_TABLE STRUCTURE AFVGB OPTIONAL
*“———————————————————————-
* Deklarationen —————————————————— *
DATA: operation_table2 TYPE TABLE OF afvgb WITH HEADER LINE,
ls_header TYPE caufvdb,
ls_operation TYPE afvgb,
ls_operation2 TYPE afvgb,
lv_tabix TYPE i.
* Determine the next operation ————————————— *
operation_table2[] = operation_table[].
* Update the oparation table AFVC ———————————— *
LOOP AT header_table INTO ls_header.
LOOP AT operation_table INTO ls_operation
WHERE aufpl = ls_header–aufpl.
lv_tabix = sy–tabix.
„Unloading point = Work center of next operation
READ TABLE operation_table2 INTO ls_operation2
INDEX lv_tabix + 1.
IF sy–subrc = 0.
SELECT SINGLE arbpl INTO ls_operation–ablad
FROM crhd
WHERE objty = ‚A‘
AND objid = ls_operation2–arbid.
ELSE.
ls_operation–ablad = ‚Letzter Vorgang‘.
ENDIF.
MODIFY operation_table FROM ls_operation.
„Update
UPDATE afvc SET ablad = ls_operation–ablad
WHERE aufpl = ls_operation–aufpl
AND aplzl = ls_operation–aplzl.
ENDLOOP.
ENDLOOP.
ENDFUNCTION.
Einfügen des Funktionsbausteins im Userexit
Der Funktionsbaustein wird im Userexit EXIT_SAPLCOBT_001 beim Sichern eines Fertigungsauftrags eingefügt. Der Funktionsbaustein wird nur beim initialen Anlegen eines Fertigungsauftrags durchlaufen.
* Füllen der Abladestelle im Vorgang mit dem Arbeitsplatz des nächsten Vorgangs
* Nur beim Anlegen durchlaufen
READ TABLE header_table_old INDEX 1.
IF sy–subrc NE 0.
CALL FUNCTION ‚Z_PP_CHANGE_AVFC_ABLAD‘
IN UPDATE TASK
TABLES
header_table = header_table
operation_table = operation_table.
ENDIF.
Hinweis
Die vorgestellte Methode macht einen direkten Update auf Tabelle AFVC. Es werden dabei keine Änderungsbelege fortgeschrieben.
Weitere Informationen
Spezialthemen zu SAP Formularen
SAP Formulare zum Festpreis
SAP Formularentwicklung