Batch Input mehrmals ausführen

Getting started ... Alles für einen gelungenen Start.
25 Beiträge • Vorherige Seite 2 von 2 (current)
25 Beiträge Vorherige Seite 2 von 2 (current)

Beitrag von errorist (ForumUser / 43 / 0 / 1 ) »
Habe mit meiner Aufgabenstellerin gesprochen. Sie will das mit BI gelöst haben.
Also stehe ich wieder vor dem alten Problem.

Das BAPI ist echt cool, soweit ich es gesehen habe.

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


Beitrag von ewx (Top Expert / 4884 / 317 / 644 ) »
Ich habe mir dein Anfangsposting noch mal durchgelesen:
Das Problem könnte ectl. bei der VA21 liegen und nicht bei deinem Batchinput.
Ich meine, dass ich mich schonmal in der VA01 oder VA02 drüber gewundert habe, dass nach einem Doppelklick in einer Position das System in die Kopfdaten sprang.
Prüf mal nach, ob das im Dialog evtl die Kopfdaten sind... :?

Jetzt hab ich es auch wieder: Wenn du eine Position markierst, den Cursor aber in ein Kopffeld stellst und dann den Knopf "Detail" unter dem TableControl drückst, dann landest du in den Kopfdaten... :roll:

Texte wirst du mit BI nicht übernehmen können! (Gruß an die Aufgabenstellerin...) :twisted:

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Gibt es eine bestimmten Grund wieso deine Auftragstellerin das per BI gelöst haben will oder was spricht gegen einen anderen Weg?
Langfristig ist doch der Ansatz über BAPI der bessere. Wenn SAP weiterhin die Transaktion auf ENJOY umstellet, dann gibt es mit den BI-Mappen sicherlich Probleme die so nicht auftauchen.

schönes Wochenende

Thomas

Beitrag von errorist (ForumUser / 43 / 0 / 1 ) »
Nein, ich kenne den Grund nicht, warum ich das programmieren soll und dann auch noch mit Batch Input.
Auf meinen Hinweis, dass die Optionen, die sie haben wollen, doch alle im Customizing zu lösen sind bzw. die Formulare anzupassen sind, wurde nciht reagiert.
Bin halt nur ein Trainee. Also mach ich es, wie befohlen.

Probier es am Montag aus, da ich früher in den Feierabend gegangen bin.

Danke trotzdem.

Beitrag von errorist (ForumUser / 43 / 0 / 1 ) »
Guten Morgen,

habe das jetzt ausprobiert, was du Oben geschildert hast. Wenn der Cursor irgendwo steht, geht er bei mir auch in die Kopfdaten, wenn ich Details anklicke.

Anbei mal mein Quellcode (Auszüge), für den BI.
Vielleicht findet ihr ja den Fehler oder so. Das muss ja irgendwie klappen.

Danke

Code: Alles auswählen.

  SELECT * FROM vbak INTO TABLE it_vbak
    WHERE vbeln = vbak-vbeln.

  LOOP AT it_vbak INTO wa_vbak.
  ENDLOOP.

* lesen der Einteilungsdaten
  SELECT * FROM vbep INTO TABLE it_vbep
    WHERE vbeln = vbak-vbeln.

* lesen des Positionsstatus
  SELECT * FROM vbup INTO TABLE it_vbup
    WHERE vbeln = vbak-vbeln.

* lesen der Kopfstatus und Verwaltungsdaten
  SELECT * FROM vbuk INTO TABLE it_vbuk
    WHERE vbeln = vbak-vbeln.

* lesen der kaufmännsichen Daten
  SELECT * FROM vbkd INTO TABLE it_vbkd
    WHERE vbeln = vbak-vbeln.

* lesen der Positionsdaten
  SELECT * FROM vbap INTO TABLE it_vbap
    WHERE vbeln = vbak-vbeln.

  LOOP AT it_vbap INTO wa_vbap.

