✒️ABAP / La performance en ABAP Por Carlos Piles Rosell

Selector Alummnos / Empresas

ABAP La performance en ABAP

ABAP La performance en ABAP

Comparación de Performance de SQL

Hola Compañeros:

Os dejo aquí el código fuente de un análisis de performance de SQL configurable mediante el uso de buenas y malas practicas en la sentencia SELECT. El tiempo y los registros recuperados aparecen en la barra de estado con un mensaje de STATUS. La consulta es un cuádruple JOIN con selección. Yo no percibo grandes aumentos de rencimiento, tan solo un 15%-20% entre el peor y el mejor caso.

  1. *&---------------------------------------------------------------------*
  2. *& Report ZGZ57B_SQL_PERFORMANCE
  3. *&
  4. *&---------------------------------------------------------------------*
  5. *&
  6. *&
  7. *&---------------------------------------------------------------------*
  8. REPORT zgz57b_sql_performance.
  9. *---------------------------------------------------------------------*
  10. * Tablas de la Base de Datos SAP
  11. *---------------------------------------------------------------------*
  12. TABLES:
  13. kna1, "Maestro Clientes
  14. t005t, "Nombre de los Paises
  15. vbak, "Cabeceras de Pedido
  16. vbap. "Lineas de Pedido
  17. *---------------------------------------------------------------------*
  18. * Tipos para las Tablas de los Informes
  19. *---------------------------------------------------------------------*
  20. TYPES:
  21. BEGIN OF ty_detalle,
  22. land1 LIKE kna1-land1, "Codigo Pais
  23. landx LIKE t005t-landx, "Nombre Pais
  24. ort01 LIKE kna1-ort01 , "Ciudad
  25. kunnr LIKE kna1-kunnr , "Codigo Cliente
  26. name1 LIKE kna1-name1 , "Nombre Cliente
  27. vbeln LIKE vbak-vbeln, "Num.Pedido
  28. audat LIKE vbak-audat, "Fecha Pedido
  29. netwr LIKE vbak-netwr, "Valor Pedido
  30. posnr LIKE vbap-posnr, "Linea de Pedido
  31. matnr LIKE vbap-matnr, "Cod.Articulo Linea
  32. arktx LIKE vbap-arktx, "Desc.Articulo Linea
  33. kbmeng LIKE vbap-kbmeng, "Cant.Articulo Linea
  34. netpr LIKE vbap-netpr, "Precio Articulo Linea
  35. END OF ty_detalle.
  36. *---------------------------------------------------------------------*
  37. * Tablas Internas y Registros (Workareas)
  38. *---------------------------------------------------------------------*
  39. DATA:
  40. ti_detalle TYPE STANDARD TABLE OF ty_detalle,
  41. wa_detalle LIKE LINE OF ti_detalle,
  42. wa_detalle_aux LIKE wa_detalle, " Auxiliar para corte Detalle
  43. so_ty_city(30) TYPE c,
  44. gv_t_ini TYPE i,
  45. gv_t_fin TYPE i,
  46. gv_records TYPE i,
  47. gv_mess(60) TYPE c,
  48. gv_time(12) TYPE c,
  49. gv_items(10) TYPE c,
  50. v_selected LIKE sy-tabix.
  51. *---------------------------------------------------------------------*
  52. * Variables de Acumulados de Corte
  53. *---------------------------------------------------------------------*
  54. DATA:
  55. gv_lineas_fra TYPE i, "Lineas en Pedido
  56. gv_bruto_fra TYPE p DECIMALS 2, "Bruto Pedido (cant x precio)
  57. gv_fras_cliente TYPE i, "Pedidos por Cliente
  58. gv_total_cliente TYPE p DECIMALS 2, "Importe Pedidos Cliente
  59. gv_fras_city TYPE i, "Pedidos por Ciudad
  60. gv_cli_city TYPE i, "Clientes por Ciudad
  61. gv_total_city TYPE p DECIMALS 2, "Importe Pedidos Ciudad
  62. gv_fras_pais TYPE i, "Pedidos por Pais
  63. gv_cli_pais TYPE i, "Clientes por Pais
  64. gv_total_pais TYPE p DECIMALS 2, "Importe Pedidos Pais
  65. gv_fras_total TYPE i, "Pedidos en Total
  66. gv_cli_total TYPE i, "Clientes en Total
  67. gv_gran_total TYPE p DECIMALS 2. "Importe Total Pedidos
  68. *---------------------------------------------------------------------*
  69. * Pantalla de selección
  70. *---------------------------------------------------------------------*
  71. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
  72. SELECT-OPTIONS so_pais FOR t005t-land1. "Seleccion Pais
  73. SELECT-OPTIONS so_cli FOR kna1-kunnr. "Seleccion Cod.Cliente
  74. SELECT-OPTIONS so_fecha FOR sy-datum. "Seleccion Fecha Pedido
  75. SELECT-OPTIONS so_city FOR (so_ty_city)
  76. DEFAULT 'A' TO 'ZZ'. "Seleccion Ciudad
  77. SELECTION-SCREEN END OF BLOCK b1.
  78. SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
  79. PARAMETERS:
  80. p_all RADIOBUTTON GROUP grp1, "SELECT *
  81. p_field RADIOBUTTON GROUP grp1, "SELECT fields
  82. p_table RADIOBUTTON GROUP grp2, "... INTO TABLE
  83. p_loop RADIOBUTTON GROUP grp2. "SELECT ... ENDSELECT
  84. *SELECTION-SCREEN PUSHBUTTON 'Actualizar Opciones'.
  85. SELECTION-SCREEN END OF BLOCK b2.
  86. SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
  87. PARAMETERS:
  88. p_jchl RADIOBUTTON GROUP grp3, "Pais->Cliente->Cabecera->Linea
  89. p_jlhc RADIOBUTTON GROUP grp3. "Linea->Cabecera->Cliente->Pais
  90. SELECTION-SCREEN END OF BLOCK b3.
  91. CLEAR:
  92. gv_lineas_fra,
  93. gv_bruto_fra,
  94. gv_fras_cliente,
  95. gv_total_cliente,
  96. gv_fras_city,
  97. gv_cli_city,
  98. gv_total_city,
  99. gv_fras_pais,
  100. gv_cli_pais,
  101. gv_total_pais,
  102. gv_fras_total,
  103. gv_cli_total,
  104. gv_t_ini,
  105. gv_t_fin,
  106. gv_t_ini,
  107. gv_t_fin,
  108. gv_records,
  109. gv_mess,
  110. gv_time,
  111. gv_gran_total.
  112. *-------------------------------------------------*
  113. START-OF-SELECTION.
  114. *-------------------------------------------------*
  115. * GET RUN TIME FIELD gv_t_ini.
  116. IF p_jlhc IS NOT INITIAL.
  117. IF p_table IS NOT INITIAL.
  118. IF p_all IS NOT INITIAL.
  119. GET RUN TIME FIELD gv_t_ini.
  120. SELECT *
  121. BYPASSING BUFFER
  122. INTO CORRESPONDING FIELDS OF TABLE ti_detalle
  123. FROM vbap AS l
  124. INNER JOIN vbak AS f
  125. ON l~vbeln = f~vbeln
  126. INNER JOIN kna1 AS c
  127. ON c~kunnr = f~kunnr
  128. INNER JOIN t005t AS p
  129. ON c~land1 = p~land1
  130. WHERE p~spras = sy-langu "Nombre de Pais en ES
  131. AND c~land1 IN so_pais
  132. AND c~ort01 IN so_city
  133. AND c~kunnr IN so_cli
  134. AND f~audat IN so_fecha.
  135. ENDIF.
  136. IF p_field IS NOT INITIAL.
  137. "Consulta de Lineas de Pedido
  138. "Lineas JOIN Cabeceras JOIN Clientes JOIN Paises
  139. GET RUN TIME FIELD gv_t_ini.
  140. SELECT c~land1 p~landx c~ort01 c~kunnr c~name1 f~vbeln
  141. f~audat f~netwr l~posnr l~matnr l~arktx l~kbmeng l~netpr
  142. BYPASSING BUFFER
  143. INTO CORRESPONDING FIELDS OF TABLE ti_detalle
  144. FROM vbap AS l
  145. INNER JOIN vbak AS f
  146. ON l~vbeln = f~vbeln
  147. INNER JOIN kna1 AS c
  148. ON c~kunnr = f~kunnr
  149. INNER JOIN t005t AS p
  150. ON c~land1 = p~land1
  151. WHERE p~spras = sy-langu "Nombre de Pais en ES
  152. AND c~land1 IN so_pais
  153. AND c~ort01 IN so_city
  154. AND c~kunnr IN so_cli
  155. AND f~audat IN so_fecha.
  156. ENDIF.
  157. ENDIF.
  158. IF p_loop IS NOT INITIAL.
  159. IF p_all IS NOT INITIAL.
  160. GET RUN TIME FIELD gv_t_ini.
  161. SELECT *
  162. BYPASSING BUFFER
  163. INTO CORRESPONDING FIELDS OF wa_detalle
  164. FROM vbap AS l
  165. INNER JOIN vbak AS f
  166. ON l~vbeln = f~vbeln
  167. INNER JOIN kna1 AS c
  168. ON c~kunnr = f~kunnr
  169. INNER JOIN t005t AS p
  170. ON c~land1 = p~land1
  171. WHERE p~spras = sy-langu "Nombre de Pais en ES
  172. AND c~land1 IN so_pais
  173. AND c~ort01 IN so_city
  174. AND c~kunnr IN so_cli
  175. AND f~audat IN so_fecha.
  176. APPEND wa_detalle TO ti_detalle.
  177. ENDSELECT.
  178. ENDIF.
  179. IF p_field IS NOT INITIAL.
  180. GET RUN TIME FIELD gv_t_ini.
  181. SELECT c~land1 p~landx c~ort01 c~kunnr c~name1 f~vbeln
  182. f~audat f~netwr l~posnr l~matnr l~arktx l~kbmeng l~netpr
  183. BYPASSING BUFFER
  184. INTO CORRESPONDING FIELDS OF wa_detalle
  185. FROM vbap AS l
  186. INNER JOIN vbak AS f
  187. ON l~vbeln = f~vbeln
  188. INNER JOIN kna1 AS c
  189. ON c~kunnr = f~kunnr
  190. INNER JOIN t005t AS p
  191. ON c~land1 = p~land1
  192. WHERE p~spras = sy-langu "Nombre de Pais en ES
  193. AND c~land1 IN so_pais
  194. AND c~ort01 IN so_city
  195. AND c~kunnr IN so_cli
  196. AND f~audat IN so_fecha.
  197. APPEND wa_detalle TO ti_detalle.
  198. ENDSELECT.
  199. ENDIF.
  200. ENDIF.
  201. ENDIF.
  202. IF p_jchl IS NOT INITIAL.
  203. IF p_table IS NOT INITIAL.
  204. IF p_all IS NOT INITIAL.
  205. GET RUN TIME FIELD gv_t_ini.
  206. SELECT *
  207. BYPASSING BUFFER
  208. INTO CORRESPONDING FIELDS OF TABLE ti_detalle
  209. FROM t005t AS p
  210. INNER JOIN kna1 AS c
  211. ON c~land1 = p~land1
  212. INNER JOIN vbak AS f
  213. ON c~kunnr = f~kunnr
  214. INNER JOIN vbap AS l
  215. ON l~vbeln = f~vbeln
  216. WHERE p~spras = sy-langu "Nombre de Pais en ES
  217. AND c~land1 IN so_pais
  218. AND c~ort01 IN so_city
  219. AND c~kunnr IN so_cli
  220. AND f~audat IN so_fecha.
  221. ENDIF.
  222. IF p_field IS NOT INITIAL.
  223. "Consulta de Lineas de Pedido
  224. "Lineas JOIN Cabeceras JOIN Clientes JOIN Paises
  225. GET RUN TIME FIELD gv_t_ini.
  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. BYPASSING BUFFER
  229. INTO CORRESPONDING FIELDS OF TABLE ti_detalle
  230. FROM t005t AS p
  231. INNER JOIN kna1 AS c
  232. ON c~land1 = p~land1
  233. INNER JOIN vbak AS f
  234. ON c~kunnr = f~kunnr
  235. INNER JOIN vbap AS l
  236. ON l~vbeln = f~vbeln
  237. WHERE p~spras = sy-langu "Nombre de Pais en ES
  238. AND c~land1 IN so_pais
  239. AND c~ort01 IN so_city
  240. AND c~kunnr IN so_cli
  241. AND f~audat IN so_fecha.
  242. ENDIF.
  243. ENDIF.
  244. IF p_loop IS NOT INITIAL.
  245. IF p_all IS NOT INITIAL.
  246. GET RUN TIME FIELD gv_t_ini.
  247. SELECT *
  248. BYPASSING BUFFER
  249. INTO CORRESPONDING FIELDS OF wa_detalle
  250. FROM t005t AS p
  251. INNER JOIN kna1 AS c
  252. ON c~land1 = p~land1
  253. INNER JOIN vbak AS f
  254. ON c~kunnr = f~kunnr
  255. INNER JOIN vbap AS l
  256. ON l~vbeln = f~vbeln
  257. WHERE p~spras = sy-langu "Nombre de Pais en ES
  258. AND c~land1 IN so_pais
  259. AND c~ort01 IN so_city
  260. AND c~kunnr IN so_cli
  261. AND f~audat IN so_fecha.
  262. APPEND wa_detalle TO ti_detalle.
  263. ENDSELECT.
  264. ENDIF.
  265. IF p_field IS NOT INITIAL.
  266. GET RUN TIME FIELD gv_t_ini.
  267. SELECT c~land1 p~landx c~ort01 c~kunnr c~name1 f~vbeln
  268. f~audat f~netwr l~posnr l~matnr l~arktx l~kbmeng l~netpr
  269. BYPASSING BUFFER
  270. INTO CORRESPONDING FIELDS OF wa_detalle
  271. FROM t005t AS p
  272. INNER JOIN kna1 AS c
  273. ON c~land1 = p~land1
  274. INNER JOIN vbak AS f
  275. ON c~kunnr = f~kunnr
  276. INNER JOIN vbap AS l
  277. ON l~vbeln = f~vbeln
  278. WHERE p~spras = sy-langu "Nombre de Pais en ES
  279. AND c~land1 IN so_pais
  280. AND c~ort01 IN so_city
  281. AND c~kunnr IN so_cli
  282. AND f~audat IN so_fecha.
  283. APPEND wa_detalle TO ti_detalle.
  284. ENDSELECT.
  285. ENDIF.
  286. ENDIF.
  287. ENDIF.
  288. DESCRIBE TABLE ti_detalle LINES gv_records.
  289. * Tiempo de ejecucion
  290. GET RUN TIME FIELD gv_t_fin.
  291. gv_t_ini = gv_t_fin - gv_t_ini.
  292. WRITE gv_t_ini TO gv_time.
  293. WRITE gv_records TO gv_items.
  294. CONCATENATE gv_items 'resultados en' gv_time 'microsegundos.'
  295. INTO gv_mess
  296. SEPARATED BY ' '.
  297. MESSAGE gv_mess TYPE 'S'.
  298. *-------------------------------------------------*
  299. END-OF-SELECTION.
  300. *-------------------------------------------------*

 

