Reply: 4

Zahlunsavise - Interne Tabelle für XBLNR

Moin zusammen,
ich brauche bitte einmal Hilfe beim User-Exit "ZXF08U02" für die Daten aus den eingehenden Zahlungsavisen.
Wir möchten die Zahlungsavise mit der TA "F-28" verarbeiten; momentan findet die TA aber keine OPs, da die Daten aus den Belegen nicht korrekt ankommen. Dafür gibt's ja den o. g. Exit.
Diesen habe ich jetzt ausgeprägt, aber das Ergebnis ist mau. Die erste XBLNR wird gefunden, danach nichts mehr. Folge: die F-28 ballert alles auf diesen einen OP, bildet einen "Restposten" und gut. Hmmm...
So - Gedanke: Interne Tabelle. Aber da ich kein Programmierer bin, stelle ich mich ungeschickt an und deswegen die Frage an die Gemeinschaft: Wie bekomme ich aus dem IDOC (das korrekt erzeugt wird!) die entsprechenden Daten in eine interne Tabelle (sooft durchlaufen, wie es Rechnungen gibt, das kann 3 - x Mal sein), die ich dann wieder auslesen kann um die XBLNR pro Rechnung nutzen zu können?
Zur Not kann ich auch den bisherigen Quellcode aus dem EXIT hier einstellen, aber der funktioniert ja nun Mal nicht.
Hilfe!
Danke im Voraus und viele Grüße
der Prof.

You must be logged in to post a reply.

Login now

