✒️ABAP El lenguaje SQL y la sentencia SELECT
ABAP El lenguaje SQL y la sentencia SELECT
Cortes de Datos y SQL Select
Aquí os dejo el código fuente para un reporte con un INNER JOIN que puede contar los clientes de cada país y de cada ciudad.. Espero que os guste.
- *&---------------------------------------------------------------------*
- *& Report ZGZ57B_DETAILED_REPORT
- *&
- *&---------------------------------------------------------------------*
- *&
- *&
- *&---------------------------------------------------------------------*
- REPORT zgz57b_sql_select.
- *---------------------------------------------------------------------*
- * Tablas de la Base de Datos SAP
- *---------------------------------------------------------------------*
- TABLES:
- kna1, "Maestro Clientes
- t005t. "Nombre de los Paises
- *---------------------------------------------------------------------*
- * 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.
- *---------------------------------------------------------------------*
- * 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
- so_ty_city(30) TYPE c,
- v_selected LIKE sy-tabix.
- *---------------------------------------------------------------------*
- * Variables de Acumulados de Corte
- *---------------------------------------------------------------------*
- DATA:
- gv_cli_city TYPE i, "Clientes por Ciudad
- gv_cli_pais TYPE i, "Clientes por Pais
- gv_cli_total TYPE i. "Clientes en Total
- *---------------------------------------------------------------------*
- * 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-name1. "Seleccion Nombre Cliente
- 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
- SELECTION-SCREEN END OF BLOCK b3.
- *-------------------------------------------------*
- INITIALIZATION.
- *-------------------------------------------------*
- CLEAR:
- gv_cli_city,
- gv_cli_pais,
- gv_cli_total.
- *-------------------------------------------------*
- START-OF-SELECTION.
- *-------------------------------------------------*
- "Consulta de Clientes
- "Clientes JOIN Paises
- SELECT * 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.
- *-------------------------------------------------*
- END-OF-SELECTION.
- *-------------------------------------------------*
- SORT ti_clientes BY land1 ort01 name1.
- LOOP AT ti_clientes INTO wa_clientes.
- wa_clientes_aux = wa_clientes.
- AT NEW land1.
- CLEAR:
- gv_cli_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_cli_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.
- *-------------------------------------------------*
- TOP-OF-PAGE.
- *-------------------------------------------------*
- FORMAT COLOR 7.
- WRITE: /(1) sy-vline,
- (21) 'Pais / Country',
- (1) sy-vline,
- (20) 'Ciudad / City',
- (1) sy-vline,
- (10) 'Codigo',
- (1) sy-vline,
- (30) 'Nombre / Name',
- (1) sy-vline.
- *-------------------------------------------------*
- END-OF-PAGE.
- *-------------------------------------------------*
 
 
 
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