* Selektion der Konditionsart.
* Es werden alle Stufennummern der Konditionsarten gelesen, ausser die
* Stufennummer für die Konditionsart Mehrwertsteuer, da diese
* automatisch berechnet wird. Konditionsarten mit dem Wert 0 Euro werden
* nicht berücksichtigt.
    SELECT * FROM konv INTO TABLE it_konv
      WHERE kposn = wa_vbap-posnr
        AND knumv = wa_vbak-knumv
        AND stunr <> '320'
        AND KBETR <> '0'.

    LOOP AT it_konv INTO wa_konv.
    ENDLOOP.
  ENDLOOP.


ENDMODULE.                 " get_vorlage  INPUT
*&---------------------------------------------------------------------*
*&      Module  dynpro_fuellen  INPUT
*&---------------------------------------------------------------------*
* Füllt alle wichtigen Felder auf den Dynpros mit den Daten aus der
* Kopiervorlage.
*----------------------------------------------------------------------*
MODULE dynpro_fuellen INPUT.
  DATA: nummer TYPE i,
          lf_matnr(30) TYPE c VALUE 'RV45A-MABNR(xx)',
          lf_kwmeng(20) TYPE c VALUE 'RV45A-KWMENG(xx)',
          lf_tabix(10) TYPE p,
          mode TYPE c VALUE 'E',
          l_char_aumenge(15) TYPE c,
          l_nettobetrag(15) TYPE c,
          lf_kschl(15) TYPE c VALUE 'KOMV-KSCHL(xx)',
          l_posnr(6) TYPE c.

* Routine, um sy-datum zu konvertieren.
  PERFORM datum_konvertieren.

* Ruft Transaktion VA21 mit den Daten der Angebotskopie.
* Füllt das Dynpro 4001 mit Daten
  PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.

*  LOOP AT it_vbak INTO wa_vbak.
* Schreibt den Auftraggeber
  PERFORM bdc_field USING 'KUAGV-KUNNR' wa_vbak-kunnr.
* Schreib den Warenempfänger
  PERFORM bdc_field USING 'KUWEV-KUNNR' wa_vbak-kunnr.
* Schreibt den Angebotstext
  PERFORM bdc_field USING 'VBKD-BSTKD' wa_vbak-bstnk.
* Schreibt das "Gültig bis" Datum
  PERFORM bdc_field USING 'VBAK-BNDDT' l_datum_ausgabe.
*  ENDLOOP.

  LOOP AT it_vbap INTO wa_vbap.
    MOVE sy-tabix TO nummer.
* Materialbezeichnung
    MOVE nummer to lf_matnr+12(2).
    PERFORM bdc_field USING lf_matnr wa_vbap-matnr.
* Entfernt das 1000. Trennzeichen
    WRITE wa_vbap-kwmeng TO l_char_aumenge NO-GROUPING.
* löscht eventuell vorhandene Leerzeichen
    CONDENSE l_char_aumenge.
    MOVE nummer TO lf_kwmeng+13(2).
* Schreibt die Auftragsmenge
    PERFORM bdc_field USING lf_kwmeng l_char_aumenge.
  ENDLOOP.

* Ruft das Dynpro 4003 auf und schreibt die Auftragswahrscheinlichkeit
  PERFORM bdc_dynpro USING 'SAPMV45A' '4003'.
* Schreibt die Auftragswahrscheinlichkeit
  PERFORM bdc_field USING 'VBAP-AWAHR' wa_vbap-awahr.
  LOOP AT it_konv INTO wa_konv.
* Ruft das Dynpro 5003 auf und schreibt die Konditionen
* Konditionswert und zugehöriger Nettowert werden in Zeile 14 des Table
* Controls geschrieben, da die dort eingefügte Zeile automatisch vom
* System in die erste Zeile gesetzt wird.
    PERFORM bdc_dynpro USING 'SAPMV45A' '5003'.
* Schreibt die Konditionsart
    PERFORM bdc_field USING 'KOMV-KSCHL(14)' wa_konv-kschl.
* Schreibt den Konditionsbetrag für die Position
    WRITE wa_konv-kbetr TO l_nettobetrag.
* Schreibt den Nettobetrag zu der Konditionsart
    PERFORM bdc_field USING 'KOMV-KBETR(14)' l_nettobetrag.
    PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
  ENDLOOP.

  PERFORM bdc_dynpro USING 'SAPMV45A' '5003'.

* Transaktion VA21 aufrufen
  CALL TRANSACTION 'VA21' USING bdcdata MODE mode.

