✒️ABAP Los conceptos importantes de reportes
ABAP Los conceptos importantes de reportes
Reporte Parametrizable
Hola Compañeros:
Os dejo aquí el código fuente de un informe parametrizable para obtener información de clientes, pedidos y lineas de pedido por país y ciudad. Es bastante largo y complejo; pero creo que los comentarios os ayudaran. Es un inform clásico no interactivo; con puntos de control configurables.
- *&---------------------------------------------------------------------*
- *& Report ZGZ57B_DETAILED_REPORT
- *&
- *&---------------------------------------------------------------------*
- *&
- *&
- *&---------------------------------------------------------------------*
- REPORT zgz57b_detailed_report.
- *---------------------------------------------------------------------*
- * Tablas de la Base de Datos SAP
- *---------------------------------------------------------------------*
- TABLES:
- kna1, "Maestro Clientes
- t005t, "Nombre de los Paises
- vbak, "Cabeceras de Pedido
- vbap. "Lineas de Pedido
- *---------------------------------------------------------------------*
- * Tipos para las Tablas de los Informes
- *---------------------------------------------------------------------*
- TYPES:
- BEGIN OF ty_clientes,
- land1 LIKE kna1-land1, "Codigo Pais
- landx LIKE t005t-landx, "Nombre Pais
- ort01 LIKE kna1-ort01 , "Ciudad
- kunnr LIKE kna1-kunnr , "Codigo Cliente
- name1 LIKE kna1-name1 , "Nombre Cliente
- END OF ty_clientes.
- TYPES:
- BEGIN OF ty_facturas,
- land1 LIKE kna1-land1, "Codigo Pais
- landx LIKE t005t-landx, "Nombre Pais
- ort01 LIKE kna1-ort01 , "Ciudad
- kunnr LIKE kna1-kunnr , "Codigo Cliente
- name1 LIKE kna1-name1 , "Nombre Cliente
- vbeln LIKE vbak-vbeln, "Num.Pedido
- audat LIKE vbak-audat, "Fecha Pedido
- netwr LIKE vbak-netwr, "Valor Pedido
- END OF ty_facturas.
- TYPES:
- BEGIN OF ty_detalle,
- land1 LIKE kna1-land1, "Codigo Pais
- landx LIKE t005t-landx, "Nombre Pais
- ort01 LIKE kna1-ort01 , "Ciudad
- kunnr LIKE kna1-kunnr , "Codigo Cliente
- name1 LIKE kna1-name1 , "Nombre Cliente
- vbeln LIKE vbak-vbeln, "Num.Pedido
- audat LIKE vbak-audat, "Fecha Pedido
- netwr LIKE vbak-netwr, "Valor Pedido
- posnr LIKE vbap-posnr, "Linea de Pedido
- matnr LIKE vbap-matnr, "Cod.Articulo Linea
- arktx LIKE vbap-arktx, "Desc.Articulo Linea
- kbmeng LIKE vbap-kbmeng, "Cant.Articulo Linea
- netpr LIKE vbap-netpr, "Precio Articulo Linea
- END OF ty_detalle.
- *---------------------------------------------------------------------*
- * Tablas Internas y Registros (Workareas)
- *---------------------------------------------------------------------*
- DATA:
- ti_clientes TYPE STANDARD TABLE OF ty_clientes,
- wa_clientes LIKE LINE OF ti_clientes,
- wa_clientes_aux LIKE wa_clientes, " Auxiliar para corte Clientes
- ti_facturas TYPE STANDARD TABLE OF ty_facturas,
- wa_facturas LIKE LINE OF ti_facturas,
- wa_facturas_aux LIKE wa_facturas, " Auxiliar para corte Facturas
- ti_detalle TYPE STANDARD TABLE OF ty_detalle,
- wa_detalle LIKE LINE OF ti_detalle,
- wa_detalle_aux LIKE wa_detalle, " Auxiliar para corte Detalle
- so_ty_city(30) TYPE c,
- gv_t_ini TYPE i,
- gv_t_fin TYPE i,
- gv_records TYPE i,
- gv_mess(60) TYPE c,
- gv_time(10) TYPE c,
- gv_items(10) TYPE c,
- v_selected LIKE sy-tabix.
- *---------------------------------------------------------------------*
- * Variables de Acumulados de Corte
- *---------------------------------------------------------------------*
- DATA:
- gv_lineas_fra TYPE i, "Lineas en Pedido
- gv_bruto_fra TYPE p DECIMALS 2, "Bruto Pedido (cant x precio)
- gv_fras_cliente TYPE i, "Pedidos por Cliente
- gv_total_cliente TYPE p DECIMALS 2, "Importe Pedidos Cliente
- gv_fras_city TYPE i, "Pedidos por Ciudad
- gv_cli_city TYPE i, "Clientes por Ciudad
- gv_total_city TYPE p DECIMALS 2, "Importe Pedidos Ciudad
- gv_fras_pais TYPE i, "Pedidos por Pais
- gv_cli_pais TYPE i, "Clientes por Pais
- gv_total_pais TYPE p DECIMALS 2, "Importe Pedidos Pais
- gv_fras_total TYPE i, "Pedidos en Total
- gv_cli_total TYPE i, "Clientes en Total
- gv_gran_total TYPE p DECIMALS 2. "Importe Total Pedidos
- *---------------------------------------------------------------------*
- * Pantalla de selección
- *---------------------------------------------------------------------*
- SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
- SELECT-OPTIONS so_pais FOR t005t-land1. "Seleccion Pais
- SELECT-OPTIONS so_cli FOR kna1-kunnr. "Seleccion Cod.Cliente
- SELECT-OPTIONS so_fecha FOR sy-datum. "Seleccion Fecha Pedido
- SELECT-OPTIONS so_city FOR (so_ty_city)
- DEFAULT 'A' TO 'ZZ'. "Seleccion Ciudad
- SELECTION-SCREEN END OF BLOCK b1.
- SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
- PARAMETERS:
- p_cli RADIOBUTTON GROUP grp1, "Listado Clientes
- p_fra RADIOBUTTON GROUP grp1, "Listado Pedidos
- p_lin RADIOBUTTON GROUP grp1. "Listado Lineas
- *SELECTION-SCREEN PUSHBUTTON 'Actualizar Opciones'.
- SELECTION-SCREEN END OF BLOCK b2.
- SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
- PARAMETERS:
- p_tpais AS CHECKBOX, "Total Pais
- p_tcity AS CHECKBOX, "Total Ciudad
- p_tcli AS CHECKBOX, "Total Cliente
- p_tfra AS CHECKBOX. "Total Pedido
- SELECTION-SCREEN END OF BLOCK b3.
- *---------------------------------------------------------------------*
- *AT SELECTION-SCREEN OUTPUT.
- *---------------------------------------------------------------------*
- * p_fra = 'x'.
- * p_lin = 'x'.
- * PERFORM enable_disable_opts.
- *---------------------------------------------------------------------*
- *AT SELECTION-SCREEN.
- *---------------------------------------------------------------------*
- * PERFORM enable_disable_opts.
- *-------------------------------------------------*
- INITIALIZATION.
- *-------------------------------------------------*
- CLEAR:
- gv_lineas_fra,
- gv_bruto_fra,
- gv_fras_cliente,
- gv_total_cliente,
- gv_fras_city,
- gv_cli_city,
- gv_total_city,
- gv_fras_pais,
- gv_cli_pais,
- gv_total_pais,
- gv_fras_total,
- gv_cli_total,
- gv_t_ini,
- gv_t_fin,
- gv_t_ini,
- gv_t_fin,
- gv_records,
- gv_mess,
- gv_time,
- gv_gran_total.
- *-------------------------------------------------*
- START-OF-SELECTION.
- *-------------------------------------------------*
- GET RUN TIME FIELD gv_t_ini.
- IF p_cli IS NOT INITIAL.
- "Consulta de Pedidos
- "Clientes JOIN Paises
- SELECT c~land1 p~landx c~ort01 c~kunnr c~name1
- INTO CORRESPONDING FIELDS OF TABLE ti_clientes
- FROM kna1 AS c
- INNER JOIN t005t AS p
- ON c~land1 = p~land1
- WHERE p~spras = sy-langu "Nombre de Pais en ES
- AND c~land1 IN so_pais
- AND c~ort01 IN so_city
- AND c~kunnr IN so_cli.
- DESCRIBE TABLE ti_clientes LINES gv_records.
- ENDIF.
- IF p_fra IS NOT INITIAL.
- "Consulta de Pedidos
- "Cabeceras JOIN Clientes JOIN Paises
- SELECT c~land1 p~landx c~ort01 c~kunnr c~name1 f~vbeln
- f~audat f~netwr
- INTO CORRESPONDING FIELDS OF TABLE ti_facturas
- FROM vbak AS f
- INNER JOIN kna1 AS c
- ON c~kunnr = f~kunnr
- INNER JOIN t005t AS p
- ON c~land1 = p~land1
- WHERE p~spras = sy-langu "Nombre de Pais en ES
- AND f~kunnr IN so_cli
- AND c~ort01 IN so_city
- AND f~audat IN so_fecha
- AND c~land1 IN so_pais.
- DESCRIBE TABLE ti_facturas LINES gv_records.
- ENDIF.
- IF p_lin IS NOT INITIAL.
- "Consulta de Lineas de Pedido
- "Lineas JOIN Cabeceras JOIN Clientes JOIN Paises
- SELECT c~land1 p~landx c~ort01 c~kunnr c~name1 f~vbeln
- f~audat f~netwr l~posnr l~matnr l~arktx l~kbmeng l~netpr
- INTO CORRESPONDING FIELDS OF TABLE ti_detalle
- FROM vbap AS l
- INNER JOIN vbak AS f
- ON l~vbeln = f~vbeln
- INNER JOIN kna1 AS c
- ON c~kunnr = f~kunnr
- INNER JOIN t005t AS p
- ON c~land1 = p~land1
- WHERE p~spras = sy-langu "Nombre de Pais en ES
- AND c~land1 IN so_pais
- AND c~ort01 IN so_city
- AND c~kunnr IN so_cli
- AND f~audat IN so_fecha.
- DESCRIBE TABLE ti_detalle LINES gv_records.
- ENDIF.
- * Tiempo de ejecucion
- GET RUN TIME FIELD gv_t_fin.
- gv_t_ini = gv_t_fin - gv_t_ini.
- WRITE gv_t_ini TO gv_time.
- WRITE gv_records TO gv_items.
- CONCATENATE gv_items 'resultados en' gv_time 'microsegundos.'
- INTO gv_mess
- SEPARATED BY ' '.
- MESSAGE gv_mess TYPE 'S'.
- *-------------------------------------------------*
- END-OF-SELECTION.
- *-------------------------------------------------*
- IF p_cli IS NOT INITIAL.
- PERFORM lista_clientes.
- ENDIF.
- IF p_fra IS NOT INITIAL.
- PERFORM lista_facturas.
- ENDIF.
- IF p_lin IS NOT INITIAL.
- PERFORM lista_detalle.
- ENDIF.
- *-------------------------------------------------*
- TOP-OF-PAGE.
- *-------------------------------------------------*
- PERFORM lista_cabecera.
- *-------------------------------------------------*
- END-OF-PAGE.
- *-------------------------------------------------*
- PERFORM lista_pie.
- *&---------------------------------------------------------------------*
- *& Form LISTA_CLIENTES
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM lista_clientes .
- SORT ti_clientes BY land1 ort01 name1.
- LOOP AT ti_clientes INTO wa_clientes.
- wa_clientes_aux = wa_clientes.
- AT NEW land1.
- CLEAR:
- gv_fras_pais,
- gv_cli_pais,
- gv_total_pais.
- IF p_tpais IS NOT INITIAL.
- FORMAT COLOR 4.
- WRITE: / ' Pais:',
- 8 wa_clientes_aux-landx,
- 25 wa_clientes_aux-land1.
- ENDIF.
- ENDAT.
- AT NEW ort01.
- CLEAR:
- gv_fras_city,
- gv_cli_city,
- gv_total_city.
- IF p_tcity IS NOT INITIAL.
- FORMAT COLOR 3.
- WRITE: /10(16) 'Ciudad:',
- wa_clientes_aux-ort01.
- ENDIF.
- ENDAT.
- FORMAT COLOR 2.
- WRITE: /(1) sy-vline,
- (3) wa_clientes-land1,
- (1) sy-vline,
- (15) wa_clientes-landx,
- (1) sy-vline,
- (20) wa_clientes-ort01,
- (1) sy-vline,
- (10) wa_clientes-kunnr,
- (1) sy-vline,
- (30) wa_clientes-name1,
- (1) sy-vline.
- ADD 1 TO gv_cli_city.
- ADD 1 TO gv_cli_pais.
- ADD 1 TO gv_cli_total.
- AT END OF ort01.
- IF p_tcity IS NOT INITIAL.
- FORMAT COLOR 3.
- WRITE:/10 'Hay ',
- gv_cli_city,
- ' Clientes en ',
- wa_clientes_aux-ort01.
- SKIP.
- ENDIF.
- ENDAT.
- AT END OF land1.
- IF p_tpais IS NOT INITIAL.
- FORMAT COLOR 4.
- WRITE: / 'Hay ',
- gv_cli_pais,
- ' Clientes en ',
- wa_clientes_aux-landx.
- ULINE.
- ENDIF.
- ENDAT.
- ENDLOOP.
- ENDFORM. " LISTA_CLIENTES
- *&---------------------------------------------------------------------*
- *& Form LISTA_FACTURAS
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM lista_facturas .
- SORT ti_facturas BY land1 ort01 kunnr vbeln.
- LOOP AT ti_facturas INTO wa_facturas.
- wa_facturas_aux = wa_facturas.
- AT NEW land1.
- CLEAR:
- gv_fras_pais,
- gv_cli_pais,
- gv_total_pais.
- IF p_tpais IS NOT INITIAL.
- FORMAT COLOR 4.
- WRITE: / ' Pais:',
- 8 wa_facturas_aux-landx,
- 25 wa_facturas_aux-land1.
- ENDIF.
- ENDAT.
- AT NEW ort01.
- CLEAR:
- gv_fras_city,
- gv_cli_city,
- gv_total_city.
- IF p_tcity IS NOT INITIAL.
- FORMAT COLOR 3.
- WRITE: /7 'Ciudad:',
- 27 wa_facturas_aux-ort01.
- ENDIF.
- ENDAT.
- AT NEW kunnr.
- CLEAR:
- gv_fras_cliente,
- gv_total_cliente.
- IF p_tcli IS NOT INITIAL.
- FORMAT COLOR 5.
- WRITE: /41 'Cliente:',
- wa_facturas_aux-kunnr,
- '-',
- wa_facturas_aux-name1.
- ENDIF.
- ENDAT.
- FORMAT COLOR 2.
- WRITE: /(1) sy-vline,
- (3) wa_facturas-land1,
- (1) sy-vline,
- (15) wa_facturas-landx,
- (1) sy-vline,
- (20) wa_facturas-ort01,
- (1) sy-vline,
- (10) wa_facturas-kunnr,
- (1) sy-vline,
- (30) wa_facturas-name1,
- (1) sy-vline,
- (10) wa_facturas-vbeln,
- (1) sy-vline,
- (10) wa_facturas-audat,
- (1) sy-vline,
- (14) wa_facturas-netwr,
- (1) sy-vline.
- ADD 1 TO gv_fras_cliente.
- ADD 1 TO gv_fras_city.
- ADD 1 TO gv_fras_pais.
- ADD 1 TO gv_fras_total.
- ADD wa_facturas-netwr TO gv_total_cliente.
- ADD wa_facturas-netwr TO gv_total_city.
- ADD wa_facturas-netwr TO gv_total_pais.
- ADD wa_facturas-netwr TO gv_gran_total.
- AT END OF kunnr.
- ADD 1 TO gv_cli_city.
- ADD 1 TO gv_cli_pais.
- ADD 1 TO gv_cli_total.
- IF p_tcli IS NOT INITIAL.
- FORMAT COLOR 5.
- WRITE:/41 'Cliente:',
- wa_facturas_aux-kunnr,
- '-',
- (30) wa_facturas_aux-name1,
- ' tiene',
- (6) gv_fras_cliente,
- 'facturas por',
- (17) gv_total_cliente.
- ENDIF.
- ENDAT.
- AT END OF ort01.
- IF p_tcity IS NOT INITIAL.
- FORMAT COLOR 3.
- WRITE: /7 'Hay',
- (4) gv_cli_city,
- 15 'Clientes en',
- (20) wa_facturas_aux-ort01,
- ' con',
- (7) gv_fras_city,
- 'pedidos por importe de ',
- (17) gv_total_city.
- SKIP.
- ENDIF.
- ENDAT.
- AT END OF land1.
- IF p_tpais IS NOT INITIAL.
- FORMAT COLOR 4.
- WRITE: / ' En ',
- (15) wa_facturas_aux-landx,
- ' hay',
- (5) gv_cli_pais,
- ' Clientes activos ',
- 'con',
- (7) gv_fras_pais,
- 'facturas por',
- (15) gv_total_pais.
- ULINE.
- ENDIF.
- ENDAT.
- ENDLOOP.
- ENDFORM. " LISTA_FACTURAS
- *&---------------------------------------------------------------------*
- *& Form LISTA_DETALLE
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM lista_detalle .
- SORT ti_detalle BY land1 ort01 kunnr vbeln posnr.
- LOOP AT ti_detalle INTO wa_detalle.
- wa_detalle_aux = wa_detalle.
- AT NEW land1.
- CLEAR:
- gv_fras_pais,
- gv_cli_pais,
- gv_total_pais.
- IF p_tpais IS NOT INITIAL.
- FORMAT COLOR 4.
- WRITE: / 'Pais:',
- 6 wa_detalle_aux-landx,
- 22 wa_detalle_aux-land1.
- ENDIF.
- ENDAT.
- AT NEW ort01.
- CLEAR:
- gv_fras_city,
- gv_cli_city,
- gv_total_city.
- IF p_tcity IS NOT INITIAL.
- FORMAT COLOR 3.
- WRITE: /5 'Ciudad:',
- 22 wa_detalle_aux-ort01.
- ENDIF.
- ENDAT.
- AT NEW kunnr.
- CLEAR:
- gv_fras_cliente,
- gv_total_cliente.
- IF p_tcli IS NOT INITIAL.
- FORMAT COLOR 5.
- WRITE: /29 'Cliente:',
- wa_detalle_aux-kunnr,
- wa_detalle_aux-name1.
- ENDIF.
- ENDAT.
- AT NEW vbeln.
- CLEAR:
- gv_lineas_fra,
- gv_bruto_fra.
- ENDAT.
- FORMAT COLOR 2.
- WRITE: /(1) sy-vline,
- 2(3) wa_detalle-land1,
- 5(1) sy-vline,
- 6(15) wa_detalle-landx,
- 21(1) sy-vline,
- 22(15) wa_detalle-ort01,
- 37(1) sy-vline,
- 38(10) wa_detalle-kunnr,
- 48(1) sy-vline,
- 49(25) wa_detalle-name1,
- 74(1) sy-vline,
- 75(10) wa_detalle-vbeln,
- 85(1) sy-vline,
- 86(10) wa_detalle-audat,
- 96(1) sy-vline,
- 97(6) wa_detalle-posnr,
- 103(1) sy-vline,
- 104(12) wa_detalle-matnr,
- 116(1) sy-vline,
- 117(20) wa_detalle-arktx,
- 137(1) sy-vline,
- 138(8) wa_detalle-kbmeng,
- 146(1) sy-vline,
- 147(10) wa_detalle-netpr,
- 157(1) sy-vline.
- ADD 1 TO gv_lineas_fra.
- gv_bruto_fra = gv_bruto_fra + wa_detalle-kbmeng * wa_detalle-netpr.
- AT END OF vbeln.
- ADD 1 TO gv_fras_cliente.
- ADD 1 TO gv_fras_city.
- ADD 1 TO gv_fras_pais.
- ADD 1 TO gv_fras_total.
- ADD wa_detalle_aux-netwr TO gv_total_cliente.
- ADD wa_detalle_aux-netwr TO gv_total_city.
- ADD wa_detalle_aux-netwr TO gv_total_pais.
- ADD wa_detalle_aux-netwr TO gv_gran_total.
- IF p_tfra IS NOT INITIAL.
- FORMAT COLOR 6.
- WRITE: /87 'Pedido:',
- wa_detalle-vbeln,
- 'con',
- (3) gv_lineas_fra,
- 'lineas con importe bruto ',
- gv_bruto_fra.
- ENDIF.
- ENDAT.
- AT END OF kunnr.
- ADD 1 TO gv_cli_city.
- ADD 1 TO gv_cli_pais.
- ADD 1 TO gv_cli_total.
- IF p_tcli IS NOT INITIAL.
- FORMAT COLOR 5.
- WRITE: /29 'Cliente:',
- wa_detalle_aux-kunnr,
- wa_detalle_aux-name1,
- ' tiene',
- (5) gv_fras_cliente,
- 'pedidos por un total de',
- (15) gv_total_cliente.
- ENDIF.
- ENDAT.
- AT END OF ort01.
- IF p_tcity IS NOT INITIAL.
- FORMAT COLOR 3.
- WRITE:/5 'Hay',
- (4) gv_cli_city,
- 13 'Clientes',
- (20) wa_detalle_aux-ort01,
- ' con',
- (5) gv_fras_city,
- 'pedidos por importe de',
- (15) gv_total_city.
- SKIP.
- ENDIF.
- ENDAT.
- AT END OF land1.
- IF p_tpais IS NOT INITIAL.
- FORMAT COLOR 4.
- WRITE: / 'En ',
- (15) wa_detalle_aux-landx,
- 'hay',
- (4) gv_cli_pais,
- 'Clientes activos',
- 'con',
- 51(7) gv_fras_pais,
- 58 'facturas por',
- (15) gv_total_pais.
- ULINE.
- ENDIF.
- ENDAT.
- ENDLOOP.
- ENDFORM. " LISTA_DETALLE
- *&---------------------------------------------------------------------*
- *& Form LISTA_CABECERA
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM lista_cabecera .
- FORMAT COLOR 7.
- IF p_lin IS NOT INITIAL.
- WRITE:/(157) sy-uline.
- WRITE: /(1) sy-vline,
- 2(19) 'Pais / Country',
- 21(1) sy-vline,
- 22(15) 'Ciudad/City',
- 37(1) sy-vline,
- 38(10) 'Codigo',
- 48(1) sy-vline,
- 49(25) 'Nombre / Name',
- 74(1) sy-vline,
- 75(10) 'Order #',
- 85(1) sy-vline,
- 86(10) 'Fecha/Date',
- 96(1) sy-vline,
- 97(6) ' lin.#',
- 103(1) sy-vline,
- 104(12) 'Referencia',
- 116(1) sy-vline,
- 117(20) 'Articulo/Articule',
- 137(1) sy-vline,
- 138(8) 'Cant/Qty',
- 146(1) sy-vline,
- 147(10) 'Net. Price',
- 157(1) sy-vline.
- WRITE:/(157) sy-uline.
- ENDIF.
- IF p_fra IS NOT INITIAL.
- WRITE:/(137) sy-uline.
- WRITE: /(1) sy-vline,
- (21) 'Pais / Country',
- (1) sy-vline,
-  
 
 
 
Sobre el autor
Publicación académica de Carlos Piles Rosell, en su ámbito de estudios para la Carrera Consultor ABAP.
Carlos Piles Rosell
Profesión: Analista de Sistemas y Programador - España - Legajo: GZ57B
✒️Autor de: 24 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: PartTime
Certificación Académica de Carlos Piles