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_stko TYPE TABLE OF stko,
wa_stko TYPE stko,
zaehler TYPE i,
ok_code LIKE sy-ucomm,
c_grid TYPE scrfname VALUE 'CONT1',
grid1 TYPE REF TO cl_gui_alv_grid,
g_custom_container TYPE REF TO cl_gui_custom_container.
*** S E L E K T I O N S B I L D ****************************************
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.
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.
* LOOP AT it_marc INTO wa_marc.
*
* WRITE: /10 wa_marc-matnr,
* 35 wa_marc-werks.
*
* zaehler = zaehler + 1.
*
* ENDLOOP.
*
* WRITE:/ zaehler, 'Datensätze'(s03).
END-OF-SELECTION.
* BI auf Transaktion CS07
* Erstellen der BI-Mappe
PERFORM open_group.
DO.
* IF sy-subrc <> 0. EXIT. ENDIF.
* Ü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-WERKS' wa_marc-werks.
* neuer Bildschirm
PERFORM bdc_dynpro USING 'SAPLCSAL' '0120'.
* PERFORM bdc_field USING 'BDC_OKCODE'
* '/EBACK'.
* PERFORM bdc_field USING 'BDC_CURSOR'
* 'RC29K-STLNR'.
* Übergabe der Daten und des Transaktionscodes an die Mappe
PERFORM bdc_transaction USING 'CS07'.
ENDDO.
* Schließen der Mappe
PERFORM close_group.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module PBO OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pbo OUTPUT.
SET PF-STATUS '100'.
IF g_custom_container IS INITIAL.
CREATE OBJECT g_custom_container
EXPORTING
container_name = c_grid.
CREATE OBJECT grid1
EXPORTING
i_parent = g_custom_container.
CALL METHOD grid1->set_table_for_first_display
* EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME = ''
* IS_VARIANT =
* I_SAVE =
* I_DEFAULT = 'X'
* IS_LAYOUT =
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
CHANGING
it_outtab = it_marc
* IT_FIELDCATALOG = gt_feld
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDMODULE. " PBO OUTPUT
*&---------------------------------------------------------------------*
*& Module PAI INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pai INPUT.
* to react on oi_custom_events:
CALL METHOD cl_gui_cfw=>dispatch.
CASE ok_code.
WHEN 'EXIT'.
PERFORM exit_program.
WHEN OTHERS.
* do nothing
ENDCASE.
CLEAR ok_code.
ENDMODULE. " PAI INPUT
*---------------------------------------------------------------------*
* FORM EXIT_PROGRAM *
*---------------------------------------------------------------------*
FORM exit_program.
* CALL METHOD G_CUSTOM_CONTAINER->FREE.
* CALL METHOD CL_GUI_CFW=>FLUSH.
LEAVE PROGRAM.
ENDFORM. "EXIT_PROGRAM
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.
* 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.
* message texts
TABLES: t100.
*** S E L E K T I O N S B I L D ****************************************
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.
*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 UP TO 10 ROWS INTO TABLE it_marc
WHERE matnr IN so_matnr
AND werks IN so_werks
AND lvorm = ''.
END-OF-SELECTION.
* Schauen, ob Zuordnung schon vorhanden ist oder nicht
SELECT * FROM mast INTO TABLE it_mast
WHERE werks IN so_werks.
IF sy-subrc = 0.
WRITE: 'Zu Material/Werk/Verwendung existiert bereits eine Stückliste!'.
ELSE.
* Mappenbenamsung
g_mapnam = 'ZMATWERKCS07'.
* BI auf Transaktion CS07
* Erstellen der BI-Mappe
PERFORM open_group.
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.
WRITE: 'Mappe wurde erstellt!'.
ENDIF.
*----------------------------------------------------------------------*
* create batchinput session *
* (not for call transaction using...) *
*----------------------------------------------------------------------*
FORM open_group.
IF pa_bi = 'X'.
* open batchinput group
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
* DEST = FILLER8
group = g_mapnam
* HOLDDATE = FILLER8
* KEEP = FILLER1
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.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDFORM. "OPEN_GROUP
*----------------------------------------------------------------------*
* end batchinput session *
* (call transaction using...: error session) *
*----------------------------------------------------------------------*
FORM close_group.
IF pa_bi = 'X'.
* close batchinput group
CALL FUNCTION 'BDC_CLOSE_GROUP'.
ELSE.
IF pa_di = 'X'.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
WRITE: /.
WRITE: /(30) 'Fehlermappe wurde erzeugt'(i06).
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'.
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'.
REFRESH messtab.
CALL TRANSACTION tcode USING bdcdata
* MODE ctumode
* UPDATE cupdate
MESSAGES INTO messtab.
l_subrc = sy-subrc.
* IF smalllog <> 'X'.
WRITE: / 'CALL_TRANSACTION',
tcode,
'returncode:'(i05),
l_subrc,
'RECORD:',
sy-index.
LOOP AT messtab.
SELECT SINGLE * FROM t100 WHERE sprsl = messtab-msgspra
AND arbgb = messtab-msgid
AND msgnr = messtab-msgnr.
IF sy-subrc = 0.
l_mstring = t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH messtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH messtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH messtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH messtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH messtab-msgv1 INTO l_mstring.
REPLACE '&' WITH messtab-msgv2 INTO l_mstring.
REPLACE '&' WITH messtab-msgv3 INTO l_mstring.
REPLACE '&' WITH messtab-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
WRITE: / messtab-msgtyp, l_mstring(250).
ELSE.
WRITE: / messtab.
ENDIF.
ENDLOOP.
SKIP.
ENDIF.
** Erzeugen fehlermappe ************************************************
IF l_subrc <> 0.
* AND e_group <> space.
* IF e_group_opened = ' '.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = g_mapnam
user = sy-uname
* keep = e_keep
* holddate = e_hdate.
e_group_opened = 'X'.
ENDIF.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = tcode
TABLES
dynprotab = bdcdata.
ENDIF.
* ENDIF.
REFRESH bdcdata.
* 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