Escanear / Compartir

 

 


Sobre el autor

Publicación académica de Carlos Piles Rosell, en su ámbito de estudios para el Curso SAP 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 "La performance en ABAP" de la mano de nuestros alumnos.

SAP Master


La Performance en ABAP Se analizan las prácticas de programación que afectan el desempeño y rendimiento en ABAP, priorizando la performance. Los tres aspectos fundamentales son: tiempo de procesamiento de la lógica ABAP, de los accesos a la base de datos y del sistema SAP. El acceso a la base de datos suele ser el principal factor de impacto en recursos y tiempo, aunque con SAP HANA este impacto ha disminuido. Se recomienda utilizar la transacción SE30 para medir los tiempos de procesamiento y detectar cuellos de botella. Lo ideal es que el mayor porcentaje de tiempo se invierta en la lógica ABAP y el menor en los accesos a base de datos. Buenas y malas prácticas de acceso...

Acceder a esta publicación

Creado y Compartido por: Juan Ignacio Romero

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

SAP Senior

¿Qué afecta la performance? 1. Accesos a base de datos (el más crítico). 2. Lógica ABAP (bucles, condiciones, tablas internas). 3. Tiempo del sistema (carga del servidor). Herramienta de análisis: · Transacción SE30 (Análisis de tiempo de ejecución). Buenas Prácticas - Base de Datos: Mala Práctica Buena Práctica Razón SELECT * SELECT campo1 campo2 Evita traer datos innecesarios SELECT ... ENDSELECT SELECT ... INTO TABLE 8x más rápido SELECT sin WHERE Siempre usar WHERE Evita full table scan SELECT dentro de LOOP SELECT FOR ALL ENTRIES Reduce accesos a DB INSERT/UPDATE en LOOP INSERT/UPDATE ... FROM TABLE 1 acceso vs N accesos...