ENDMODULE.                 " dynpro_fuellen  INPUT

Beitrag von errorist (ForumUser / 43 / 0 / 1 ) »
Vergesst den Code da oben.
Ich habe mich heute in Ruhe hingesetzt und alles durchgegangen.
Löse das jetzt anders.

Kurz:
Ich lese mir alle Daten in interne Tabellen bzw direkt in Arbeitsbereiche.
dann Rufe ich alle Dynpros auf. Im LOOP fpr das TC gehe ich dann auf "neu Zeile Einfügen" und Schreibe die erste Position. Dann wird direkt in die Details verzweigt und alles geschrieben. Bei den Konditionen dann das gleiche. Es soll wieder eine Zeile eingefügt werden und geschriebene werden Das soll dann für alle Positionen nacheinander gemacht werden.
Er markiert mir auch das die erste Position, ruft die Dynpros auf und wenn er auf die Konditionen (Dynpro 5003) geht, bricht er ab, mit der Meldung, dass das Feld für die Konditionsart nicht auf dem Dynpro wäre. Liegt wohl daran, dass er den OKcode für die neue zeile scheitert.
Vielleicht findet ihr den Fehler. Bei dem OKCODE für eine neue Zeile bei den Konditionen bin ich mir nicht sicher, ob er stimmt, aber sy-ucomm liefert mir das zurück.

Eine andere Frage hätte ich dann noch.
Wenn ich call transaction mache, using bdc mitgebe, sowie einen mode, möchte ich das noch, dass mit and skip first screen verfeinern. Das geht leider nicht in einem Befehl.

CALL TRANSACTION 'VA21' USING BDCDATA MODE = 'A'.
Wenn ich dann AND SKIP FIRST SCREEEN anhänge, gibt es schon eine Syntaxfehlermeldung.

Code: Alles auswählen.

  LOOP AT it_vbap INTO wa_vbap.
    if sy-tabix = 1.
      MOVE sy-tabix TO nummer.
    else.
      MOVE 2 TO nummer.
      perform position_anlegen.
    endif.

* Materialbezeichnung
    MOVE nummer to lf_matnr+12(2).
    PERFORM bdc_field USING lf_matnr wa_vbap-matnr.
* Entfernt das 1000. Trennzeichen
    WRITE wa_vbap-kwmeng TO l_char_aumenge NO-GROUPING.
* löscht eventuell vorhandene Leerzeichen
    CONDENSE l_char_aumenge.
    MOVE nummer TO lf_kwmeng+13(2).
* Schreibt die Auftragsmenge
    PERFORM bdc_field USING lf_kwmeng l_char_aumenge.
* Schreibt die Auftragswahrscheinlichkeit
*    WRITE wa_vbap-awahr TO l_awahr.
*    PERFORM bdc_field USING 'KOMV-KBETR' l_nettobetrag.
*    PERFORM bdc_field USING 'VBAP-AWAHR' l_awahr.

    PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
    PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
    MOVE nummer TO mark+17(2).
    PERFORM bdc_field USING mark 'X'.

    PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
*    PERFORM bdc_field USING 'VBAP-AWAHR' l_awahr.
    PERFORM bdc_field USING 'BDC_OKCODE' '=ITEM'.

    PERFORM bdc_dynpro USING 'SAPMV45A' '4003'.
    PERFORM bdc_field USING 'BDC_OKCODE' '=T\05'.

    PERFORM bdc_dynpro USING 'SAPMV45A' '5003'.

    LOOP AT it_konv INTO wa_konv.
* Ruft das Dynpro 5003 auf und schreibt die Konditionen
* Konditionswert und zugehöriger Nettowert werden in Zeilen des Table
* Controls geschrieben.
* Schreibt den Konditionsbetrag für die Position
     PERFORM bdc_field USINg 'BDC_OKCODE' 'V69A_KOAN'.
      WRITE wa_konv-kbetr TO l_nettobetrag.
* Schreibt den Nettobetrag zu der Konditionsart
      PERFORM bdc_field USING 'KOMV-KSCHL' wa_konv-kschl.
      PERFORM bdc_field USING 'KOMV-KBETR' l_nettobetrag.
      PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
    endloop.
  ENDLOOP.

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
was soll denn das?

