PROMO AGOSTO en CVOSOFT United States Of America: 💎Calidad, 🔥Bonificaciones, 🥶Precios Congelados y MÁS!

 X 

✒️ABAP Los reportes interactivos

ABAP Los reportes interactivos

ABAP Los reportes interactivos

REPORTE INTERACTIVO MULTINIVEL

Hola Compañeros:

Os dejo aquí el código fuente de un informe interactivo multinivel que hace un uso intensivo de AT LINE SELECTION y analiza la estructura de a linea para presentar diversos niveles de información. Espero que os resulte útil.

  1. *&---------------------------------------------------------------------*
  2. *& Report ZGZ57B_DETAILED_IREPORT
  3. *&
  4. *&---------------------------------------------------------------------*
  5. *&
  6. *&
  7. *&---------------------------------------------------------------------*

  8. REPORT zgz57b_detailed_ireport.

  9. *---------------------------------------------------------------------*
  10. * Tablas de la Base de Datos SAP
  11. *---------------------------------------------------------------------*
  12. TABLES:
  13. sscrfields, "Tabla Eventos Pantalla (Gracias Ezequiel)
  14. kna1, "Maestro Clientes
  15. t005t, "Nombre de los Paises
  16. vbak, "Cabeceras de Pedido
  17. vbap. "Lineas de Pedido

  18. *---------------------------------------------------------------------*
  19. * Tipos para las Tablas de los Informes
  20. *---------------------------------------------------------------------*
  21. TYPES:
  22. BEGIN OF ty_clientes,
  23. land1 LIKE kna1-land1, "Codigo Pais
  24. landx LIKE t005t-landx, "Nombre Pais
  25. ort01 LIKE kna1-ort01 , "Ciudad
  26. kunnr LIKE kna1-kunnr , "Codigo Cliente
  27. name1 LIKE kna1-name1 , "Nombre Cliente
  28. END OF ty_clientes.

  29. TYPES:
  30. BEGIN OF ty_facturas,
  31. land1 LIKE kna1-land1, "Codigo Pais
  32. landx LIKE t005t-landx, "Nombre Pais
  33. ort01 LIKE kna1-ort01 , "Ciudad
  34. kunnr LIKE kna1-kunnr , "Codigo Cliente
  35. name1 LIKE kna1-name1 , "Nombre Cliente
  36. vbeln LIKE vbak-vbeln, "Num.Pedido
  37. audat LIKE vbak-audat, "Fecha Pedido
  38. netwr LIKE vbak-netwr, "Valor Pedido
  39. END OF ty_facturas.

  40. TYPES:
  41. BEGIN OF ty_detalle,
  42. land1 LIKE kna1-land1, "Codigo Pais
  43. landx LIKE t005t-landx, "Nombre Pais
  44. ort01 LIKE kna1-ort01 , "Ciudad
  45. kunnr LIKE kna1-kunnr , "Codigo Cliente
  46. name1 LIKE kna1-name1 , "Nombre Cliente
  47. vbeln LIKE vbak-vbeln, "Num.Pedido
  48. audat LIKE vbak-audat, "Fecha Pedido
  49. netwr LIKE vbak-netwr, "Valor Pedido
  50. posnr LIKE vbap-posnr, "Linea de Pedido
  51. matnr LIKE vbap-matnr, "Cod.Articulo Linea
  52. arktx LIKE vbap-arktx, "Desc.Articulo Linea
  53. kbmeng LIKE vbap-kbmeng, "Cant.Articulo Linea
  54. netpr LIKE vbap-netpr, "Precio Articulo Linea
  55. END OF ty_detalle.

  56. *---------------------------------------------------------------------*
  57. * Tablas Internas y Registros (Workareas)
  58. *---------------------------------------------------------------------*
  59. DATA:
  60. ti_clientes TYPE STANDARD TABLE OF ty_clientes,
  61. wa_clientes LIKE LINE OF ti_clientes,
  62. wa_clientes_aux LIKE wa_clientes, " Auxiliar para corte Clientes
  63. ti_facturas TYPE STANDARD TABLE OF ty_facturas,
  64. wa_facturas LIKE LINE OF ti_facturas,
  65. wa_facturas_aux LIKE wa_facturas, " Auxiliar para corte Facturas
  66. ti_detalle TYPE STANDARD TABLE OF ty_detalle,
  67. wa_detalle LIKE LINE OF ti_detalle,
  68. wa_detalle_aux LIKE wa_detalle, " Auxiliar para corte Detalle
  69. so_ty_city(30) TYPE c,
  70. gv_t_ini TYPE i,
  71. gv_t_fin TYPE i,
  72. gv_records TYPE i,
  73. gv_mess(60) TYPE c,
  74. gv_time(10) TYPE c,
  75. gv_items(10) TYPE c,
  76. gv_tmp1(20) TYPE c,
  77. gv_tmp2(10) TYPE c,
  78. gv_tmp3(200) TYPE c,
  79. gv_len1 TYPE i,
  80. gv_len2 TYPE i,
  81. gv_len3 TYPE i,
  82. gv_key1 LIKE kna1-kunnr,
  83. gv_key2 LIKE vbap-vbeln,
  84. gv_keytxt(40) TYPE c,
  85. gv_key3 TYPE vbap-posnr,
  86. gv_key4 TYPE vbap-matnr,
  87. v_selected LIKE sy-tabix.

  88. *---------------------------------------------------------------------*
  89. * Variables de Acumulados de Corte
  90. *---------------------------------------------------------------------*
  91. DATA:
  92. gv_lineas_fra TYPE i, "Lineas en Pedido
  93. gv_bruto_fra TYPE p DECIMALS 2, "Bruto Pedido (cant x precio)
  94. gv_fras_cliente TYPE i, "Pedidos por Cliente
  95. gv_total_cliente TYPE p DECIMALS 2, "Importe Pedidos Cliente
  96. gv_fras_city TYPE i, "Pedidos por Ciudad
  97. gv_cli_city TYPE i, "Clientes por Ciudad
  98. gv_total_city TYPE p DECIMALS 2, "Importe Pedidos Ciudad
  99. gv_fras_pais TYPE i, "Pedidos por Pais
  100. gv_cli_pais TYPE i, "Clientes por Pais
  101. gv_total_pais TYPE p DECIMALS 2, "Importe Pedidos Pais
  102. gv_fras_total TYPE i, "Pedidos en Total
  103. gv_cli_total TYPE i, "Clientes en Total
  104. gv_gran_total TYPE p DECIMALS 2. "Importe Total Pedidos

  105. *---------------------------------------------------------------------*
  106. * Pantalla de selección
  107. *---------------------------------------------------------------------*
  108. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

  109. SELECT-OPTIONS so_pais FOR t005t-land1. "Seleccion Pais
  110. SELECT-OPTIONS so_cli FOR kna1-kunnr. "Seleccion Cod.Cliente
  111. SELECT-OPTIONS so_fecha FOR sy-datum "Seleccion Fecha Pedido
  112. DEFAULT '20000101' TO '20191212'.
  113. SELECT-OPTIONS so_city FOR (so_ty_city)
  114. DEFAULT 'A' TO 'ZZ'. "Seleccion Ciudad

  115. SELECTION-SCREEN END OF BLOCK b1.


  116. SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.

  117. PARAMETERS:
  118. p_cli RADIOBUTTON GROUP grp1 "Listado Clientes
  119. USER-COMMAND onchange, "Evento ONCHANGE (Ezequiel)
  120. p_fra RADIOBUTTON GROUP grp1, "Listado Pedidos
  121. p_lin RADIOBUTTON GROUP grp1. "Listado Lineas

  122. *SELECTION-SCREEN PUSHBUTTON 'Actualizar Opciones'.
  123. SELECTION-SCREEN END OF BLOCK b2.

  124. SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.

  125. PARAMETERS:
  126. p_tpais AS CHECKBOX, "Total Pais
  127. p_tcity AS CHECKBOX, "Total Ciudad
  128. p_tcli AS CHECKBOX, "Total Cliente
  129. p_tfra AS CHECKBOX. "Total Pedido

  130. SELECTION-SCREEN END OF BLOCK b3.

  131. *---------------------------------------------------------------------*
  132. AT SELECTION-SCREEN OUTPUT.
  133. *---------------------------------------------------------------------*

  134. PERFORM disable_opt USING 'p_tcli'.
  135. PERFORM disable_opt USING 'p_tfra'.
  136. PERFORM enable_disable_opts.

  137. *---------------------------------------------------------------------*
  138. AT SELECTION-SCREEN ON RADIOBUTTON GROUP grp1.
  139. *---------------------------------------------------------------------*
  140. IF sscrfields-ucomm = 'ONCHANGE'.
  141. IF p_cli IS NOT INITIAL.
  142. p_tcli = ' '.
  143. p_tfra = ' '.
  144. PERFORM disable_opt USING 'p_tcli'.
  145. PERFORM disable_opt USING 'p_tfra'.
  146. ELSEIF p_fra IS NOT INITIAL.
  147. p_tfra = ' '.
  148. PERFORM enable_opt USING 'p_tcli'.
  149. PERFORM disable_opt USING 'p_tfra'.
  150. ELSEIF p_lin IS NOT INITIAL.
  151. PERFORM enable_opt USING 'p_tcli'.
  152. PERFORM enable_opt USING 'p_tfra'.
  153. ENDIF.
  154. PERFORM enable_disable_opts.
  155. ENDIF.

  156. *-------------------------------------------------*
  157. INITIALIZATION.
  158. *-------------------------------------------------*
  159. CLEAR:
  160. gv_lineas_fra,
  161. gv_bruto_fra,
  162. gv_fras_cliente,
  163. gv_total_cliente,
  164. gv_fras_city,
  165. gv_cli_city,
  166. gv_total_city,
  167. gv_fras_pais,
  168. gv_cli_pais,
  169. gv_total_pais,
  170. gv_fras_total,
  171. gv_cli_total,
  172. gv_t_ini,
  173. gv_t_fin,
  174. gv_t_ini,
  175. gv_t_fin,
  176. gv_records,
  177. gv_mess,
  178. gv_time,
  179. gv_gran_total.

  180. CLEAR:
  181. gv_tmp3,
  182. gv_keytxt,
  183. gv_key1,
  184. gv_key2,
  185. gv_key3,
  186. gv_key4.

  187. *-------------------------------------------------*
  188. START-OF-SELECTION.
  189. *-------------------------------------------------*

  190. GET RUN TIME FIELD gv_t_ini.
  191. IF p_cli IS NOT INITIAL.
  192. "Consulta de Pedidos
  193. "Clientes JOIN Paises
  194. SELECT c~land1 p~landx c~ort01 c~kunnr c~name1
  195. INTO CORRESPONDING FIELDS OF TABLE ti_clientes
  196. FROM kna1 AS c
  197. INNER JOIN t005t AS p
  198. ON c~land1 = p~land1
  199. WHERE p~spras = sy-langu "Nombre de Pais en ES
  200. AND c~land1 IN so_pais
  201. AND c~ort01 IN so_city
  202. AND c~kunnr IN so_cli.
  203. DESCRIBE TABLE ti_clientes LINES gv_records.
  204. ENDIF.

  205. IF p_fra IS NOT INITIAL.
  206. "Consulta de Pedidos
  207. "Cabeceras JOIN Clientes JOIN Paises
  208. SELECT c~land1 p~landx c~ort01 c~kunnr c~name1 f~vbeln
  209. f~audat f~netwr
  210. INTO CORRESPONDING FIELDS OF TABLE ti_facturas
  211. FROM vbak AS f
  212. INNER JOIN kna1 AS c
  213. ON c~kunnr = f~kunnr
  214. INNER JOIN t005t AS p
  215. ON c~land1 = p~land1
  216. WHERE p~spras = sy-langu "Nombre de Pais en ES
  217. AND f~kunnr IN so_cli
  218. AND c~ort01 IN so_city
  219. AND f~audat IN so_fecha
  220. AND c~land1 IN so_pais.
  221. DESCRIBE TABLE ti_facturas LINES gv_records.
  222. ENDIF.

  223. IF p_lin IS NOT INITIAL.
  224. "Consulta de Lineas de Pedido
  225. "Lineas JOIN Cabeceras JOIN Clientes JOIN Paises
  226. SELECT c~land1 p~landx c~ort01 c~kunnr c~name1 f~vbeln
  227. f~audat f~netwr l~posnr l~matnr l~arktx l~kbmeng l~netpr
  228. INTO CORRESPONDING FIELDS OF TABLE ti_detalle
  229. FROM vbap AS l
  230. INNER JOIN vbak AS f
  231. ON l~vbeln = f~vbeln
  232. INNER JOIN kna1 AS c
  233. ON c~kunnr = f~kunnr
  234. INNER JOIN t005t AS p
  235. ON c~land1 = p~land1
  236. WHERE p~spras = sy-langu "Nombre de Pais en ES
  237. AND c~land1 IN so_pais
  238. AND c~ort01 IN so_city
  239. AND c~kunnr IN so_cli
  240. AND f~audat IN so_fecha.
  241. DESCRIBE TABLE ti_detalle LINES gv_records.
  242. ENDIF.
  243. * Tiempo de ejecucion
  244. GET RUN TIME FIELD gv_t_fin.
  245. gv_t_ini = gv_t_fin - gv_t_ini.
  246. WRITE gv_t_ini TO gv_time.
  247. WRITE gv_records TO gv_items.
  248. CONCATENATE gv_items 'resultados en' gv_time 'microsegundos.'
  249. INTO gv_mess
  250. SEPARATED BY ' '.
  251. MESSAGE gv_mess TYPE 'S'.

  252. *-------------------------------------------------*
  253. END-OF-SELECTION.
  254. *-------------------------------------------------*
  255. IF p_cli IS NOT INITIAL.
  256. PERFORM lista_clientes.
  257. ENDIF.

  258. IF p_fra IS NOT INITIAL.
  259. PERFORM lista_facturas.
  260. ENDIF.

  261. IF p_lin IS NOT INITIAL.
  262. PERFORM lista_detalle.
  263. ENDIF.
  264. *-------------------------------------------------*
  265. TOP-OF-PAGE.
  266. *-------------------------------------------------*
  267. PERFORM lista_cabecera.

  268. *-------------------------------------------------*
  269. END-OF-PAGE.
  270. *-------------------------------------------------*
  271. PERFORM lista_pie.

  272. *-------------------------------------------------*
  273. AT LINE-SELECTION.
  274. *-------------------------------------------------*
  275. gv_tmp3 = sy-lisel.
  276. * Hay controlar SY-LSIND para no llamar desde el subinforme infinitamente
  277. CASE sy-lsind.
  278. WHEN 1. "Llamadas de primer nivel
  279. IF gv_tmp3(1) = sy-vline(1).
  280. * Es registro de dato
  281. IF p_cli IS NOT INITIAL.

  282. PERFORM get_keys_from_line USING sy-lisel 101
  283. CHANGING gv_key1 gv_key3 gv_key4 gv_keytxt.
  284. PERFORM show_cliente USING gv_key1.

  285. ENDIF.

  286. IF p_fra IS NOT INITIAL.

  287. PERFORM get_keys_from_line USING sy-lisel 102
  288. CHANGING gv_key1 gv_key3 gv_key4 gv_keytxt.
  289. PERFORM show_pedido USING gv_key1.

  290. ENDIF.

  291. IF p_lin IS NOT INITIAL.

  292. PERFORM get_keys_from_line USING sy-lisel 103
  293. CHANGING gv_key1 gv_key3 gv_key4 gv_keytxt.
  294. PERFORM show_detalle USING gv_key1 gv_key3.

  295. ENDIF.
  296. ELSE.
  297. * Es registro de corte (Cabecera o Subtotal)
  298. * Analizar el tipo de registro
  299. CONDENSE gv_tmp3.
  300. CLEAR:
  301. gv_len1,
  302. gv_len2,
  303. gv_len3.
  304. IF gv_tmp3 CS 'Pedido:' AND
  305. gv_tmp3 CS 'bruto '.
  306. gv_len1 = 4. "Click en Subtotal Pedido
  307. ELSEIF gv_tmp3 CS 'Cliente:' AND
  308. gv_tmp3 CS 'pedidos '.
  309. gv_len1 = 3. "Click en Subtotal Cliente
  310. ELSEIF gv_tmp3 CS 'Cliente:'.
  311. gv_len1 = 23. "Click en Cabecera Cliente
  312. ELSE.
  313. IF gv_tmp3 CS 'Total ' AND
  314. &am

 

 

 


