1. REPORT zini_prg_generator LINE-SIZE 1023.
  2.  
  3. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  4. *--[ Gestión de versiones
  5. *--[
  6. *--[ 20240305 01.00 First release
  7. *--[ 20240306 01.01 Se copia la pantalla de uno estandar
  8. *--[
  9. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  10. *--[ Constantes y Diccionario
  11. CONSTANTS:
  12.   c_vers          TYPE c LENGTH 006 VALUE 'v01.01',
  13.   c_copyleft      TYPE c LENGTH 200 VALUE 'CC BY-SA 4.0 | Alex Bergonzini 2024 | http://www.bergonzini.com',
  14.  
  15. *--[ Constantes de bloques de plantillas
  16.   C_beg           TYPE c LENGTH 9 VALUE '**-->BEG_', "<-- Inicio de bloques
  17.   c_end           TYPE c LENGTH 9 VALUE '**<--END_', "<-- Final de bloques
  18.   c_eof           TYPE c LENGTH 9 VALUE '**<--EOF',  "<-- Fín del Loader
  19.  
  20. *--[ Variables para sustituir en el código
  21.   c_var_prefix    TYPE c LENGTH 15 VALUE '#PREFIX#',
  22.   c_var_sufix     TYPE c LENGTH 15 VALUE '#SUFIX#',
  23.   c_var_minisufix TYPE c LENGTH 15 VALUE '#MINISUFIX#',
  24.   c_var_tail      TYPE c LENGTH 15 VALUE '#TAIL#',
  25.  
  26. *--[ Constantes auxiliares de Control
  27.   c_zip           TYPE c LENGTH 8 VALUE 'A E I O U _ ',
  28.   c_separator     TYPE c LENGTH 1 VALUE '|',
  29.   c_com           TYPE c LENGTH 5 VALUE '*--[ ',
  30.   c_prg           TYPE c LENGTH 5 VALUE '_PRG_',
  31.   c_prgtxt        TYPE c LENGTH 10 VALUE 'Programa:',
  32.   c_NO_trash      TYPE c LENGTH 100 VALUE '1234567890QWERTYUIOPASDFGHJKLZXCVBNM_',
  33.  
  34. *--[ Constantes del main program
  35.   c_includes      TYPE c LENGTH 50 VALUE 'TOP|SCR|CLS|EVE|FRM',
  36.   c_toppings      TYPE c LENGTH 50 VALUE 'ALV|MSG|BI|SF',
  37.  
  38.   c_i_source_000  TYPE c LENGTH 72 VALUE 'Report #PREFIX#_PRG_#SUFIX# Line-Size 1023.',
  39.   c_i_source_top  TYPE c LENGTH 72 VALUE 'Include #PREFIX#_I_#MINISUFIX#_#TAIL#. " Data Definition',
  40.   c_i_source_scr  TYPE c LENGTH 72 VALUE 'Include #PREFIX#_I_#MINISUFIX#_#TAIL#. " Screen Definition',
  41.   c_i_source_cls  TYPE c LENGTH 72 VALUE 'Include #PREFIX#_I_#MINISUFIX#_#TAIL#. " Class Definition',
  42.   c_i_source_EVE  TYPE c LENGTH 72 VALUE 'Include #PREFIX#_I_#MINISUFIX#_#TAIL#. " Events Definition',
  43.   c_i_source_FRM  TYPE c LENGTH 72 VALUE 'Include #PREFIX#_I_#MINISUFIX#_#TAIL#. " Forms Definition'.
  44.  
  45. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  46. *--[ Variables
  47. TYPES: source_line       TYPE c LENGTH 200,
  48.        ty_tt_source_line TYPE TABLE OF source_line.
  49.  
  50. DATA: t_src        TYPE STANDARD TABLE OF source_line,
  51.       t_src_00     TYPE STANDARD TABLE OF source_line,
  52.       l_src        LIKE LINE OF t_src,
  53.  
  54.       g_name       TYPE c LENGTH 30,
  55.       g_error      TYPE i,
  56.       g_mini_sufix TYPE c LENGTH 30.
  57.  
  58.  
  59. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  60. *--[ Pantalla
  61. SELECTION-SCREEN BEGIN OF LINE.
  62.   SELECTION-SCREEN COMMENT 1(10) t_PRGTXT.
  63.   PARAMETERS: p_prefix TYPE c LENGTH 10 OBLIGATORY DEFAULT 'ZGVA_XX'.
  64.   SELECTION-SCREEN COMMENT 23(5) t_prg.
  65.   PARAMETERS: p_sufix  TYPE c LENGTH 20 OBLIGATORY DEFAULT 'my_programa'.
  66. SELECTION-SCREEN END OF LINE.
  67.  
  68. SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME.
  69.  
  70. *--[ Si se a&#241;aden nuevas rutinas, hay que a&#241;adirla a los c_toppings
  71.   PARAMETERS: p_alv AS CHECKBOX DEFAULT ' ',
  72.               p_msg AS CHECKBOX DEFAULT ' ',
  73.               p_bi  AS CHECKBOX DEFAULT ' ',
  74.               p_sf  AS CHECKBOX DEFAULT ' '.
  75.   SELECTION-SCREEN SKIP 1.
  76.  
  77.   PARAMETERS: p_test AS CHECKBOX DEFAULT abap_true,
  78.               p_dele AS CHECKBOX DEFAULT ' '.  "READ ALERT!! RED ALERT!
  79.  
  80. SELECTION-SCREEN END OF BLOCK b01.
  81.  
  82. INITIALIZATION.
  83.   PERFORM eve_initialization.
  84.  
  85. START-OF-SELECTION.
  86.   PERFORM data_work.
  87.  
  88. END-OF-SELECTION.
  89.   PERFORM data_list.
  90.  
  91. FORM eve_initialization.
  92.   t_PRGTXT = c_prgtxt.
  93.   t_prg    = c_prg.
  94.   READ REPORT sy-repid INTO t_src_00.
  95.   LOOP AT t_src_00 INTO DATA(l_src_00).
  96.     DATA(l_tabix) = sy-tabix.
  97.     IF l_src_00 = c_eof.
  98.       DELETE t_src_00 INDEX 1.
  99.       EXIT.
  100.     ENDIF.
  101.     DELETE t_src_00 INDEX 1.
  102.   ENDLOOP.
  103. ENDFORM.
  104.  
  105.  
  106. FORM data_work.
  107.   PERFORM data_check.
  108.   PERFORM data_delete_trash.
  109.   PERFORM data_work_core.
  110.   PERFORM data_work_includes.
  111. ENDFORM.
  112.  
  113. FORM data_delete_trash.
  114.  
  115.   TYPES: BEGIN OF ty_alv,
  116.            ini TYPE i,
  117.            end TYPE i,
  118.          END OF ty_alv.
  119.   DATA: t_alv TYPE STANDARD TABLE OF ty_alv,
  120.         l_alv LIKE LINE OF t_alv.
  121.  
  122.   CHECK g_error IS INITIAL.
  123.  
  124.   SPLIT c_toppings AT c_separator INTO TABLE DATA(t_tab).
  125.  
  126.   LOOP AT t_tab INTO DATA(l_tab).
  127.  
  128.     DATA(p_param) = |p_{ l_tab }|.
  129.     ASSIGN (p_param) TO FIELD-SYMBOL(<p_param>).
  130.  
  131.     CHECK <p_param> IS INITIAL. "<-- Buscamos no marcados para borrar.
  132.  
  133.     DATA(l_beg_alv) = |{ c_beg }{ l_tab }|.
  134.     DATA(l_end_alv) = |{ c_end }{ l_tab }|.
  135.     LOOP AT t_src_00 INTO DATA(l_src).
  136.  
  137.       IF l_src = l_beg_alv.
  138.         l_alv-ini = sy-tabix.
  139.       ENDIF.
  140.  
  141.       IF l_src = l_end_alv.
  142.         l_alv-end = sy-tabix.
  143.         APPEND l_alv TO t_alv.
  144.         CLEAR: l_alv-end, l_alv-ini.
  145.       ENDIF.
  146.  
  147.     ENDLOOP.
  148.  
  149.     SORT t_alv BY ini DESCENDING.
  150.  
  151.     LOOP AT t_alv INTO DATA(m_alv).
  152.       DELETE t_src_00 FROM m_alv-ini TO m_alv-end.
  153.     ENDLOOP.
  154.     REFRESH t_alv.
  155.  
  156.   ENDLOOP.
  157. ENDFORM.
  158.  
  159. FORM data_list.
  160.   CASE g_error.
  161.     WHEN 1.  MESSAGE s398(00) WITH 'Nombre de pograma desmasiado largo' DISPLAY LIKE 'E'.
  162.     WHEN 2.  MESSAGE s398(00) WITH 'Nombre de includes desmasiado largo' DISPLAY LIKE 'E'.
  163.     WHEN 3.  MESSAGE s398(00) WITH 'Report ya existente' DISPLAY LIKE 'E'.
  164.     WHEN 4.  MESSAGE s398(00) WITH 'Include ya existente' DISPLAY LIKE 'E'.
  165.     WHEN 99. MESSAGE s398(00) WITH 'Abortado' DISPLAY LIKE 'E'.
  166.   ENDCASE.
  167. ENDFORM.
  168.  
  169.  
  170. FORM data_check.
  171.   DATA: l_name(30),
  172.         l_ans(1).
  173.  
  174. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  175. *--[ Advertencia
  176.   IF p_dele = abap_true.
  177.     CALL FUNCTION 'POPUP_TO_CONFIRM'
  178.       EXPORTING
  179.         titlebar       = '&#161; Advertencia !'
  180. *       DIAGNOSE_OBJECT             =
  181.         text_question  = 'Flag de borrado marcado. &#191;Quiere borrar programas ya existentes?'
  182.         text_button_1  = 'Sí'
  183. *       ICON_BUTTON_1  = ' '
  184.         text_button_2  = 'No'
  185. *       ICON_BUTTON_2  = ' '
  186. *       DEFAULT_BUTTON = '1'
  187. *       DISPLAY_CANCEL_BUTTON       = 'X'
  188. *       USERDEFINED_F1_HELP         = ' '
  189. *       START_COLUMN   = 25
  190. *       START_ROW      = 6
  191. *       POPUP_TYPE     =
  192. *       IV_QUICKINFO_BUTTON_1       = ' '
  193. *       IV_QUICKINFO_BUTTON_2       = ' '
  194.       IMPORTING
  195.         answer         = l_ans
  196. * TABLES
  197. *       PARAMETER      =
  198.       EXCEPTIONS
  199.         text_not_found = 1
  200.         OTHERS         = 2.
  201.  
  202.     IF sy-subrc <> 0 OR l_ans NE '1'.
  203.       g_error = 99.
  204.       CLEAR p_dele.
  205.       EXIT.
  206.     ENDIF.
  207.   ENDIF.
  208.  
  209.  
  210. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  211. *--[ Sanitize
  212.   PERFORM data_sanitize CHANGING p_prefix.
  213.   PERFORM data_sanitize CHANGING p_SUFIX.
  214.  
  215.   g_mini_sufix = p_sufix.
  216.   TRANSLATE g_mini_sufix USING c_zip.
  217.  
  218.   CONDENSE p_sufix NO-GAPS.
  219.   CONDENSE p_prefix NO-GAPS.
  220.   CONDENSE g_mini_sufix NO-GAPS.
  221.  
  222. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  223. *--[ Verificamos longitudes
  224.   DATA(l_str_prg) = |{ p_prefix }_PRG_{ p_sufix }|.
  225.   DATA(l_str_inc) = |{ p_prefix }_I_XXX_{ g_mini_sufix }|.
  226.  
  227.   IF strlen( l_str_prg ) > 30. g_error = 1. ENDIF.
  228.   IF strlen( l_str_inc ) > 30. g_error = 2. ENDIF.
  229.  
  230. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  231. *--[ Verificamos la existencia de los main + report
  232.   l_name = |{ p_prefix }_PRG_{ p_sufix }|.
  233.   READ REPORT l_name INTO t_src.
  234.   IF sy-subrc EQ 0. IF p_dele = abap_true.  DELETE REPORT l_name.  ELSE.  g_error = 3. ENDIF. ENDIF.
  235.   SPLIT c_includes AT c_separator INTO TABLE DATA(t_tab).
  236.   LOOP AT t_tab INTO DATA(l_Data).
  237.     CHECK g_error IS INITIAL.
  238.     l_name = |{ p_prefix }_I_{ g_mini_sufix }_{ l_data }|.
  239.     READ REPORT l_name INTO t_src.
  240.     IF sy-subrc EQ 0. IF p_dele = abap_true.  DELETE REPORT l_name.  ELSE.  g_error = 3. ENDIF. ENDIF.
  241.   ENDLOOP.
  242.  
  243. ENDFORM.
  244.  
  245. FORM data_sanitize CHANGING p_var.
  246.   p_var = to_upper( p_var ).
  247.   DO strlen( p_var ) TIMES.
  248.     DATA(l_num) = sy-index - 1.
  249.     CHECK p_var+l_num(1) NA c_NO_trash.
  250.     p_var+l_num(1) = abap_false.
  251.   ENDDO.
  252.   CONDENSE p_var NO-GAPS.
  253.  
  254. ENDFORM.
  255.  
  256.  
  257. FORM data_replace.
  258.   CHECK g_error IS INITIAL.
  259.  
  260.   LOOP AT t_src ASSIGNING FIELD-SYMBOL(<f>).
  261.  
  262.     REPLACE ALL OCCURRENCES OF c_var_prefix     IN <f> WITH p_prefix.
  263.     REPLACE ALL OCCURRENCES OF c_var_sufix      IN <f> WITH p_sufix.
  264.     REPLACE ALL OCCURRENCES OF c_var_minisufix  IN <f> WITH g_mini_sufix.
  265.  
  266.   ENDLOOP.
  267. ENDFORM.
  268.  
  269. FORM data_work_core.
  270.   CHECK g_error IS INITIAL.
  271.  
  272.   g_name = |{ p_prefix }_PRG_{ p_sufix }|.
  273.  
  274.   REFRESH t_src.
  275.   t_src = VALUE #( ( c_i_source_000 ) ( ' ' ) ).
  276.   SPLIT c_includes AT c_separator INTO TABLE DATA(t_tab).
  277.  
  278.   LOOP AT t_tab INTO DATA(l_tab).
  279.     l_tab = to_upper( l_tab ).
  280.     DATA(l_var) = |c_i_source_{ l_tab }|.
  281.     ASSIGN (l_var) TO FIELD-SYMBOL(<f>).
  282.     l_src = <f>.
  283.     REPLACE c_var_tail IN l_src WITH l_tab.
  284.     APPEND l_src TO t_src.
  285.  
  286.   ENDLOOP.
  287.  
  288.   PERFORM data_replace.
  289.   PERFORM data_save using '1'.
  290.   perform copy_screen.
  291.   perform copy_status.
  292.  
  293. ENDFORM.
  294.  
  295. FORM data_save using p_type.
  296.   CHECK g_error IS INITIAL.
  297.   CHECK g_name IS NOT INITIAL.
  298.   CHECK lines( t_src ) > 0.
  299.  
  300.   IF p_test IS INITIAL.
  301.     INSERT REPORT g_name FROM t_src PROGRAM TYPE p_type.
  302.   ELSE.
  303.     LOOP AT t_src INTO l_src.
  304.       AT FIRST.
  305.         WRITE: / c_com, g_name.
  306.       ENDAT.
  307.       IF l_src CO ' ' OR l_Src IS INITIAL. l_src = '*'. ENDIF.
  308.  
  309.       WRITE: / l_src.
  310.     ENDLOOP.
  311.   ENDIF.
  312. ENDFORM.
  313.  
  314. FORM data_work_includes.
  315.  
  316.   CHECK g_error IS INITIAL.
  317.  
  318.   SPLIT c_includes AT c_separator INTO TABLE DATA(t_tab).
  319.   LOOP AT t_tab INTO DATA(l_Data).
  320.  
  321.     REFRESH t_src.
  322.  
  323.     g_name = |{ p_prefix }_I_{ g_mini_sufix }_{ l_data }|.
  324.  
  325.     DATA(l_beg) = |{ c_beg }{ l_data }|.
  326.     DATA(l_end)   = |{ c_end }{ l_data }|.
  327.  
  328.     LOOP AT t_src_00 ASSIGNING FIELD-SYMBOL(<l_linea>).
  329.  
  330.       IF <l_linea> = l_beg. DATA(l_tabix_beg) = sy-tabix + 1. ENDIF.
  331.       IF <l_linea> = l_end. DATA(l_tabix_end) = sy-tabix - 1. ENDIF.
  332.  
  333.       IF l_tabix_beg IS NOT INITIAL AND
  334.          l_tabix_end IS NOT INITIAL.
  335.  
  336.         APPEND LINES OF t_src_00 FROM l_tabix_beg TO l_tabix_end TO t_src.
  337.         LOOP AT t_src ASSIGNING FIELD-SYMBOL(<l_src_new>).
  338.           IF <l_src_new>+0(1) = '*'.
  339.             SHIFT <l_src_new> LEFT.
  340.           ENDIF.
  341.         ENDLOOP.
  342.         PERFORM data_save using 'I'.
  343.         CLEAR: l_tabix_end, l_tabix_beg.
  344.         EXIT.
  345.       ENDIF.
  346.  
  347.     ENDLOOP.
  348.  
  349.   ENDLOOP.
  350.  
  351. ENDFORM.
  352.  
  353. form copy_status.
  354.   data: rcode(5),
  355.         p_origen(40),
  356.         p_destino(40),
  357.         s_origen(20),
  358.         s_destino(20).
  359.  
  360.   p_origen = 'BCALV_DND_01'.
  361.   s_origen  = 'MAIN'.
  362.   p_destino = g_name.
  363.        perform copy_status_diff_progs_new in PROGRAM SAPLSMPE
  364.        using abap_true  p_origen  p_destino s_origen  s_origen
  365.                                         changing rcode.
  366. endform.
  367.  
  368. form copy_screen.
  369.   DATA: BEGIN OF dynname,
  370.           prog LIKE d020s-prog,
  371.           dnum LIKE d020s-dnum,
  372.         END OF dynname.
  373.  
  374. DATA: h TYPE d020s.                                "Header
  375. DATA: f TYPE STANDARD TABLE OF d021s.
  376. DATA: e TYPE dyn_flowlist  WITH HEADER LINE.       "Ablauflogik
  377. DATA: m TYPE d023s  OCCURS 0 WITH HEADER LINE.     "Dynpro-Parameter
  378.  
  379.   check p_test is INITIAL.
  380.   check g_error is INITIAL.
  381.  
  382.   dynname-prog = 'BCALV_DND_01'. "<-- Copiamos de uno estándar
  383.   dynname-dnum = '0100'.
  384.   IMPORT DYNPRO h f e m ID dynname.
  385.   delete f from 1 to 2.
  386.  
  387. *--[ Generamos un Custom Control
  388.   f = VALUE #( BASE F ( FNAM = 'CC_ALV_01'
  389.                         DIDX = CONV #( '0028' )
  390.                         FLG2 = CONV #( '30' )
  391.                         FILL = CONV #( 'U' )
  392.                         FMB1 = CONV #( '30' )
  393.                         LENG = CONV #( 'E7' )
  394.                         LINE = CONV #( '01' )
  395.                         COLN = CONV #( '02' )
  396.                         AUTH = CONV #( '101' )
  397.                         AGLT = CONV #( '14' )
  398.                         ADEZ = CONV #( '73' ) ) ).
  399.  
  400.   h-PROG = dynname-prog = g_name.  "<- Programa de destino
  401. *  h-DNUM = dynname-dnum = '0100'. "<-- Por si hay que cambiar la pantalla
  402.   EXPORT DYNPRO h f e m ID dynname.
  403. endform.
  404.  
  405. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  406. *--[ FIN DEL ABAP, Inicio del Templeate.
  407. **<--EOF
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  416. *--[ Source TOP
  417. **-->BEG_TOP
  418. ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  419. **--[ Data Definition
  420. *data: g_okcode type sy-ucomm,
  421. *      g_error  type i.
  422.  
  423. **-->BEG_ALV
  424. *CONSTANTS: c_st_alv_01 TYPE dd02l-tabname VALUE '{NOMBRE_DE_LA_ESTRUCTURA}'.
  425. *
  426. *DATA: cc_01        TYPE REF TO cl_gui_custom_container,
  427. *      cm_01        TYPE scrfname VALUE 'CC_ALV_01',
  428. *
  429. *      gs_layout    TYPE lvc_s_layo,
  430. *      gs_variant   TYPE disvariant,
  431. *      gt_toolbar   TYPE  ui_functions,
  432. *      t_rows       TYPE lvc_t_row,
  433. *      grid_01      TYPE REF TO cl_gui_alv_grid,
  434. *      t_fcat_01    type lvc_t_fcat,
  435. *      t_tab_01     TYPE STANDARD TABLE OF {TABLA_DEL_ALV}.
  436. **<--END_ALV
  437.  
  438. **<--END_TOP
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  447. *--[ Clase Definicion
  448. **-->BEG_CLS
  449.  
  450. **-->BEG_ALV
  451. *CLASS lcl_event_receiver_01 DEFINITION.
  452. *  PUBLIC SECTION.
  453. *    CLASS-METHODS:
  454. *      handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
  455. *        IMPORTING e_object e_interactive,
  456. *      handle_menu_button FOR EVENT menu_button OF cl_gui_alv_grid
  457. *        IMPORTING e_object e_ucomm,
  458. *      handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
  459. *        IMPORTING e_ucomm,
  460. *      handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
  461. *        IMPORTING e_row_id e_column_id.
  462. *
  463. *
  464. *  PRIVATE SECTION.
  465. *ENDCLASS.
  466. *
  467. *CLASS lcl_event_receiver_01 IMPLEMENTATION.
  468. *  METHOD handle_toolbar.
  469. *    DATA: ls_toolbar TYPE stb_button.
  470. *
  471. **    CLEAR ls_toolbar.
  472. **    MOVE 'BOT1' TO ls_toolbar-function.                     "#EC NOTEXT
  473. **    MOVE 0 TO ls_toolbar-butn_type.
  474. **    MOVE icon_financing TO ls_toolbar-icon.
  475. **    MOVE 'XXXXXXX' TO ls_toolbar-quickinfo.
  476. **    MOVE 'XXXXXXX' TO ls_toolbar-text.
  477. **    MOVE ' ' TO ls_toolbar-disabled.                        "#EC NOTEXT
  478. **    APPEND ls_toolbar TO e_object->mt_toolbar.
  479. *
  480. *  ENDMETHOD.
  481. *
  482. *  METHOD handle_menu_button.
  483. *    " perform soome operations
  484. *    CASE e_ucomm.
  485. *      WHEN 'DETAIL_MENU'.
  486. **         IF NOT <test>.
  487. **           CALL METHOD e_object->add_function
  488. **             EXPORTING
  489. **               fcode = 'XXXX'
  490. **               text  = text-002.
  491. **         ENDIF.
  492. *    ENDCASE.
  493. *  ENDMETHOD.
  494. *
  495. *    METHOD handle_user_command.
  496. *      REFRESH t_rows.
  497. *      grid_01->get_selected_rows( IMPORTING et_index_rows = t_rows ).
  498. *      grid_01->check_changed_data( ).
  499. *
  500. **      CASE e_ucomm.
  501. **        WHEN 'BOT1'. PERFORM ...
  502. **      ENDCASE.
  503. *    ENDMETHOD.
  504. *
  505. *  METHOD handle_hotspot_click.
  506. *
  507. **    READ TABLE t_tab_01 ASSIGNING FIELD-SYMBOL(<ls_s>)  INDEX e_row_id.
  508. *    CHECK sy-subrc = 0.
  509. *
  510. **    CASE e_column_id.
  511. **
  512. **      WHEN 'XXXXX'. ....
  513. **    ENDCASE.
  514. *
  515. *  ENDMETHOD.
  516. *
  517. *ENDCLASS.
  518. *
  519. * DATA: lcl_01 TYPE REF TO lcl_event_receiver_01.
  520. **<--END_ALV
  521.  
  522. **-->BEG_MSG
  523. *CLASS zcl_msg DEFINITION.
  524. *
  525. *  PUBLIC SECTION.
  526. *
  527. *    TYPES: BEGIN OF ty_msg,
  528. *             text  TYPE  char100sm,
  529. *             msgid TYPE  symsgid,
  530. *             msgty TYPE  symsgty,
  531. *             msgno TYPE  symsgno,
  532. *             msgv1 TYPE  symsgv,
  533. *             msgv2 TYPE  symsgv,
  534. *             msgv3 TYPE  symsgv,
  535. *             msgv4 TYPE  symsgv,
  536. *           END OF ty_msg.
  537. *
  538. *    DATA: t_msg TYPE STANDARD TABLE OF ty_msg.
  539. *
  540. *    METHODS: msg_add_sys IMPORTING iv_msgid TYPE symsgid
  541. *                                   iv_msgno TYPE symsgno
  542. *                                   iv_msgty TYPE symsgty
  543. *                                   iv_msgv1 TYPE symsgv OPTIONAL
  544. *                                   iv_msgv2 TYPE symsgv OPTIONAL
  545. *                                   iv_msgv3 TYPE symsgv OPTIONAL
  546. *                                   iv_msgv4 TYPE symsgv OPTIONAL,
  547. *      msg_add_txt IMPORTING iv_text  TYPE string
  548. *                            iv_msgty TYPE symsgty OPTIONAL,
  549. *      msg_display IMPORTING iv_popup TYPE boolean,
  550. *      msg_refresh,
  551. *      msg_check_error RETURNING VALUE(rv_result) TYPE boolean.
  552. *
  553. *ENDCLASS.                    "ZCL_MSG DEFINITION
  554. *
  555. *CLASS zcl_msg IMPLEMENTATION.
  556. *
  557. *  METHOD msg_check_error.
  558. *    DATA: l_msg          TYPE ty_msg.
  559. *
  560. *    READ TABLE t_msg WITH KEY msgty = 'E' TRANSPORTING NO FIELDS.
  561. *    IF sy-subrc = 0.
  562. *      rv_result = 'X'.
  563. *    ELSE.
  564. *      rv_result = ' '.
  565. *    ENDIF.
  566. *  ENDMETHOD.                    "msg_check_error
  567. *
  568. *  METHOD msg_refresh.
  569. *    REFRESH t_msg.
  570. *  ENDMETHOD.                    "msg_refresh
  571. *
  572. *  METHOD msg_display.
  573. *    TYPE-POOLS esp1.
  574. *    DATA: lt_message_tab TYPE esp1_message_tab_type,
  575. *          ls_message_tab TYPE LINE OF esp1_message_tab_type,
  576. *          l_msg          TYPE ty_msg,
  577. *          l_lineno       TYPE mesg-zeile.
  578. *    CHECK t_msg[] IS NOT INITIAL.
  579. *    l_lineno = lines( t_msg ).
  580. *    IF iv_popup = 'X' OR l_lineno > 1.
  581. *      LOOP AT t_msg INTO l_msg.
  582. *        IF l_msg-msgid IS INITIAL.
  583. **--[ Si es s&#65533;lo texto lo maquillamos
  584. *          l_msg-msgid = '00'.
  585. *          l_msg-msgno = '398'.
  586. *        ENDIF.
  587. *        MOVE-CORRESPONDING l_msg TO ls_message_tab.
  588. *        l_lineno              = l_lineno + 1.
  589. *        ls_message_tab-lineno = l_lineno.
  590. *        INSERT ls_message_tab INTO TABLE lt_message_tab.
  591. *      ENDLOOP.
  592. *      CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
  593. *        TABLES
  594. *          i_message_tab = lt_message_tab.
  595. *    ELSEIF iv_popup IS INITIAL OR l_lineno = 1.
  596. *      READ TABLE t_msg INTO l_msg INDEX  1.
  597. *      IF l_msg-msgid IS INITIAL.
  598. **--[ Si es s&#65533;Olo texto lo maquillamos
  599. *        l_msg-msgid = '00'.
  600. *        l_msg-msgno = '398'.
  601. *      ENDIF.
  602. *      MESSAGE ID l_msg-msgid TYPE l_msg-msgty NUMBER l_msg-msgno WITH l_msg-msgv1 l_msg-msgv2 l_msg-msgv3 l_msg-msgv4.
  603. *    ENDIF.
  604. *  ENDMETHOD.                    "msg_display
  605. *
  606. *  METHOD msg_add_txt.
  607. **--[ S&#65533;lo metemos texto sin importar c&#65533;digo
  608. *    DATA: l_msg    TYPE ty_msg,
  609. *          l_string TYPE string.
  610. *
  611. *    l_msg-msgv1 = l_string = l_msg-text = iv_text.
  612. *    l_msg-msgty = iv_msgty.
  613. *    if l_msg-msgty is INITIAL.
  614. *       l_msg-msgty = 'E'.
  615. *    endif.
  616. *    SHIFT l_string LEFT BY 50 PLACES.
  617. *    l_msg-msgv2 = l_string.
  618. *    INSERT l_msg INTO TABLE t_msg.
  619. *  ENDMETHOD.                    "msg_add_txt
  620. *
  621. *  METHOD msg_add_sys.
  622. **--[ Metemos todo el mensaje completo
  623. *    DATA: l_msg TYPE ty_msg.
  624. *    l_msg-msgid = iv_msgid .
  625. *    l_msg-msgno = iv_msgno .
  626. *    l_msg-msgty = iv_msgty .
  627. *    l_msg-msgv1 = iv_msgv1 .
  628. *    l_msg-msgv2 = iv_msgv2 .
  629. *    l_msg-msgv3 = iv_msgv3 .
  630. *    l_msg-msgv4 = iv_msgv4 .
  631. *    MESSAGE ID     iv_msgid TYPE l_msg-msgty
  632. *    NUMBER l_msg-msgno
  633. *    INTO   l_msg-text
  634. *    WITH   l_msg-msgv1
  635. *          l_msg-msgv2.
  636. *    INSERT l_msg INTO TABLE t_msg.
  637. *
  638. *  ENDMETHOD.                    "MSG_ADD
  639. *
  640. *ENDCLASS.                    "ZCL_MSG IMPLEMENTATION
  641. *
  642. *DATA: obj_msg TYPE REF TO zcl_msg.
  643. **<--END_MSG
  644. **<--END_CLS
  645.  
  646.  
  647.  
  648. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  649. *--[ Source Eventos
  650. **-->BEG_EVE
  651. *at SELECTION-SCREEN OUTPUT.
  652. * perform eve_selection_screen_output.
  653. *
  654. *INITIALIZATION.
  655. * perform eve_initialization.
  656. *
  657. *START-OF-SELECTION.
  658. *  perform eve_start_of_selection.
  659. *
  660. *end-of-selection.
  661. *  perform eve_end_of_selection.
  662. **<--END_EVE
  663.  
  664.  
  665.  
  666.  
  667.  
  668. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  669. *--[ Source Screen
  670. **-->BEG_SCR
  671. *SELECTION-SCREEN begin of BLOCK b01 WITH FRAME. "Title TEXT-T01
  672. *
  673. **Select-OPTIONS: s_... for ....,
  674. **                s_... for .....
  675. *
  676. *PARAMETERS: p_test AS CHECKBOX DEFAULT ' '.
  677. *
  678. *SELECTION-SCREEN end of BLOCK b01.
  679.  
  680. **-->BEG_ALV
  681. *MODULE pbo_100 OUTPUT.
  682. *  PERFORM pbo_0100.
  683. *ENDMODULE.
  684. *
  685. *MODULE pai_100 INPUT.
  686. *  PERFORM pai_0100.
  687. *ENDMODULE.
  688. **<--END_ALV
  689.  
  690. **<--END_SCR
  691.  
  692.  
  693.  
  694.  
  695.  
  696. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  697. *--[ Source Procedimientos
  698. **-->BEG_FRM
  699.  
  700. **-->BEG_ALV
  701. ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  702. **--[ Rutinas ALV
  703. *FORM pbo_0100.
  704. *  SET PF-STATUS 'MAIN'.
  705. *  SET TITLEBAR 'TIT01' WITH TEXT-t01.
  706. *
  707. *  IF cc_01 IS INITIAL.
  708. *
  709. *    cc_01   = NEW cl_gui_custom_container( container_name = cm_01 ).
  710. *    grid_01 = NEW cl_gui_alv_grid( i_parent = cc_01 ).
  711. *
  712. *    gs_layout-stylefname = 'CELLSTYLES'.
  713. *
  714. *    gs_layout-cwidth_opt = 'X'.
  715. *    gs_layout-zebra      = abap_true.
  716. *    gs_variant-report    = sy-tcode. " o sy-repid.
  717. *
  718. *    perform alv_get_catalog USING c_st_alv_01 CHANGING t_fcat_01.
  719. *    perform alv_set_events using grid_01.
  720. *
  721. *    grid_01->set_table_for_first_display(
  722. *      EXPORTING
  723. *         i_SAVE              = 'A'
  724. *        is_variant           = gs_variant
  725. *        is_layout            = gs_layout
  726. *        it_toolbar_excluding = gt_toolbar
  727. *      CHANGING
  728. *        it_fieldcatalog      = t_fcat_01
  729. *        it_outtab            = t_tab_01 ).
  730. *
  731. *      grid_01->set_ready_for_input( i_ready_for_input = '1' ).
  732. *      grid_01->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_modified ).
  733. *      grid_01->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_enter ).
  734. *   endif.
  735. *
  736. *endform.
  737. *
  738. *form alv_set_events USING p_grid_01 TYPE REF TO cl_gui_alv_grid.
  739. *    CREATE OBJECT lcl_01.
  740. *    SET HANDLER lcl_01->handle_toolbar       FOR p_grid_01.
  741. *    SET HANDLER lcl_01->handle_user_command  FOR p_grid_01.
  742. *    SET HANDLER lcl_01->handle_hotspot_click FOR p_grid_01.
  743. *endform.
  744. *
  745. *form alv_get_catalog using p_structure type DD02L-TABNAME
  746. *                     CHANGING p_fcat type lvc_t_fcat.
  747. *
  748. *    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
  749. *      EXPORTING
  750. *        i_structure_name       = p_structure
  751. *        i_buffer_active        = abap_false
  752. *        i_bypassing_buffer     = abap_true
  753. *      CHANGING
  754. *        ct_fieldcat            = p_fcat[]
  755. *      EXCEPTIONS
  756. *        inconsistent_interface = 1
  757. *        program_error          = 2
  758. *        OTHERS                 = 3.
  759. *
  760. **   LOOP AT t_fcat_01 ASSIGNING FIELD-SYMBOL(<f>).
  761. **      CASE <f>-fieldname.
  762. **        WHEN 'XXXX'.
  763. **          <f>-scrtext_s =
  764. **          <f>-scrtext_m =
  765. **          <f>-coltext   =
  766. **          <f>-scrtext_l = TEXT-c01.
  767. **      endcase.
  768. **    endloop.
  769. *
  770. *endform.
  771. *
  772. *FORM pai_0100.
  773. *  DATA(l_okcode) = g_okcode.
  774. *  CLEAR g_okcode.
  775. *
  776. *  REFRESH t_rows.
  777. *  grid_01->get_selected_rows( IMPORTING et_index_rows = t_rows ).
  778. *  grid_01->check_changed_data( ).
  779. *  CASE l_okcode.
  780. **    WHEN 'BOTON01'. PERFORM ...
  781. **    WHEN 'BOTON02'. PERFORM ...
  782. *    WHEN 'BACK'.    PERFORM exit_program.
  783. *    WHEN 'SAVE'.    PERFORM data_save.
  784. *  ENDCASE.
  785. *ENDFORM.
  786. *
  787. *FORM exit_program.
  788. *      cc_01->free( ).
  789. *      FREE: cc_01.
  790. *      CLEAR: cc_01, grid_01.
  791. *      LEAVE TO SCREEN 0.
  792. *endform.
  793. *
  794. *form data_save.
  795. **--[ Nothing To Do
  796. *endform.
  797. **<--END_ALV
  798. ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  799. **--[ Rutinas de Control
  800.  
  801.  
  802. *form eve_selection_screen_output.
  803. **--[ Nothing To Do
  804. *endform.
  805. *
  806. *form eve_initialization.
  807. **--[ Nothing To Do
  808. **-->BEG_MSG
  809. *   obj_msg = new zcl_msg( ). "Creamos objeto de mensajes
  810. **<--END_MSG
  811. *endform.
  812. *
  813. *form eve_start_of_selection.
  814. *    perform data_check.
  815. *    perform data_load.
  816. *endform.
  817. *
  818. *form eve_end_of_selection.
  819. *  perform Data_list.
  820. *  perform data_errors.
  821. *endform.
  822. *
  823. *form data_list.
  824. **--[ Nothing To Do
  825. **-->BEG_ALV
  826. *   call screen '0100'.
  827. **<--END_ALV
  828. *endform.
  829. *
  830. *form data_errors.
  831. **--[ Nothing To Do
  832. *endform.
  833. *
  834. *form data_check.
  835. **--[ Nothing To Do
  836. *endform.
  837. *
  838. *form data_load.
  839. **--[ Nothing To Do
  840. *endform.
  841.  
  842. **-->BEG_BI
  843. *form SAMPLE_call_transaction.
  844. *
  845. *data: t_BDCDATA type STANDARD TABLE OF BDCDATA,
  846. *      st_options type CTU_PARAMS,
  847. *      t_messages type STANDARD TABLE OF BDCMSGCOLL.
  848. *
  849. *  ST_options-DISMODE = 'A'.
  850. *
  851. *  t_BDCDATA = VALUE #( ( PROGRAM   = ''
  852. *                         DYNPRO    = ''
  853. *                         DYNBEGIN  = ''
  854. *                         FNAM      = ''
  855. *                         FVAL      = '' )
  856. *                     ).
  857. *  call transaction 'XXXX' USING t_BDCDATA OPTIONS FROM ST_options MESSAGES INTO T_MESSAGES.
  858. *
  859. *
  860. *endform.
  861. **<--END_BI
  862.  
  863. **-->BEG_SF
  864. *FORM sample_smartform using p_formulario type tdsfname.
  865. *  DATA: lv_smf_funcion          TYPE rs38l_fnam,
  866. *        ls_control_parameters   TYPE ssfctrlop,
  867. *        ls_output_options       TYPE ssfcompop,
  868. *        ls_job_output_info      TYPE ssfcrescl,
  869. *        ls_document_output_info TYPE ssfcrespd,
  870. *        ls_job_output_options   TYPE ssfcresop,
  871. *        gt_pdf_table            TYPE rcl_bag_tline,
  872. *        gv_pdf_fsize            TYPE  i.
  873. *
  874. *  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  875. *    EXPORTING
  876. *      formname           = p_formulario
  877. *    IMPORTING
  878. *      fm_name            = lv_smf_funcion
  879. *    EXCEPTIONS
  880. *      no_form            = 1
  881. *      no_function_module = 2
  882. *      OTHERS             = 3.
  883. *  IF sy-subrc EQ 0.
  884. **--[ Borrado de buffer de textos estándar
  885. *    CALL FUNCTION 'INIT_LOAD_TEXT_BUFFER'
  886. *      EXPORTING
  887. *        excl_name = 'HELLO' "<- Para que no lo encuentre
  888. *      EXCEPTIONS
  889. *        not_found = 1
  890. *        OTHERS    = 2.
  891. *
  892. *    ls_control_parameters-preview = abap_true.
  893. *    ls_control_parameters-no_dialog = abap_true.
  894. *    ls_control_parameters-langu = sy-langu.
  895. *    ls_control_parameters-getotf = abap_true.
  896. *
  897. *    ls_output_options-tddest = 'LOCL'.
  898. *    ls_output_options-tdnoprint = abap_true.
  899. *
  900. *    CALL FUNCTION lv_smf_funcion
  901. *      EXPORTING
  902. *        control_parameters   = ls_control_parameters
  903. *        output_options       = ls_output_options
  904. *        user_settings        = space
  905. **       (... parametros de SF ...)
  906. *      IMPORTING
  907. *        document_output_info = ls_document_output_info
  908. *        job_output_info      = ls_job_output_info
  909. *        job_output_options   = ls_job_output_options
  910. *      EXCEPTIONS
  911. *        formatting_error     = 1
  912. *        internal_error       = 2
  913. *        send_error           = 3
  914. *        user_canceled        = 4
  915. *        OTHERS               = 5.
  916. *    IF sy-subrc EQ 0.
  917. *
  918. *      CALL FUNCTION 'CONVERT_OTF'
  919. *        EXPORTING
  920. *          format                = 'PDF'
  921. *        IMPORTING
  922. *          bin_filesize          = gv_pdf_fsize
  923. *        TABLES
  924. *          otf                   = ls_job_output_info-otfdata[]
  925. *          lines                 = gt_pdf_table " --> Aquí estará el PDF
  926. *        EXCEPTIONS
  927. *          err_max_linewidth     = 1
  928. *          err_format            = 2
  929. *          err_conv_not_possible = 3
  930. *          OTHERS                = 4.
  931. *
  932. *    ENDIF.
  933. *
  934. *  ENDIF.
  935. *ENDFORM.
  936. **<--END_SF
  937.  
  938. **<--END_FRM