El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
BlogDeSAP01
1. Blogdesap
resumen 2010-11
http://blogdesap.blogspot.com
Customizing, ABAP y noticias
Recopilación de los artículos publicados en blogdesap de los años 2010 y 2011
2. Puedes acceder a estos artículos y otros que voy publicando a través de
http://blogdesap.blogspot.com
http://www.facebook.com/blogdesap
Para seguir creciendo te agradezco que compartas este blog con tus amigos, conocidos y cualquier que esté interesado.
Puedes compartir este pdf libremente bajo las condiciones de la licencia Creative Commons
Blogdesap: resumen 2010-11 por http://blogdesap.blogspot.com se encuentra bajo una Licencia
Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.
Este PDF se ha generado gracias al proyecto http://fivefilters.org/ y a http://www.pdfill.com/pdf_tools_free.html
Las imágenes que aparecen publicadas son propiedad de sus autores y aparecen publicadas aquí bajo la licencia Creative
Commons que ellos mismos cedieron. A continuación se relaciona el origen de estas imágenes.
http://www.flickr.com/photos/wassmer/with/507367448/
http://www.flickr.com/photos/dangoodwin/
http://www.flickr.com/photos/21218849@N03/
http://www.flickr.com/photos/ex-smith/
http://www.flickr.com/photos/4nitsirk/
http://www.flickr.com/photos/22280677@N07/
http://farm3.static.flickr.com/2476/3554582379_1d2799f43f.jpg
http://farm1.static.flickr.com/14/93136022_25afa7e458.jpg
http://www.flickr.com/photos/n3wjack/4661409838/
http://www.flickr.com/photos/tapaponga/5320210904/
http://www.flickr.com/photos/smanography/3293101820/
http://www.flickr.com/photos/loop_oh/442225983/
http://www.flickr.com/photos/chucksimmins/3387412983/
http://www.flickr.com/photos/oarranzli/6006659634/
http://farm1.static.flickr.com/180/370973576_9c1c871c39.jpg
http://www.flickr.com/photos/timothymorgan/75593157/
http://www.flickr.com/photos/kaibara/2403072725/
http://farm4.static.flickr.com/3594/3548342923_ec24bb64cd.jpg
http://farm3.static.flickr.com/2066/2189073444_2d12b95515.jpg
http://www.flickr.com/photos/oarranzli/6269831858/
http://www.flickr.com/photos/adwentures/273706419/
http://www.flickr.com/photos/laurenmanning/2318794240/
http://www.flickr.com/photos/moneyblognewz/5264722308/
http://www.flickr.com/photos/teegardin/6094310934/
http://www.flickr.com/photos/richardwinchell/2831353173/
http://farm3.static.flickr.com/2568/4105756012_db89e4be50.jpg
http://www.flickr.com/photos/29456235@N04/5396894948/
http://www.flickr.com/photos/the_ewan/4197995951/
http://www.flickr.com/photos/field_museum_library/3589463707/
http://www.flickr.com/photos/wrobel/300002369/
http://www.flickr.com/photos/nationaalarchief/3333358117/
http://www.flickr.com/photos/amagill/3366720659/
http://farm4.static.flickr.com/3148/2899489909_07ba71a9fc.jpg
http://www.flickr.com/photos/imlsdcc/4669586118/
http://www.flickr.com/photos/cstrzrock/228748627/
http://www.flickr.com/photos/teegardin/5913014568/
http://www.flickr.com/photos/glennbatuyong/2594336182/
http://www.flickr.com/photos/kozumel/2228603119/
http://www.flickr.com/photos/jepoirrier/3266948575/
http://farm2.static.flickr.com/1129/1326652095_07b4d3d154.jpg
http://farm2.static.flickr.com/1358/1061729364_ef2813c845_m.jpg
http://www.flickr.com/photos/shht/2212700490/
http://www.flickr.com/photos/loop_oh/4023321360/
http://www.flickr.com/photos/oarranzli/6038438702/
http://www.flickr.com/photos/teegardin/6094263846/
http://www.flickr.com/photos/horiavarlan/
http://www.flickr.com/photos/zigazou76/3713380197/
http://www.flickr.com/photos/asurroca/51024419/
4. INDICE
0. Estreno del blog
ABAP
1. Query SAP (I): grupos de usuarios
2. Query SAP (II): infosets
3. Query SAP (III): crear una query
4. ABAP en queries: programas integrados
5. Navegación en queries
6. Una plantilla ABAP
7. Listados ALV
8. Crear variantes de report
9. Exportar listados ALV a hojas de cálculo
10. Recursos de programación ABAP
11. Batch input recorder
12. Procesar juegos de datos de batch input
13. Extracción de información a partir de jobs
14. Parametrización de tablas de control (table control) en transacciones
15. Crear tablas transparentes y estructuras
16. Vistas de actualización de tablas
17. Tablas del diccionario
BC
18. Transporte de órdenes entre sistemas
19. Copia de órdenes de transporte entre sistemas no conectados
20. Protección de mandantes
21. Documentos adjuntos GOS
22. Gestión de autorizaciones
FI
23. Periodos contables
24. Crear asientos contables
25. Códigos de operación en la norma 43 (España)
26. Traspaso de partidas entre documentos
27. IVA: una guía para el aumento en SAP
28. Retención del IRPF ampliada en clientes
29. Cierre del ejercicio
CO
30.Cierre del ejercicio
31. Clases de coste primarias
32. Clave de periodificación en contratos
33. Imputación por defecto de clases de coste
34. Modificar la cuenta de resultados
MM
35. Estrategias organizativas en compras
36. Determinar categorías de valoración
37. Determinación de cuentas en compras automáticamente
38. Tolerancias de precio en pedidos de compra
39. Verificación de facturas dobles
40. Modificación en masa de precios de proveedores
41. Movimientos de materiales entre sociedades
42. Actualización del registro info en pedidos de compras
43. Análisis de materiales obsoletos
44. Liberación de pedidos de compras
45. Inventarios puntuales
46. Inventarios periódicos
PM
47. Equipos en SAP
48. Planificación de mantenimientos preventivos
49. Impresión de órdenes de mantenimiento
50. Log de modificaciones en órdenes
51. Verificación de disponibilidades en órdenes de mantenimiento
52. Tabla de planificación de capacidades: colores
53. Tabla de planificación de capacidades: selección
5. 54. Tabla de planificación de capacidades: layout
55. Horarios de trabajo de personal
PP
56. Definición de turnos y horarios en puestos de trabajo
57. Calendarios de trabajo en SAP
58. Stocks de seguridad (I): stock mínimo
59. Stocks de seguridad (II): perfil de cobertura
60. Gestión de la demanda por punto de pedido
61. Compensación de necesidades primarias
PS
62. Gestión de reclamaciones (I)
63. Gestión de reclamaciones (II)
SD
64. Fichero de población
65. Verificación de datos maestros: clientes
66. Condiciones de pago
67. Crear precios de venta
68. Gestión del riesgo en clientes
69. Determinación y substitución de materiales en ventas
70. Cross-selling
71. Ofertas y facturación de órdenes de servicio
72. Control de copia de documentos de ventas
73. Impresión de documentos en Comercial
74. Textos y observaciones en pedidos de venta
75. Añadir campos en listas de documentos comerciales
76. Anulación de facturas en masa
77. Sistema info de ventas
78. Simplificación de pantallas con variantes de transacción
VARIOS
79. Cambios en masa
80. Rangos numéricos
81. Roll out de una empresa (I): estructura de la empresa
82. Roll out de una empresa (II): módulos
83. Roll out de una empresa (III): gaps y desarrollos ABAP
84. Roll out de una empresa (IV): datos maestros
SAP
85. Enlaces relacionados con SAP
86. Especial Demo Jam
87. SAPTechEd Berlín 2010
88. Demo Jam SAPTechEd Las Vegas 2010
89. SAPPHIRENOW 2010
90. SAP Streamwork
91. Movilidad en SAP
92. IDES
6. 20 December, 2011 | created using fivefilters.org
Estreno del blog módulos han ido evolucionando también. Yo emplearé la
terminología de módulos como la he conocido, aunque es posible
que en algunos casos ya no se los conozca como módulos sino
como soluciones.
SAP-AC: Contabilidad General.
SAP-IM: Gestión de Inversiones.
SAP-EC: Controlling Empresarial.
SAP-RE: Bienes e Inmuebles.
SAP-FI: Finanzas.
SAP-CO: Controlling.
SAP-TR: Tesorería.
SAP-PS: Proyectos.
SAP-WF: Workflow.
SAP-IS: Soluciones Verticales.
SAP-HR: Recursos Humanos . También tenemos SAP-HCM.
SAP-PM: Mantenimiento.
SAP-QM: Calidad.
SAP-PP: Planificación y Producción.
SAP-MM: Materiales.
SAP-SD: Ventas y Distribución.
SAP-LO: Logística.
SAP-LE: Ejecución de Logística.
SAP-CS: Servicio al Cliente.
SAP-EHS: Medio Ambiente.
Así, pues, intentaré utilizar esta clasificación en los posts que
vaya subiendo en la medida de lo posible.
Espero que el blog sea de interés para los que ahora estéis en
este mundo del SAP y que no dudéis en dejar vuestros
comentarios.
Imagen de cabecera | Birkenzweig a través de Wylio
Bienvenidos al blog blogdesap.blogspot.com. El objetivo con el
que nace este blog es ser un lugar de información en el trabajo
diario con SAP. En él intentaré plasmar parte de las experiencias
que he tenido con SAP tanto desde un punto de vista funcional
como técnico. El blog recogerá, desde el punto de vista de un
consultor, tanto cuestiones de parametrización como de
programación ABAP.
A día de hoy, la Wikipedia define SAP como:
“a multinational software development and consulting
corporation, which provides enterprise software applications and
support to businesses of all sizes globally. Headquartered in
Walldorf, Germany, with regional offices around the world, SAP
is the largest software enterprise in Europe and the fourth
largest software enterprise in the world as of 2009. [2] The
company’s best known product is its SAP Enterprise Resource
Planning (SAP ERP) software.”
Es decir, SAP es la compañía. Y de entre los diferentes productos
que SAP comercializa, este blog tratará sobre el “Enterprise
Resource Planning” ERP de SAP, heredero de lo que se había
llamado SAP R/3, y cuyo nombre actual es SAP ECC.
Si bien es verdad que la terminología que emplea actualmente
SAP en su producto ha ido evolucionando, la base del producto
sigue siendo la misma, crear un entorno de gestión de
empresarial, donde cada área de la empresa esté integrada en
una estructura global. Anteriormente, estas áreas se definían por
módulos, pero a medida que el producto ha evolucionado, estos
1
7. 20 December, 2011 | created using fivefilters.org
Query SAP (I): grupos de Asignamos los usuarios: botón ‘Asignar usuario y Infosets”.
Para permitir que un usuario modifique las queries del
usuarios grupo de usuarios debemos mantener marcado el flag de
autorización junto al nombre de usuario.
Guardamos.
Y ya hemos acabado el primer paso en la creación de una query.
Imagen inicial | dangoodwin
¿Cómo puedo recuperar información almacenada en el sistema
acerca de mis clientes? ¿Y acerca de mis proveedores? ¿Y de mis
ventas? En definitiva, ¿cómo puedo obtener listados de consulta
sobre los datos que anteriormente he entrado en mi SAP?
Éste es el primer post de un grupo de tres sobre queries en SAP.
Una query en SAP es una herramienta que nos permite recuperar
información de la base de datos para generar listados de
información en tiempo real.
Es verdad que existen herramientas de programación ABAP que
ya nos permiten hacer listados y recuperar información de las
tablas de la base de datos. Sin embargo, con las queries no
tenemos necesidad de saber programar (aunque puede ser una
ayuda) y hace el proceso de construcción de listados una tarea
más rápida e intuitiva.
Siempre que creemos una query debemos seguir tres pasos
siempre en el siguiente orden.
–I: Crear un grupo de usuarios
–II: Crear un infoset.
–III: Crea la query.
Definición de un grupo de usuarios
Un grupo de usuarios es el primer paso en la creación de una
query SAP. En cada grupo asignamos los nombres de los usuarios
que tendrán acceso final à la query que generaremos. No es más
que una autorización para poder utilizar nuestra query a un
grupo ordenado de personas.
Por ejemplo, podemos determinar que las consultas o queries del
módulo SD sólo las podrán consultar aquellas personas de los
departamentos de Ventas y Marketing. En este caso, crearemos
un grupo de usarios llamado VENTAS donde incluiremos el
nombre de los usuarios de estos departamentos.
Funcionalidad
Herramientas /Workbench ABAP /Utilidades /Query SAP /SQ03 —
Grupo de usuarios
Creamos y asignamos un nombre a nuestro grupo de
usuarios: botón ‘Crear’.
1
8. 20 December, 2011 | created using fivefilters.org
Query SAP (II): infosets momento que cree el infoset sólo necesito información de
una de las dos. Así me ahorro problemas en el futuro.
Creamos el enlace entre ambas tablas añadiendo la nueva
tabla VBAP. Automáticamente, SAP nos propone las
conexiones entre tablas. Sin embargo, podéis borrar el
enlace y asociarlo a través de otros campos (siempre que
sean del mismo tipo, de lo contrario SAP no lo aceptará). Yo
voy a aceptar la propuesta que me hace SAP. Atención, en
este punto hay que decir que debemos tener cuidado con las
tablas que utilizamos en nuestro join. SAP no suele tomarse
muy bien las tablas cluster como la BSEG. En este caso es
Definición mejor utilizar tablas transparentes como la BSID, BSAD,
BSIK o BSAK.
El segundo paso en la creación de una query es la definición del
infoset asociado. Los infosets son vistas especiales de datos Tratar /Insertar tabla
donde se agrupan todos los campos que se utilizarán en una
query. En un infoset enlazaremos diferentes tablas a través de
campos comunes y seleccionaremos qué campos queremos que
estén disponibles para nuestras queries. A su vez, asignaremos el
infoset a uno o más grupos de usuarios (recordad el post anterior
sobre grupos de usuarios).
Funcionalidad
Siguiendo con el ejemplo del anterior post vamos a crear un
infoset de información de ventas, en concreto, de las cantidades
que nuestros clientes nos han pedido en un rango de fechas. Para
ello debemos saber que la tabla en la que se almacena la
información de pedidos de clientes en SAP se encuentra en la
tabla VBAK. La información de las cantidades solicitadas se Volvemos hacia atrás y creamos los grupos de campos
encuentra en la tabla VBAP. También debemos saber que ambas (Pasar a /Back). Esto son una especie de carpetas donde
tablas se relacionan entre sí a través del campo “documento de asignaremos los campos de nuestras disponibles para las
ventas” (VBAK-VBELN /VBAP-VBELN). Ahora podemos empezar futuras queries. Yo escogeré crear ‘Grupos de campos
a construir nuestro infoset. vacíos’ con lo que me creará dos carpetas, una para la tabla
VBAK y otro para la VBAP sin ningún campo asignado.
Entramos en la transacción de infosets.
Arrastramos los campos de las tablas (parte izquierda de la
pantalla) hacia los grupos de campos que hemos creado
Herramientas /Utilidades /Query SAP /SQ02 — Infosets
(parte derecha de la pantalla). En mi caso, arrastro los
Creamos un infoset, le damos una descripción y una tabla campos solicitante y documento de ventas de la VBAK
base sobre la que generaremos nuestro infoset. En nuestro y cantidad y material de la VBAP. Como veis sobre los
caso sobre la tabla VBAK. En este apartado existen varias campos solicitante y número de material SAP escribe una T.
opciones: podemos crear el infoset realizando la consulta Eso significa que asociado a estos códigos SAP
sólo sobre una tabla en exclusiva, sobre varias tablas, sobre internamente también arrastra sus descripciones, por lo que
una base de datos lógica o incluso sobre datos externos. no hay que hacer ninguna selección hacia las tablas de
Hay que pensar bien qué opción escoger ya que una vez se descripciones del solicitante (KNA1) ni del material (MAKT).
ha creado ya no hay vuelta atrás. Por ejemplo, si escogemos
crear un infoset a través de una tabla, si en el futuro
decidimos añadir una nueva tabla tendremos que borrar el
infoset y crear uno nuevo. Y eso será un problema mayor si
ya hemos creado la query subsiguiente pues en ese caso
también habría que borrar antes la query. Personalmente,
siempre creo las queries vía unión de tablas aunque en el
1
9. Además, para complicarlo un poco más voy a añadir un Volvemos a ‘Grupo de campos’. Vemos ahora que en la parte
campo que no está en ninguna de las tablas. Por ejemplo, si izquierda de la pantalla nos aparece un nuevo campo de
la posición ha sido rechazada (lo que se indica en SAP datos ‘Campos adicionales’ que contiene el campo que
a través del campo VBAP-ABGRU) le voy a dar la hemos creado. Lo que hay que hacer ahora es crear un
descripción ‘Posición rechazada’. Esto sólo lo podemos nuevo grupo de campos y arrastrar nuestro campo adicional
hacer mediante programación ABAP, una herramienta muy a este grupo de campos (también podríamos arrastrarlo
interesante que nos permiten los infosets. a uno de los grupos de campos que ya tenemos).
Pasar a /Detalles
Creamos el campo adicional y le damos descripción y tipo.
Sólo nos queda grabar, verificar y activar nuestro infoset.
Infoset /Grabar
Infoset /Verificar
Infoset /Generar
Ya podemos volver à la pantalla inicial y asignar el infoset al
grupo de usuarios que creamos anteriormente a través de la
transacción SQ01 (ver el post anterior).
Pasar a /Asignación a grupo de usuarios
Imagen inicial | Samuel Mann
Escribimos el coding para el campo. Verificamos el código
ABAP (corregimos si es necesario) y grabamos.
2
10. 20 December, 2011 | created using fivefilters.org
Query SAP (III): crear estándar). Mi experiencia personal me dice que no merece
la pena el trabajo de crear una query en un mandante de
una query desarrollo y luego transportarla hasta nuestro mandante
productivo. Será más rápido y más fácil testear nuestra
query si la creamos directamente en el área estándar. Para
eso vamos a Entorno /Ámbitos funcionales /Área estándar
(específico de mandante).
Nuestra query la crearemos dentro del grupo de usuarios
que creamos en el paso I. Por eso, iremos a Tratar /Cambiar
grupo de usuarios /Ventas.
Damos un nombre a nuestra query y la creamos.
Automáticamente nos pedirá que la asignemos a un infoset
(recordar el paso II). Evidentemente, asignaremos el infoset
que ya habíamos creado previamente (SD_VENTAS).
En la siguiente pantalla, SAP nos pide una descripción de la
query. Podemos también indicar la variante de la pantalla
de selección que queremos que se utilice por defecto al
ejecutar la query. Esta variante la podemos crear cuando ya
hayamos generado nuestra query y añadirla aquí
directamente (campo Variante estándar). En esta pantalla
también aparecen datos de ‘Formato de salida’. Aquí le
podemos indicar a nuestra query cómo queremos que se
muestre. Por defecto, utilizamos el “List Viewer ABAP”, es
decir, el ALV típico. Aunque SAP nos da la posibilidad
incluso de lanzar el resultado directamente hacia un Excel si
así se quiere (EXCEL).
Definición
El tercer paso en la creación de una query es, precisamente, la
creación de la query propiamente dicha. Esto es un listado de
información extraída de la base de datos. Para ello es necesario
que previamente hayamos creado el grupo de usuarios al que
permitiremos extraer la información. Asimismo, debemos haber
creado el infoset donde indicamos las tablas de información
necesaria.
Crear una query consiste en generar una pantalla de selección de
la información y una disposición (layout) de salida de toda esta
documentación.
Funcionalidad
Sigamos con el ejemplo. Creamos una query de información de
ventas.
Entramos en la transacción de queries.
Herramientas /Workbench ABAP /Utilidades /Query SAP /SQ01 —
Queries
Podemos crear nuestra query bien en área estándar bien en
ámbito global. Esto significa que podemos crear la query
Pasamos a ‘Selección de grupos de campos’. Aquí debemos
y luego transportarla (ámbito global) o bien crear la query
seleccionar todos nuestros grupos de campos del infoset. O,
directamente en nuestro entorno productivo (área
si alguno de los grupos de campos no los quisiéramos
1
11. utilizar en nuestra query, entonces simplemente no lo
seleccionamos.
En ‘Lista básica’ nos muestra los campos disponibles en
cada uno de los grupos de campos. Debemos seleccionar
aquellos que nos interesa que se muestren en la query. En
el caso del ejemplo, seleccionaré todos los campos. Como
veis los campos de texto, aunque no los habíamos
seleccionado directamente en nuestro infoset, sí que nos Y así el layout de salida.
aparecen dentro de los campos disponibles. Eso es
simplemente porque los campos de código solicitante
y número de material siempre llevan asociadas sus
descripciones por defecto.
En la pantalla de ‘Selecciones’ creamos nuestra pantalla de
selección. Es decir, los criterios a partir de los cuales
buscaremos la información. Yo voy a marcar los campos
solicitante, material y documento de ventas. A partir de aquí ya podemos utilizar la funcionalidad propia de
los listados ALV como descargar la información en Excel, hacer
filtros, sumas, sumas parciales, etc.
Enlaces | sappedia (añadido el 31/10/2010)
Imagen | Ex-Smith
‘Lista básica’: aquí construimos la disposición de salida
donde indicamos qué campos queremos que se muestren en
el listado y en qué orden. Además, podemos también darle
algún formato especial como colores, guiones de
separación, etc. Yo voy a marcar todos los campos
disponibles y además voy a hacer que sea de verde intenso.
Para hacer eso hay que arrastrar el campo
‘Afirmativo(intenso)’ sobre el campo que queremos que sea
de otro color.
Grabo.
Así queda la pantalla de selección.
2
12. 24 December, 2011 | created using fivefilters.org
ABAP en queries: programas grupo inconexo de transacciones programadas bajo nombres Z*
que, en el mejor de los casos, habremos agrupado en menús de
integrados usuario o en menús de favoritos. También nos da la posibilidad
de crear consultas de información impensables en un join simple
de tablas creado mediante la conexión gráfica. Podemos, por
ejemplo, unir dos tablas pero manteniendo una como cabecera
y la otra debajo de ésta con sus posiciones.
Veamos esto último. Queremos mostrar pedidos de compra, con
una línea de cabecera para cada pedido y siguiendo a esta
cabecera, toda la serie de posiciones del pedido.
Creamos el infoset marcando ‘Obtención de datos mediante
programa’ y ‘Programa integrado’.
El infoset nos exigirá que introduzcamos una estructura de
datos. Por lo tanto, previamente debemos ir al diccionario
y crear la estructura que soportará la salida de información.
Este paso previo no lo explico pero tenéis un ejemplo en el
siguiente enlace.
En este punto, los campos disponibles serán los que nos
indique nuestra estructura. Arrastraremos estos campos al
grupo de campos que tengamos creados. Lo interesante
Siguiendo con una serie de artículos anteriores donde ya aquí, es que se nos abre un botón que no habíamos visto
explicaba como crear queries e infosets voy a intentar mostrar hasta ahora. Este botón se llama ‘Programa de lectura de
otra manera realizar queries. En este caso vamos a integrar datos’ y nos señala el lugar a través del que haremos
programación ABAP en queries SAP. Se trata de utilizar toda la nuestra programación ABAP. Así que lo marcamos.
potencia que nos dan las presentaciones vía query para mostrar
información, pero haciéndolo sin utilizar los joins gráficos de
tablas.
En un principio, las queries SAP se entienden como una forma
sencilla de extraer información de la extensa base de datos de
SAP. Para obtener esta información, la mejor manera es
El editor ABAP que se nos abre consta de diversos eventos
utilizar la conexión gráfica de tablas en nuestros infosets. Sin
donde escribimos nuestros comandos ABAP:
embargo, para aquellos que ya tengan conocimientos sencillos de
programación ABAP, SAP provee una herramienta de Declaración de variables.
programación integrada en infosets. Con ella, no necesitamos
utilizar ninguna conexión gráfica, sino que podemos obtener
información a través de sentencias SQL y presentarlas en el
formato que nos dan las queries SAP.
¿Qué ventajas puede tener esta forma de crear queries? En
principio, la gran ventaja que yo observo es la posibilidad de
utilizar todo el “envoltorio” que nos da una query, con sus ALV y
layouts. Nos quita trabajo ya que sólo debemos concentrarnos en
recuperar la información. De la presentación de ésta ya se ocupa
la query. Además, nos da un entorno organizado de listados ya Pantalla de selección. Definimos el pedido de compras
que nos permite tener todas nuestras consultas bajo la como parámetro de selección en nuestra query.
apariencia de la transacción de queries SQ01. Nos evita tener un Podemos indicar una descripción del parámetro para
1
13. que no aparezca el nombre de la variable al ejecutar la Un listado de las posiciones de un pedido con una cabecera para
query. Para ello tenemos que ir à la pestaña ‘Delimit’ el pedido. El ejemplo es muy sencillo y poco significativo pero
y haciendo doble click sobre el parámetro cambiamos nos da una idea de la potencia de la herramienta.
el texto de selección.
Imagen inicial | 4nitsirk
Extracción de datos.
Salida de información.
Generamos nuestro infoset.
Asociamos el infoset a un grupo de usuarios.
Creamos nuestra query normalmente.
Y éste es el resultado:
2
14. 24 December, 2011 | created using fivefilters.org
Navegación en queries Ahora cuando lancemos la query y hagamos doble click sobre un
registro del listado vamos a tener la opción de escoger entre
navegar à la transacción VA03 o à la MB52.
En el siguiente vídeo explicativo se muestran todos los pasos:
La navegación se realiza al hacer doble click sobre cualquier
punto de un registro, independientemente del campo sobre el
que se pulse. Entonce, ¿cómo determina SAP cuál es el campo
que tiene que utilizar para navegar? Pues lo hace en base al ID
del parámetro. SAP recorre todos los campos del registro
y enlaza el ID del registro correcto con el ID del parámetro de
entrada de la transacción. Entonces para verificar que la
navegación funcionará correctamente debemos determinar cuál
es el ID del parámetro. Eso lo hacemos mediante los siguientes
pasos:
Vamos al campo de entrada de nuestra transacción, por
ejemplo el de la VA03
Logística /Comercial /Ventas /Pedido /VA03 – Visualizar
Una de las peculiaridades de SAP es que estemos donde estemos
el sistema suele permitirnos saltar entre transacciones. Pulsamos F1.
Simplemente debemos situarnos encima de un campo, hacer
doble click y el sistema navegará a otra transacción relacionada Marcamos ‘Datos técnicos’ o el icono ‘Martillo’.
con ese campo. Por ejemplo, si en la transacción en la que
estamos hay un campo con el código de un material, si hacemos Verificamos que existe un valor dentro de ‘ID parámetro’.
doble click sobre éste SAP navega hacia la transacción del
maestro de materiales de ese código en concreto.
En otros artículos ya había explicado cómo crear queries. En esta
ocasión voy a ampliar estos posts con esta sencilla funcionalidad
de SAP, la navegación.
Caso
Tenemos una query que nos permite listar posiciones de pedidos
de venta donde nos muestra las posiciones de pedidos con el
código de material. Queremos que al hacer doble click sobre un
registro en concreto SAP nos muestre el stock disponible en
almacén de ese material y el pedido de ventas completo asociado
¿Cómo lo hacemos?
Solución
Modificamos nuestra query.
Herramientas /Workbench ABAP /Utilidades /Query SAP /SQ01 –
Queries
Vamos al menú Pasar a /Asignación del informe.
Indicamos que nuestro tipo de informe será una
Hacemos lo mismo para el campo de nuestra query, pero desde
transacción. Igual que una transacción podríamos indicar un
la transacción SE11
report ABAP, una query, etc.
Herramientas /Workbench ABAP /Desarrollo /SE11 – Dictionary
Introducimos el nombre de nuestra transacción (VA03 para ABAP
visualizar el pedido de ventas completo)
Introducimos el elemento de datos (VBELN_VA) en el campo
Repetimos de nuevo para la otra transacción (MB52 para ‘tipo de datos’.
visualizar el stock del material).
Visualizar.
Grabamos.
1
15. Y en la pestaña propiedades adicionales el valor del ID del
parámetro debería ser el mismo que hemos obtenido
anteriormente.
Así podemos estar seguros que la navegación se hará
correctamente desde nuestra query.
Imagen | Svadilfari
2
16. 20 December, 2011 | created using fivefilters.org
Una plantilla ABAP ***************************************************
*Declaración tablas internas
***************************************************
*data: begin of it_tabla occurs 0,
*
* end of it_tabla.
***************************************************
*Includes
***************************************************
*include
***************************************************
*** SELECTION-SCREEN
***************************************************
selection-screen begin of block b1.
*select-options:
*parameters:
selection-screen end of block b1.
***************************************************
*** AT SELECTION-SCREEN
***************************************************
*at selection-screen output.
Para los que tenéis que programar asiduamente aquí os dejo una *
pequeña plantilla que quizás os sea de utilidad al hacer reports
en ABAP. A mí me ha ayudado y servido de guía muchas veces. *at selection-screen on xxxxx.
*
Plantilla
***************************************************
*&————————————————————-* *** START-OF-SELECTION
*& Report ***************************************************
*Autor: Fecha: start-of-selection.
***************************************************
* Modificaciones: ***************************************************
* Fecha: *** SUBRUTINAS
*************************************************** ***************************************************
report zxxxxxx
*&———————————————————–*
no standard page heading
*&———————————————————–*
line-size 255.
*& Form rutina
*************************************************** *&———————————————————*
*Tablas * text
*************************************************** *—————————————————————-*
*tables: * –> p1 text
*
***************************************************
*Type pools
***************************************************
*type-pools:
***************************************************
*Constantes
***************************************************
*constants:
***************************************************
*Variables globales
***************************************************
*data:
***************************************************
*Estructuras
***************************************************
1
17. 20 December, 2011 | created using fivefilters.org
Listados ALV end of i_nif.
Seguidamente buscamos la información y la cargamos en la
tabla interna i_nif. Ésta será nuestra tabla de output
a mostrar.
Definimos las parametrizaciones de impresión del ALV.
clear e_print.
e_print-no_print_selinfos = ‘X’.
e_print-no_print_listinfos = ‘X’.
Definimos la denominación de cada uno de los campos
y cómo se referenciarán.
wa_fieldcat-fieldname = ‘NIF’.
wa_fieldcat-tabname = ‘I_NIF’.
wa_fieldcat-seltext_m = ‘NIF’.
append wa_fieldcat to t_fieldcat.
clear wa_fieldcat.
Definimos el layout del ALV.
clear e_layout.
e_layout-zebra = ‘X’.
e_layout-colwidth_optimize = ‘X’.
Llamamos à la función que genera el listado ALV
‘REUSE_ALV_GRID_DISPLAY’. Aquí indicamos el nombre de
nuestro report, el layout (cómo se mostrarán las columnas),
En este post explicaré cómo crear un listado ALV sencillo. el catálogo de campos, si queremos que se puedan o no
grabar variantes de layout y la tabla de output que contiene
Descripción la información a mostrar. Por supuesto, esta función
permite diversas parametrizaciones del ALV que se pueden
En primer lugar creamos nuestro report ALV. consultar directamente en la documentación de la función.
Herramientas /Workbench ABAP /Desarrollo /SE38 — Editor call function ‘REUSE_ALV_GRID_DISPLAY’
ABAP exporting
i_callback_program = xrepid
Definimos las variables que utilizaremos en nuestro report.
is_layout = e_layout
Por regla general yo he utlizado en los reports ALV que he
it_fieldcat = t_fieldcat
escrito las siguientes variables:
i_save = ‘A’
is_print = e_print
*********************************************************
tables
*Type pools
t_outtab = i_nifnecesidad
*********************************************************
exceptions
type-pools: slis.
program_error = 1
*********************************************************
others = 2.
*Variables globales
if sy-subrc 0.
*********************************************************
endif.
data: xrepid like sy-repid
*********************************************************
Añadimos los datos de cabecera. Estos datos de cabecera se
*Declaración tablas internas
entrarán en una rutina que no se llamará formalmente ya
*********************************************************
que la llamada se realizará desde el módulo de funciones
data:
‘REUSE_ALV_GRID_DISPLAY’.
wa_fieldcat type slis_fieldcat_alv,
t_fieldcat type slis_t_fieldcat_alv, * Cabecera grande
e_layout type slis_layout_alv, wa_heading-typ = ‘H’.
e_print type slis_print_alv. wa_heading-info = ‘Cabecera’.
append wa_heading to t_heading.
data:
clear wa_heading.
begin of i_nif occurs 0,
xxx * Cabecera pequeña
1
18. wa_heading-typ = ‘S’. data:
wa_heading-info = ‘Subcabecera’. wa_fieldcat type slis_fieldcat_alv,
append wa_heading to t_heading. t_fieldcat type slis_t_fieldcat_alv,
clear wa_heading. e_layout type slis_layout_alv,
e_print type slis_print_alv,
Si además queremos añadir un logo a nuestro listado wa_heading type slis_listheader,
deberemos subir la imagen a SAP (clase ‘PICTURES’, tipo t_heading type slis_t_listheader.
clase ‘OT’). Para ello utilizaremos la transacción OAER. En
el siguiente link encontraréis toda la información para *********************************************************
hacerlo. Seguidamente habrá que llamar al módulo de *Includes
funciones ‘REUSE_ALV_COMMENTARY_WRITE’ con *********************************************************
nuestro logo. El inconveniente de este logo es que es visible include .
en SAP, pero no es posible imprimirlo. *********************************************************
*** SELECTION-SCREEN
call function ‘REUSE_ALV_COMMENTARY_WRITE’ *********************************************************
exporting
*********************************************************
it_list_commentary = t_heading
* Pantalla de selección
i_logo = ‘LOGO’.
*********************************************************
Ejemplo *
El siguiente es un ejemplo de listado que nos permite validar select-options s_stcd1 for kna1-stcd1.
números de NIF. *********************************************************
* At selection-screen
*&———————————————————————* *********************************************************
*& Report ZVALIDANIF
*& *********************************************************
*&———————————————————————* *** START-OF-SELECTION
*& *********************************************************
*& start-of-selection.
*&———————————————————————*
* Funcion validacion nif
report zvalidanif. perform valida_nif.
*********************************************************
*Tablas * Log: cómo se cargará
********************************************************* perform display_alv.
tables: kna1. *********************************************************
********************************************************* * Performs Adicionales
*Type pools *********************************************************
*********************************************************
type-pools: slis. *&———————————————————————*
********************************************************* *& Form display_alv
*Constantes *&———————————————————————*
********************************************************* * text
*constants: *———————————————————————-*
********************************************************* * –> p1 text
*Variables globales * p1 text
********************************************************* * p1 text
data: * p1 text
g_contador(4) type n, * p1 text
xrepid like sy-repid. * p1 text
********************************************************* *
*Declaración tablas internas
*********************************************************
data:
begin of i_nif occurs 0,
nif like kna1-stcd1,
error(10),
end of i_nif.
*********************************************************
*Estructuras
*********************************************************
2
19. 20 December, 2011 | created using fivefilters.org
Crear variantes de report Se nos despliega una ventana donde nos pide si queremos
grabar. Por supuesto, le damos una descripción a nuestra
variante y decimos que sí queremos grabar.
Creación de una variante con parámetros
Los valores que grabamos en una variante no necesariamente
han de ser fijos. Podemos indicar datos que varíen según el día
en que se lanza nuestro report por ejemplo. O incluso podemos
hacer que un campo se grabe sin valores o impedir que un
usuario pueda introducir valor alguno en un campo. Mejor verlo
con un ejemplo.
Definición Desde el editor ABAP recuperamos nuestra variante.
En SAP llamamos variante a una imagen de información fija Marcamos ‘Modificar’ con ‘Atributos’.
que podemos introducir en una pantalla de selección de una
transacción. Con una variante podemos introducir valores en
cada uno de los campos de una pantalla de selección y grabarla
para más tarde recuperarla de nuevo à la hora de ejecutar el
programa o transacción.
Las variantes se asocian comunmente a reports y listados de
SAP. Es más difícil asociarlas a transacciones de pantallas. Para
más información sobre este segundo caso consultar un post
anterior.
Ya había hablado sobre la posibilidad de utilizar variantes para
transacciones estándar de SAP. En este caso, comentaremos en
más detalle cómo crear una variante, cómo protegerlas y dónde Desde la pantalla de ‘Atributos’ podemos modificar los
utilizarlas. atributos de cada uno de los campos que hay en nuestra
Creación de una variante pantalla de selección.
Vamos a nuestro editor ABAP. Proteger campo: marcamos los campos de sociedad
para que no se pueda modificar el valor.
Herramientas /Workbench ABAP /Desarrollo /SE38 — Editor
ABAP Suprimir campo: marcamos el campo ‘Vía de pago’
para que éste no sea visible directamente en la pantalla
Seleccionamos de selección.
Objetos parciales /Variantes /Modificar Campo obligatorio: marcamos el campo ‘característica’
para que sea obligatorio introducir un valor para poder
Damos un nombre a nuestra variante (no es necesario que ejecutar el report.
empiece por Z).
Variables: creamos una fecha dinámica (D) con el valor
Marcamos ‘Crear’ con ‘Valores’. del última día del mes. La variante siempre contendrá
el valor del último día del mes en el que se lance el
Se nos abre la pantalla de selección de nuestro report. report.
Indicamos los valores que queremos dar a cada uno de los
campos de la pantalla de selección.
Salimos de la pantalla
Pasar a /Back
1
20. En reports. Ejecutamos el report y desde la pantalla de
selección seleccionamos
Herramientas /Workbench ABAP /Desarrollo /SE38 — Editor
ABAP
Pasar a /Variantes /Traer
En transacciones. Podemos hacer que la transacción se
inicie directamente con la variante que hemos creado. Para
ello, modificamos la transacción Z y en el apartado variante
indicamos nuestra variante. De este modo, siempre que
ejecutemos la transacción, automáticamente se lanzará con
la variante que hayamos adjuntado.
Herramientas /Workbench ABAP /Desarrollo /Otras herramientas
/SE93 — Transacciones
Grabamos.
En jobs de fondo. Cuando lanzamos un report por job de
fondo es obligatorio indicar una variante de ejecución. En el
momento de crear nuestro job debemos indicar la variante.
El resultado es una pantalla con valores dinámicos. Sistema /Servicios /Jobs /Definición job
En queries. Al igual que podemos iniciar transacciones con
una variante prefijada, también podemos iniciar queries con
una variante prefijada.
Transporte de una variante entre entornos
Por lo general, una variante se puede crear y modificar desde el
entorno productivo SAP. Sin embargo, también es posible crear
variantes desde entornos de desarrollo y posteriormente
transportarlas a entornos productivos. Por supuesto, en este caso
las variantes sólo serán modificables desde desarrollo.
Para crear una variante que pueda ser transportada simplemente
debemos crearla con un nombre que empiece por CUS&
Imagen inicial | *n3wjack’s world in pixels
Utilización de variantes
2
21. 24 December, 2011 | created using fivefilters.org
Exportar listados ALV
a hojas de cálculo
Observamos que SAP nos ofrece la opción del formato en
que queremos exportar nuestro listado de un desplegable.
Marcamos la opción ‘StarOffice/OpenOffice’ e indicamos
que queremos ‘Aplicar siempre el formato especificado’.
En este post “cortito” hago un resumen de los formatos de los
que disponemos a la hora de exportar nuestros listados ALV
Grabamos nuestra hoja de cálculo con extensión .ods
a una hoja de cálculo. Antiguamente sólo podíamos exportar a un
único formato de hoja de cálculo, el omnipresente Microsoft La próxima vez que intentemos volver a exportar nuestro listado
Excel. Afortunadamente, SAP se ha adaptado a los tiempos y ya ALV SAP ya no nos volverá a preguntar por el formato y,
disponemos de otra variedad de formatos de hojas de cálculo directamente, nos ofrecerá únicamente la opción
donde exportar información en la versión ECC de SAP. ‘StarOffice/OpenOffice’. Eso es porque SAP ha guardado a nivel
Actualmente los formatos soportados à la hora de exportar un de usuario la opción predefinida de formato en la tabla
listado ALV a una hoja de cálculo son: SALV_BS_ADMIN.
Microsoft Excel.
MTHML de Microsoft Excel
StarOffice y OpenOffice. También soporta LibreOffice.
Office XML ¿Qué hacer para reiniciar el valor por defecto para
exportar a hoja de cálculo?
Microsoft Excel XXL (formato antiguo).
Ejecutar el programa SALV_BS_ADMIN_MAINTAIN con
De acuerdo a nuestros hábitos como usuarios SAP podemos parámetro ‘Display’.
indicar nuestro formato preferido à la hora de exportar listados
ALV.
¿Cómo marcar por defecto un formato específico?
Imaginemos que queremos exportar un listado de pedidos
incompletos a formato OpenOffice
Lanzamos la transacción ‘Documentos comerciales
incompletos’.
Logística /Comercial /Ventas /Sistemas de información /Pedidos Marcar y borrar el registro de usuario que deseemos.
/V.02 — Pedidos incompletos
Vamos a exportar nuestro listado mediante el menú Lista
/Exportar /Hoja de cálculo.
Más información | notas 876916 y 1080608
1
23. 24 December, 2011 | created using fivefilters.org
Recursos de programación
ABAP
De todos modos, también podemos obtener el mismo resultado
mientras escribimos nuestro código, nos posicionamos sobre una
sentencia y pulsamos el botón F1.
Programación de listados ALV y otras demos
Si buscamos a través del sistema de información los paquetes
SLIS y SABAPDEMOS también encontramos el código ABAP de
programas escritos por SAP para utilización en demos y cursos
de aprendizaje.
En este artículo voy a escribir sobrer aquellas herramientas que
conozco y que SAP nos provee para aprender a programar en Herramientas /Workbench ABAP /Desarrollo /SE38 – Editor ABAP
ABAP. Son transacciones con código fuente que os pueden servir
para vuestros cursos de aprendizaje en este lenguaje propietario Entramos en el editor ABAP.
SAP.
Marcamos el matchcode.
Documentación ABAP y ejemplos
Marcamos ‘Selección nueva’.
Herramientas /Workbench ABAP /Utilidades /ABAPDOCU –
Biblioteca de ejemplo
Escribimos el nombre del paquete SLIS o SABAPDEMOS.
Centro de presentaciones Enjoy
En esta transacción, SAP agrupa el código fuente de varios
programas de ejemplo para el autoaprendizaje. A través de varios Aquí se agrupan los códigos de varios ejemplos. Se trata de una
nodos nos ofrece el código para aprender el uso de las sentencias transacción para los que ya tenéis cierto conocimiento de
más frecuentes, programación de dynpros, de orientación programación ABAP. Cotiene ABAP orientado a objetos, la
a objetos, incluso el interfasado con JavaScript. evolución del lenguaje ABAP que permite crear programas algo
más complejos.
Documentación de palabras claves
Herramientas /Workbench ABAP /Utilidades /DWDM –
Herramientas /Workbench ABAP /Utilidades /ABAPHELP –
Presentaciones
Documentación palabra clave
Con la ayuda de esta transación podemos acceder à la biblioteca
ABAP donde se encuentran documentadas las sentencias
utilizadas en este lenguaje. Simplemente, entramos en la
transacción y escribimos la sentencia de la cual queremos
documentación.
1
24. Comida en vuelo/primer plato STICKET Billete de avión
STRAVELAG Ag.viajes
Imagen inicial | Shermeee
Juegos de datos de prueba
Seguro que más de uno se acuerda de las tablas SPFLI, SCARR
o SFLIGHT. Pues bien, bajo el paquete SAPBC_DATAMODEL se
esconden todas estas tablas que tan frecuentemente son
utilizadas en los cursos de formación ABAP. Se trata del modelo
de datos de vuelos que se suministra para hacer pruebas,
programar listados de ejemplo, etc. Pero antes de poder hacer
uso de ellas, es imprescindible llenarlas con datos. Mediante el
programa SAPBC_DATAGENERATOR podemos marcar cuántos
registros introducir en estas tablas o borrar su contenido
completamente para empezar de nuevo.
Herramientas /Workbench ABAP /Desarrollo /SE38 – Editor ABAP
/Programa SAPBC_DATAGENERATOR
Una vez llenas ya podemos observar cómo quedan cada una de
ellas. Aquí dejo el listado completa de estas tablas de formación.
Herramientas /Workbench ABAP /Resumen /SE16 – Browser
de datos
TABLA DESCRIPCIÓN SAIRPORT Aeropuertos SAPLANE Avión
SBOOK Reservación de vuelo directo SBUSPART Interlocutor
cia.aérea SCARPLAN Asignación compañía aérea-avión SCARR
Compañía aérea SCITAIRP Asignación ciudad-aeropuerto
SCOUNTER Mostrador de venta SCPLANE Avión de carga
SCURR Tp.cambio p.modelo datos formación Workben SCURX
Moneda p.modelo datos formación Workbench SCUSTOM
Clientes vuelo SDESSERT Comida en vuelo/postre SFLIGHT
Vuelo SFLIMEAL Asignación vuelo-comida SGEOCITY Situación
geográfica de una ciudad SMACOURSE Comida en vuelo/plato
principal SMEAL Comida en vuelo SMEALT Comida en
vuelo/descripción SMENU Menú SNVOICE Factura SPFLI
Itinerario de vuelos SPPLANE Avión de pasajeros SSTARTER
2
25. 24 December, 2011 | created using fivefilters.org
Batch input recorder Grabación /Exportar.
Copiamos el texto de nuestra grabación tantas veces como
materiales tengamos, pero en un nuevo fichero .txt. Al
mismo tiempo, modificamos la información. Por ejemplo, si
necesitamos modificar el precio de cien materiales,
De vuelta en el blog. Esta vez con la herramienta batch input entonces copiaremos el texto cien veces. Tras ello,
recorder. Para empezar, decir que llamamos programas de batch borraremos y re-escribiremos el código de cada material
input a una serie de programas que se han venido utilizando para y del nuevo precio en cada pieza de texto de la grabación.
la transferencia en masa de información hacia sistemas SAP. Ya sé lo que estáis pensando, que esto es más fácil de decir
A menudo, estos programas se han integrado en otras que de hacer. Sin embargo, utilizando una sencilla hoja de
transacciones estándar como la típica legacy. Sin embargo, si cálculo y algunas fórmulas puede llegar a ser un proceso
nuestras necesidades no pueden ser cubiertas por herramientas sumamente rápido*.
estándar SAP, entonces nosotros mismos tendremos que escribir
nuestros programas de batch input. El resultado de la ejecución A continuación, importamos el nuevo fichero a SAP.
de un programa de batch input es siempre un juego de datos que Utilizamos para ello el menú Grabación /Importar.
podremos procesar posteriormente para realizar la transferencia
de información. En este artículo intento explicar cómo la
herramienta de grabación de batch inputs puede ayudarnos
a crear juegos de datos de batch input sin tener ningún
conocimiento de programación ABAP. Al final, lo que hemos conseguido es generar un nuevo juego
de datos de batch input. Lo único que nos queda por hacer
Voy a dibujar un escenario sencillo donde queremos actualizar
es presionar el botón ‘Procesar’ y nuestros datos subirán
información en SAP a través de una transacción. Por ejemplo,
a SAP como en cualquier batch input.
nuestra empresa desea modificar el precio de venta de todos sus
materiales a través de la transacción de registros de condición
VK12. Por supuesto, si tenemos una base de datos de cientos de
materiales la modificación manual puede suponer un trabajo
considerable. Por lo tanto, en condiciones normales, lo lógico
sería pedir a nuestro desarrollador ABAP que escribiese un
programa de batch input que tuviese en cuenta nuestra
necesidad. El programa escrito sería capaz de generar un juego
de datos que repitiese las pantallas y la transacción cientos de
veces (tantas veces como materiales hubiese en nuestra base
de datos).
Ahora bien, si no tenemos ningún conocimiento de programación
ABAP ni persona que nos pueda ayudar, la herramienta de
grabación de batch inputs nos puede ser de gran utilidad à la
hora de crear nuestro juego de datos. Por supuesto, sin saber
ABAP y en unos sencillos pasos:
En primer lugar, vamos à la transacción de grabación de
batch inputs SHDB.
Como véis, unos sencillos pasos que nos permiten actualizar
información en masa sin haber escrito ni una sola línea de código
Creamos una nueva grabación de la transacción VK12
ABAP. Por supuesto, no recomiendo esta herramienta para
a través del botón ‘Nueva grabación’.
transferencias de información complejas. Ni tampoco lo
recomiendo como sustituto de otras herramientas estándar
Exportamos la grabación a un fichero .txt siguiendo el menú
1
26. legacy o bapis. Pero sí puede ser una herramienta interesante
para afrontar problemas sencillos si no tenemos conocimientos
suficientes de lenguaje ABAP.
*Una ayuda para completar el fichero .txt con la información
a subir. Utilizad una hoja de cálculo como Microsoft Excel,
numerad aquellos campos que queráis completar y utilizad
fórmulas del tipo buscarv o consultav para buscar y reemplazar
con la información de vuestra base de datos.
Imagen inicial | loop_oh
2
27. 24 December, 2011 | created using fivefilters.org
Procesar juegos de datos de Herramientas /Gestión /Monitor /SM35 – Batch input
Esto es lo que vemos en esta transacción:
batch input
Campos para la selección de nuestro juego de datos:
podemos filtrar entre los juegos de datos creados por
usuario (campo ‘Autor), en un rango de fechas (campos ‘De’
‘a’) o según el nombre del juego de datos (campo ‘JD’).
Del resultado de nuestro filtro vemos todos los juegos de
datos que existen en el sistema, con su estado (nuevo, en
ejecución, ejecutado correctamente, ejecutado con errores,
etc.). Son especialmente interesantes los campos ‘Cantidad
total de transacciones’, ‘transacciones procesadas con
errores’, ‘transacciones procesadas’ y ‘dynpros’.
Cantidad total de transacciones: nos informa sobre el
total de transacciones que se ejecutarán en nuestro
juego de datos. Por ejemplo, si estamos dando de alta
el precio de compra de un registro info, entonces nos
informa del número de veces que se llamará à la
transacción ME11.
Transacciones procesadas con errores: una vez lanzado
Llamamos batch input a un tipo de proceso que se lanza en fondo el juego de datos, los errores que han generado cada
y mediante el cual podemos simular la introducción de datos en una de las transacciones se acumulan en este campo.
una transacción tal y como lo haríamos si la estuviésemos
procesando manualmente. La diferencia es que mediante batch Transacciones procesadas correctamente: igual que el
input podemos hacer esto proceso de forma repetitiva, cosa que anterior, pero que han finalizado con éxito.
si tuviéramos que llevarlo a cabo manualmente se convertiría en
un proceso muy tedioso. Dynpros: nos indica el número de pantallas que se han
procesado durante la ejecución del juego de datos.
Típicamente la programación de un batch input se utiliza para la
carga masiva de datos en SAP. Sin embargo, el resultado de un
programa de batch input no es la transferencia de datos
directamente a SAP, sino la generación de un juego de datos. En
este juego se guarda toda la información de la transacción
relevante para la carga (pantallas por las que se pasa, datos que
se deben poner en cada campo y las teclas que se pulsan).
También vemos una serie de pestañas. En cada una de ellas,
En este post explico cómo tratar estos juegos de datos generados
los juegos de datos se observan según su estado. En la
de modo que la información contenida en éstos se transfiera
pestaña inicial observamos todos los juegos de datos, en la
completamente al sistema.
pestaña ‘nuevo’ sólo aquellos juegos de datos aún no
Procesado on-line procesados, en ‘erróneos’ aquellos juegos de datos que han
dado al menos un error durante su procesamiento, etc.
Al crear un juego de datos podemos decidir si lo queremos
procesar al momento o sólo crear el “fichero” del juego de datos
para su procesamiento posterior. Si decidimos procesarlo
inmediatamente, mediante una técnica de programación de
batch inputs denominada de CALL TRANSACTION, entonces la
transferencia de información será inmediata.
Procesado en fondo
¿Y cómo procesamos nuestro juego de datos?
Si, por el contrario, decidimos procesar el juego de datos
posteriormente, entonces debemos ir a
Marcamos el juego de datos que queremos ejecutar
1
28. y pulsamos el botón ‘Ejecutar’. camino a seguir es diferente. No podemos hacerlo directamente
a través de la transacción SM35. En este caso lo haremos
Automáticamente nos abre tres posibilidades: mediante el programa RSBDCSUB.
Ejecutar visible: esta opción nos permite observar paso Herramientas /Workbench ABAP /Desarrollo /SE38 — Editor
a paso cada una de las pantallas por las que va ABAP
pasando. Recomendada cuando estamos haciendo
pruebas pero totalmente desaconsejada cuando Escribimos el nombre de nuestro programa RSBDCSUB
queremos hacer una carga muy grande de información. y ejecutamos.
Si queréis salir de la ejecución en visible podéis pararla Escribimos el nombre del juego de datos a planificar y la
escribiendo /bend en la ventana de comandos. fecha en que se creó.
Seleccionamos en el menú Programa /Ejecutar en proceso
Visualizar sólo errores: en este caso la transferencia de
de fondo.
información se realizará sin que nosotros lo veamos
directamente, pero se deterndrá cuando detecte un Introducimos los parámetros de impresión (si queremos que
error en la información contenida en el juego de datos. se imprima el log de resultado).
Nos permite corregir el error directamente cuando Escribimos la fecha y hora en que queremos que se inicie el
sucede. Se puede utilizar con cargas no muy grandes procesado del juego de datos.
de información, pero no en procesos muy largos ya que
nos obliga a estar delante del ordenador.
Invisible: es la opción que se utiliza comunmente. Nos
permite proceso el juego de datos en fondo sin ninguna
intervención por nuestra parte. Los resultados
y posibles errores ya los veremos en el log de la
transacción de batch inputs SM35. Mientras se está
realizando la transferencia de información el juego de
datos pasa à la pestaña ‘En tratamiento’. Sabremos que
el proceso ha finalizado cuando nuestro juego de datos
pase à la pestaña de ‘Procesado’.
Para ver si hemos creado correctamente el job de fondo:
Sistema /Servicios /Jobs /Resumen jobs
Y, de nuevo, para ver el estado en que se encuentra el proceso
Si todo ha resultado correcto el status del juego de datos se
del juego de datos:
marcará como ‘procesado’ y pasará à la pestaña correspondiente.
De lo contrario, se marcará como ‘erróneo’ y pasará à la pestaña Herramientas /Gestión /Monitor /SM35 – Batch input
‘erróneos’.
Imagen inicial | simminch
¿Cómo ver qué ha ido mal?
Hacemos doble click sobre el juego de datos.
Marcamos la pestaña ‘Logs’. Buscamos aquellas líneas
resaltadas ya que serán las que contienen el mensaje
de error.
Planificación del procesado en fondo
Finalmente, si decidimos procesar el juego de datos con
posterioridad al lanzamiento del batch input, pero además
deseamos hacerlo en una fecha y hora determinadas, entonces el
2
29. 24 December, 2011 | created using fivefilters.org
Extracción de información
a partir de jobs
Seguidamente pulsamos el botón ‘Parámetros de impresión’
y luego ‘Atributos’. Nos aseguramos de que no se imprima
automáticamente el resultado, sino que el listado quede en
el spool.
En más de una ocasión deseamos extraer información de SAP
para analizarla externamente por ejemplo con Microsoft Excel.
Sin embargo, debido al tiempo que ocupa la ejecución de la
transacción no podemos hacerlo on-line. Si nos fijamos en el
parámetro abap/timeout fijado en el sistema, éste es demasiado
bajo como para lanzar el programa en un proceso diálogo.
Podemos visualizar este parámetro en nuestro sistema en la
transacción
Herramientas /CCMS /Configuration /RZ10 – System profile Grabamos y volvemos à la pantalla anterior.
Entonces, ¿cómo podemos consultar información en SAP si la Pulsamos el botón ‘Condición inicio’ e indicamos cuándo
ejecución de una transacción consume mucho tiempo? La queremos que se inicie. Podemos indicar que se lance
respuesta es programando un job de fondo para la transacción. inmediatamente, en una fecha y hora concretas, cuando
finalice otro job, etc. En este caso voy a indicar que se lance
Crear un job de fondo
inmediatamente. Y grabamos.
Imaginemos que queremos consultar la lista de saldos de
entradas de mercancías
Logística /Gestión de materiales /Gestión de stocks /Entorno
/Visualización de saldos /MB5S – Lista de saldo MSRF
En primer lugar debemos conocer el programa que se
esconde detrás de la transacción. Para ello vamos à la
transacción y pulsamos el menú Sistema /Status. En el
ejemplo el programa se llama RM07MSAL.
Seguidamente vamos à la transacción que nos permitirá
definir nuestro job y damos nombre a nuestro job.
Herramientas /CCMS /Background processing /SM36 —
Define job
Pulsamos en el botón ‘Paso’ y escribimos el nombre del
programa y la variante con la que lo lanzaremos.
Volvemos à la pantalla anterior y grabamos el conjunto.
Extraer la información de una orden de spool
Una vez ha finalizado la ejecución del job podemos ir a recuperar
la información de salida.
Vamos al spool controller.
Herramientas /CCMS /Print /SP01 – Output controller
1
30. Buscamos una orden de spool que debe contener el nombre
del programa que hemos lanzado.
Marcamos esta orden y el botón ‘Lista ABAP’.
Vamos al menú Orden spool /Transmitir /Grabar en fichero
local.
Nos abrirá una ventana e indicaremos el formato en que
queremos guardar el listado. Ya la tenemos para tratar
fuera de SAP.
Enviar la información de un job a una cuenta de mail
Otra opción es que à la finalización del job, éste envíe el
resultado directamente a nuestra cuenta de correo electrónico.
Para ello hay que incluir la dirección de correo electrónico à la
hora de crear el job en el botón ‘Destino listas spool’. La forma
detallada de hacerlo la tenéis en el siguiente enlace.
Podéis enviar la información:
A una cuenta de correo individual.
Herramientas /CCMS /Background processing /SM36 — Define
job /Destino listas spool
A un grupo de usuarios creando una lista de distribución
mediante la transacción SO28
Éste es el último post de la temporada. El blog volverá en breve.
Os deseo que paséis unas buenas vacaciones si las tenéis. Nos
vemos à la vuelta.
2
31. 20 December, 2011 | created using fivefilters.org
Parametrización de tablas de Si queremos que nuestra disposición sea visible solamente
durante esta sesión recuperaremos nuestra variante del
control (table control) en campo ‘Opción actual’ en el apartado ‘Seleccionar
variantes’.
transacciones En cambio, si queremos que nuestra disposición sea visible
siempre para nuestro usuario recuperaremos nuestra
variante del campo ‘Parametrización estándar’ en el
apartado ‘Seleccionar variantes’.
Si, por el contrario, queremos que esta disposición afecte a todos
los usuarios del sistema tendremos que trabajar como
administradores.
Marcamos la opción ‘Responsable del sistema’. Esta opción
está reservada al objeto de autorización S_ADMI_FCD.
Activamos la disposición en la ventana que se nos abre
a continuación.
Si queremos, incluso podemos transportar la opción a otros
sistemas (icono ‘Incluir en orden de transporte’).
La parametrización de tablas sirve para modificar el orden,
tamaño y número de campos a mostrar en una tabla de control
de una transacción.
Ejemplo
Si tomamos como ejemplo la tabla de posiciones que
encontramos en los pedidos de venta de forma estándar nos
podemos contrar con la siguiente distribución de campos…
posición, material, cantidad de pedido, un, r, denominación,
número de material del proveedor, tpos, etc.
Logística /Comercial /Ventas /Pedido /VA02 — Modificar
Si ésta no es la distribución que nos interesa la podemos cambiar
realizando los siguientes pasos:
Marcamos aquellos campos que queremos cambiar y los
arrastramos à la posición que a nosotros nos interese. Por
ejemplo, en este caso voy a marcar el campo tipo de
posición (Tpos) y lo voy a llevar detrás del de unidad de Finalmente, hay que indicar que toda la información de
medida (UM). disposición guardados se almacenan en la vista TCVIEW, à la
Abrimos el icono configuración que se encuentra en la parte cual podemos acceder a través de la transacción SM30. Por lo
superior derecha de la tabla. tanto, podemos copiar la disposición que hemos generado para
un usuario replicando las entradas generadas en esta vista para
En el campo ‘Variante’ del apartado ‘Gestionar variantes’
el usuario correspondiente.
asignamos un nombre a nuestra nueva disposición
y marcamos el botón ‘Crear’. Imagen | INTVGene
1