Sobre el autor

Publicación académica de Carlos Piles Rosell, en su ámbito de estudios para la Carrera Consultor ABAP.

SAP Senior

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

✒️+Comunidad Académica CVOSOFT

Continúe aprendiendo sobre el tema "Los reportes interactivos" de la mano de nuestros alumnos.

SAP Senior

Unidad 5 - Reportes Interactivos: Dado que los reportes interactivos necesitan de la interacción del usuario con el reporte. Entonces esta clase de reportes no sera posible ejecutarla de fondo. Hay que tenerlo en cuenta al momento de crear el programa.

Acceder a esta publicación

Creado y Compartido por: Matias Ciutat

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Master

para mi gusto los reportes interactivos son los reportes mas versatiles ya que incorporan de forma simple la profundidad de informacion en formato maestro detalle que en otros lenguajes de programacion son mas complicados de programar y presentar al usuario.

Acceder a esta publicación

Creado y Compartido por: Eduardo Vargas

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Entre los reportes los interactivos son los mas utilizados pues requieren que el usuario llene ciertos parametros previa impresion del reporte

Acceder a esta publicación

Creado y Compartido por: Faharid Manjarrez

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP SemiSenior

Siempre en los reportes interactivos, la variable del sistema sy-lsind contiene el indice de la lista de detalle.

