SCC1-Klon
Die Transaktion SCC1 – Kopie gemäß Transportauftrag – wird immer dann verwendet, wenn in einem Mandanten gecustomized und in einem anderen getestet wird. Dann muss man nämlich den (noch offenen) Transportauftrag in den anderen Mandanten importieren. Die SCC1 hat allerindgs ein paar “nervige Angewohnheiten”…
Bad Habit 1
In der SCC1 wird immer der zuletzt verwendete Transportauftrag vorgeblendet. Allerdings der in der Transaktion zuletzt verwendete, nicht der vom Anwender zuletzt benutzte. Da zudem der Auftragstext nicht angezeigt wird, kann man schwer erkennen, ob noch der letzte eigene oder ein fremder Transportauftrag angezeigt wird.
Bad Habit 2
Es muss in der Regel das Feld “Inklusive untergeordnete Aufgaben des Auftrages” angekreuzt werden, damit auch alle Objekte im Transportauftrag berücksichtigt werden.
Bad Habit 3
Der Programmstart wird nochmals durch ein Popup abgesichert.
Bad Habit 4
Nach Ausführung erscheint eine Meldung “Programmlauf erfolgreich beendet” auf dem Hauptbild. Nach drücken der “Zurück”-Taste (F3 – Grüner Pfeil nach links) erscheint ein kurzes Protokoll. Verlassen kann man die Transaktion aber durch erneutes Drücken der F3-Taste nicht, sondern muss stattdessen SHIFT-F3 (gelber Pfeil nach oben) drücken.
Fazit
Das sind alles Kleinigkeiten. Aber sie nerven. Deswegen habe ich ein Programm entwickelt, dass jeweils den eigenen letzten Workbench-Auftrag und den eigenen zuletzt verwendeten Customizing-Auftrag vorblendet.
Mit Klick auf “Ausführen” wird der Auftrag sofort importiert.
Anpassungen
Im Programm muss der Entwicklungsmandant in der Konstanten “GC_MANDT” eingestellt werden.
Sollen auch freigegebene Aufträge angezeigt werden, so muss die F4-Werthilfe angepasst werden.
Screenshot
|
Code
REPORT z_simple_scc1 NO STANDARD PAGE HEADING LINE-SIZE 255.
*———————————————————————-*
* constants
*———————————————————————-*
CONSTANTS gc_mandt TYPE mandt VALUE ‘500’.
CONSTANTS gc_cat_sys TYPE trcateg VALUE ‘SYST’.
CONSTANTS gc_cat_cus TYPE trcateg VALUE ‘CUST’.
*———————————————————————-*
* data
*———————————————————————-*
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
TYPE-POOLS: trwbo.
PARAMETERS: nodata DEFAULT ‘/’ LOWER CASE NO-DISPLAY. “nodata
PARAMETERS p_trp1 RADIOBUTTON GROUP tk DEFAULT ‘X’ USER-COMMAND space.
SELECTION-SCREEN BEGIN OF BLOCK sys WITH FRAME TITLE text-sys.
PARAMETERS p_trk1 TYPE trkorr.
PARAMETERS p_trt1 TYPE as4text MODIF ID dis.
SELECTION-SCREEN END OF BLOCK sys.
PARAMETERS p_trp2 RADIOBUTTON GROUP tk.
SELECTION-SCREEN BEGIN OF BLOCK cus WITH FRAME TITLE text-cus.
PARAMETERS p_trk2 TYPE trkorr.
PARAMETERS p_trt2 TYPE as4text MODIF ID dis.
SELECTION-SCREEN END OF BLOCK cus.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
*– set text fields to display-only
IF screen-group1 = ‘DIS’.
screen-input = ‘0’.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
*– value help for transport orders
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_trk1.
PERFORM f4_trkorr USING ‘K’ CHANGING p_trk1 p_trt1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_trk2.
PERFORM f4_trkorr USING ‘W’ CHANGING p_trk2 p_trt2.
INITIALIZATION.
IF sy-mandt = gc_mandt.
*– execution in developing client makes no sense…
CALL FUNCTION ‘TH_POPUP’
EXPORTING
client = sy-mandt
user = sy-uname
MESSAGE = ‘Do not execute in this client’
cut_blanks = ‘X’.
LEAVE PROGRAM.
ENDIF.
*– get last transport orders
PERFORM get_last_task USING ‘K’ CHANGING p_trk1 p_trt1.
PERFORM get_last_task USING ‘W’ CHANGING p_trk2 p_trt2.
START-OF-SELECTION.
*– Start SCC1 via Batch input
PERFORM bdc_dynpro USING ‘SAPMSCC1’ ‘0111’.
PERFORM bdc_field USING ‘BDC_CURSOR’ ‘INCL’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘=TRAN’.
PERFORM bdc_field USING ‘CCPROFSR-SRCCLIENT’ gc_mandt.
CASE ‘X’.
WHEN p_trp1.
PERFORM bdc_field USING ‘COMFILE’ p_trk1.
WHEN p_trp2.
PERFORM bdc_field USING ‘COMFILE’ p_trk2.
ENDCASE.
PERFORM bdc_field USING ‘INCL’ ‘X’.
PERFORM bdc_dynpro USING ‘SAPLSPO1’ ‘0100’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘=YES’.
PERFORM bdc_dynpro USING ‘SAPMSCC1’ ‘0111’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘/EEXIT’.
PERFORM bdc_field USING ‘BDC_CURSOR’ ‘CCPROFSR-RCCLIENT’.
PERFORM bdc_dynpro USING ‘SAPMSSY0’ ‘0120’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘/EEXIT’.
PERFORM bdc_transaction USING ‘SCC1’.
*———————————————————————-*
* Start new transaction according to parameters *
*———————————————————————-*
FORM bdc_transaction USING tcode.
DATA l_subrc TYPE sysubrc.
DATA l_mstring TYPE c LENGTH 500.
DATA ls_options TYPE ctu_params.
REFRESH messtab.
ls_options-racommit = ‘X’. “Commit beendet Tx nicht
ls_options-dismode = ‘N’.
ls_options-updmode = ‘L’.
CALL TRANSACTION tcode
USING bdcdata
OPTIONS FROM ls_options
MESSAGES INTO messtab.
l_subrc = sy-subrc.
LOOP AT messtab.
MESSAGE ID messtab-msgid
TYPE messtab-msgtyp
NUMBER messtab-msgnr
WITH messtab-msgv1
messtab-msgv2
messtab-msgv3
messtab-msgv4.
ENDLOOP.
REFRESH bdcdata.
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.
IF fval <> nodata.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDIF.
ENDFORM. “BDC_FIELD
*&———————————————————————*
*& Form get_last_task
*&———————————————————————*
FORM get_last_task USING value(iv_ordertype)
CHANGING ev_trkorr TYPE trkorr
ev_trktxt.
DATA lv_category TYPE trcateg.
DATA lt_tasks TYPE STANDARD TABLE OF e070use.
FIELD-SYMBOLS <task> TYPE e070use.
CASE iv_ordertype.
WHEN ‘K’.
lv_category = ‘SYST’.
WHEN OTHERS.
lv_category = ‘CUST’.
ENDCASE.
CALL FUNCTION ‘TR_LAST_TASK_GET’
EXPORTING
iv_username = sy-uname
iv_order_type = iv_ordertype
iv_category = lv_category
iv_client = gc_mandt
TABLES
tt_e070use = lt_tasks
EXCEPTIONS
invalid_username = 1
invalid_order_type = 2
invalid_category = 3
invalid_client = 4
OTHERS = 5.
READ TABLE lt_tasks ASSIGNING <task> INDEX 1.
IF <task> IS ASSIGNED.
ev_trkorr = <task>-ordernum.
SELECT SINGLE as4text FROM e07t INTO ev_trktxt
WHERE trkorr = <task>-ordernum.
ENDIF.
ENDFORM. “get_last_task
*&———————————————————————*
*& Form f4_trkorr
*&———————————————————————*
FORM f4_trkorr USING iv_order_type CHANGING ev_trkorr
ev_trktxt.
*** Data
DATA ls_sel TYPE trwbo_selection.
DATA lv_title TYPE trwbo_title.
DATA ls_request TYPE trwbo_request_header.
DATA lt_dyn TYPE STANDARD TABLE OF dynpread.
FIELD-SYMBOLS <dyn> TYPE dynpread.
APPEND INITIAL LINE TO lt_dyn ASSIGNING <dyn>.
CASE iv_order_type.
WHEN ‘K’.
ls_sel-client = gc_mandt.
ls_sel-reqfunctions = iv_order_type.
ls_sel-reqstatus = ‘D’.
lv_title = ‘Select workbench order’.
<dyn>-fieldname = ‘P_TRT1’.
WHEN ‘W’.
ls_sel-client = gc_mandt.
ls_sel-reqfunctions = iv_order_type.
ls_sel-reqstatus = ‘D’.
lv_title = ‘Select customizing order’.
<dyn>-fieldname = ‘P_TRT2’.
ENDCASE.
CALL FUNCTION ‘TR_SEARCH_AND_DISPLAY_REQUESTS’
EXPORTING
iv_username = sy-uname
is_selection = ls_sel
iv_title = lv_title
iv_f4 = ‘X’
iv_via_selscreen = ‘ ‘
iv_complete_requests = ‘X’
IMPORTING
es_selected_request = ls_request
EXCEPTIONS
action_aborted_by_user = 1
OTHERS = 2.
IF sy-subrc = 0.
ev_trkorr = ls_request-trkorr.
SELECT SINGLE as4text FROM e07t INTO ev_trktxt
WHERE trkorr = ev_trkorr.
<dyn>-fieldvalue = ev_trktxt.
CALL FUNCTION ‘DYNP_VALUES_UPDATE’
EXPORTING
dyname = sy-cprog
dynumb = sy-dynnr
TABLES
dynpfields = lt_dyn
EXCEPTIONS
OTHERS = 8.
ENDIF.
ENDFORM. “f4_trkorr
- 7. December: Excel Racing Simulation – Root Vole Race - 7. Dezember 2024
- 5. December: ABAPConf - 5. Dezember 2024
- 4. December: Only a lazy developer is a good developer - 4. Dezember 2024