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
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.
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.