1.  
  2. REPORT znadar_xx_crear_orden.
  3.  
  4. TABLES: sscrfields, usr01.
  5.  
  6. TABLES:  ko013.
  7.  
  8. SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME.
  9.   PARAMETERS: p_text TYPE text30 LOWER CASE OBLIGATORY DEFAULT 'XX:WB'.
  10.  
  11.   PARAMETERS: p_DESC TYPE as4text LOWER CASE,
  12.               p_prog TYPE versobjnam OBLIGATORY,
  13. *--[ Si no pones versión, irá a buscar la que le toca en la gestión de versiones
  14.               p_vers TYPE n LENGTH 3.
  15. SELECTION-SCREEN END OF BLOCK b01.
  16.  
  17. SELECT-OPTIONS: p_users FOR usr01-bname OBLIGATORY.
  18.  
  19. *--[ Permite buscar si ha sido metido en una orden y continuar con su descripción
  20. SELECTION-SCREEN FUNCTION KEY 1.
  21.  
  22. TYPES: BEGIN OF ty_St,
  23.          text(56),
  24.          colo(1),
  25.          vers(3),
  26.        END OF ty_st.
  27.  
  28. DATA: l_desc         TYPE as4text,
  29.       lt_attributes  TYPE scts_attrs,
  30.       lt_users       TYPE scts_users,
  31.       l_users        TYPE scts_user,
  32.       l_vers         TYPE n LENGTH 3,
  33.       l_mask         TYPE ty_st,
  34.       ps_new_request TYPE trwbo_request_header,
  35.       pt_new_tasks   TYPE trwbo_request_headers.
  36.  
  37. DATA: gr_table  TYPE REF TO cl_salv_table.
  38. TYPES: BEGIN OF ty_text,
  39.          as4text TYPE e07t-as4text,
  40.        END OF ty_text.
  41. DATA: t_ord TYPE STANDARD TABLE OF ty_text.
  42.  
  43. AT SELECTION-SCREEN.
  44.   DATA: t_return TYPE STANDARD TABLE OF ddshretval.
  45.   CASE sscrfields-ucomm.
  46.     WHEN 'FC01'.
  47.       CHECK NOT p_prog IS INITIAL.
  48.       DATA(l_obj_name) = '%' && p_prog && '%'.
  49.       SELECT * FROM e071 AS a
  50.  
  51.           INNER JOIN e070 AS b
  52.          ON b~trkorr = a~trkorr OR
  53.             b~strkorr = a~trkorr
  54.         INNER JOIN e07t AS c ON
  55.             c~trkorr = b~TRKorr
  56.         INTO CORRESPONDING FIELDS OF TABLE @t_ord
  57.         WHERE obj_name LIKE @l_OBJ_NAME AND
  58.       langu = @sy-langu.
  59.       SORT t_ord DESCENDING.
  60.  
  61.       DELETE ADJACENT DUPLICATES FROM t_ord.
  62.  
  63.       DATA: lr_content TYPE REF TO cl_salv_form_element.
  64.  
  65.       DATA: lr_selections TYPE REF TO cl_salv_selections.
  66.  
  67.  
  68.       cl_salv_table=>factory(
  69.        EXPORTING
  70.           list_display = 'X'
  71.         IMPORTING
  72.           r_salv_table = gr_table
  73.         CHANGING
  74.           t_table      = t_ord ).
  75.  
  76.       gr_table->set_screen_popup(
  77.         start_column = 1
  78.         end_column   = 100
  79.         start_line   = 1
  80.         end_line     = 20 ).
  81.  
  82.       lr_selections = gr_table->get_selections( ).
  83.       lr_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
  84.  
  85.       gr_table->display( ).
  86.  
  87.       DATA(lo_selections) = gr_table->get_selections( ).
  88.  
  89.       DATA(lt_rows) = lo_selections->get_selected_rows( ).
  90.  
  91.       LOOP AT lt_rows INTO DATA(l_row).
  92.         READ TABLE t_ord INTO DATA(l_ord) INDEX l_row.
  93.         p_desc = l_ord-as4text.
  94.         EXIT.
  95.       ENDLOOP.
  96.     WHEN OTHERS.
  97. *--[ Ayuda automágica
  98.       IF p_vers IS INITIAL.
  99.         SELECT * FROM vrsd INTO TABLE @DATA(t_vers)
  100.         WHERE objname = @p_prog.
  101.  
  102.         IF sy-subrc EQ 0.
  103.           p_vers = lines( t_vers ).
  104.         ENDIF.
  105.       ENDIF.
  106.   ENDCASE.
  107.  
  108. INITIALIZATION.
  109.   MOVE '@13@ Buscar objeto'       TO sscrfields-functxt_01.
  110.   p_users-sign = 'I'.
  111.   p_users-option = 'EQ'.
  112.   p_users-low = sy-uname.     APPEND p_users.
  113.  
  114. end-of-SELECTION.
  115.  
  116.   IF p_vers IS INITIAL.
  117.     SELECT * FROM vrsd INTO TABLE @DATA(t_vers)
  118.     WHERE objname = @p_prog.
  119.  
  120.     IF sy-subrc EQ 0.
  121.       l_vers = lines( t_vers ).
  122.     ELSE.
  123.       l_vers = '001'.
  124.     ENDIF.
  125.   ELSE.
  126.     l_vers = p_vers.
  127.   ENDIF.
  128.  
  129.   CONCATENATE p_text p_desc INTO l_desc SEPARATED BY ':'.
  130.   REPLACE ALL OCCURRENCES OF '::' IN l_desc WITH ':'.
  131.   REPLACE ALL OCCURRENCES OF ' :' IN l_desc WITH ':'.
  132.   REPLACE ALL OCCURRENCES OF ': ' IN l_desc WITH ':'.
  133.   CONDENSE l_desc.
  134.   l_mask-text = l_desc.
  135.   l_mask-colo = ':'.
  136.   l_mask-vers = l_vers.
  137.   l_desc = l_mask.
  138.   SELECT * FROM usr01 INTO TABLE @DATA(l_usr01)
  139.   WHERE bname IN @p_users.
  140.   LOOP AT l_usr01 INTO DATA(l_sus).
  141.     l_users-user = l_sus-bname. l_users-type = 'X'.  APPEND l_users TO lt_users.
  142.   ENDLOOP.
  143.   IF lines( lt_users ) = 0.
  144.     l_users-user = sy-uname. l_users-type = 'X'.  APPEND l_users TO lt_users.
  145.   ENDIF.
  146.  
  147.   CALL FUNCTION 'TR_INSERT_REQUEST_WITH_TASKS'
  148.     EXPORTING
  149.       iv_type            = 'K'
  150.       iv_text            = l_desc
  151.       iv_target          = 'IS4'
  152.       it_attributes      = lt_attributes
  153.       it_users           = lt_users
  154.       iv_tardevcl        = ko013-tardevcl
  155.       iv_devclass        = ko013-devclass
  156.       iv_tarlayer        = ko013-tarlayer
  157.       iv_repoid          = ko013-repoid
  158.       iv_with_badi_check = 'X'
  159.     IMPORTING
  160.       es_request_header  = ps_new_request
  161.       et_task_headers    = pt_new_tasks
  162.     EXCEPTIONS
  163.       insert_failed      = 1
  164.       enqueue_failed     = 2
  165.       OTHERS             = 3.
  166.   IF sy-subrc EQ 0.
  167.     MESSAGE s398(00) WITH 'Orden creada'.
  168.   ELSE.
  169.     MESSAGE s398(00) WITH 'Fallo en orden'.
  170.   ENDIF.
  171.   LEAVE TO SCREEN 0.