Acceder a esta publicación

Creado y Compartido por: Mara Fadua Romero Hernandez

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

SAP Master

Introducción: La performance en ABAP se centra en tres pilares: tiempo de acceso a BD, lógica ABAP y carga del sistema. ¡Domina las buenas prácticas para evitar cuellos de botella en programas críticos! Diagnóstico: Transacción SE30 Herramienta clave: Analiza distribución de tiempos: Base de datos (Mayor impacto) Lógica ABAP Sistema SAP Objetivo ideal: Minimizar tiempo de BD (< 30%) Maximizar eficiencia en lógica ABAP Malas Prácticas en Acceso a BD SELECT * Problema: Recupera campos innecesarios. Solución:...

Acceder a esta publicación

Creado y Compartido por: Oscar Aravena Muller / Disponibilidad Laboral: FullTime

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

SAP Expert



La performance en ABAP dentro del ecosistema SAP es un tema fundamental para garantizar la eficiencia, escalabilidad y estabilidad de los sistemas empresariales. ABAP (Advanced Business Application Programming) es el lenguaje de programación principal del sistema SAP ERP, utilizado para desarrollar aplicaciones de negocio críticas que deben procesar grandes volúmenes de datos con alta confiabilidad. La performance en este contexto hace referencia al tiempo de ejecución, consumo de recursos y optimización de procesos dentro del entorno SAP. Este resumen aborda en 1000 palabras exactas los principios, prácticas y consideraciones clave para mejorar la performance en programación ABAP. La performance...

