AIF: Dirty assign in background funktioniert nicht?

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

AIF: Dirty assign in background funktioniert nicht?

Beitrag von Romaniac (Specialist / 221 / 65 / 27 ) »
Hallo zusammen,

ich habe bei meinem Kunden ein Problem beim Aufruf von BAPIs in einem AIF gesteuertem Job.

Hintergrund:
über das AIF Framework werden FI Buchungen erzeugt, für die Ergebnisrechnung können COPA Merkmale jeder Belegzeile über einen Userexit angereichert werden (Include ZXKKEU11). In diesem Include ist als Importschnittstelle nur die Belegzeile mit den COPA Merkmalen, Informationen aus dem FI Beleg selbst (Belegart, eigendefinierte Felder etc.) fehlen. Über dirty assigns auf die rufenden Rahmenprogramme kommt man an diese Daten aber ran (T_ACCHD oder T_ACCIT).

In meinem Fall reicht eine Zeile aus der T_ACCIT, weil dort die Belegart steht, die wir für eine Prüfung benötigen. Für bestimmte Belegarten mit einer Materialnummern, die noch nicht angelegt ist (MARA), soll die Buchung nicht möglich sein. Das assigned Fieldsysmbol greift auf einen Include des BAPIs selbst zu( (SAPLACC9)IT_ACCIT[] ), also nicht auf den Aufrufstack vor dem BAPI Aufruf.

AIF teilt die zu buchenden Belege in Pakete auf und erstellt dann mehrere Jobs in denen der BAPI ACC_DOCUMENT_POST OHNE Taskverarbeitung (z.B. Starting new task oder in background task) aufgerufen wird.

Jetzt das Problem:
  • Bei Buchung im Dialog verhält sich der Userexit korrekt und bucht einen Beleg bei einer bestimmten Belegart / Materialnummer NICHT
  • Bei Verarbeitung ALLER Buchung im Hintergrund (Job) wird der Beleg fälschlicherweise gebucht
  • Bei Verarbeitung NUR dieser einen Buchung im Hintergrund (Job) wird der Beleg korrekterweise NICHT gebucht
  • Bei Verarbeitung von z.B. 5 Buchungen im Hintergrund (Job), wobei der fehlerhafte Satz in der Mitte ist, wird der fehlerhafte Beleg korrekterweise NICHT gebucht
Sprich: Bei Massendatenverarbeitung über AIF arbeitet der Exit nicht korrekt. Da wir uns hier komplett im SAP Standard befinden (AIF -> Jobs -> BAPI) können wir uns das nicht erklären. AIF teilt die zu buchenden Pakete selbst nach Vorgabe ein und ich gehe davon aus das bei jedem Aufruf alle alten Werte wieder initial sind. Alle im Userexit verwendeten Variablen sind lokal, müssen also beim nächsten Aufruf wieder initial sein.

Hat jemand irgend eine Idee woran das liegen könnte?

Hier der Code in Kurzform:

Code: Alles auswählen.

      
 data:
 lc_blart_bapi_saplacc9    TYPE string    VALUE '(SAPLACC9)IT_ACCIT[]',

SELECT SINGLE (ein paar Felder...)
        INTO ls_mara
        FROM mara
        WHERE matnr = lv_matnr .

* if document type in Set, set error
      IF sy-subrc <> 0.

* check doc type from BAPI function group ACC9
                ASSIGN (lc_blart_bapi_saplacc9) TO <lt_accit_bapi>.
                IF <lt_accit_bapi> IS ASSIGNED.
                  READ TABLE <lt_accit_bapi> ASSIGNING FIELD-SYMBOL(<ls_accit_bapi>) INDEX 1.
                  IF sy-subrc = 0.
                    ASSIGN <ls_accit_bapi>-blart TO <lv_blart>.
                  ENDIF.
                ENDIF.

Jetzt wird ein Set eingelesen und die Belegart dagegen geprüft, wenn Belegart im Set Dann Exit Returnvariable auf Fehler setzen und Meldung ausgeben, Beleg wird dann nicht gebucht

else.
  ls_line_item_200-Felder aus ls_mara übergeben.
endif
Danke und Gruß,

Wolfgang
Geht nicht gibts nicht

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: AIF: Dirty assign in background funktioniert nicht?

Beitrag von Romaniac (Specialist / 221 / 65 / 27 ) »
Hallo zusammen,

ich habe jetzt Meldungen ausgegeben bei jeder Anweisung, dirty assign funktioniert, die T_ACCIT ist wohl in batchjob und Vordergrund anders gefüllt, im batchjob fehlen die Belegarten.

Sieht jetzt eher nach unterschiedlichem Verhalten/Zustand in Dialog / Batchjob aus

Gruß Wolfgang
Geht nicht gibts nicht

Re: AIF: Dirty assign in background funktioniert nicht?

