Foro de programación ABAP

Código abierto => Reports => Mensaje iniciado por: oscar en 27 de Agosto de 2007, 06:46:04 pm

Título: Lista todos los programas de un 'sy-langu' y crea una orden con todos ellos.
Publicado por: oscar en 27 de Agosto de 2007, 06:46:04 pm
Lista todos los programas de un 'sy-langu' y crea una orden con todos ellos.




REPORT zbctrans LINE-SIZE 128 NO STANDARD PAGE HEADING.

* Data definition
TABLES: trdir, t002, e070, e071, e07t.
DATA: BEGIN OF itab OCCURS 0,
      prog LIKE rs38m-programm,
      text LIKE rs38m-repti,
      END OF itab.
DATA: BEGIN OF iout OCCURS 0,
      prog LIKE rs38m-programm,
      END OF iout.
DATA: BEGIN OF itext OCCURS 200.
        INCLUDE STRUCTURE textpool.
DATA: END OF itext.
* Table for the tasks created.
DATA: BEGIN OF tasks OCCURS 1.
        INCLUDE STRUCTURE e070.
DATA: END OF tasks.
* Table for the objects to insert in the order.
DATA: BEGIN OF t_e071 OCCURS 0.
        INCLUDE STRUCTURE e071.
DATA: END OF t_e071.
DATA: BEGIN OF t_e071k OCCURS 0.
        INCLUDE STRUCTURE e071k.
DATA: END OF t_e071k.
* Variables
DATA: answer,
      l_checkbox,
      l_prog LIKE rs38m-programm,
      ew_order LIKE e070,
      ev_order LIKE e070-trkorr,
      ev_task LIKE  e070-trkorr,
      v_subrc LIKE sy-subrc,
      color,
      checkbox.

* Selection screen.
SELECTION-SCREEN BEGIN OF BLOCK 001 WITH FRAME TITLE text-001.
SELECT-OPTIONS: reps FOR trdir-name,
                lang FOR t002-spras NO-EXTENSION NO INTERVALS
                                    OBLIGATORY.
SELECTION-SCREEN END OF BLOCK 001.

* User input.
AT USER-COMMAND.
  CASE sy-ucomm.
* Create request.
    WHEN 'REQ'.
      PERFORM confirm USING text-005 text-006.
      IF answer = 'J'.
        PERFORM choice.
        PERFORM request.
        IF sy-subrc = 0.
          PERFORM ok.
        ELSE.
          v_subrc = sy-subrc.
          PERFORM error.
        ENDIF.
      ENDIF.
* Select all.
    WHEN 'SEL'.
      PERFORM select.
* Unselect all.
    WHEN 'UNS'.
      PERFORM unselect.
  ENDCASE.
* Process.
START-OF-SELECTION.
* Warning if the user tries to select standard programs.
  READ TABLE reps INDEX 1.
  IF reps-low(1) NE 'Z'.
    PERFORM confirm USING text-003 text-004.
  ENDIF.
  IF answer = 'J' OR reps-low(1) = 'Z'.
* We place the list of programs in the internal table.
    SELECT * FROM trdir WHERE name IN reps.
      MOVE trdir-name TO itab-prog.
      APPEND itab. CLEAR itab.
    ENDSELECT.
    READ TABLE lang INDEX 1.
    LOOP AT itab.
      READ TEXTPOOL itab-prog LANGUAGE lang-low INTO itext.
      LOOP AT itext WHERE id = 'R'.
        itab-text = itext-entry.
        MODIFY itab. CLEAR itab.
        EXIT.
      ENDLOOP.
      REFRESH itext. CLEAR itext.
    ENDLOOP.
* List output.
    SET PF-STATUS 'LIST'.
    ULINE.
    FORMAT COLOR 1 INTENSIFIED ON.
    WRITE: / sy-vline,
           4 text-010,
           15 text-011,
           128 sy-vline.
    ULINE.
    LOOP AT itab WHERE NOT text IS INITIAL.
      IF color = 'X'.
        CLEAR color.
        FORMAT COLOR 2 INTENSIFIED OFF.
      ELSE.
        color = 'X'.
        FORMAT COLOR 2 INTENSIFIED ON.
      ENDIF.
      WRITE: / sy-vline,
             2 checkbox AS CHECKBOX,
             4 itab-prog,
             15 itab-text,
             128 sy-vline.
    ENDLOOP.
    IF sy-subrc NE 0.
      FORMAT COLOR 6 INTENSIFIED OFF.
      WRITE: / sy-vline, 4 text-012, 128 sy-vline.
    ENDIF.
    ULINE.
  ENDIF.

*---------------------------------------------------------------------*
*       FORM CONFIRM                                                  *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  LINE1                                                         *
*  -->  LINE2                                                         *
*---------------------------------------------------------------------*
FORM confirm USING line1 line2.
  CLEAR answer.
  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
    EXPORTING
      defaultoption = 'N'
      textline1     = line1
      textline2     = line2
      titel         = text-002
      start_column  = 25
      start_row     = 6
    IMPORTING
      answer        = answer
    EXCEPTIONS
      OTHERS        = 1.
ENDFORM.                    "CONFIRM