Acceder a esta publicación

Creado y Compartido por: David Ibarra / Disponibilidad Laboral: FullTime + Carta Presentación

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

SAP Expert


La performance en ABAP 1 La performance en ABAP Se refiere al rendimiento y la eficiencia con la que se ejecuta el código. Es un aspecto fundamental, ya que un mal desempeño puede afectar no solo la ejecución de un programa, sino el funcionamiento general del sistema SAP. Existen tres aspectos clave que determinan la performance de un programa ABAP: Tiempo de procesamiento de la lógica ABAP: Se refiere al tiempo que toma ejecutar las instrucciones y procesos internos del programa. Tiempo de acceso a la base de datos: Es el tiempo necesario para consultar, insertar, modificar o eliminar datos en las tablas del sistema. Este es el factor que más influye en el rendimiento,...

Acceder a esta publicación

Creado y Compartido por: Geovanny Martínez Campoverde

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

SAP Senior

Performace en ABAP en abap existe buenas y malas practicas, por que afectan rendimiento o performance (analisis de desempeño y rendimiento) de programas o otros factores tiene que ver con 3 aspectos base: *el tiempo de proceso de la logica *tiempo de proceso de accesos a tablas de database *tiempo de proceso de sistema SAP el tiempo de procesamiento a las tablas es el que mas consume recursos la transaccion SE30 Analisis de tiempo de ejecucion permite evaluar la distribucion del tiempo en un programa: en la pantalla principal se pone nombre del prog a evaluar buenas y malas practicas en accesos a la base de datos evitar usar SELECT * es mejor especificar los campos evitar SELECT ENDSELECT es mejor usar INTO TABLE evitar SELECT...