Acceder a esta publicación

Creado y Compartido por: Angel Efrain Roque Bañez

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert


Sin duda, los reportes interactivos favorecen en mucho al programador, aunque si bien es cierto que se tienen que desarrollar un poco mas y ser mas metodicos, tambien es cierto que sin duda, es la base de la buena programacion, y cuando digo buena, me refiero a la programacion a la vieja escuela. Esto lo digo porque los elementos que podemos utilizar para posicionar el cursor, para saber que linea se clickea, para ingresar a diferentes niveles el detalle de una linea, siempre es bueno, dado que eso es lo que espera el usuario. El hecho de poner en ventanas el detalle le da un toque muy profesional al programa. No obstante, creo que lo que implicara aqui un problema pudiera ser la logica, sobre todo cuando sabemos que llevamos diferentes niveles,...

Acceder a esta publicación

Creado y Compartido por: Juan Luis Valdez Galicia

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP SemiSenior

Reportes Interactivos. Es un tipo de reporte ABAP,donde se muestra un primer listado por pantalla, con cierta información y luego haciendo doble clic a una linea determinada del primer listado, se accede a otros datos relativos a esa linea y así sucesivamente por cuantos niveles tenga el listado. Los reportes interactivos se ejecuta solo en forma online, ya que requiere interacción con el usuario. Eventos y variables de un reporte interactivo. AT LINE -SELECTION. Este evento se ubica luego del evento START-OF.SELECTION . SY-LSIND. Contiene el indice de la lista de detalle. SY-LISEL. Tiene el contenido de la linea seleccionada. SY-LILLI. Contiene la linea seleccionada de la lista. SY-CUROW. Contiene la posición del...

