BatchInput/Mappe Feld herausfinden

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
26 Beiträge • Vorherige Seite 2 von 2 (current)
26 Beiträge Vorherige Seite 2 von 2 (current)

Beitrag von Tschess (ForumUser / 13 / 0 / 0 ) »
Nicht? Bei mir klappts wunderbar :roll:

Dann poste ich mal hier ein bislr rein:

Mein Loop der den BatchInput füllt:
FORM batch_last_fuellen .
CLEAR bdcdata.
REFRESH bdcdata.
DATA: dummy_beleg type d,
dummy_buchung type d.

counter = 0.

LOOP AT itab.
IF itab-paytyp EQ '380'.

counter = counter + 1.
CONCATENATE beleg_dat(2) beleg_dat+3(2) beleg_dat+6(4) INTO
dummy_beleg.

CONCATENATE buchung_dat(2) buchung_dat+3(2) buchung_dat+6(4) INTO
dummy_buchung.

* 1.Seite
* Programm Name
PERFORM bdc_dynpro USING 'SAPMF05A' '0103'.

* Feld auf Dynpro
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-XPOS1(05)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PA'.
PERFORM bdc_field USING 'BKPF-BLDAT' dummy_beleg.
PERFORM bdc_field USING 'BKPF-BLART' 'SA'.
PERFORM bdc_field USING 'BKPF-BUKRS' '0001'.
PERFORM bdc_field USING 'BKPF-BUDAT' dummy_buchung.
PERFORM bdc_field USING 'BKPF-WAERS' 'CHF'.
PERFORM bdc_field USING 'RF05A-Konto' kontonr.
PERFORM bdc_field USING 'BSEG-WRBTR' itab-betr_brut.
PERFORM bdc_field USING 'RF05A-AGKOA' 'D'.
PERFORM bdc_field USING 'RF05A-XNOPS' 'X'.
PERFORM bdc_field USING 'RF05A-XPOS1(01)' ' '.
PERFORM bdc_field USING 'RF05A-XPOS1(05)' 'X'.