Acceder a esta publicación

Creado y Compartido por: Luciano Martinez / Disponibilidad Laboral: FullTime + Carta Presentación

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

SAP Expert


Dentro de la programación en ABAP podemos identificar cuáles son las buenas y las malas prácticas de programación, desde el punto de vista de la performance de nuestros desarrollos. Es sumamente importante tener bien claro que prácticas son desaconsejadas y cuales si son recomendadas, de modo de poder apuntar a realizar programas de alta calidad, que funcionen perfectamente en el ambiente productivo, donde las tablas de la base de datos contienen millones de registros y cada micro segundo cuenta. ABAP nos proporciona una herramienta muy útil e interesante para el análisis de la performance que es la transacción estándar ST05 Tips and Tricks. Allí veremos que los tiempos de...

Acceder a esta publicación

Creado y Compartido por: Jose Medina / Disponibilidad Laboral: FullTime + Carta Presentación

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

SAP Master

LA PERFORMANCE EN ABAP: en ABAP existen lo que en programación se denomina buenas y malas prácticas, ya sea porque afectan al rendimiento o la performance de los programas o porque afectan a otros factores que son determinados como ser la reutilización y el mantenimiento de código. Cuando hablemos de performance nos estaremos refiriendo al análisis del desempeño y el rendimiento del programa ABAP. Dentro de ABAP podemos decir que la performance de un programa tiene que ver con 3 aspectos fundamentales que son los siguientes: - El tiempo de procesamiento de la lógica ABAP existente en el programa. - El tiempo de procesamiento de los accesos a las tablas de la base de datos. - El tiempo de procesamiento...

