manual alv
TRANSCRIPT
document.doc
MANUAL REPORTING ALV
Página 1 de 32
Manual Reporting ALV
Página / 2(32)
Fecha / 15/04/2023
1 INTRODUCCIÓN........................................................................................................................................3
2 PASOS BÁSICOS PARA CREAR UNA ALV........................................................................................4
3 FAMILIARIZARSE CON LAS ALV......................................................................................................6
3.1 REUSE_ALV_LIST_DISPLAY REUSE_ALV_GRID_DISPLAY........................................103.2 CAMPOS DEL CATALOGO.....................................................................................................................12
4 CASOS ESPECIALES EN LISTADOS ALV........................................................................................13
4.1 SIN ESPECIFICACIÓN DE LOS CAMPOS DEL CATÁLOGO.......................................................................134.2 ALV CON EVENTOS............................................................................................................................154.3 ALV CON LOGOTIPO...........................................................................................................................164.4 ALV CON BOTONES NO STANDARD....................................................................................................174.5 ALV JERARQUICO...............................................................................................................................184.6 4.6 ALV DRAG AND DROP.................................................................................................................19
5 CARGA DEL LOGO EN EL SISTEMA...............................................................................................27
6 REFERENCIAS.......................................................................................................................................30
Manual Reporting ALV
Página / 3(32)
Fecha / 15/04/2023
1 Introducción.
El ALV Grid Control (ALV = SAP List Viewer) es una herramienta flexible para mostrar listados. Esta herramienta, además de visualizar los datos, permite múltiples permite operaciones con él (suma, agrupación ...) y además se puede adaptar según requerimientos (visulización de determinadas columnas, ...).
La herramienta del ALV es una nueva funcionalidad que ya se puede utilizar desde la versión 4.0. Es a partir de esta versión cuando empieza a cobrar importancia y se le van añadiendo funcionalidades y nuevas posibilidades. En la versión 4.6 además de las llamadas a las funciones, también se incluyen posibilidad de desarrollo a través de objetos. (llamadas a métodos).
En general, estas son las posibilidades que ofrece el ALV:
Navegación Posibilidad de navigación a través de la lista: visualización de la primera, ultima columna, desplazamiento horizontal, fijación de columnas.
DetallePosibilidad de ver el detalle de una línea determinada en otra pantalla
OrdenaciónSe puede ordenar el listado tanto descendente como ascendentemente por una o varias columnas
SelecciónSe puede marcar/desmarcar columnas Algunas filas pueden indicar el status (semáforos, iconos). Si hay filas subordinadas, pueden heredar este indicador.
FiltrosSe pueden indicar filtros que muestren aquellas filas que cumplan uno ó más criterios.
Totalización de valoresTotalizar valoresCrear subtotales (a varios niveles)Mostar sólo Totales /Subtotales
Visualización de estadoInformación del estado de la lista: columnas a partir de las cuales se ha realizado la ordenación, subtotales, filtros de selección, registros seleccionados, registros ocultos por los filtros, totales mostrados.
ColumnasOptimización del ancho de la columnaFijación de columnas
Variantes de visualizaciónSe permite grabar las opciones de visualización seleccionadas para un posterior uso.
Manual Reporting ALV
Página / 4(32)
Fecha / 15/04/2023
Lista BásicaPosibilidad de volver a la lista inicial (si se han seleccionado variantes).
BúsquedaPosibilidad de buscar en los datos mostrados
ImprimirPosibilidad de imprimir la lista
2 Pasos básicos para crear una ALV
1. Llenar un catálogo con las columnas del listado: (INITIALIZE_FIELDCAT)
2. Crear una tabla de eventos:Eventos como TOP_OF_PAGE, AT USER COMMAND. Se indica el
evento y el perform que se ejecutará (llamadas dinámicas) (BUILD_EVENTTAB) 3. Agregar textos adicionales al reporte - (Opcional): (BUILD_COMMENT)
4. Inicializar las variantes de visualización del listado: (INITIALIZE_VARIANT) 5. Extraer la información de la base de datos: (GET_*) 6. Especificar las características del layout.
Formato de salida de pantalla (BUILD_LAYOUT)
7. Especificar las características de impresión: (BUILD_PRINT)
8. Mostrar el resultado: Función REUSE_ALV_LIST_DISPLAY
Es conveniente, al igual que existe un include para Batch Inputs, que se tenga un include para los reports de ALV ya que así se agiliza la codificación. (Ver fichero ZINCLUDE_ALV.txt). Las ventajas de la utilización del include son la reutilización de código; uniformidad en la codificación ....
Manual Reporting ALV
Página / 5(32)
Fecha / 15/04/2023
************************************************************************* LOGICA DEL PROGRAMA*************************************************************************---------------------------------------------------------------------** FORM MAIN_STATEMENTS ** Este código deberá ser insertado en el programa principal*---------------------------------------------------------------------**form main_statements.* Declarar el parámetro P_VARI. Si no se utiliza, ocultarlo con* NO-DISPLAY, pero debe existir* parameters: p_vari like disvariant-variant. " ALV Variant
** Se debe añadir la siguiente línea después de la declaración de datos** y parámetros** INCLUDE ZIMPU002.
** Incluir además después de la declaración de las variables/parámetros,** las siguientes líneas en el evento INITIALIZATION.* initialization.* d_repname = sy-repid.* Si se quiere cambiar la barra de herramientas* perform f_pf_status_set using I_extab.* Para cada columna de datos se deberá llamar a este Perform indicando* las cualidades del campo.* perform f_initialize_fieldcat using i_fieldtab[]* r_fieldcat.* Se construye la tabla de eventos con los performs que se ejecutarán en* cada evento* perform f_build_eventtab using i_events[].
* Se indican los textos del listado* perform f_build_comment using i_heading[].* Se inicializa la variante de visualización* perform f_initialize_variant using p_vari.* Si se usa el parámetro P_VARI (ALV Variant), se debe incluir las* siguientes líneas*at selection-screen on value-request for p_vari.* perform f_f4_for_variant.
*at selection-screen.* Se comprueba variante indicada en la pantalla de selección* perform f_pai_of_selection_screen using p_vari.
Manual Reporting ALV
Página / 6(32)
Fecha / 15/04/2023
* En el evento "END-OF-SELECTION", añadir las siguientes líneas*end-of-selection.* perform f_build_layout using r_layout.* perform f_build_print using r_prints.* perform f_write_using_alv.
*** You also have to create the following forms: (you can find samples*** in this program)* INITIALIZE_FIELDCAT* USER_COMMAND (only if you are creating a STATUS)* WRITE_USING_ALV*endform.
3 Familiarizarse con las ALV
En este ejemplo simple se muestra un listado de posiciones de pedidos de compras.
REPORT zalv_simple. ***********************************************
1. Definición estructuras y tablas necesaria.***********************************************
Type Pool donde vienen definidas todas las estructuras y tablasTYPE-POOLS: slis. Catálogo de campos: contiene la descripción de los campos de
salidaDATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE, Especificaciones de la disposición de la lista: descripción de la
estructura de salidags_layout TYPE slis_layout_alv, Nombre del programag_repid LIKE sy-repid.
Manual Reporting ALV
Página / 7(32)
Fecha / 15/04/2023
***************************************************2. Definición de la tabla con los datos de salida***************************************************
TYPES: BEGIN OF st_output.INCLUDE STRUCTURE ekpo.TYPES: END OF st_output.DATA: gt_output TYPE STANDARD TABLE OF st_output WITH HEADER LINE.
INITIALIZATION.g_repid = sy-repid.
*****************************************************3. Toma de datos*****************************************************START-OF-SELECTION. PERFORM toma_datos.
*****************************************************
FORM toma_datos.
Los datos deben guardarse en la tabla interna de salidaSELECT * FROM ekpoUP TO 100 ROWSINTO TABLE gt_output.ENDFORM. " TOMA_DATOS
Manual Reporting ALV
Página / 8(32)
Fecha / 15/04/2023
4. Definición estructura y formato de salida***************************************************** PERFORM init_fieldcat.
PERFORM init_layout.
*****************************************************5. Mostrar listado*****************************************************
FORM init_fieldcat.* Mediante esta tabla vamos a definir los campos que queremos mostrar* en el listado de salida.gt_fieldcat-fieldname = 'EBELN'.gt_fieldcat-ref_tabname = 'EKPO'.APPEND gt_fieldcat. CLEAR gt_fieldcat.gt_fieldcat-fieldname = 'EBELP'.gt_fieldcat-ref_tabname = 'EKPO'.APPEND gt_fieldcat. CLEAR gt_fieldcat.gt_fieldcat-fieldname = 'MATNR'.gt_fieldcat-ref_tabname = 'EKPO'.APPEND gt_fieldcat. CLEAR gt_fieldcat.gt_fieldcat-fieldname = 'WERKS'.gt_fieldcat-ref_tabname = 'EKPO'.APPEND gt_fieldcat. CLEAR gt_fieldcat.gt_fieldcat-fieldname = 'MENGE'.gt_fieldcat-ref_tabname = 'EKPO'.APPEND gt_fieldcat. CLEAR gt_fieldcat.gt_fieldcat-fieldname = 'MEINS'.gt_fieldcat-ref_tabname = 'EKPO'.APPEND gt_fieldcat. CLEAR gt_fieldcat.ENDFORM.
FORM init_layout.* Mediante esta estructura se puede definir el formato de salidags_layout-zebra = 'X'.gs_layout-f2code = '&ETA'.gs_layout-detail_popup = 'X'.ENDFORM.
Manual Reporting ALV
Página / 9(32)
Fecha / 15/04/2023
PERFORM listado.
FORM listado.CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTING* I_INTERFACE_CHECK = ' '* I_BYPASSING_BUFFER =* I_BUFFER_ACTIVE = ' 'i_callback_program = g_repid* I_CALLBACK_PF_STATUS_SET = ' '* I_CALLBACK_USER_COMMAND = ' '* I_STRUCTURE_NAME =is_layout = gs_layoutit_fieldcat = gt_fieldcat[]* IT_EXCLUDING =* IT_SPECIAL_GROUPS =* IT_SORT =* IT_FILTER =* IS_SEL_HIDE =* I_DEFAULT = 'X'* I_SAVE = ' '* IS_VARIANT =* IT_EVENTS =* IT_EVENT_EXIT =* IS_PRINT =* IS_REPREP_ID =* I_SCREEN_START_COLUMN = 0* I_SCREEN_START_LINE = 0* I_SCREEN_END_COLUMN = 0* I_SCREEN_END_LINE = 0* IMPORTING* E_EXIT_CAUSED_BY_CALLER =* ES_EXIT_CAUSED_BY_USER =TABLESt_outtab = gt_outputEXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.ENDFORM. " LISTADO
Manual Reporting ALV
Página / 10(32)
Fecha / 15/04/2023
3.1 REUSE_ALV_LIST_DISPLAY REUSE_ALV_GRID_DISPLAY
Con la función REUSE_ALV_LIST_DISPLAY se muestran los datos como un listado. (Programa Z_CURSOALV001)
Manual Reporting ALV
Página / 11(32)
Fecha / 15/04/2023
Con la función REUSE_ALV_GRID_DISPLAY se muestran los datos en una tabla (con su campos), es decir, muestra una rejilla. (Programa Z_CURSOALV002)
Manual Reporting ALV
Página / 12(32)
Fecha / 15/04/2023
3.2 Campos del catalogo.Los campos del catálogo indican propiedades de cada dato a mostrar, estas propiedades varían de una versión a otra (la versión superior siempre tendrá las propiedades de versiones anteriores).
Nota: En esta caso se trata de la versión 4.6C (la más actual) por lo que alguna de estas propiedades puede que no estén disponibles en versiones anteriores.
Nombre Campo Referencia DescripciónROW_POS SY-CUROW output in rowCOL_POS SY-CUCOL position of the column. Indica el número de columna
donde aparecerá él campo en el listado.FIELDNAME SLIS_FIELDNAME Indica el nombre del campo de la tabla interna que hace
referencia.TABNAME SLIS_TABNAME CURRENCY(5) C Indica el tipo de moneda para el campo.CFIELDNAME SLIS_FIELDNAME field with currency unitCTABNAME SLIS_TABNAME and tableifieldname slis_fieldname initial columnQUANTITY(3) C QFIELDNAME SLIS_FIELDNAME field with quantity unitQTABNAME SLIS_TABNAME and tableROUND I round in write statementEXPONENT(3) C exponent for floatsKEY(1) C Indica si este campo es clave. Aparecerá en azul y será
fija. ICON(1) C Indica que se puede meter un icono en este campo.SYMBOL(1) C as symbolCHECKBOX(1) C Indica que el campo será de tipo checkbox.JUST(1) C (R)ight (L)eft (C)ent.LZERO(1) C leading zeroNO_SIGN(1) C Indica que no aparecerá signo.NO_ZERO(1) C Indica que no aparecerán cerosno_convext(1) C EDIT_MASK SLIS_EDIT_MASK Indica que se formateará el campo con la mascara
introducida.EMPHASIZE(4) C emphasizeFIX_COLUMN(1) C Indica que se quedara la columna fija.DO_SUM(1) C Indica que se pude realizar sumas.NO_OUT(1) C (O)blig.(X)no outTECH(1) C technical fieldOUTPUTLEN DD03P-OUTPUTLEN Indica la longitud de salida del campoOFFSET DD03P-INTLEN offsetSELTEXT_L DD03P-SCRTEXT_L Texto largo campo.SELTEXT_M DD03P-SCRTEXT_M Texto medio del campo.SELTEXT_S DD03P-SCRTEXT_S Texto corto del campo.
Manual Reporting ALV
Página / 13(32)
Fecha / 15/04/2023
Nombre Campo Referencia DescripciónDDICTXT(1) C (S)hort (M)iddle (L)ongROLLNAME DD03P-ROLLNAME DATATYPE DD03P-DATATYPE Indica el tipo de dato del campo.INTTYPE DD03P-INTTYPE INTLEN DD03P-INTLEN Indica la longitud de entrada del campo.LOWERCASE DD03P-LOWERCASE Indica que el campo aparecerá en minúsculas.REF_FIELDNAME DD03P-FIELDNAME REF_TABNAME DD03P-TABNAME ROUNDFIELDNAME SLIS_FIELDNAME ROUNDTABNAME SLIS_TABNAME DECIMALSFIELDNAME SLIS_FIELDNAME DECIMALSTABNAME SLIS_TABNAME DECIMALS_OUT(6) C decimals in write statementTEXT_FIELDNAME SLIS_FIELDNAME REPTEXT_DDIC DD03P-REPTEXT Indica el texto que aparecerá en la columna.DDIC_OUTPUTLEN DD03P-OUTPUTLEN KEY_SEL(1) C field not obligatoryNO_SUM(1) C Indica que no permite realizar sumas.SP_GROUP(4) C group specificationREPREP(1) C selection for rep/repINPUT(1) C Indica que el campo es de salida.edit(1) C internal use onlyHOTSPOT(1) C Aparecerá el campo tipo hipervínculo(Icono mano).
4 Casos Especiales en Listados ALV.
4.1 Sin especificación de los campos del catálogo.Primero cargaremos en la tabla interna los datos que vamos a visualizar.
Después cargaremos el catalogo con los campos necesarios para nosotros. Aquí tenemos dos maneras diferentes de realizarlo.
Esto quiere decir, visualizar todos los campos de una tabla. Para ello existe una función de SAP que nos carga el catalogo entero indicándole la tabla de B.D. que nosotros deseamos. Esta función es REUSE_ALV_FIELDCATALOG_MERGE.
Una vez cargado el catalogo, llamaríamos a la función del ALV, que es la siguiente: REUSE_ALV_GRID_DISPLAY.
Manual Reporting ALV
Página / 14(32)
Fecha / 15/04/2023
Ejemplo practico.
TYPE-POOLS slis.DATA: gt_fieldcat TYPE slis_t_fieldcat_alv, ls_fieldcat TYPE slis_fieldcat_alv, gs_layout TYPE slis_layout_alv, g_repid LIKE sy-repid.
Data: Begin of i_vbap occurs 0. Include structure vbap.Data: End of i_vbap. Clear i_vbap. Refresh i_vbap.
* Cargamos la tabla interna Select * from vbap into table i_vbap.
* Cargamos el catalogo Call function 'REUSE_ALV_FIELDCATALOG_MERGE' exporting i_structure_name = 'VBAP' i_bypassing_buffer = 'X' changing ct_fieldcat = gt_fieldcat exceptions inconsistent_interface = 1 program_error = 2 others = 3.
* Borramos el mandante del catalogo Delete gt_fieldcat where fieldname = 'MANDT'.
* Llamamos a la función que muestra el listado en formato ALV g_repid = sy-repid.
call function 'REUSE_ALV_GRID_DISPLAY' exporting i_callback_program = g_repid is_layout = gs_layout it_fieldcat = gt_fieldcat i_save = 'A' tables t_outtab = i_vbap exceptions program_error = 1 others = 2.
Manual Reporting ALV
Página / 15(32)
Fecha / 15/04/2023
4.2 ALV con Eventos.Se puede indicar cuál es el código que se ejecutará en determinados eventos del
listado. Este código irá en performs que se indicarán en una tabla de eventos. La llamada a estos performs se realiza en tiempo de ejecución.
Para definir la tabla de eventos es útil la función REUSE_ALV_EVENTS_GET, ya que devuelve una tabla interna con los eventos que se pueden ejecutar según el tipo de listado. El tipo de listado puede ser 0 (Lista sencilla), 1 (Jerarquía secuencial), 2 (Lista de bloques sencilla) y 3 (Lista de bloques en jerarquía secuencial).
Por ejemplo para el tipo 0 (Lista sencilla), los eventos que devuelve son:
CALLER_EXIT USER_COMMAND TOP_OF_PAGE TOP_OF_COVERPAGE END_OF_COVERPAGE FOREIGN_TOP_OF_PAGE FOREIGN_END_OF_PAGE PF_STATUS_SET
Manual Reporting ALV
Página / 16(32)
Fecha / 15/04/2023
LIST_MODIFY TOP_OF_LIST END_OF_PAGE END_OF_LIST AFTER_LINE_OUTPUT BEFORE_LINE_OUTPUT REPREP_SEL_MODIFY SUBTOTAL_TEXT
Para indicar el código que se debe ejecutar simplemente hay que introducir en esta tabla interna en la línea que le corresponda el nombre del perform (en el campo FORM). Los eventos están definidos como constantes en el INCLUDE SLIS.
4.3 ALV con Logotipo.Existe la posibilidad de incluir una cabecera al ALV, introduciendo en ella un titulo,
logo... .
Para ello a la hora de declarar la función del ALV, en el parámetro i_callback_html_top_of_page, se introduce el nombre de la rutina que se ejecutará para generar la cabecera, titulo, logo... .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = g_repid i_callback_html_top_of_page = 'F_HTML_TOP_OF_PAGE' is_layout = gs_layout it_fieldcat = gt_fieldcat i_save = 'A' TABLES t_outtab = i_vbap EXCEPTIONS program_error = 1 OTHERS = 2.
FORM f_html_top_of_page USING r_top TYPE REF TO cl_dd_document.
DATA: a_logo TYPE REF TO cl_dd_area. DATA: text1 TYPE sdydo_text_element. DATA: text2 TYPE sdydo_text_element.
CLEAR : text1, text2.
* Se reserva un 20 por ciento para el logo en la cabecera CALL METHOD r_top->vertical_split EXPORTING split_area = r_top split_width = '80%' IMPORTING right_area = a_logo.
Manual Reporting ALV
Página / 17(32)
Fecha / 15/04/2023
* Una linea en blanco CALL METHOD r_top->new_line.
* Titulo que aparecera en la cabecera CALL METHOD r_top->add_text EXPORTING text = text1 sap_style = cl_dd_area=>heading.
* Una linea en blanco CALL METHOD r_top->new_line.
* Titulo que aparecera en la cabecera CALL METHOD r_top->add_text EXPORTING text = text2 sap_style = cl_dd_area=>heading.
* Insertamos el logo (Ver punto 7) CALL METHOD a_logo->add_picture EXPORTING picture_id = 'LOGO_CROMION'.
ENDFORM.
4.4 ALV con botones no standard.Entre las muchas posibilidades que tiene el ALV, existe una muy interesante y muy
utilizada, que es la introducción de botones nuevos al status del ALV.Para ello se suele copiar el status standard, que se copia del programa demo BCALV_FULLSCREEN_DEMO, y añadirle los botones deseados. Una vez realizado esto, se crea la rutina para el status y otra para el user_command, para controlar las acciones a realizar según el botón pulsado(los nuevos incluidos por nosotros).
De esta manera habría que generar el código:
FORM status_9000 USING p_tabla TYPE slis_t_extab..
SET PF-STATUS '9000_001'.
ENDFORM. " STATUS_9000
FORM user_command_9000 USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN 'EXIT'.
Manual Reporting ALV
Página / 18(32)
Fecha / 15/04/2023
WHEN 'CANC'.
WHEN 'BACK'.
WHEN 'OPT1'.
ENDCASE.
ENDFORM. " USER_COMMAND_9000
Y en la llamada a la función introduciríamos dos parámetros más a la función. call function 'REUSE_ALV_GRID_DISPLAY' exporting i_callback_program = g_repid i_callback_pf_status_set = lv_callback_status_set i_callback_user_command = lv_callback_user_command i_callback_html_top_of_page = 'F_HTML_TOP_OF_PAGE' is_layout = ls_layout it_fieldcat = gt_fieldcat i_save = 'A' tables t_outtab = i_vbap exceptions program_error = 1 others = 2.
Donde : lv_callback_status_set = 'STATUS_9000' y lv_callback_user_command = 'USER_COMMAND_9000'.
4.5 ALV jerarquicoSe utiliza la función REUSE_ALV_HIERSEQ_LIST_DISPLAY. A diferencia de los listados simples, se deben definir 2 tablas de datos: los datos de cabecera y los datos de posiciones, además se debe indicar cuál es la relación entre los datos de cabecera y los datos de posiciones.
Ver programa Z_CURSOALV005
Manual Reporting ALV
Página / 19(32)
Fecha / 15/04/2023
4.6 ALV Drag and Drop
Para hacer un ALV Drag and Drop, tenemos q realizar una serie de pasos:
1.- Tenemos que crear una dynpro en nuestro programa, e insertar un custom control:
Ese custom control sera el q contenga nuestro ALV Drag & Drop.
2.- A Continuacion, en nuestro programa creamos una clase aplicación que tendra los eventos de drag y drop, y una clase drag and drop, donde guardaremos la linea q vamos a mover.:
*&---------------------------------------------------------------------**&---------------------------------------------------------------------**& Class APPLICATION*&---------------------------------------------------------------------** Text*----------------------------------------------------------------------*CLASS application DEFINITION.
PUBLIC SECTION.* methods for D&D handling METHODS: handle_grid_drag FOR EVENT ondrag OF cl_gui_alv_grid
Manual Reporting ALV
Página / 20(32)
Fecha / 15/04/2023
IMPORTING es_row_no e_column e_dragdropobj, handle_grid_drop FOR EVENT ondrop OF cl_gui_alv_grid IMPORTING e_row e_column e_dragdropobj, handle_grid_drop_complete FOR EVENT ondropcomplete OF cl_gui_alv_grid IMPORTING e_row e_column e_dragdropobj.
ENDCLASS. "APPLICATION
*---------------------------------------------------------------------** CLASS drag_drop_object DEFINITION*---------------------------------------------------------------------** ........ **---------------------------------------------------------------------*CLASS drag_drop_object DEFINITION.
PUBLIC SECTION. DATA: wa_test LIKE LINE OF gt_outtab, index TYPE i.
ENDCLASS. "DRAG_DROP_OBJECT
*---------------------------------------------------------------------** CLASS application IMPLEMENTATION*---------------------------------------------------------------------** ........ **---------------------------------------------------------------------*CLASS application IMPLEMENTATION.
* implement what should happen when sth. will be dragged METHOD handle_grid_drag.
DATA: data_object TYPE REF TO drag_drop_object, help_row LIKE LINE OF i_mcha.
READ TABLE i_mcha INTO help_row INDEX es_row_no-row_id.
CREATE OBJECT data_object.
MOVE es_row_no-row_id TO data_object->index.
READ TABLE i_mcha INTO data_object->wa_test INDEX es_row_no-row_id.
e_dragdropobj->object = data_object.
ENDMETHOD. "handle_grid_drag
* implement what should happen when sth. will be dropped METHOD handle_grid_drop.
DATA: data_object TYPE REF TO drag_drop_object, drop_index TYPE i, help_row_2 LIKE LINE OF gt_outtab.
CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
data_object ?= e_dragdropobj->object. DELETE i_mcha INDEX data_object->index. INSERT data_object->wa_test INTO i_mcha INDEX e_row-index. IF e_dragdropobj->effect = cl_dragdrop=>move.
Manual Reporting ALV
Página / 21(32)
Fecha / 15/04/2023
ELSEIF e_dragdropobj->effect = cl_dragdrop=>copy. ENDIF.
ENDCATCH.
ENDMETHOD. "handle_grid_drop
METHOD handle_grid_drop_complete.
CALL METHOD grid->refresh_table_display.
IF sy-subrc <> 0. CALL METHOD e_dragdropobj->abort. ENDIF.
ENDMETHOD. "handle_grid_drop_complete
ENDCLASS. "application
3.- Para obtener el catalogo utilizamos el siguiente codigo:
DATA : d_cat TYPE slis_t_fieldcat_alv. DATA : r_cat TYPE LINE OF slis_t_fieldcat_alv.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING* I_PROGRAM_NAME =* I_INTERNAL_TABNAME = i_structure_name = 'MCHA'* I_CLIENT_NEVER_DISPLAY = 'X'* I_INCLNAME =* I_BYPASSING_BUFFER =* I_BUFFER_ACTIVE = CHANGING ct_fieldcat = d_cat EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3.
LOOP AT d_cat INTO r_cat. MOVE-CORRESPONDING r_cat TO ls_fieldcat. ls_Fieldcat-hotspot = 'X'. Ls_Fieldcat-reptext = r_cat-reptext_ddic APPEND ls_fieldcat TO d_fieldcat. ENDLOOP. CALL SCREEN '9000'.
ENDFORM.
4.- Finalmente creamos los objetos applicacion, drag and drop y demas:
*&---------------------------------------------------------------------**& Form F_CREAR_OBJETOS*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM f_crear_objetos.
Manual Reporting ALV
Página / 22(32)
Fecha / 15/04/2023
DATA: effect TYPE i, effect_move TYPE i, effect_copy TYPE i, handle_grid TYPE i.
IF d_contenedor IS INITIAL. CREATE OBJECT d_contenedor EXPORTING container_name = 'CONTENEDOR1'. CREATE OBJECT grid EXPORTING i_parent = d_contenedor.
CREATE OBJECT application. SET HANDLER application->handle_grid_drag FOR grid. SET HANDLER application->handle_grid_drop FOR grid. SET HANDLER application->handle_grid_drop_complete FOR grid.
CREATE OBJECT grid_behaviour. effect_move = cl_dragdrop=>move.
CALL METHOD grid_behaviour->add EXPORTING flavor = 'LINE' dragsrc = 'X' droptarget = 'X' effect_in_ctrl = effect_move.
CALL METHOD grid_behaviour->get_handle IMPORTING handle = handle_grid.
gs_layout-s_dragdrop-row_ddid = handle_grid. is_variant-report = 'ZDAMDD'. CALL METHOD grid->set_table_for_first_display EXPORTING i_structure_name = 'MCHA' IS_VARIANT = is_variant I_SAVE = 'A' is_layout = gs_layout
CHANGING it_fieldcatalog = d_fieldcat it_outtab = i_mcha. ENDIF.ENDFORM. " F_CREAR_OBJETOS
5.- Al final ponego el codigo del programa completo, con las declaraciones, variables y demas. El programa se llama ZDAMDD y esta en Sidenor Desarrollo, es muy sencillito y se entiende bien:
REPORT zdamdd .
TYPE-POOLS : slis.
DATA : okcode LIKE sy-ucomm.DATA : i_mcha LIKE mcha OCCURS 0 .
CLASS application DEFINITION DEFERRED.
* data declarationDATA: BEGIN OF gt_outtab_3 OCCURS 0.
Manual Reporting ALV
Página / 23(32)
Fecha / 15/04/2023
INCLUDE STRUCTURE sflight.DATA: celltab TYPE lvc_t_drdr.DATA: END OF gt_outtab_3.
DATA: application TYPE REF TO application, d_contenedor TYPE REF TO cl_gui_custom_container, grid TYPE REF TO cl_gui_alv_grid, grid_behaviour TYPE REF TO cl_dragdrop, ok_code LIKE sy-ucomm, save_ok_code LIKE ok_code, m LIKE sy-tabix, gt_outtab TYPE sflight OCCURS 0, gt_outtab_2 TYPE sflight OCCURS 0, gs_outtab LIKE LINE OF gt_outtab, fieldcat TYPE lvc_t_fcat, " WITH HEADER LINE, ls_fieldcat LIKE LINE OF fieldcat, gs_layout TYPE lvc_s_layo, it_sflight LIKE STANDARD TABLE OF sflight WITH HEADER LINE, ls_celltab TYPE lvc_s_drdr, index_gt_outtab_3 TYPE i, index TYPE i, gs_outtab_3 LIKE LINE OF gt_outtab_3, is_variant type DISVARIANT.
DATA : d_fieldcat TYPE lvc_t_fcat.
*&---------------------------------------------------------------------**&---------------------------------------------------------------------**& Class APPLICATION*&---------------------------------------------------------------------** Text*----------------------------------------------------------------------*CLASS application DEFINITION.
PUBLIC SECTION.* methods for D&D handling METHODS: handle_grid_drag FOR EVENT ondrag OF cl_gui_alv_grid IMPORTING es_row_no e_column e_dragdropobj, handle_grid_drop FOR EVENT ondrop OF cl_gui_alv_grid IMPORTING e_row e_column e_dragdropobj, handle_grid_drop_complete FOR EVENT ondropcomplete OF cl_gui_alv_grid IMPORTING e_row e_column e_dragdropobj.
ENDCLASS. "APPLICATION
*---------------------------------------------------------------------** CLASS drag_drop_object DEFINITION*---------------------------------------------------------------------** ........ **---------------------------------------------------------------------*CLASS drag_drop_object DEFINITION.
PUBLIC SECTION. DATA: wa_test LIKE LINE OF gt_outtab, index TYPE i.
ENDCLASS. "DRAG_DROP_OBJECT
*---------------------------------------------------------------------** CLASS application IMPLEMENTATION
Manual Reporting ALV
Página / 24(32)
Fecha / 15/04/2023
*---------------------------------------------------------------------** ........ **---------------------------------------------------------------------*CLASS application IMPLEMENTATION.
* implement what should happen when sth. will be dragged METHOD handle_grid_drag.
DATA: data_object TYPE REF TO drag_drop_object, help_row LIKE LINE OF i_mcha.
READ TABLE i_mcha INTO help_row INDEX es_row_no-row_id.
CREATE OBJECT data_object.
MOVE es_row_no-row_id TO data_object->index.
READ TABLE i_mcha INTO data_object->wa_test INDEX es_row_no-row_id.
e_dragdropobj->object = data_object.
ENDMETHOD. "handle_grid_drag
* implement what should happen when sth. will be dropped METHOD handle_grid_drop.
DATA: data_object TYPE REF TO drag_drop_object, drop_index TYPE i, help_row_2 LIKE LINE OF gt_outtab.
CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
data_object ?= e_dragdropobj->object. DELETE i_mcha INDEX data_object->index. INSERT data_object->wa_test INTO i_mcha INDEX e_row-index. IF e_dragdropobj->effect = cl_dragdrop=>move. ELSEIF e_dragdropobj->effect = cl_dragdrop=>copy. ENDIF.
ENDCATCH.
ENDMETHOD. "handle_grid_drop
METHOD handle_grid_drop_complete.
CALL METHOD grid->refresh_table_display.
IF sy-subrc <> 0. CALL METHOD e_dragdropobj->abort. ENDIF.
ENDMETHOD. "handle_grid_drop_complete
ENDCLASS. "application
START-OF-SELECTION.
SELECT * FROM mcha INTO TABLE i_mcha UP TO 100 ROWS. DATA : d_cat TYPE slis_t_fieldcat_alv.
Manual Reporting ALV
Página / 25(32)
Fecha / 15/04/2023
DATA : r_cat TYPE LINE OF slis_t_fieldcat_alv.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING* I_PROGRAM_NAME =* I_INTERNAL_TABNAME = i_structure_name = 'MCHA'* I_CLIENT_NEVER_DISPLAY = 'X'* I_INCLNAME =* I_BYPASSING_BUFFER =* I_BUFFER_ACTIVE = CHANGING ct_fieldcat = d_cat EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3.
LOOP AT d_cat INTO r_cat. MOVE-CORRESPONDING r_cat TO ls_fieldcat. ls_Fieldcat-hotspot = 'X'. APPEND ls_fieldcat TO d_fieldcat. ENDLOOP.
IF sy-subrc <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.
CALL SCREEN '9000'. IF sy-subrc <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.*&---------------------------------------------------------------------**& Module STATUS_9000 OUTPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE status_9000 OUTPUT. SET PF-STATUS '9000_001'.* SET TITLEBAR 'xxx'. PERFORM f_crear_objetos.
ENDMODULE. " STATUS_9000 OUTPUT*&---------------------------------------------------------------------**& Module USER_COMMAND_9000 INPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE user_command_9000 INPUT.
CASE okcode. WHEN 'EXIT' OR 'CANC' OR 'BACK'. IF NOT d_contenedor IS INITIAL. CALL METHOD d_contenedor->free EXCEPTIONS cntl_system_error = 1 cntl_error = 2. CALL METHOD cl_gui_cfw=>flush EXCEPTIONS
Manual Reporting ALV
Página / 26(32)
Fecha / 15/04/2023
cntl_system_error = 1 cntl_error = 2. ENDIF. LEAVE to screen 0. ENDCASE.
ENDMODULE. " USER_COMMAND_9000 INPUT*&---------------------------------------------------------------------**& Form F_CREAR_OBJETOS*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM f_crear_objetos.
DATA: effect TYPE i, effect_move TYPE i, effect_copy TYPE i, handle_grid TYPE i.
IF d_contenedor IS INITIAL. CREATE OBJECT d_contenedor EXPORTING container_name = 'CONTENEDOR1'. CREATE OBJECT grid EXPORTING i_parent = d_contenedor.
CREATE OBJECT application. SET HANDLER application->handle_grid_drag FOR grid. SET HANDLER application->handle_grid_drop FOR grid. SET HANDLER application->handle_grid_drop_complete FOR grid.
CREATE OBJECT grid_behaviour. effect_move = cl_dragdrop=>move.
CALL METHOD grid_behaviour->add EXPORTING flavor = 'LINE' dragsrc = 'X' droptarget = 'X' effect_in_ctrl = effect_move.
CALL METHOD grid_behaviour->get_handle IMPORTING handle = handle_grid.
gs_layout-s_dragdrop-row_ddid = handle_grid. is_variant-report = 'ZDAMDD'. CALL METHOD grid->set_table_for_first_display EXPORTING i_structure_name = 'MCHA' IS_VARIANT = is_variant I_SAVE = 'A' is_layout = gs_layout
CHANGING* it_fieldcatalog = d_fieldcat it_outtab = i_mcha.
Manual Reporting ALV
Página / 27(32)
Fecha / 15/04/2023
ENDIF.ENDFORM. " F_CREAR_OBJETOS
Manual Reporting ALV
Página / 28(32)
Fecha / 15/04/2023
El programa quedaria mas o menos asi:
5 CARGA DEL LOGO EN EL SISTEMATransacción OAOR.
Desde el customizing (Trans. SPRO), en Gestión de Personal - Gestión de funciones – Control de dialogo – Ajustar superficie para reporting – Importar logo e imagen de fondo para gestión de informes. (Trans. 0FPM002)
Manual Reporting ALV
Página / 29(32)
Fecha / 15/04/2023
Donde pone Seleccionar una clase de documento o una aplicación, se selecciona Imagen y te aparece una ventana para seleccionar el archivo
Manual Reporting ALV
Página / 30(32)
Fecha / 15/04/2023
Una vez realizada la subida, se le indica la descripción y la palabra clave.
Para transportarlo al sistema productivo, se debe dar al icono del transporte (camión) para seleccionar (ó crear) una orden de transporte. Se introducirán 2 líneas en la tarea de transporte del tipo R3TR (Resumenes de objeto) SBDL (Objeto de información lógico para BDS) y SBDP (Objeto de información físico)
Manual Reporting ALV
Página / 31(32)
Fecha / 15/04/2023
6 REFERENCIAS
Ejemplos de ALV.
En la clase de desarrollo SLIS se pueden encontrar programas de ejemplos.
Programa Descripción
BALVBT01 Report de test ALV: lista de bloques
BALVBT02 Report de test ALV: Lista de bloques sin módulos de bloque
BALVBUFDEL Reinicializar mem.inter.ALV
BALVEX01 Programa de presentación ALV: salida vuelos (versión simplificada) Con Extractos
BALVEX02 Programa de presentación ALV: salida vuelos (versión simplificada)
BALVEXTR Gestión de extractos
BALVHD01 Programa de presentación LVA: Lista modelo vuelo jerárquico secuencial
BALVHT01 Report de test LVA: Lista modelo de vuelo jerárquico secuencial
BALVSD01 Programa presentación LVA: Lista simple modelo de vuelo
BALVSD02 Programa de presentación ALV: salida vuelos (versión simplificada)
BALVSD02_GRID Llamada simple ALV GridCOntrol en modo full screen
BALVSD02_SAVE Llamada más simple ALV con opción de almacenar
BALVSD03 Lista simple
BALVSD04 Lista simple (merged)
BALVSD06 Progr.presentación LVA: Salida vuelos (versión simplif.+ almacenam.)
BALVSD11 Progr.presentación LVA: Lista simple con interacciones y variantes
BALVST01 Report de test LVA: Lista simple modelo de vuelo
BALVST02 Report de test LVA: Lista simple modelo de vuelo
BALVST02_GRID Report de test LVA: Lista simple modelo de vuelo
BALVST03_GRID Report de test LVA: Lista simple modelo de vuelo
BALV_POPUP_TO_SELECT Programa test REUSE_ALV_POPUP_TO_SELECT
BCALV_BUFFER_DELETE Borrar MI
BCALV_DND_01 Arrastrar líneas de control alv a carpetas de un tree control simple
BCALV_DND_02 Arrastrar iconos funcionales de un árbol simple a un control alv
BCALV_DND_03 Definir comportamiento arrastrar y dejar caer en celdas control LVA
BCALV_DND_04 Desplazar o copiar líneas dentro de ALV Grid Control
BCALV_FULLSCREEN_DEMO Presentación LVA: Modo full screen
BCALV_FULLSCREEN_DEMO_CLASSIC Presentación LVA: Modo full screen
BCALV_GRID_01 Eventos p.procesamiento impresión
BCALV_GRID_02 Utilización de un dialogbox container para una lista detallada
BCALV_GRID_03 Lista detallada en dynpro tipo diálogo
BCALV_GRID_04 Visualizar excepciones usando LEDs o luces
BCALV_GRID_05 Añadir pulsador propio en barra herr.
BCALV_GRID_06 Definir menú contextual propio
BCALV_GRID_07 Definiendo menú barra herr.
BCALV_GRID_08 Definiendo menú barra herr.con puls.por defecto
BCALV_GRID_09 Controlar opciones de grabar variantes
BCALV_GRID_10 Ejecutar variante antes visual.lista
BCALV_GRID_11 Test p.módulos funciones variante nueva
Manual Reporting ALV
Página / 32(32)
Fecha / 15/04/2023
Programa Descripción
BCALV_GRID_AND_POPUP ALV Grid en ventana diálogo
BCALV_GRID_DEMO Progr.demo llamada más simple control LVA
BCALV_GRID_DND_TREE ALV Grid: Arrastrar y dejar caer con árbol ALV
BCALV_GRID_DND_TREE_SIMPLE ALV-GRID: Arrastrar y dejar caer con árbol ALV (simple)
BCALV_GRID_VERIFY Programa test ALV Grid Control
BCALV_TABLE_CREATE Columnas creadas para llamada ALV
BCALV_TREE_DEMO Demostr.p.control árbol ALV
BCALV_TREE_SIMPLE_DEMO Programa BCALV_TREE_SIMPLE_DEMO
BCALV_XXL_TOGGLE_DATE Conversión visualización fecha de formato interno a externo
DTC_ALVTEST_0 Report de test ALV (generado)
DTC_BSP1 Programa DTC_BSP1
DTC_BSP2 Programa DTC_BSP1
Ayuda SAP para versión 4.0B
http://help.sap.com/saphelp_40b/helpdata/es/51/055134de05a662e10000009b38f83b/frameset.htm
Ayuda SAP para versión 4.6C
http://help.sap.com/saphelp_46c/helpdata/es/c5/3bd1369f2d280ee10000009b38f889/frameset.htm