Code: Alles auswählen.
.....
* Werksdaten zum Material
SELECT * FROM marc INTO TABLE it_marc
WHERE matnr IN so_matnr
AND werks IN so_werks
AND lvorm = ''.
SELECT * FROM mast INTO TABLE it_mast
WHERE matnr IN so_matnr
AND ( werks IN so_werks
OR werks = '' )
AND stlan = pa_stlan.
END-OF-SELECTION.
SORT it_mast BY matnr.
* Schauen, ob Zuordnung schon vorhanden ist oder nicht
LOOP AT it_marc INTO wa_marc.
g_tabix = sy-tabix.
READ TABLE it_mast
WITH KEY matnr = wa_marc-matnr werks = wa_marc-werks
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
* Die gefundenen Datensätze müssen bereinigt werden
DELETE it_marc INDEX g_tabix.
ENDIF.
AT NEW matnr.
g_tabix = sy-tabix.
READ TABLE it_mast
WITH KEY matnr = wa_marc-matnr werks = ''
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
* Die gefundenen Datensätze müssen bereinigt werden
DELETE it_marc INDEX g_tabix.
ENDIF.
ENDAT.
ENDLOOP.
....
Code: Alles auswählen.
REPORT zka_werkszuordnung NO STANDARD PAGE HEADING LINE-SIZE 255.
*** I N C L U D E S ****************************************************
*INCLUDE bdcrecx1.
*** D A T E N D E K L A R A T I O N ************************************
DATA:
it_marc TYPE TABLE OF marc,
wa_marc TYPE marc,
it_mast TYPE TABLE OF mast,
wa_mast TYPE mast,
g_mapnam TYPE apqi-groupid,
zaehler TYPE i,
g_tabix TYPE sy-tabix,
g_group_opened TYPE c.
DATA:
anzzeilen TYPE i.
*Batchinputdata of single transaction
DATA:
bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
*messages of call transaction
DATA:
messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
*CALL TRANSACTION Einstellungen
DATA:
ctumode LIKE ctu_params-dismode,
cupdate LIKE ctu_params-updmode.
ctumode = 'N'. " Abspielmodus
* A: show all dynpros
* E: show dynpro on error only
* N: do not display dynpro
* P: dunkel + debug
cupdate = 'L'. " Verbuchungsmodus
* S: synchronously
* A: asynchronously
* L: local
*** S E L E K T I O N S B I L D ****************************************
*AT SELECTION-SCREEN.
SELECTION-SCREEN BEGIN OF BLOCK selektion WITH FRAME TITLE text-001.
SELECT-OPTIONS:
so_matnr FOR wa_marc-matnr OBLIGATORY,
so_werks FOR wa_marc-werks.
PARAMETER:
pa_stlan LIKE t416-stlan DEFAULT '5' OBLIGATORY.
*Radiobuttons zum Wählen, ob man die BI-Verarbeitung
*oder die DI-Verarbeitung haben möchte
PARAMETER:
pa_bi TYPE c RADIOBUTTON GROUP radi,
pa_di TYPE c RADIOBUTTON GROUP radi.
SELECTION-SCREEN END OF BLOCK selektion.
*** H A U P T V E R A R B E I T U N G **********************************
START-OF-SELECTION.
* Werksdaten zum Material
SELECT * FROM marc INTO TABLE it_marc
WHERE matnr IN so_matnr
AND werks IN so_werks
AND lvorm = ''.
SELECT * FROM mast INTO TABLE it_mast
WHERE matnr IN so_matnr
AND ( werks IN so_werks
OR werks = '' )
AND stlan = pa_stlan.
END-OF-SELECTION.
SORT it_mast BY matnr.
* Schauen, ob Zuordnung schon vorhanden ist oder nicht
LOOP AT it_marc INTO wa_marc.
g_tabix = sy-tabix.
READ TABLE it_mast
WITH KEY matnr = wa_marc-matnr werks = wa_marc-werks
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
* Die gefundenen Datensätze müssen bereinigt werden
DELETE it_marc INDEX g_tabix.
ENDIF.
AT NEW matnr.
LOOP AT it_mast INTO wa_mast
WHERE matnr = wa_marc-matnr AND werks = '' .
DELETE TABLE it_marc FROM wa_marc.
ENDLOOP.
* g_tabix = sy-tabix.
*
* READ TABLE it_mast
* WITH KEY matnr = wa_marc-matnr werks = ''
* TRANSPORTING NO FIELDS.
*
* IF sy-subrc = 0.
** Die gefundenen Datensätze müssen bereinigt werden
* DELETE it_marc INDEX g_tabix.
* ENDIF.
ENDAT.
ENDLOOP.
DESCRIBE TABLE it_marc LINES anzzeilen.
* IF anzzeilen = 0 and pa_di = 'X'.
* WRITE: 'test'.
* ENDIF.
IF anzzeilen > 0 AND pa_bi = 'X'.
* Mappenbenamsung
g_mapnam = 'ZMATWERKCS07'.
* BI auf Transaktion CS07
* Erstellen der BI-Mappe
PERFORM open_group.
ENDIF.
LOOP AT it_marc INTO wa_marc.
REFRESH bdcdata.
* Übergabe von Programmname und Dynpronummer
PERFORM bdc_dynpro USING 'SAPLCSAL' '0100'.
* Befüllen des Feldes Materialnummer
PERFORM bdc_field USING 'BDC_CURSOR'
'RC29N-ZWERK'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RC29N-MATNR' wa_marc-matnr.
PERFORM bdc_field USING 'RC29N-ZWERK' wa_marc-werks.
PERFORM bdc_field USING 'RC29N-STLAN' '5'.
* neuer Bildschirm
PERFORM bdc_dynpro USING 'SAPLCSAL' '0120'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=FCBU'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RC29K-STLNR'.
* Übergabe der Daten und des Transaktionscodes an die Mappe
PERFORM bdc_transaction USING 'CS07'.
ENDLOOP.
* Schließen der Mappe
PERFORM close_group.
*----------------------------------------------------------------------*
* create batchinput session *
* (not for call transaction using...) *
*----------------------------------------------------------------------*
FORM open_group.
* open batchinput group
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
* DEST = FILLER8
group = g_mapnam
* HOLDDATE = FILLER8
keep = 'X'
user = sy-uname
* RECORD = FILLER1
* PROG = SY-CPROG
* DCPFM = '%'
* DATFM = '%'
* IMPORTING
* QID =
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
.
IF sy-subrc = 0.
g_group_opened = 'X'.
ENDIF.
ENDFORM. "OPEN_GROUP
*----------------------------------------------------------------------*
* end batchinput session *
* (call transaction using...: error session) *
*----------------------------------------------------------------------*
FORM close_group.
IF pa_bi = 'X' AND g_group_opened = 'X'.
* close batchinput group
CALL FUNCTION 'BDC_CLOSE_GROUP'.
ULINE.
FORMAT COLOR 5.
WRITE: 1 g_mapnam, 'wurde erstellt!'(i07).
FORMAT COLOR OFF.
WRITE: /.
* Zeitpunkt d. Ausführens, Datum
WRITE: 1 sy-datum,
* Zeitpunkt d. Ausführens, Zeit
20 sy-uzeit,
* Von welchem User wird der BI ausgeführt
40 sy-uname.
WRITE: /.
ULINE.
ELSE.
IF pa_di = 'X' AND g_group_opened = 'X'.
ULINE.
FORMAT COLOR 6.
WRITE: 'Fehlermappe ',g_mapnam,' wurde erzeugt'(i06).
FORMAT COLOR OFF.
WRITE: /.
* Zeitpunkt d. Ausführens, Datum
WRITE: 1 sy-datum,
* Zeitpunkt d. Ausführens, Zeit
20 sy-uzeit,
* Von welchem User wird der DI ausgeführt
40 sy-uname.
WRITE: /.
ULINE.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDIF.
ENDIF.
ENDFORM. "CLOSE_GROUP
*----------------------------------------------------------------------*
* Start new transaction according to parameters *
*----------------------------------------------------------------------*
FORM bdc_transaction USING tcode.
DATA: l_mstring(480).
DATA: l_subrc LIKE sy-subrc.
* batch input session
IF pa_bi = 'X' AND g_group_opened = 'X'.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = tcode
* POST_LOCAL = NOVBLOCAL
* PRINTING = NOPRINT
* SIMUBATCH = ' '
* CTUPARAMS = ' '
TABLES
dynprotab = bdcdata
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.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* call transaction using
ELSE.
IF pa_di = 'X' AND g_group_opened = 'X'.
REFRESH messtab.
CALL TRANSACTION tcode USING bdcdata
MODE ctumode
UPDATE cupdate
MESSAGES INTO messtab.
l_subrc = sy-subrc.
** Erzeugen fehlermappe ************************************************
IF l_subrc <> 0.
IF g_group_opened IS INITIAL.
g_mapnam = 'ZERROR_CS07'.
PERFORM open_group.
ELSE.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = tcode
TABLES
dynprotab = bdcdata.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. "BDC_TRANSACTION
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "BDC_FIELD