Acceder a esta publicación

Creado y Compartido por: Jean Carlos Lopez / Disponibilidad Laboral: FullTime

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

SAP Expert


Performance in ABAP Performance refers to the analysis of the execution and efficiency of ABAP programs. In this analysis, there are three fundamental aspects: The processing time of the program logic. The processing time of accesses to database tables. The processing time of the ABAP system. Of these three times, the most resource-consuming one is the processing time of accesses to database tables, followed by the processing of logic, and finally the processing of the ABAP system. For this analysis, we have the transaction SE30, which evaluates how the execution and processing time of the program are distributed. To do this, upon entry, the name of the program is indicated, and the Evaluate button is pressed. This will show us...

Acceder a esta publicación

Creado y Compartido por: Jaime Eduardo Gomez Arango / Disponibilidad Laboral: FullTime + Carta Presentación

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

SAP Senior

Performance en ABAP El performances refiere a el análisis del desempeño y el rendimiento del programa ABAP. En este análisis existe los siguiente 3 aspectos fundamentales: * El tiempo de procesamiento de la lógica del programa. * El tiempo de procesamiento de los accesos a las tablas de las bases de datos. * El tiempo del procesamiento del sistema ABAP. De estos 3 tiempos, el que más recursos consume es el tiempo de procesamiento de los accesos a las tablas de bases de datos, luego esta el procesamiento de la lógica y finalmente el procesamiento del sistema ABAP. Para este análisis contamos con la transacción SE30 que evaluar cómo se distribuye el tiempo de ejecución y procesamiento...

Acceder a esta publicación

Creado y Compartido por: Linda Carolina Zambrano León

 


 

👌Genial!, estos fueron los últimos artículos sobre más de 99.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!