PERFORM bdc_field USING 'KOMV-KSCHL(14)' wa_konv-kschl

-> (14) heißt Tabellenzeile 14

Wenn du eine BI-Mappe erstellst, kommst du wahrscheinlich gar nicht auf die Zeile 14, da im Dynpor nur 5 - 7 Zeilen angezeigt werden.
Um diesen Umstand zu vermeiden, kannst du zB immer eine neue Zeile einfügen, dann ist dieser Zähler immer (01). Wenn nicht musst du schauen wie groß das Dynpro angezeigt wird und dann nach der letzten Zeile darauf reagieren. Dein Index ist nur nie > als die Dynproseite.
Über dies sind wir hier in manchen Transaktionen gefallen.
Andere Frage: Zuwas musst du eigentlich die Konditionen separat schreiben?
Wenn das SD richtig gecustomized ist, stehen die doch automatisch drin, wenn ich die Positionen richtig fülle. Ausnamhe sind dann nur manuelle Konditionen wie gesonderte Rabatte.

Thomas

Beitrag von errorist (ForumUser / 43 / 0 / 1 ) »
Die Zeiel ist natürlich mist.
Habe ich aber mit dem neuen Code von mir gemacht und es klappt jetzt soweit, ass zumindest die erste Position geschrieben wird, aber mit den Konditionen der letzten Kondition. In der it_konv steht nämlich nur die letzte Position.

Code: Alles auswählen.

LOOP AT it_vbap INTO wa_vbap.
    IF sy-tabix = 1.
      MOVE sy-tabix TO nummer.
    ELSE.
      MOVE 2 TO nummer.
      PERFORM position_anlegen.
    ENDIF.

* Materialbezeichnung
    MOVE nummer to lf_matnr+12(2).
    PERFORM bdc_field USING lf_matnr wa_vbap-matnr.
* Entfernt das 1000. Trennzeichen
    WRITE wa_vbap-kwmeng TO l_char_aumenge NO-GROUPING.
* löscht eventuell vorhandene Leerzeichen
    CONDENSE l_char_aumenge.
    MOVE nummer TO lf_kwmeng+13(2).
* Schreibt die Auftragsmenge
    PERFORM bdc_field USING lf_kwmeng l_char_aumenge.

* Fügt eine neue Zeile in das TableCOntrol ein und markiert diese
    PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
    PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
    MOVE nummer TO mark+17(2).
    PERFORM bdc_field USING mark 'X'.

* Ruft die Details der Position auf
    PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
    PERFORM bdc_field USING 'BDC_OKCODE' '=ITEM'.

* Schreibt die Auftragswahrscheinlichkeit
    PERFORM bdc_dynpro USING 'SAPMV45A' '4003'.
    WRITE wa_vbap-awahr TO l_awahr.
    PERFORM bdc_field USING 'VBAP-AWAHR' l_awahr.
    PERFORM bdc_field USING 'BDC_OKCODE' '/00'.

* Schreibt die Produkthierarchie
    PERFORM bdc_field USING 'BDC_OKCODE' '=T\02'.
    PERFORM bdc_dynpro USING 'SAPMV45A' '4003'.
    PERFORM bdc_field USING 'VBAP-PRODH' wa_vbap-prodh.
    PERFORM bdc_field USING 'BDC_OKCODE' '/00'.

* Ruft die Konditionen auf
    PERFORM bdc_field USING 'BDC_OKCODE' '=T\05'.

    PERFORM bdc_dynpro USING 'SAPMV45A' '5003'.

    LOOP AT it_konv INTO wa_konv.

      PERFORM bdc_field USING 'BDC_OKCODE' '=V69A_KOAN'.
      PERFORM bdc_dynpro USING 'SAPMV45A' '5003'.
* Ruft das Dynpro 5003 auf und schreibt die Konditionen
* Konditionswert und zugehöriger Nettowert werden in Zeilen des Table
* Controls geschrieben.
* Schreibt den Konditionsbetrag für die Position
      PERFORM bdc_field USING 'KOMV-KSCHL(2)' wa_konv-kschl.