Beitrag von Romaniac (Specialist / 221 / 65 / 27 ) »
Nach mehrfachen Versuchen, auch mit debuggen von Jobs die FI Belege anlegen bleibt es dabei: Bei Massenverarbeitung werden die dirty assigns zwar zugewiesen, Feldinhalt für Belegart ist aber leer obwohl die Tabelle im Dump (habe ich provoziert wenn Feldwert space ) sichtbar und gefüllt ist, siehe Auszug unten. Ich habe jetzt eine lokale ACCIT angelegt und erst dort die Zeile 1 gelesen, trotzdem bleib das Feldsymbol <lv_blart> zwar assigned, ist aber leer. Wie oben beschrieben, nur bei Massenverarbeitung, bei Einzelsätzen nicht.

Code: Alles auswählen.

* check doc type from BAPI function group ACC9
                ASSIGN (lc_blart_bapi_saplacc9) TO <lt_accit_bapi>.
              ENDIF.
              IF <lt_accit_bapi> IS ASSIGNED.
                lt_accit_bapi = <lt_accit_bapi>.
                READ TABLE lt_accit_bapi ASSIGNING FIELD-SYMBOL(<ls_accit_bapi>) INDEX 1.
                IF sy-subrc = 0.
                  ASSIGN <ls_accit_bapi>-blart TO <lv_blart>.

ABAP Tabelleninformation       TH \FUNCTION-POOL=ACC9\DATA=IT_ACCIT
ABAP Variablenwert (Zeichen)   V0 {200;BKPFF;$;;0000000001;;;;;;000000;;;0200;0021089736;0000;000;000;;20221206;20221231;20221206;00000000;00;D2
ABAP Variablenwert (Halbbyte)  X0 03030304040504040202020202020202020202020202020202020202030303030303030303030202020202020202020202020202020202
ABAP Variablenwert (Halbbyte)  X0 020000020B0006060400000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000
ABAP Variablenwert (Zeichen)   V0 {200;BKPFF;$;;0000000002;;;;;;000000;;;0200;0021089736;0000;000;000;;20221206;20221231;20221206;00000000;00;D2
ABAP Variablenwert (Halbbyte)  X0 03030304040504040202020202020202020202020202020202020202030303030303030303030202020202020202020202020202020202
ABAP Variablenwert (Halbbyte)  X0 020000020B0006060400000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000
ABAP Variablenwert (Zeichen)   V0 {200;BKPFF;$;;0000000003;;;;;;000000;;;0200;0021089736;0000;000;000;;20221206;20221231;20221206;00000000;00;D2
ABAP Variablenwert (Halbbyte)  X0 03030304040504040202020202020202020202020202020202020202030303030303030303030202020202020202020202020202020202
Geht nicht gibts nicht

Re: AIF: Dirty assign in background funktioniert nicht?

Beitrag von ewx (Top Expert / 4844 / 311 / 640 ) »
Dann schau doch mal mit Fuba SYSTEM_CALLSTACK, welche Programme geladen werden.

Re: AIF: Dirty assign in background funktioniert nicht?

Beitrag von Romaniac (Specialist / 221 / 65 / 27 ) »
Im Debugger ist alles da was ich brauche und kann auch assigned werden:


Debugger_ZXKKEU11.jpg
Geht nicht gibts nicht

Re: AIF: Dirty assign in background funktioniert nicht?

Beitrag von msfox (Specialist / 364 / 56 / 74 ) »
Romaniac hat geschrieben:
02.01.2023 18:06
auch mit debuggen von Jobs die FI Belege anlegen bleibt es dabei:
Wie hast du denn den Job debuggt? Mit TCODE = JDBG?
Wenn ja, dann wird letztlich auch nur der Report im Vordergrund ausgeführt.
Bau doch in deinem Quellcode mal eine Endlosschleife mit einer Variablen als Abbruchbedingung.
Startet dann den Report im Hintergrund.
Geh in die SM50 und springe in den Debugger des Prozesses.
Dort setzt du die Variable auf die Abbruchungbedingung und kannst unter "Backgroundbedingungen" debuggen.

Re: AIF: Dirty assign in background funktioniert nicht?

Beitrag von Romaniac (Specialist / 221 / 65 / 27 ) »
Danke, ja das versuche ich jetzt doch mal, ist beim Kunden etwas kompliziert mit Transporten in das Integrationssystem wo man testen kann
Geht nicht gibts nicht

Re: AIF: Dirty assign in background funktioniert nicht?

Beitrag von Wann (ForumUser / 60 / 3 / 15 ) »
Es ist doch auch möglich im AIF Coding einzubauen. Warum nicht dort die Endlosschleife einsetzen?

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1645
Views
Dirty Assign
von allgrinder » 10.08.2015 11:14 • Verfasst in ABAP® für Anfänger
9
Antw.
6081
Views
Dirty Assign und danach Änderung
von FelixFICO » 11.03.2016 15:08 • Verfasst in ABAP® Core
3
Antw.
4231
Views
Dirty Assign auf Variablen einer Klasse
von jensschladitz » 17.01.2019 11:23 • Verfasst in ABAP® Core
5
Antw.
3016
Views
Dirty assign auf Feld in interner Tabelle mit Index
von Romaniac » 06.12.2019 12:31 • Verfasst in ABAP® Core
5
Antw.
7653
Views
Dynamischer ("Dirty") Assign
von Gast » 18.01.2006 11:26 • Verfasst in ABAP® Core

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
Gestern von Bright4.5 1 / 511
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2146
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8742