Acceder a esta publicación

Creado y Compartido por: Fabio Gallo

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

cuando estemos programando reportes interactivos para un usuario debemos de tener cuidado en la cantidad de información que estemos llamando en cada sub-nivel del reporte, esto por que podríamos causar una saturacion de memoria o volveríamos el reporte muy lento.

Acceder a esta publicación

Creado y Compartido por: Jose Manuel Alvarez Torres

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Master

Reportes interactivos: es un reporte donde se muestra una informacion incial, listado por pantalla, y luego haciendo clic a una linea determinada se accede a otros datos relativos a la linea.

Acceder a esta publicación

Creado y Compartido por: Rainer Diaz

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP SemiSenior

Reportes interactivos. Es un reporte tipo encabezado-detalle, en donde a partir de la información de un primer reporte, al seleccionar un registro, el reporte nos mostrará en un sub reporte, información relacionada al registro seleccionado. Los niveles o sub niveles pueden ser N. SY-LSIND => Contiene el indice o numero de linea seleccionado en el reporte activo. Es decir el numero de linea en donde hicimos click. SY-LISEL => Contiene el contenido de la linea seleccionada (el contenido en string) SY-LILLI => Contiene la linea seleccionada de la lista (¿o sea?) SY-CUROW => Contiene la posición del cursor vertical. Para imprimir por pantalla la cabecera de los textos de los sub reportes, se utiliza...

Acceder a esta publicación

Creado y Compartido por: Saul Rincon Olvera

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Reporte Interactivo Es un tipo de reporte ABAP donde se muestra un primer listado por pantlla, con cierta informacion y luego haciendo doble clic a una linea determinada del primer listado, se accede a otros datos relativos a esa linea y asi sucesivamente por cuantos niveles tenga el listado. A diferencia del reporte clasico , que solo puede ser ejecutado tanto Online como Batch, el reporte interactivo es ejecutado solo en forma Online , ya que requiere de la interaccion con el usuario. La principal ventaja de los reportes interactivos es que con pocas lineas de codigo se puede crear un reporte con interaccion con el usuario, a diferencia de los programas de dialogo, qure requieren mucho mas tiempo de construccion. Dado que los reportes interactivos...

Acceder a esta publicación

Creado y Compartido por: Marco Antonio Vazquez Gonzalez

 


 

👌Genial!, estos fueron los últimos artículos sobre más de 79.000 publicaciones académicas abiertas, libres y gratuitas compartidas con la comunidad, para acceder a ellas le dejamos el enlace a CVOPEN ACADEMY.

Buscador de Publicaciones:

 


 

No sea Juan... Solo podrá llegar alto si realiza su formación con los mejores!