* Schreibt den Nettobetrag zu der Konditionsart
      WRITE wa_konv-kbetr TO l_nettobetrag.
      PERFORM bdc_field USING 'KOMV-KBETR(2)' l_nettobetrag.
      PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
      PERFORM bdc_field USING 'BDC_OKCODE' '/EBACK'.
    ENDLOOP.
  ENDLOOP.
Das ist das Problem. Meine Aufgabe kann man komplett im Customizing lösen, aber gewisse Leute wollen das nicht...

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Selber Fehler andere Stelle ('KOMV-KSCHL(2)').

Du liest deine Daten mit LOOP über die it_konf. Wiso ist dein Index immer 2?
Wenn du mit 2 Anfängst ist das OK ober du musst ihn hochzählen für den nächsten Eintrag, dann brauchst du auch das Dynpro nur einmal aufzumachen und nicht für jeden Konditionseintrag.

data: l_idx(3) type n,
l_feld(20) type c.

PERFORM bdc_field USING 'BDC_OKCODE' '=V69A_KOAN'.
PERFORM bdc_dynpro USING 'SAPMV45A' '5003'.

l_idx = 2.
LOOP AT it_konv INTO wa_konv.

concatenate 'KOMV-KSCHL(' l_idx ')' into l_feld.
PERFORM bdc_field USING l_feld wa_konv-kschl.
:
ENDLOOP.

Viel Erfolg

Thomas

Beitrag von errorist (ForumUser / 43 / 0 / 1 ) »
Da habe ich kein Fehler, wenn ich es so lasse, wie es da steht.
Lass ich es hell ablaufen, sehe ich, wie er dann eine neue Zeile einfügt (in Zeile 2), dann alles reinschreibt und alles solange macht, wie es Konditionssätze zu der Posnr gibt (habe es mit 5 Konditionssätzen zu einer Position versucht).
Da habe ich keine Probleme.

Ist soweit alles gelöst worden. Nur 2 Kleinigkeiten noch:
Das mit der Call Transaction (siehe Oben).

Wenn ich in den Positionsdetails zu einer Position war, merkt sich SAP den letzten aufgerufenen Reiter. Wähle ich dann später eine andere Position aus, sprint er automatisch auf diesen Reiter zurück und der Input geht wieder auf die Bretter.

Vergleichbare Themen

7
Antw.
8208
Views
HR: Batch-Input Mappe erstellen, Maßnahme ausführen
von sgevolker » 15.05.2006 18:19 • Verfasst in ABAP® Core
5
Antw.
3619
Views
Batch Datei ausführen im Backend
von Adrian » 28.10.2013 16:24 • Verfasst in ABAP® für Anfänger
6
Antw.
6348
Views
Ausführen einer batch-Datei auf einem NON-SAP System
von mettes » 21.01.2013 22:46 • Verfasst in Basis
6
Antw.
22941
Views
Batch Input
von Mamba » 30.05.2005 09:40 • Verfasst in ABAP® für Anfänger
1
Antw.
1988
Views
Batch-Input
von dkast » 15.12.2020 14:43 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

BAPI_GOODSMVT_CREATE
vor 5 Minuten von waltersen 2 / 62
SAP GUI Installation Probleme
vor 2 Tagen von Romaniac gelöst 2 / 355
Erweiterung in ME51N/ME52N:
vor 6 Tagen von ABAPlerv 1 / 547
Erweiterung in ME51N/ME52N:
vor 6 Tagen von ABAPlerv 1 / 467

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.

Aktuelle Forenbeiträge

BAPI_GOODSMVT_CREATE
vor 5 Minuten von waltersen 2 / 62
SAP GUI Installation Probleme
vor 2 Tagen von Romaniac gelöst 2 / 355
Erweiterung in ME51N/ME52N:
vor 6 Tagen von ABAPlerv 1 / 547
Erweiterung in ME51N/ME52N:
vor 6 Tagen von ABAPlerv 1 / 467

Unbeantwortete Forenbeiträge

Erweiterung in ME51N/ME52N:
vor 6 Tagen von ABAPlerv 1 / 547
Erweiterung in ME51N/ME52N:
vor 6 Tagen von ABAPlerv 1 / 467