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


Startbild des SCC1-Vorschaltprogramms

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

 

Enno Wulff