4 Answers

  • MrBojangles
    MrBojangles
    Hallo Prof.,
    bei allem Wohlwollen, ich fürchte, so ein Forum ist kein geeignetes Medium für eine derartig komplexe Remote-Beratung. Ich hätte zig Rückfragen zu Struktur und Inhalt sowohl der REMADV-IDOCs als auch den damit zu verknüpfenden OPs, um Dir auch nur ansatzweise aufs Pferd zu helfen. Ich denke, nur mit einem Ausritt in die Welt der internen Tabellen ist Dir nicht geholfen...
    Nachfolgend eine wirre Sammlung meiner Gedankengänge...
    Der von Dir genannte Exit wird ja für jedes IDoc-Segment durchlaufen. Normalerweise sollte ja jede Avisposition einen OP bei Euch referenzieren (das ist je eigentlich der primäre Sinn eines Avises, eine Sammelzahlung dem Empfänger zu erläutern)? Der mit der Avisposition regulierte (debitorische?) Posten wird durch die Standard-OP-Suche offenbar nicht gefunden. Jetzt suchst Du im Exit den passenden Posten selbst und schiebst die Referenzinformationen in die AVIP rein. Wenn eine Avisposition mehrere OP's bei euch umfasst(?), müsstest Du selbst AVIP-Einträge hinzufügen...
    Wie gesagt, alles nicht so einfach... vielleicht hast Du ja die Möglichkeit, dies mit einem Entwickler Deines Vertrauens anzugehen.
    Tut mir leid, Dir nicht konkreter helfen zu können. Poste das Coding bitte trotzdem mal (ggf. mit Kommentaren), vielleicht fällt ja doch noch der Groschen...
    Weiterhin viel Freude mit SAP...
    Cheers
    MrB.
    Blog

    Zuletzt bearbeitet am 09.08.17 12:03

  • Professor031
    Professor031 (Author)
    Moin MrB.,
    vielen Dank für die schnelle Antwort. Du hast natürlich Recht; das Thema ist sehr komplex und die Antwortmöglichkeiten damit sehr eingeschränkt. Ich versuch's nun aber Mal mit dem Coding aus dem Exit:
    Data: Z_AG(1).
    Data: Z_BE(10).
    Data: Z_XBLNR(20).
    Data: Z_Belnr(10).
    IF avik_in-bukrs = ' '.
    IF IDOC_DATA_INDEX = 1.
    LOOP AT IDOC_CONTROL.
    IF IDOC_CONTROL-DIRECT = '2' and IDOC_CONTROL-RCVPRT = 'LI' and IDOC_CONTROL-RCVPRN ='0000000005'.
    LOOP AT IDOC_DATA.
    IF IDOC_DATA-SEGNAM = 'E1EDKA1' and IDOC_DATA-SDATA+0(2) = 'AG' and IDOC_DATA-SDATA+20(1) = '4'.
    Z_AG = IDOC_DATA-SDATA+20(1).
    ELSEIF IDOC_DATA-SEGNAM = 'E1EDKA1' and IDOC_DATA-SDATA+0(2) = 'BE' and IDOC_DATA-SDATA+3(10) = '0000000005'.
    Z_BE = IDOC_DATA-SDATA+3(10).
    ELSEIF IDOC_DATA-SEGNAM = 'E1EDP02' and IDOC_DATA-SDATA+0(3) = '009'.
    Z_XBLNR = IDOC_DATA-SDATA+3(20).
    ELSEIF IDOC_DATA-SEGNAM = 'E1EDP02' and IDOC_DATA-SDATA+0(3) = '010'.
    Z_BELNR = IDOC_DATA-SDATA+3(10).
    ENDIF.
    ENDLOOP.
    ENDIF.
    ENDLOOP.
    ENDIF.
    IF Z_AG = '4' and Z_BE = '0000000005'.
    LOOP AT IDOC_DATA.
    IF IDOC_DATA-SEGNAM = 'E1EDP02' and IDOC_DATA-SDATA+0(3) = '009'.
    IDOC_DATA-SDATA+3(10) = Z_BELNR.
    * MODIFY IDOC_DATA.
    ELSEIF IDOC_DATA-SEGNAM = 'E1EDP02' and IDOC_DATA-SDATA+0(3) = '010'.
    IDOC_DATA-SDATA+3(20) = Z_XBLNR.
    * MODIFY IDOC_DATA.
    ENDIF.
    MODIFY IDOC_DATA.
    ENDLOOP.
    ENDIF.
    ENDIF.
    Das funktioniert soweit, dass immerhin die korrekte Referenznummer (XBLNR) der ersten IDOC Position gefunden wird. Dann sehe ich beim Debuggen aber, dass die im oberen Teil abgefragten Segmente aus dem IDOC mit "Schrott" gefüllt sind und somit die weiteren Rechnungsdaten nicht mehr gefunden werden. Eventuell liegt es aber auch nur an einem falschen "Loop" auf den obernen Teil...
    Das "Modify Data" im unteren Teil habe ich bereits an die jetzige Stelle gesetzt, aber ohne Änderung des Ergebnisses.
    Aber - ich möchte niemanden über Gebühr belasten; wenn das Ganze tatsächlich zu komplex ist, können wir es an dieser Stelle auch gerne abbrechen. Ich werde mich am übernächsten WE ggf. mit einem befreundeten SAP Freelancer treffen, der schon sehr lange im SAP-Geschäft ist und der auch programmiert. Ich selber will ja kein Programmierer werden, habe aber ab und zu den Ehrgeiz, solche Probleme zu lösen bzw. mit Hilfe zu lösen und die Lösung auch zu verstehen.
    Für jegliche Hilfestellung erstmal vielen Dank!
    Grüße
    der Prof.
  • MrBojangles
    MrBojangles
    Hallo Prof,
    wie ich bereits schrieb, wird der von Dir verwendete Userexit beim Abarbeiten des IDocs gerufen, d.h. Du versuchst, während der Fahrt die Reifen zu wechseln, das kann nur zu Chaos, Elend und letztlich zur dunklen Seite der Macht führen. Gedacht ist die Stelle dazu, die Inhalte der AVIS-Tabellen (AVIK, AVIP und AVIR) mit Daten aus dem IDoc anzureichern, wenn diese nicht im Standard befüllt werden.
    Für Deine Zwecke möglicherweise besser geeignet wäre der Exit EXIT_SAPLIEDP_102 (Include ZXF08U03). Hier sind die AVIS-Tabellen im Standard komplett aufgebaut worden, d.h. die standardseitige Abarbeitung des IDOCs ist abgeschlossen und Du kannst die Reifen in der Boxengasse tauschen.
    Mit Deinem Spezi kriegst Du das sicher hin...
    Weiterhin viel Freude mit SAP...
    Cheers
    MrB.
    Blog
  • Professor031
    Professor031 (Author)
    Hallo MrB.,
    vielen Dank. Ich werde das in Ruhe prüfen und dann mit meinem Kumpel besprechen. Wie immer es auch ausgeht: ich werde hier später berichten.
    Viele Grüße
    der Prof.