manual alv

39
document.doc MANUAL REPORTING ALV Página 1 de 39

Upload: martinjosep

Post on 15-Aug-2015

223 views

Category:

Software


9 download

TRANSCRIPT

Page 1: Manual alv

document.doc

MANUAL REPORTING ALV

Página 1 de 32

Page 2: Manual alv

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

Page 3: Manual alv

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.

Page 4: Manual alv

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 ....

Page 5: Manual alv

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.

Page 6: Manual alv

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.

Page 7: Manual alv

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

Page 8: Manual alv

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.

Page 9: Manual alv

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

Page 10: Manual alv

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)

Page 11: Manual alv

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)

Page 12: Manual alv

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.

Page 13: Manual alv

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.

Page 14: Manual alv

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.

Page 15: Manual alv

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

Page 16: Manual alv

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.

Page 17: Manual alv

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'.

Page 18: Manual alv

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

Page 19: Manual alv

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

Page 20: Manual alv

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.

Page 21: Manual alv

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.

Page 22: Manual alv

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.

Page 23: Manual alv

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

Page 24: Manual alv

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.

Page 25: Manual 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

Page 26: Manual alv

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.

Page 27: Manual alv

Manual Reporting ALV

Página / 27(32)

Fecha / 15/04/2023

ENDIF.ENDFORM. " F_CREAR_OBJETOS

Page 28: Manual alv

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)

Page 29: Manual alv

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

Page 30: Manual alv

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)

Page 31: Manual alv

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

Page 32: Manual alv

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