✒️ABAP Las vistas de tablas bases de datos
ABAP Las vistas de tablas bases de datos
Reporte usando una Vista que es un JOIN de 4 tablas
Hola Compañeros:
Os dejo aquí el código fuente de un informe basado en una Vista personalizada. Primero pondré los datos de la vista y luego el programa.
- Vista: ZGZ57BORDERS
- TABLAS Y CONDICIONES DE CONEXION
Tabla | Tabla | Campo | Tabla | Campo | ||
KNA1 | KNA1 | MANDT | = | T005T | MANDT | |
T005T | KNA1 | MANDT | = | VBAK | MANDT | |
VBAK | KNA1 | MANDT | = | VBAP | MANDT | |
VBAP | KNA1 | KUNNR | = | VBAK | KUNNR | |
VBAK | VBELN | = | VBAP | VBELN | ||
KNA1 | LAND1 | = | T005T | LAND1 | ||
- CAMPOS
Cpo.Vista | Tabla | Campo |
MANDT | KNA1 | MANDT |
KUNNR | KNA1 | KUNNR |
VBELN | VBAK | VBELN |
POSNR | VBAP | POSNR |
SPRAS | T005T | SPRAS |
LAND1 | T005T | LAND1 |
NAME1 | KNA1 | NAME1 |
ORT01 | KNA1 | ORT01 |
PSTLZ | KNA1 | PSTLZ |
LANDX | T005T | LANDX |
AUDAT | VBAK | AUDAT |
BNAME | VBAK | BNAME |
NETWR | VBAK | NETWR |
MATNR | VBAP | MATNR |
ARKTX | VBAP | ARKTX |
KBMENG | VBAP | KBMENG |
NETPR | VBAP | NETPR |
WAVWR | VBAP | WAVWR |
NETWRLIN | VBAP | NETWR |
- -> Guardar -> Activar
- Tipo de Datos: ZGX57BRECORDERS Registro / Workare de ZGX57ORDERS
- (x) Tipo de Linea [ZGX57ORDERS]
- -> Guardar -> Activar
- *&---------------------------------------------------------------------*
- *& Report ZGZ57B_VIEW_REPORT
- *&
- *&---------------------------------------------------------------------*
- *&
- *&
- *&---------------------------------------------------------------------*
- REPORT zgz57b_view_report.
- *---------------------------------------------------------------------*
- * Tablas de la Base de Datos SAP
- *---------------------------------------------------------------------*
- TABLES:
- zgz57borders. "Vista con el Join de las tablas
- *---------------------------------------------------------------------*
- * Tipos para las Tablas de los Informes
- *---------------------------------------------------------------------*
- TYPES:
- ty_detalle LIKE zgz57borders.
- *---------------------------------------------------------------------*
- * Tablas Internas y Registros (Workareas)
- *---------------------------------------------------------------------*
- DATA:
- 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 zgz57borders-land1. "Seleccion Pais
- SELECT-OPTIONS so_cli FOR zgz57borders-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 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.
- *-------------------------------------------------*
- 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.
- "Consulta de Lineas de Pedido
- "Lineas JOIN Cabeceras JOIN Clientes JOIN Paises
- SELECT *
- INTO CORRESPONDING FIELDS OF TABLE ti_detalle
- FROM zgz57borders
- WHERE spras = sy-langu "Nombre de Pais en ES
- AND land1 IN so_pais
- AND ort01 IN so_city
- AND kunnr IN so_cli
- AND audat IN so_fecha.
- DESCRIBE TABLE ti_detalle LINES gv_records.
- * 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.
- *-------------------------------------------------*
- PERFORM lista_detalle.
- *-------------------------------------------------*
- TOP-OF-PAGE.
- *-------------------------------------------------*
- PERFORM lista_cabecera.
- *-------------------------------------------------*
- END-OF-PAGE.
- *-------------------------------------------------*
- PERFORM lista_pie.
- *&---------------------------------------------------------------------*
- *& 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.
- 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.
- ENDFORM. " LISTA_CABECERA
- *&---------------------------------------------------------------------*
- *& Form LISTA_PIE
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM lista_pie .
- ENDFORM. " LISTA_PIE
 
 
 
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