Leider bin ich im Bereich Batch Input sehr frisch und bin nun auf ein Problem gestoßen, wo ich leider im Moment nicht mehr weiterkomme.
und zwar möchte ich über Batch Input mit der Transaktion ME21 eine Bestellung anlegen.
Die Daten werden über ein .txt - file eingelesen.
Folgende Daten werden über das .txt-file eingelesen:
Materialnummer, Werk, Bestellmenge, Nettopreis, Preiseinheit, Bestellpreismengeneinheit
In meinem Report werden die jeweiligen Daten in die i_daten eingelesen, ... danach wie gehabt in die Mappe (i_bdctab) über die jeweiligen forms eingelesen.
...hier ist ein Teil des Codes zu sehen:
- Code: Alles auswählen
PERFORM bdc_dynpro USING 'SAPMM06E' '0100'.
PERFORM bdc_field USING 'RM06E-BSART' 'NB'.
PERFORM bdc_field USING 'EKKO-LIFNR' p_lifnr.
PERFORM bdc_field USING 'EKKO-EKORG' 'BUAU'.
PERFORM bdc_field USING 'EKKO-EKGRP' p_ekgrp.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
zline = 1.
*overview by index - choose item
PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.
PERFORM bdc_fieldi USING zline 'EKPO-EMATN' i_daten-matnr.
PERFORM bdc_fieldi USING zline 'EKPO-MENGE' i_daten-brgew.
PERFORM bdc_fieldi USING zline 'EKPO-NETPR' i_daten-netpr.
PERFORM bdc_fieldi USING zline 'EKPO-PEINH' i_daten-peinh.
PERFORM bdc_fieldi USING zline 'EKPO-BPRME' i_daten-bprme.
PERFORM bdc_fieldi USING zline 'EKPO-WERKS' i_daten-werks.
PERFORM bdc_fieldi USING zline 'RM06E-EEIND' zw_eeind.
PERFORM bdc_dynpro USING 'SAPLV69A' '9000'.
** PERFORM bdc_fieldi USING zline 'KONP-KBETR' i_daten-netpr.
PERFORM bdc_fieldi USING zline 'KONP-KPEIN' i_daten-kpein.
PERFORM bdc_fieldi USING zline 'KONP-KMEIN' i_daten-kmein.
** PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.
** PERFORM bdc_fieldi USING zline 'EKPO-NETPR' i_daten-netpr.
** PERFORM bdc_fieldi USING zline 'EKPO-PEINH' i_daten-peinh.
** PERFORM bdc_fieldi USING zline 'EKPO-BPRME' i_daten-bprme.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
*endif.
*org tab
ELSE.
ADD 1 TO zline.
* zline = 1.
*overview by index - choose item
PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.
PERFORM bdc_fieldi USING zline 'EKPO-EMATN' i_daten-matnr.
PERFORM bdc_fieldi USING zline 'EKPO-MENGE' i_daten-brgew.
PERFORM bdc_fieldi USING zline 'EKPO-NETPR' i_daten-netpr.
PERFORM bdc_fieldi USING zline 'EKPO-PEINH' i_daten-peinh.
PERFORM bdc_fieldi USING zline 'EKPO-BPRME' i_daten-bprme.
PERFORM bdc_fieldi USING zline 'EKPO-WERKS' i_daten-werks.
PERFORM bdc_fieldi USING zline 'RM06E-EEIND' zw_eeind.
PERFORM bdc_dynpro USING 'SAPLV69A' '9000'.
** PERFORM bdc_fieldi USING zline 'KONP-KBETR' i_daten-netpr.
PERFORM bdc_fieldi USING zline 'KONP-KPEIN' i_daten-kpein.
PERFORM bdc_fieldi USING zline 'KONP-KMEIN' i_daten-kmein.
** PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.
** PERFORM bdc_fieldi USING zline 'EKPO-NETPR' i_daten-netpr.
** PERFORM bdc_fieldi USING zline 'EKPO-PEINH' i_daten-peinh.
** PERFORM bdc_fieldi USING zline 'EKPO-BPRME' i_daten-bprme.
* if zline gt 13.
PERFORM bdc_field USING 'BDC_OKCODE' '=NP'.
zline = '1'.
* else.
* PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
ENDIF.
ENDLOOP.
Über BDC_INSERT werden die Daten an die Mappe übergeben:
- Code: Alles auswählen
PERFORM insert_bdctab USING 'ME21'.
form insert_bdctab:
- Code: Alles auswählen
FORM insert_bdctab USING transaktion.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = transaktion
* POST_LOCAL = NOVBLOCAL
* PRINTING = NOPRINT
TABLES
dynprotab = i_bdctab
EXCEPTIONS
internal_error = 1
not_open = 2
queue_error = 3
tcode_invalid = 4
printing_invalid = 5
posting_invalid = 6
OTHERS = 7
.
IF sy-subrc <> 0.
WRITE: / 'BDC_INSERT nicht möglich. Fehlernummer:', sy-subrc.
ENDIF.
REFRESH i_bdctab. "löscht Itab-Einträge
CLEAR i_bdctab. "löscht Kopfzeile
ENDFORM. "insert_bdctab
Das Problem ist jedoch nun, dass die Daten zwar angelegt werden, jedoch wird der Nettopreis (EKPO-NETPR), die Preiseinheit (EKPO-PEINH) und die Bestellpreismengeneinheit (EKPO-BPRME) überschrieben (nicht die jeweiligen Daten aus dem .txt-file), sobald bereits ein Infosatz besteht!
D.h. er nimmt dann die Daten die über den Infosatz bereits gespeichert wurden und die einzulesenden Daten aus dem .txt-file werden ignoriert bzw. nicht in die ME21 geschrieben/angelegt.
Ich wollte mit Aufruf eines weiteren Dynpros (z.B. 0111, Detail Position) oder des Dynpros der Positionskonditionen (9000) die Sache umgehen, bzw. dass der Nettopreis, die Preiseinheit und die Bestellpreismengeneinheit über dieses Dynpro geschrieben wird,
allerdings ist es mir mit Aufruf d. sm35 (Mappenabspielung) danach nicht gestattet, da er dann jammert, dass die Daten des Dynpros 0120 nicht gefunden werden. (siehe im Codeteil, das sind die auskommentierten Teile...).
Über's debuggen habe ich jedoch gesehen, dass die Daten aus der i_daten jedoch erfolgreich an die Mappe übergeben wird, ALLERDINGS schreibt er die daten aus dem .txt danach nicht in die Transaktion, SOBALD ein Infosatz zu dem jeweiligen Material besteht.
--> Wie kann man das umgehen??
( mit zuweisen, überschreiben, etc. .. habe ich alles schon versucht, ...
Kann man über Batch Input ein ganzes Dynpro überspringen??
- weil wenn die ME21 aufgerufen wird, dann springt er natürlich sofort in die 0120 Maske, und leider NICHT auf die die 0111 oder auf die 9000 ...
... offensichtlich funktioniert das nicht, oder?
Wie kann das anders lösen, dass die Daten aus dem .txt-file korrekt in die Transaktion me21 übergeben werden??
wollte das auch schon mit Call Transaction lösen, ... führte jedoch leider auch nicht zum Erfolg.
Bitte um Hilfe!
Danke!
mlG