*---------------------------------------------------------------------*
*       FORM SELECT                                                   *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM select.
  DO.
    READ LINE sy-index FIELD VALUE checkbox.
    IF sy-subrc NE 0.
      EXIT.
    ENDIF.
    MODIFY CURRENT LINE FIELD VALUE checkbox FROM 'X'.
  ENDDO.
ENDFORM.                    "SELECT

*---------------------------------------------------------------------*
*       FORM UNSELECT                                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM unselect.
  DO.
    READ LINE sy-index FIELD VALUE checkbox.
    IF sy-subrc NE 0.
      EXIT.
    ENDIF.
    MODIFY CURRENT LINE FIELD VALUE checkbox FROM ' '.
  ENDDO.
ENDFORM.                    "UNSELECT

*---------------------------------------------------------------------*
*       FORM CHOICE                                                   *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM choice.
  REFRESH iout. CLEAR iout.
  DO.
    CLEAR: l_checkbox, l_prog.
    READ LINE sy-index FIELD VALUE checkbox INTO l_checkbox
                                   itab-prog INTO l_prog.
    IF sy-subrc NE 0.
      EXIT.
    ENDIF.
    IF l_checkbox = 'X'.
      MOVE l_prog TO iout-prog.
      APPEND iout. CLEAR iout.
    ENDIF.
  ENDDO.
ENDFORM.                    "CHOICE

*---------------------------------------------------------------------*
*       FORM REQUEST                                                  *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM request.
* First we create the order.
  CALL FUNCTION 'TR_ORDER_CREATE'
    EXPORTING
      iv_start_column   = 1
      iv_start_row      = 8
      iv_client         = sy-mandt
      iv_new_order_type = 'A'
      iv_new_task_type  = 'X'
      iv_category       = 'SYST'
    IMPORTING
      ew_order          = ew_order
      ev_order          = ev_order
      ev_task           = ev_task
    TABLES
      tt_tasks          = tasks
    EXCEPTIONS
      no_authorization  = 1
      OTHERS            = 2.
* Set the order as transportable...
  ew_order-trfunction = 'K'.
  CALL FUNCTION 'TRINT_CHANGE_OF_ATTRIBUTES'
    EXPORTING
      is_e070           = ew_order
    EXCEPTIONS
      change_error      = 1
      e070_update_error = 2
      e070_not_filled   = 3
      OTHERS            = 4.
* ...and the task.
  READ TABLE tasks INDEX 1.
  tasks-trfunction = 'S'.
  CALL FUNCTION 'TRINT_CHANGE_OF_ATTRIBUTES'
    EXPORTING
      is_e070           = tasks
    EXCEPTIONS
      change_error      = 1
      e070_update_error = 2
      e070_not_filled   = 3
      OTHERS            = 4.
* Include the programs in the transference table.
  LOOP AT iout.
    MOVE: tasks-trkorr TO t_e071-trkorr,
          '999999' TO t_e071-as4pos,
          'LIMU' TO t_e071-pgmid,
          'REPT' TO t_e071-object,
          iout-prog TO t_e071-obj_name.
    APPEND t_e071. CLEAR t_e071.
  ENDLOOP.
* Insert the objects.
  SELECT SINGLE * FROM e070 WHERE trkorr = tasks-trkorr.
  SELECT SINGLE * FROM e07t WHERE trkorr = tasks-trkorr.
  CALL FUNCTION 'TRINT_MODIFY_COMM'
    EXPORTING
      wi_called_by_editor            = ' '
      wi_e070                        = e070
      wi_e07t                        = e07t
      wi_lock_sort_flag              = 'X'
      wi_save_user                   = ' '
      wi_sel_e071                    = 'X'
      wi_sel_e071k                   = ' '
      wi_sel_e07t                    = ' '
    TABLES
      wt_e071                        = t_e071
      wt_e071k                       = t_e071k
    EXCEPTIONS
      chosen_project_closed          = 1
      e070_insert_error              = 2
      e070_update_error              = 3
      e071k_insert_error             = 4
      e071k_update_error             = 5
      e071_insert_error              = 6
      e071_update_error              = 7
      e07t_insert_error              = 8
      e07t_update_error              = 9
      locked_entries                 = 10
      locked_object_not_deleted      = 11
      ordername_forbidden            = 12
      order_change_but_locked_object = 13
      order_released                 = 14
      order_user_locked              = 15
      tr_check_keysyntax_error       = 16
      no_authorization               = 17
      e070c_insert_error             = 18
      e070c_update_error             = 19
      wrong_client                   = 20
      unallowed_source_client        = 21
      unallowed_user                 = 22
      OTHERS                         = 23.
ENDFORM.                    "REQUEST

*---------------------------------------------------------------------*
*       FORM ok                                                       *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM ok.
  CALL FUNCTION 'POPUP_TO_INFORM'
    EXPORTING
      titel = text-007
      txt1  = text-008
      txt2  = ' '.
ENDFORM.                    "ok

*---------------------------------------------------------------------*
*       FORM error                                                    *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM error.
  CALL FUNCTION 'POPUP_TO_INFORM'
    EXPORTING
      titel = text-007
      txt1  = text-009
      txt2  = v_subrc.
ENDFORM.                    "error

Título: Re: Lista todos los programas de un 'sy-langu' y crea una orden con todos ellos.
Publicado por: brunomessi en 09 de Diciembre de 2008, 03:34:35 pm
Muy bueno!
muchas gracias por el dato
saludos
bruno