* 2.Seite
* Programm Name
PERFORM bdc_dynpro USING 'SAPMF05A' '0731'.
* Feld auf Dynpro
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-SEL01(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PA'.
PERFORM bdc_field USING 'RF05A-SEL01(01)' itab-belegnummer.

PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.

PERFORM bdc_field USING 'BDC_OKCODE' '=Z+'.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPDF05X'.
PERFORM bdc_field USING 'BDC_CURSOR' 'DF05B-PSSKT(01)'.
PERFORM bdc_field USING 'RF05A-ABPOS' '1'.


PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.

PERFORM bdc_field USING 'BDC_OKCODE' '=BU'.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPDF05X'.
PERFORM bdc_field USING 'BDC_CURSOR' 'DF05B-PSSKT(01)'.
PERFORM bdc_field USING 'RF05A-ABPOS' '1'.

ENDIF.
ENDLOOP.

* Zuletzt
PERFORM mappe_last_erstellen.

ENDFORM. "batch_last_fuellen

Das Protokoll kann ich aber nicht posten, es ist zu unübersichtlich wenn ich es hier reinposte :roll:
Faszination ist die Mischung aus Bewunderung und Unvorstellbarkeit eines Ereignisses

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


Beitrag von Tschess (ForumUser / 13 / 0 / 0 ) »
Bin mir langsam am Überlegen ob ich es mit einem Bapi versuchen soll :roll:
Faszination ist die Mischung aus Bewunderung und Unvorstellbarkeit eines Ereignisses

Beitrag von black_adept (Top Expert / 4131 / 130 / 955 ) »
Tschess hat geschrieben:Nein ich gebe keine Bildschirmgrösse mit.

Vielleicht interpretiere ich das auch falsch, aber ich sehe, dass eine Transaktion abgepsielt wurde. Ich habe in dieser Mappe 8 Dynpros. Ich weiss dass in einer Transaktion vier Dynpros abgespielt werden. Somit siehts für mich aus, dass der zweite Record nicht abgespielt wurde.

Habe mich mal durch die Analyse geschaut, aber irgendwie werde ich daraus auch nicht schlauer :roll: in der Analyse sehe ich ebenfalls nur diese Fehlermeldung.
Ist das denn nicht schon des Pudels Kern?
Denn wenn ich mal kurz dein Coding überfliege scheinst du nicht nach dem Funktionscode "buchen" die Transaktion in die Mappe zu stellen. ( Aufruf der Routine BDC_TRANSACTION )
Das musst du aber machen, da die meisten Transaktionen durch "buchen" abgeschlossen werden (Commit work --> Siehe den Batch-Input betreffenden Hinweis in der Doku zu Commit ).
Du schließt die Mappe ja wohl erst in der Routine "mappe_last_erstellen" und dort findet sich dann bestimmt auch das in den Loop gehörige PERFORM bdc_transaction....
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
im loop fehlt folgendes:

CALL FUNCTION 'BDC_INSERT' " Mappe schreiben
EXPORTING tcode = 'FB01'
TABLES dynprotab = bdcdat.

nach jedem Buchungssatz musst du diesen auch in die mappe schreiben, du schreibts nur alle felder in deine mappe.

Thomas

Beitrag von Tschess (ForumUser / 13 / 0 / 0 ) »
Hallo TWP

Also diese Befehle
CALL FUNCTION 'BDC_INSERT' " Mappe schreiben
EXPORTING tcode = 'FB01'
TABLES dynprotab = bdcdat.

Hab ich schon, aber ausserhalb des Loops, dass muss also auch in den Loop rein?
Faszination ist die Mischung aus Bewunderung und Unvorstellbarkeit eines Ereignisses

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Ja, wenn jede deiner Tabellen Zeilen eine eigene ransaktion ist schon. Und wenn du das Insert gemacht hast, musst du die Tabell BDCDAT (die du übergeben hast) löschen.

Thomas

Beitrag von Tschess (ForumUser / 13 / 0 / 0 ) »
Wenn ich das richtig verstanden habe sollte mein Loop also so aussehen?:
PERFORM mappe_last_oeffnen.

FORM batch_last_fuellen .

DATA: dummy_beleg type d,
dummy_buchung type d.

counter = 0.

PERFORM mappe_last_oeffnen.

LOOP AT itab.

IF itab-paytyp EQ '380'.

CLEAR bdcdata.
REFRESH bdcdata.

counter = counter + 1.

CONCATENATE beleg_dat(2) beleg_dat+3(2) beleg_dat+6(4) INTO
dummy_beleg.

CONCATENATE buchung_dat(2) buchung_dat+3(2) buchung_dat+6(4) INTO
dummy_buchung.

* 1.Seite
* Programm Name
PERFORM bdc_dynpro USING 'SAPMF05A' '0103'.
.....füllen der restlichen Felder

PERFORM mappe_last_erstellen.

ENDIF.
ENDLOOP.

* Zuletzt
PERFORM mappe_last_schliessen.

ENDFORM. "batch_last_fuellen

*&---------------------------------------------------------------------*
*& Form mappeErstellen
*&---------------------------------------------------------------------*
FORM mappe_last_erstellen .

* Transaktion F-28 für Kontobelastung
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = 'F-28'
TABLES
dynprotab = bdcdata
EXCEPTIONS
internal_error = 1
not_open = 2
queue_error = 3
tcode_invalid = 4
printing_invalid = 5
posting_invalid = 6
OTHERS = 7.

ENDFORM. " mappeErstellen

*&---------------------------------------------------------------------*
*& Form mappe_Oeffnen
*&---------------------------------------------------------------------*
FORM mappe_last_oeffnen .

DATA: mapname(12) TYPE c.
mapname = 'Syntrade_L'.

CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = mapname
keep = 'X'
user = sy-uname
EXCEPTIONS
client_invalid = 1
destination_invalid = 2
group_invalid = 3
group_is_locked = 4
holddate_invalid = 5
internal_error = 6
queue_error = 7
running = 8
system_lock_error = 9
user_invalid = 10
OTHERS = 11.

ENDFORM. " mappe_last_Oeffnen


*&---------------------------------------------------------------------*
*& Form mappe_schliessen
*&---------------------------------------------------------------------*
FORM mappe_last_schliessen .

CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.

ENDFORM. " mappe_last_schliessen
Faszination ist die Mischung aus Bewunderung und Unvorstellbarkeit eines Ereignisses

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Ich denkle schon.

Mir ist noch aufgefallen, das das Kennzeichen für den DynproStart nicht gesetzt ist. Oder setzt du es in der Form bdc_dynpro immer?

Hast du es schon mal laufen lassen dein Programm? Wenn nicht, solltest du dies mal ersuchen und Testweise dir alle Anzeigen lassen. Dann siehst du ob deine Coding richtig ist.

Thomas

Beitrag von Tschess (ForumUser / 13 / 0 / 0 ) »
das ist das was ich im bdc_dynpro mache

FORM bdc_dynpro USING program dynpro.

CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.

ENDFORM.

Oder welches Kennzeichen meinst du?
Bin gerade am Testen, sieht schon mal nicht schlecht aus, habe mehr als eine Transaktion in der Mappe, was bis vorhin nicht der Fall war.

Gebe gleich Bescheid
Faszination ist die Mischung aus Bewunderung und Unvorstellbarkeit eines Ereignisses

Beitrag von Tschess (ForumUser / 13 / 0 / 0 ) »
Super Sache.. die Sch**** geht :D :D :D

Es war tatsächlich das Problem mit dem Buchen auf der letzten Dynpro Seite.
Es muss jede Transaktion einzeln in die Mappe gespielt werden. Mit dem letzten Coding dass ich gepostet habe funktionierts nun wunderbar.

Danke vielmals für die Hilfreichen Tipps

Schönes Weekend
gruss Tschess
Faszination ist die Mischung aus Bewunderung und Unvorstellbarkeit eines Ereignisses

Beitrag von Anita3 (ForumUser / 4 / 0 / 0 ) »
Hallo,

Ich habe schon mehrmals solche Fehlermeldung bekommen. Meisten hat es daran gehängt das ich einen Feld versucht habe zu füllen das es auf ein anderes Dynpro liegt. Hast du mal vescuht über die SM35 eine Aufzeichung zu machen. Dann solltest su alle Felder und Dynpro name bekommen die du brauchst.
Wenn du die Mappe sichtbar abpsielst und diese Fehlermeldung kommt, gehe mal über System/Status im Menü und schau dir mal an in welchels Dynpro du dist befindest und gleich diese mit dem in dein Program mal ab.
vielen Dank.
mfg
Anita

Vergleichbare Themen

15
Antw.
7580
Views
Kurzdump Batchinput
von kostonstyle » 12.03.2007 11:31 • Verfasst in ABAP® für Anfänger
0
Antw.
1234
Views
CV01N im Batchinput
von chfreise » 21.01.2008 19:06 • Verfasst in ABAP® Core
9
Antw.
3607
Views
Batchinput und Steploop/Tablecontrol
von Gast » 15.07.2005 10:17 • Verfasst in ABAP® Core
7
Antw.
6290
Views
Transaktion KB31N / BatchInput
von Timmi1981 » 09.02.2009 17:43 • Verfasst in ABAP® für Anfänger
4
Antw.
2725
Views
Batchinput in der Transaktion MM42
von erich1986 » 04.10.2013 12:14 • Verfasst in ABAP® für Anfänger

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.