1. om
p.c
esa
Blogdesap
gd
resumen 2012
. blo
ww
http://www.blogdesap.com
/w
Customizing, ABAP y noticias
p:/
Recopilación de los artículos publicados en blogdesap durante el año 2012
htt
2. Puedes acceder a estos artículos y otros que voy publicando a través de
om
http://www.blogdesap.com
http://www.facebook.com/blogdesap
p.c
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
esa
Blogdesap: resumen 2010-11 por http://www.blogdesap.com se encuentra bajo una Licencia Creative Commons
Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.
gd
Este PDF se ha generado gracias al proyecto http://fivefilters.org/ y a http://www.pdfill.com/pdf_tools_free.html
blo
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/zooboing/5508849065/
http://www.flickr.com/photos/jamescridland/2272701122/
http://www.flickr.com/photos/27128437@N07/3020096760/
http://www.flickr.com/photos/dinah/2155542715/
http://www.flickr.com/photos/mikecogh/2615450243/
.
http://www.flickr.com/photos/wonderlane/6696970999/
http://www.flickr.com/photos/kexino/5142774552/
ww
http://www.flickr.com/photos/68235594@N02/6209901764/
http://www.flickr.com/photos/zigazou76/3621421967/
http://www.flickr.com/photos/uncut/32992478/
http://www.flickr.com/photos/suewaters/3239113361/
http://www.flickr.com/photos/uncut/32992438/
http://www.flickr.com/photos/alancleaver/2380333875/
http://es.wikipedia.org/wiki/Archivo:Andora.png
http://www.flickr.com/photos/pa1nt/2517516586/
http://www.flickr.com/photos/ofernandezberrios/2719764089/
http://www.flickr.com/photos/szpako/6296123543/
/w
http://www.flickr.com/photos/juhansonin/5135576565/
http://www.flickr.com/photos/j1x4r/4313734090/
http://taxcredits.net/
http://www.seniorliving.org/
http://www.flickr.com/photos/oarranzli/8020458953/in/photostream
http://www.flickr.com/photos/stefg/83249642/
p:/
http://www.flickr.com/photos/andrea-prieto/6165780168/
http://www.flickr.com/photos/newtown_grafitti/5594383495/
http://www.flickr.com/photos/49889874@N05/5645164344/
http://www.flickr.com/photos/garryknight/5489575248/
http://www.flickr.com/photos/tedpercival/2127361324/
http://www.flickr.com/photos/flissphil/367608136/
http://www.flickr.com/photos/trawin/3269858710/
htt
http://www.flickr.com/photos/timoelliott/6328671116/
http://www.flickr.com/photos/ecastro/2204417040/
http://www.flickr.com/photos/z287marc/3192570544/
http://www.flickr.com/photos/23024164@N06/7069248491/
http://www.flickr.com/photos/traftery/5733183289/
http://www.flickr.com/photos/bovinity/2125620107/
http://www.flickr.com/photos/cdharrison/4991886507/
http://www.flickr.com/photos/quinnanya/5797565681/
4. INDICE
om
ABAP
1. Rangos numéricos propios
2. Índices de tablas
3. Webservices: ficheros xml
4. Webservices: service providers
5. Webservices: service consumer
p.c
6. Log de modificaciones de tablas
7. Proteger y desproteger variantes
8. Encontrar tablas de transacciones
9. Documenta tus programas ABAP
10. ¿Por qué los usuarios no leen los mensajes?
11. ¿Son mis entornos diferentes?
esa
BC
12. Regeneración de objetos
13. Fijar color del sistema
14. Parámetros de usuario
15. Conocer los accesos y el trabajo de un usuario
16. Introduce un texto informativo en la entrada a SAP
17. Cinco formas de encontrar transacciones del customizing
gd
blo
FI
18. Cinco razones por las que no funciona el programa de pagos
MM
.
ww
19. Apariencia de campos del maestro de materiales
20. Creación de almacenes en materiales
21. Ayuda de búsqueda inteligente sin matchcode
22. Valor mínimo de proveedor
23. Surtido parcial de proveedor
24. Cómo bloquear la actualización del registro info
25. Comparando qué he pedido y qué me han facturado
/w
PM
26. Funciones de interlocutor en órdenes de mantenimiento
27. Campos nuevos en equipos
p:/
SD
28. Datos adicionales en documentos de ventas
htt
29. Campos de reserva en clientes
30. Configurar regiones
31. Datos incompletos en documentos de ventas
32. Verificación de pedidos de clientes duplicados
33. Flujos de documentos
34. Determinación de cuentas de ventas
5. 35. Portes de transporte en ventas de material
36. Cinco razones por las que el IVA no se determina correctamente
37. Gestión de lotes en SAP
38. Qué es un cliente CPD y por qué crearlo
om
SAP
39. Una mirada a la nueva SCN
40. Transacciones en logística
p.c
41. Transacciones en finanzas
42. Preparados para la nueva SAP GUI 7.30
43. Breve historia de SAP
44. Siete requisites para ser un buen consultor
esa
gd
. blo
ww
/w
p:/
htt
6. blogdesap.com created using fivefilters.org
m
Rangos numéricos propios números disponibles son inferiores a este porcentaje.
Una vez tenemos todo esto grabamos, nos aparecerá un mensaje
de advertencia. Aceptamos.
.co
Actualización del rango
Ya tenemos creado nuestro rango numérico. Ahora debemos
informar nuestras numeraciones dependientes de centro.
Este post trata de cómo crear objetos de rangos numéricos
específicos de cliente para poder utilizar luego en nuestros
Presionamos el botón “Rangos números”.
sap
programas SAP. Por ejemplo, queremos crear una numeración
específica de nuestros empleados que guardaremos en una tabla Indicamos el centro.
Z* a través de un programa Z*.
Presionamos “Intervalos”.
Para información más específica sobre rangos numéricos que
proporciona de forma estándar SAP podéis referiros a un post
+Intervalo.
anterior.
de
Guardamos. Nos dará un mensaje advirtiendo que esta
Parametrización
numeración no es transportable al sistema productivo y que
Transacción: SNUM deberemos reproducirla en nuestro mandante destino
también.
og
.bl
ww
Objeto: damos un nombre a nuestro rango.
Utilización
Elemento datos objeto inferior: nuestro rango va a depender
del centro de trabajo del empleado. Los empleados del Y ahora sólo falta utilizarlo en un programa que diseñemos ya
centro “0310” tendrán un código que empiece por “3”; los que este objeto no está asociado de forma estándar en ninguna
/w
del centro “0610” tendrán código que empiece por “6”, etc. transacción SAP. Para hacerlo tenemos que llamar al objeto
Aquí indicaremos pues el elemento de datos de centro directamente en nuestro programa ABAP mediante el módulo de
“WERKS_D”. funciones “NUMBER_GET_NEXT“. Por ejemplo, para empleados
del centro ‘0310’ sería del siguiente modo.
Indicador hasta ejercicio: si quisiéramos cambiar la
CALL FUNCTION 'NUMBER_GET_NEXT'
p:/
numeración de ejercicio en ejercicio, marcaríamos este
campo. No es el caso de este ejemplo. EXPORTING
nr_range_nr = '01'
Dominio longitud número: en este campo indicamos de qué object = 'ZEMPLEADOS'
longitud será la numeración. Para eso introducimos un subobject = '0310'
dominio con la longitud prevista (ya sea creando un nuevo IMPORTING
htt
dominio ya sea utilizando uno que exista de forma estándar number = v_number
en SAP). Voy a utilizar la longitud del campo “numero de EXCEPTIONS
personal” estándar de SAP (dominio “PERNR”). interval_not_found = 1
number_range_not_intern = 2
Porcentaje advertencia: al llenar este campo le estamos object_not_found = 3
diciendo a SAP que nos avise si en nuestro rango los quantity_is_0 = 4
7. blogdesap.com created using fivefilters.org
m
Log de modificaciones de Navegamos a ‘Pasar a /Opciones técnicas’.
tablas Marcamos la opción ‘Grabar en log modificaciones de
datos’. Nos aseguramos de que la tabla quede activa tras
.co
hacer la grabación.
sap
de
og
En varias ocasiones he recibido consultas acerca de cómo se
puede saber en SAP qué usuario ha modificado información
Vamos al perfil de sistema y modificamos el valor
dentro de una tabla. Esta información es útil si no tenemos
‘rec/client’. Indicamos el número del mandante sobre el que
activado el log de acciones de una transacción y sólo podemos
se grabarán los logs de modificaciones. Recomiendo que
consultar este log a través de las tablas con las que interactúà la
.bl
este paso lo haga el administrador Netweaver (responsable
transacción. También es posible que el usuario haya ejecutado
de Basis) de vuestra empresa.
una transacción Z propia de cliente, las transacciones de cliente
no suelen tener asociado ningún log, pero sí sabemos sobre qué
Herramientas /CCMS /Configuration /RZ10 – System profile
tablas se está accediendo.
Resultado
ww
Pues bien, en este caso también tenemos una herramienta en
SAP. Es el log de modificaciones de tablas. En principio, no suele
Si todo ha ido bien siempre que haya una modificación, ésta
estar activado ya que penaliza el rendimiento y la memoria de la
quedará registrada. Para consultar los cambios podemos ir al
base de datos. De hecho, SAP no recomienda su uso en tablas de
programa RSVTPROT
aplicación, más bien solamente en tablas de customizing. Así que
si decidís activar esta funcionalidad medid muy bien las Herramientas /Workbench ABAP /Desarrollo /SE38 – Editor ABAP
repercusiones que tendrá.
/w
Ejemplo
Tenemos una tabla ZTEST sobre la cual grabamos documentos
de ventas a través de una vista de actualización. Deseamos saber
cuándo y quién realiza modificaciones sobre esta tabla. Los pasos
están perfectamente recogidos en el punto de customizing
p:/
de SAP.
IMG: Gestión del sistema de control interno /Grabación de
modificaciones de tablas
Abrimos el diccionario ABAP y buscamos nuestra
htt
tabla ZTEST.
Herramientas /Workbench ABAP /Desarrollo /SE11 – Diccionario
ABAP
8. blogdesap.com created using fivefilters.org
m
Índices de tablas TABLES:
mara.
DATA: BEGIN OF t_mara OCCURS 0,
.co
matnr LIKE mara-matnr,
bismt LIKE mara-bismt,
END OF t_mara.
SELECT-OPTIONS:
s_bismt FOR mara-bismt.
sap
START-OF-SELECTION.
SELECT * FROM mara
INTO CORRESPONDING FIELDS OF TABLE t_mara
WHERE bismt IN s_bismt.
de
El rendimiento de un programa de este tipo se encuentra
penalizada ya que el campo de búsqueda no es clave en la tabla.
Solución
Crear un índice para el campo MARA-BISMT.
og
Entramos en la tabla de diccionario MARA.
Herramientas /Workbench ABAP /Desarrollo /SE11 – Diccionario
ABAP
.bl
Marcamos el botón ‘Indices’ y “crear índice”.
ww
Un índice de una base de datos, según la Wikipedia es:
“una estructura de datos que mejora la velocidad de las
operaciones, permitiendo un rápido acceso a los registros de una
tabla en una base de datos”
Damos una codificación a nuestro índice, por ejemplo, Z1.
Se suele crear un índice sobre una tabla del diccionario ABAP
cuando en uno de nuestros programas nos vemos obligados
/w
a hacer búsquedas de información, pero el acceso a ésta no se
realiza de acuerdo a campos claves de dicha tabla.
Ejemplo
Imaginemos que deseamos extraer un listado de materiales de
p:/
nuestra base de datos. Para ello debemos ir à la tabla MARA que
contiene toda la información general de materiales de nuestra Lo identificamos con una descripción.
empresa. Lo ideal en este caso sería hacer la búsqueda poniendo
como condición de selección el campo número de material Dejamos la opción que nos da por defecto, índice no único
(MARA-MATNR) que es el único campo clave de la tabla. Sin en todos los sistemas de la base de datos.
htt
embargo, nuestro caso es más complejo y se nos pide hacer una
búsqueda de materiales a partir del campo número de material Escribimos el campo por el cual vamos a indexar la base de
anterior (MARA-BISMT) en un código como el siguiente: datos. Es importante que uno de ellos sea siempre el campo
mandante.
REPORT zprueba
NO STANDARD PAGE HEADING LINE-SIZE 255.
9. m
.co
Ya podemos grabar y activar.
A partir de ahora, en principio debería mejorar el rendimiento de
sap
nuestro programa.
Imagen inicial | Metagrrrl
de
og
.bl
ww
/w
p:/
htt
10. blogdesap.com created using fivefilters.org
m
Webservices(I): ficheros xml Llamamos à la función CALL_TRANSFORMATION que
convierte los datos a XML.
REPORT zpruebas NO STANDARD PAGE HEADING LINE-SIZE
.co
255.
**************************************************
*******************************
*Tablas
**************************************************
********************************
sap
TABLES:
vbap.
**************************************************
*******************************
*Tablas internas
**************************************************
de
*******************************
DATA: BEGIN OF ti_vbap OCCURS 0,
vbeln LIKE vbap-vbeln, "Documento
posnr LIKE vbap-posnr, "Posición
Éste y (creo que) los dos siguientes posts del blog van a tratar
matnr LIKE vbap-matnr, "Material
og
sobre comunicaciones entre sistemas mediante servicios web o
END OF ti_vbap.
webservices. Explicaré cómo enviar y recibir información desde
y hacia nuestro SAP, lo que comunmente llamamos interfaces. **************************************************
Siempre partiendo de que no disponemos del módulo XI/PI de *******************************
SAP que seguramente nos facilitaría las cosas bastante. *Datos globales
.bl
Para empezar diré que la información que trasladaremos entre **************************************************
plataformas la convertiremos al “lenguaje” XML y en este primer *******************************
post voy a explicar cómo hacerlo. DATA:
g_xml TYPE string.
Transformaciones ABAP/XML y XML/ABAP
ww
**************************************************
SAP provee de dos herramientas básicas para hacer *******************************
transformaciones de información de ABAP a XML y de XML *** SELECTION-SCREEN
a ABAP. **************************************************
*******************************
Utilizando la plantilla de transformación estándar de SAP. SELECT-OPTIONS:
s_vbeln FOR vbap-vbeln.
Mediante la creación de transformaciones simples a través
/w
de la transacción STRANS. **************************************************
*******************************
Voy a centrarme en el primer tipo haciendo un pequeño ejemplo. *START-OF-SELECTION
Primero vamos a crear un fichero XML a partir de datos de **************************************************
pedidos de venta extraídos de nuestro sistema. En segundo *******************************
lugar, imaginaremos que el sistema externo nos ha devuelto esos
p:/
START-OF-SELECTION.
datos modificados en otro fichero XML que convertiremos
igualmente a datos ABAP. SELECT * FROM vbap
INTO CORRESPONDING FIELDS OF TABLE ti_vbap
De ABAP a XML
WHERE vbeln IN s_vbeln.
Crearemos un pequeño programa ABAP en nuestro editor.
htt
**************************************************
*******************************
Herramientas /Workbench ABAP /Desarrollo /SE38 – Editor ABAP
*END-OF-SELECTION
**************************************************
Extraemos los datos de la tabla de pedidos de posiciones de
*******************************
pedidos de venta VBAP.
END-OF-SELECTION.
11. CALL TRANSFORMATION id SOURCE data = ti_vbap[] *******************************
RESULT XML g_xml. *** SELECTION-SCREEN
**
[…] **************************************************
*******************************
m
El resultado para la selección del pedido de ventas PARAMETERS:
1320000021 p_fich TYPE string.
**************************************************
.co
*******************************
*START-OF-SELECTION
**************************************************
*******************************
START-OF-SELECTION.
sap
* Aquí llenaríamos la variable g_xml con el string
xml
De XML a ABAP * [...]
Crearemos un pequeño programa ABAP en nuestro editor. **************************************************
*******************************
Herramientas /Workbench ABAP /Desarrollo /SE38 – Editor ABAP *END-OF-SELECTION
de
**************************************************
Subiríamos los datos a SAP. En próximos posts veremos
*******************************
cómo hacerlo a través de webservice.
END-OF-SELECTION.
De nuevo llamamos à la función CALL_TRANSFORMATION
CALL TRANSFORMATION id SOURCE XML g_xml
para convertir los datos XML a ABAP.
og
RESULT data = ti_vbap.
REPORT zpruebas NO STANDARD PAGE HEADING LINE-SIZE
Al final, los datos del fichero xml estarían incorporados en
255.
nuestra tabla interna ABAP ti_vbap.
**************************************************
******************************* Más información
.bl
*Tablas
************************************************** En este blog también tenéis información amplia sobre
******************************* transformaciones XML. Y para una documentación más extensa
también podéis consultar este documento.
**************************************************
Imagen inicial | ssinger3
ww
*******************************
*Tablas internas
**************************************************
*******************************
* Tabla que contiene el xml
DATA: BEGIN OF ti_xml OCCURS 0,
string TYPE string,
END OF ti_xml.
/w
* Tabla de datos ABAP
DATA: BEGIN OF ti_vbap OCCURS 0,
vbeln LIKE vbap-vbeln, "Documento
posnr LIKE vbap-posnr, "Posición
p:/
matnr LIKE vbap-matnr, "Material
END OF ti_vbap.
**************************************************
*******************************
*Datos globales
htt
**************************************************
*******************************
DATA:
g_xml TYPE string.
**************************************************
12. blogdesap.com created using fivefilters.org
m
Webservices (II): service *"------------------------------------------------
----------------------
providers *"*"Interfase local
.co
*" IMPORTING
*" VALUE(I_STRING) TYPE STRING
*" EXPORTING
*" VALUE(O_RESPONSE) TYPE STRING
*"------------------------------------------------
----------------------
TABLES:
sap
ztiris_rec,
ztiris_err.
DATA:
ti_vbap LIKE vbap OCCURS 0 WITH HEADER LINE,
ti_errores LIKE ztiris_err OCCURS 0 WITH
HEADER LINE.
de
* XML string to ABAP itab
CALL TRANSFORMATION id SOURCE XML i_string
RESULT data = ti_vbap[].
* Incorpora la información recibida a una tabla
og
SAP
LOOP AT ti_vbap.
MOVE-CORRESPONDING ti_vbap TO ztiris_rec.
MODIFY ztiris_rec.
ENDLOOP.
.bl
En este segundo artículo sobre webservices voy a continuar con
* Gestión de errores
la creación de un service provider. Con esto lo que
IF ti_vbap[] IS INITIAL.
conseguiremos es crear un enlace estable de comunicación
ti_errores-error = 'X'.
a través del cual nuestro cliente pueda enviar información
APPEND ti_errores. CLEAR ti_errores.
a nuestro sistema SAP. Y que a continuación, nosotros podamos
ww
ENDIF.
recoger esta información e incorporarla.
* ABAP itab to XML string
Módulo RFC
CALL TRANSFORMATION id SOURCE data =
En primer lugar debemos crear el módulo de funciones RFC que ti_errores[]
contenga toda la lógica de transformación del fichero XML que RESULT XML o_response.
nos llegará vía webservice.
ENDFUNCTION.
/w
Herramientas /Workbench ABAP /Desarrollo /SE37 – Biblioteca
de funciones Creación del objecto
Atributos de la función: será una funcion de acceso remoto Definimos nuestro servicio proxy a través de la transacción
(RFC) SE80. Desde la pestaña Enterprise Services, seleccionamos
la opción Serv. proxy y damos nombre a nuestro servicio.
p:/
Parámetros de entrada (import): al menos debe contener un Esto abrirá el wizard que guiará todo nuestro proceso.
parámetro de entrada de tipo string con traspaso de valores.
Este parámetro recibirá el fichero xml. Herramientas /Workbench ABAP /Resumen /SE80 – Object
Navigator
Parámetros de salida (export): no es obligatorio pero es
htt
recomendado si queremos enviarle una respuesta del tipo
Ok/Error de vuelta a nuestro cliente.
Éste podría ser un ejemplo de código ABAP para el RFC:
FUNCTION z_prueba_test_mf.
13. Configure service: por defecto, dejamos la información de
SOAP application y profile que SAP nos proporciona.
Package/request: indicamos el paquete y orden de
transporte para nuestro objeto.
m
Grabamos. SAP nos muestra la siguiente ventana
informativa
.co
Se crea el servicio Web ZWS_PRUEBA_TEST:
Tenga en cuenta que el servicio no posee ninguna liberación
de tiempo de ejecución y por eso no puede utilizarse. Sin
embargo, esto sólo se puede crear en la configuración
WSCONFIG.
sap
A continuación va a solicitar la transacción WSADMIN
(Servicios de administración de Web para tiempo de
ejecución SOAP) en el registro UDDI para el servicio Web.
Object type: determinamos nuestro proxy del tipo service Finalmente, activamos nuestro servicio.
provider.
Creación del servicio
de
Service provider: crearemos nuestro service provider en
base a Existing ABAP Objects (Inside Out). Llamamos à la transacción SOAMANAGER. Si tienes
problemas para acceder al SOAMANAGER quizás te falte
Object type: damos nombre a nuestro servicio así como un activar alguna configuración.
prefijo. También indicamos que utilizaremos la lógica de
og
nuestro módulo de funciones. Desde la pestaña Business Administration pulsamos en Web
Service Administration.
Buscamos el servicio que hemos creado previamente.
.bl
ww
Choose endpoint: aquí escribimos el nombre del módulo de Lo marcamos y pulsamos Apply Selection. Inmediatamente
se nos abre una pantalla más abajo con el detalle del
/w
funciones RFC que previamente hemos creado.
servicio.
Aquí vamos a buscar la pestaña Configurations y pulsar el
botón Create Service.
p:/
Damos nombre al servicio en la nueva ventana que se
nos abre.
htt
14. SAP_BC_WEBSERVICE_CONSUMER
o SAP_BC_WEBSERVICE_SERVICE_USER.
También es necesario que el usuario se haya creado como
usuario C-comunicación (pestaña Datos Logon) para que
m
éste no pueda acceder a través de SAPGUI sino solamente
pueda conectarse por webservice.
Datos logon del servicio
.co
Aún nos queda un paso para activar completamente nuestro
servicio. Debemos especificar el usuario y contraseña de acceso
a nuestro servicio a través de la transacción SICF.
Herramientas /Gestión /Red /SICF – Actualización de árbol de
servicio HTTP
sap
Una nueva ventana se nos abre aún por debajo. De toda la
información que aquí se nos pide, la más importante se Buscamos nuestro servicio.
encuentra en la pestaña Provider Security. En ésta
Entramos en los servicios web que hemos creado
marcamos la necesidad de utilizar un user id y password si
ZWS_PRUEBA_SERVICIO y ZWS_PRUEBA_BINDING.
nuestro cliente quiere enviar información a nuestro sistema
SAP.
En ambos indicamos que la operación de acceso será de tipo
de
L (secuencia de acceso alternativa).
Damos un usuario y contraseña.
og
.bl
Marcamos el botón Save.
Después de todo este proceso SAP se habrá publicado un
enlace WSDL que ya podemos dar a nuestro cliente para
que configure su sistema. Este enlace contiene las Marcamos Ejecutar operaciones de acceso todas.
ww
definiciones para que nuestro cliente se pueda conectar
directamente a nuestro sistema. Para ver cuál es este enlace Nos aseguramos que se encuentran todas la lista de
vamos à la pestaña Overview y marcamos Open WSDL operaciones de acceso.
document for selected binding. También se puede buscar
desde la transacción SE80, en la definición de servicio,
pestaña WSDL.
/w
En este artículo también podéis encontrar un ejemplo de
webservice. Y si lo preferís en este vídeo de @ivanfemia.
Creacion del usuario
p:/
Imagen inicial | tj scenes
Nuestro cliente se conectará a nuestro SAP para dejar la
información a través de un usuario específico que nosotros
creemos. Le debemos dar la clave y el usuario a nuestro cliente.
Herramientas /Gestión /Actualización de usuarios /SU01 –
htt
Creación de usuarios
Es importante que el usuario que creemos tenga todas las
autorizaciones necesarias (pestaña roles), entre ellas los
roles que hacen referencia a servicios web como
SAP_BC_WEBSERVICE_ADMIN,
15. blogdesap.com created using fivefilters.org
m
Webservices (III): service
consumer
.co
sap
de
Select source: indicamos que el consumo lo haremos
a través de url mediante la opción URL/HTTP Destination.
Select URL: escribimos la url wsdl que nos ha
og
proporcionado nuestro proveedor.
Enter package/request: escribimos el paquete y número
de orden.
.bl
Grabamos el proceso y activamos.
Este post cierra (¿?) la serie sobre webservices. En este caso
vamos a ver cómo consumir un webservice desde SAP. Vamos
a llamar a un webservice externo a nuestro SAP y vamos a dejar
información sobre ese sistema externo.
ww
Cliente proxy
En primer lugar debemos asegurarnos que nuestro proveedor
tenga publicado el enlace WSDL de su webservice, algo
del tipo…
http://xx.xx.xxx.xx/webservice/nombrewebservice.asmx?wsdl Definición del puerto
/w
Entramos en la transacción SE80 Llamamos à la transacción SOAMANAGER. Si tienes
problemas para acceder al SOAMANAGER quizás te falte
Herramientas /Workbench ABAP /Resumen /SE80 – Object
activar alguna configuración.
Navigator
Desde la pestaña Business Administration pulsamos en Web
Creamos el cliente proxy, dándole nombre en la pestaña
p:/
Service Administration.
Enterprise Services, opción Clt. proxy.
Buscamos el proxy consumer que hemos creado
previamente. Lo marcamos y pulsamos Apply selection. Se
nos abre una nueva ventana más abajo.
htt
16. error/Ok.
Sobre la pestaña Configurations pulsamos el botón Create
Logical Port.
Creación del puerto lógico. La sentencia
CREATE_OBJECT… de la plantilla abre la
Se nos abre otra pestaña donde indicamos el nombre de
comunicación a través del puerto lógico creado.
nuestro puerto lógico, de nuevo nos pide la urld del wsdl
m
proveedor, el usuario y contraseña.
Llamada al proxy. La sentencia CREATE_METHOD…
de la plantilla se encarga de enviar la información
a nuestro proveedor de webservice.
.co
No indico el código ABAP completo, pero evidentemente esta
plantilla hay que modificarla y adaptarla. Además antes de abrir
la comunicación en nuestro programa ABAP debemos seleccionar
los datos a enviar y transformarlos a xml mediante la función
CALL_TRANSFORMATION.
sap
Si estás interesado en más información sobre consumo de
webservices pulsa en este enlace.
Y en programación orientada a objetos, tenéis un manual en la
página de abap.es
Si no se nos grabase el usuario y contraseña (algo que
a veces pasa y no sé por qué), marcamos Edit y modificamos Imagen inicial | tj scenes
usuario y contraseña en la pestaña Consumer security que
de
se nos ha abierto aún más abajo.
Lógica del programa
Nos queda definir la lógica de nuestro programa, buscar los
og
datos en nuestro sistema y enviarlos a través del proxy que
hemos creado.
Volvemos à la transacción SE80
.bl
Creamos el programa que contendrá la lógica.
Mantenemos el programa visible, mientras buscamos
nuestro proxy cliente en el árbol de la SE80.
Arrastramos el proxy cliente desde el árbol al editor ABAP.
ww
Esto nos creará la plantilla ABAP.
/w
p:/
Esta plantilla contiene lo siguiente:
Definición de la clase del proxy.
Definición de la estructura del proxy (salida) donde
htt
dejaremos el string xml que enviaremos, así como el
usuario y contraseña.
Estructura del proxy (entrada) donde recibiremos la
información de respuesta del webservice de nuestro
proveedor (si nos la da). Por ejemplo, un mensaje de
17. blogdesap.com
m
Log de modificaciones de Navegamos a ‘Pasar a /Opciones técnicas’.
tablas Marcamos la opción ‘Grabar en log modificaciones de
datos’. Nos aseguramos de que la tabla quede activa tras
.co
hacer la grabación.
sap
de
og
En varias ocasiones he recibido consultas acerca de cómo se
puede saber en SAP qué usuario ha modificado información
Vamos al perfil de sistema y modificamos el valor
dentro de una tabla. Esta información es útil si no tenemos
‘rec/client’. Indicamos el número del mandante sobre el que
activado el log de acciones de una transacción y sólo podemos
se grabarán los logs de modificaciones. Recomiendo que
consultar este log a través de las tablas con las que interactúà la
.bl
este paso lo haga el administrador Netweaver (responsable
transacción. También es posible que el usuario haya ejecutado
de Basis) de vuestra empresa.
una transacción Z propia de cliente, las transacciones de cliente
no suelen tener asociado ningún log, pero sí sabemos sobre qué
Herramientas /CCMS /Configuration /RZ10 – System profile
tablas se está accediendo.
Resultado
ww
Pues bien, en este caso también tenemos una herramienta en
SAP. Es el log de modificaciones de tablas. En principio, no suele
Si todo ha ido bien siempre que haya una modificación, ésta
estar activado ya que penaliza el rendimiento y la memoria de la
quedará registrada. Para consultar los cambios podemos ir al
base de datos. De hecho, SAP no recomienda su uso en tablas de
programa RSVTPROT
aplicación, más bien solamente en tablas de customizing. Así que
si decidís activar esta funcionalidad medid muy bien las Herramientas /Workbench ABAP /Desarrollo /SE38 – Editor ABAP
repercusiones que tendrá.
/w
Ejemplo
Tenemos una tabla ZTEST sobre la cual grabamos documentos
de ventas a través de una vista de actualización. Deseamos saber
cuándo y quién realiza modificaciones sobre esta tabla. Los pasos
están perfectamente recogidos en el punto de customizing
p:/
de SAP.
IMG: Gestión del sistema de control interno /Grabación de
modificaciones de tablas
Abrimos el diccionario ABAP y buscamos nuestra
htt
tabla ZTEST.
Herramientas /Workbench ABAP /Desarrollo /SE11 – Diccionario
ABAP
18. m
.co
sap
Siento no poderos mostrar un resultado de ejemplo positivo. Mi
sistema no tiene el parámetro rec/client activo.
Imagen inicial | szpako
de
og
.bl
ww
/w
p:/
htt
19. blogdesap.com created using fivefilters.org
m
Proteger y desproteger Desproteger variante
variantes de report Si nos encontramos en un caso como el anterior y necesitamos
desproteger esta variante, por ejemplo, si el usuario ya no
.co
trabajase en la empresa, debemos proceder del siguiente modo.
Llamamos al programa RSVARENT
Herramientas /Workbench /Desarrollo /SE38 – Editor ABAP
sap
Introducimos el nombre del programa y la variante.
El nombre del programa corresondiente à la
transacción VA05N lo encontramos navegando sobre la
transacción VA05N al menú Sistema /Status /Report. El
programa es el SD_SALES_ORDERS_VIEW.
El nombre de la transacción lo encontramos navegando
de
Este artículo trata de cómo crear, proteger y desproteger
en la transacción VA05N a Pasar a /Variantes /Traeer.
variantes de reports SAP. Ya habíamos visto en un post anterior
que mediante variantes podíamos crear imágenes fijas de la
Ejecutamos el programa. Al ejecutarlo, no nos envía ningún
pantalla de selección de reports. Ahora veremos qué debemos
mensaje de finalización. No os preocupéis, es normal.
hacer para que una variante que hemos creado sólo pueda ser
og
modificada por nosotros mismos. Pero también veremos lo Volvemos à la transacción VA05N, Pasar a /Variantes
contrario, cómo modificar variantes protegidas de otros usuarios. /Grabar como variante. Y ya podréis grabar las
modificaciones que queráis normalmente.
Proteger una variante
Utilizaremos como ejemplo, el listado de pedidos de cliente
.bl
VA05N
Entramos en la VA05N
Llenamos la pantallas de selección con nuestros valores.
ww
Pasar a /Variantes /Grabar como variante.
Como siempre, utilizad esta herramienta con cuidado.
Damos un nombre y marcamos proteger variante. Imagen inicial | juhansonin
/w
p:/
Con sólo estos pasos nuestra variante queda protegida y en caso
de que un usuario diferente al nuestro intente modificarla
o borrarla le aparecerá el siguiente mensaje.
htt
20. blogdesap.com created using fivefilters.org
m
Cómo encontrar tablas de
una transacción
.co
sap
de
og
Pero también tenemos que fijarnos en el valor que aparece
a continuación de Clase tabla. Si el valor que se indica es tabla
transparente podemos estar seguros de que es una tabla que
almacena información, pero si se indica que la clase de tabla es
una estructura, entonces debemos seguir buscando para
.bl
encontrar la tabla transparente que contiene la información.
Quisiera saber qué campos y tablas utiliza este programa…
Tengo que encontrar las tablas de la base de datos donde guarda
la información esta transacción… Son preguntas que seguro que
nos hemos hecho más de una vez. Quizá, solamente para
ww
preparar una query, quizá para utilizar la tabla en un listado
o quizá para comparar la información en SAP con la que tenemos
en nuestros excels. Sea cual sea la razón, en este artículo voy
a enumerar varias formas de detectar los campos y las tablas que
utilizan las transacciones de SAP.
Datos técnicos (F1-F9)
/w
Es quizás, la forma más rápida. Supone utilizar la ayuda propia
de los campos de las transacción SAP directamente. Lo voy Ayudas de búsqueda o matchcodes
a mostrar en un ejemplo con la transacción VA02.
Consiste en buscar las tablas a partir del matchcode asociado al
campo de nuestra transacción. Por ejemplo, con la transacción
Llamamos a nuestra transacción VA02
VF03 seguiríamos estos pasos:
p:/
Nos situamos sobre el campo.
Nos posicionamos sobre el campo.
Apretamos la tecla F1.
Seguimos los pasos del apartado anterior (F1-F9).
Pulsamos el botón Datos técnicos (F9 o icono del martillo).
Buscamos el valor que aparece a continuación de Ayuda de
htt
Nos fijamos en los datos que aparecen a continuación de Tabla búsqueda. En este caso encontramos que el valor es VMCF.
y Nombre de campo ya que contienen precisamente la
Hacemos doble click.
información que buscamos, la tabla que almacena la información
del campo sobre el cual nos habíamos posicionado. En este caso
Como hay matchcodes incluidos seguimos haciendo doble
la tabla es la VBAK y el campo es el VBELN.
21. click para navegar a cualquiera de los matchcodes.
Hacemos doble click sobre el valor del apartado Método de
selección para llegar finalmente a las tablas incluidas en el
matchcode.
m
Include TOP de programa
Si sabemos leer el código ABAP del programa podemos buscar
Listados de tablas
.co
los nombres de tablas directamente sobre el código.
Utilizar alguno de los muchos listados que corren por internet
Escribimos la transacción. Por ejemplo, VF03 con la información de tablas que utiliza SAP. Podéis utilizar un
listado de tablas de este blog, uno de mundosap, uno de la sdn,
Seguimos los pasos del primer apartado (F1-F9).
etc.
Hacemos doble click sobre el nombre del programa para Referencia de utilización
sap
navegar hasta él.
Consiste en hacer las búsqueda de forma inversa. Hasta ahora
Buscamos en el programa un include que seguramente empezábamos en una transacción para llegar a las tablas
acaba con las letras _TOP. y campos incluidos en la transacción. Aquí se trata de empezar
por un campo o tabla para llegar à la transacción que los utiliza.
Buscamos la sentencia TABLES. Tras esta sentencia
encontraremos las tablas que utiliza el programa. Herramientas /Workbench ABAP /Desarrollo /SE11 – Diccionario
de
ABAP
A veces no existe ningún include que contenga las letras _TOP.
En ese caso es suficiente con hacer una búsqueda directa de la Escribimos la tabla de base de datos que queramos. Por
sentencia TABLES. ejemplo, la VBAK.
og
Trace SQL Pulsamos visualizar.
Consiste en hacer una llamada à la transacción ST05. Marcamos el campo VBELN.
Herramientas /Workbench ABAP /Test /ST05 – Trace SQL
Vamos al menú Utilidades /Referencia de utilización.
.bl
Llamamos à la transacción ST05
Marcamos utilización en programas.
Marcamos activate trace.
Nos mostrará la lista de programas que utilizan ese campo de
tabla. Si sabemos cuál es el nombre del programa podemos
En otro modo, llamamos a nuestra transacción
seguir profundizando hasta llegar à la transacción.
problemática, en este caso la MM02.
ww
Imagen | Andrea Prieto
Volvemos a ST05 y marcamos deactivate trace.
Si este artículo te ha sido de ayuda no olvides compartirlo
Pulsamos Display Trace. :-)
/w
p:/
El listado que nos muestra la transacción ST05 es el conjunto de
tablas y llamadas que hemos realizado cuando hemos ejecutado
la transacción MM02. A partir de aquí debemos decidir cuál de
htt
todas las tablas que nos muestra es la nuestra. Admito que esta
forma de buscar información es complicada ya que supone
navegar entre la gran cantidad de tablas que en una sola
transacción puede llegar a llamar SAP.
22. blogdesap.com created using fivefilters.org
m
Documenta tus programas *&
*
ABAP *
.co
*& Listado de vuelos
*
**************************************************
*******************************
REPORT zprueba NO STANDARD PAGE HEADING LINE-SIZE
255.
*
sap
**************************************************
*******************************
*Tablas
**************************************************
*******************************
TABLES:
spfli.
de
"Itinerario de vuelos
**************************************************
*******************************
*Tipos
Documentar un programa ABAP significa escribir una pequeña
og
**************************************************
ayuda para que nuestros usuarios sepan cuál es la función del
*******************************
programa. Es además una pequeña guía para saber qué
TYPES:
parámetros son necesarios para la ejecución correcta del
ty_spfli TYPE SORTED TABLE OF spfli WITH
programa y una explicación de los posibles errores que nos
NON-UNIQUE KEY carrid connid.
podemos encontrar. No me refiero a poner pequeños
.bl
comentarios en el código ABAP sino a escribir una pequeña
**************************************************
ayuda visible para los usuarios.
*******************************
Con todo esto no digo que no esté bien explicar nuestras líneas *Variables globales
de código, totalmente necesario, pero también hay que pensar en **************************************************
dar las máximas facilidades a aquellas personas que van *******************************
ww
a trabajar diariamente con nuestros pequeños programas. DATA:
ti_spfli TYPE ty_spfli WITH HEADER LINE.
Este tipo de ayuda lo hemos visto más de una vez en "Tabla interna de vuelos
transacciones y programas estándar. Tomemos por ejemplo, la
transacción FBL5N **************************************************
********************************
Finanzas /Gestion financiera /Deudores /Cuenta /FBL5N –
*** SELECTION-SCREEN
Visualizar y modificar partidas abiertas
***
/w
Si presionamos el icono ‘i’ de información SAP abre una pequeña **************************************************
ventana con información adicional que el usuario puede utilizar ********************************
para conocer el uso y funcionalidad de la transacción. SELECT-OPTIONS:
s_carrid FOR spfli-carrid,
"Compañía aérea
p:/
s_countr FOR spfli-countryfr. "País
de salida
**************************************************
Pasos para generar documentación en un programa ABAP *******************************
htt
*START-OF-SELECTION
Partiré de un pequeño programa de prueba que lista los vuelos **************************************************
de una compañía aérea. *******************************
START-OF-SELECTION.
*&------------------------------------------------
------------------------------* * Selección de vuelos
*& Report ZPRUEBA
23. SELECT * FROM spfli
INTO CORRESPONDING FIELDS OF TABLE ti_spfli
WHERE ( carrid IN s_carrid
AND countryfr IN s_countr ).
m
**************************************************
*******************************
*END-OF-SELECTION
**************************************************
.co
*******************************
END-OF-SELECTION.
* Listado
LOOP AT ti_spfli.
sap
WRITE: / ti_spfli-connid,
ti_spfli-cityfrom, Un apunte final, si queréis traducir vuestra documentación
ti_spfli-deptime. a otros idiomas podéis hacerlo a través de la transacción SE63.
ENDLOOP. Así, si el usuario se loga en otro idioma, también podrá leer la
documentación que hayáis preparado.
Una vez tenemos el código escrito vamos a crear la
documentación del programa. Herramientas /Workbench ABAP /Utilidades /Traducción /SE63 –
Textos breves y explicativos
de
Desde el editor vamos a Pasar a /Documentación.
Deberéis reccorrer el menú Traducción /Objetos ABAP /Textos
Se nos abre un editor (SAPscript o Word según tengáis
explicativos (documentación) /Ayuda F1 /RE Reports, gr.
configurado vuestro sistema) con los siguientes apartados:
funciones, BD lógicas y traducir los textos que os aparezcan.
Purpose
og
Integration Imagen inicial | quinn.anya
Prerequisites ¿Te ha gustado este artículo? Ayúdame a que llegue a más
Features gente compartiéndolo :-)
Selection
.bl
Standard_variant
Output
Activities
Example
ww
Escribimos en cada apartado la información que
corresponda. Por supuesto, no es necesario que se escriba
información en cada apartado.
Guardamos y activamos.
/w
p:/
Resultado de la documentación
htt
Lanzamos nuestro programa bien directamente a través del
editor ABAP o a través de la transacción que hayamos
decidido para él.
Marcamos el icono ‘i’.
24. blogdesap.com created using fivefilters.org
m
¿Por qué los usuarios no Informativo (I): se muestra como un pequeña ventana sobre
leen los mensajes de SAP? la transacción.
.co
Advertencia (W): pequeño texto que aparece en la barra
inferior.
Error (E): al igual que el mensaje de advertencia también
aparece en la barra inferior, pero impide al usuario
continuar con el normal funcionamiento de la transacción.
sap
Obliga a corregir el error antes de poder continuar.
Para ti, crear un mensaje en un programa ABAP debe ser muy
sencillo.
Creamos el mensaje en la transaccion SE91.
de
Herramientas /Workbench ABAP /Desarrollo /Entorno de
programación /SE91 – Mensajes
Seleccionamos nuestra clase de mensaje, introducimos un
nuevo número y pulsamos ‘Crear’.
og
Un mensaje es la forma que nos proporciona SAP para gestionar
información relevante dentro del sistema. Advierten o impiden
errores en el uso de la herramienta. Entonces, ¿por qué hay
tantos usuarios que hacen caso omiso de estos mensajes o que
simplemente no los leen?
.bl
¿Alguna vez te has encontrado con un usuario que te ha llamado
pidiéndote que deshagas un movimiento o una contabilización
o cualquier otra cosa? Entonces, le has preguntado ¿Por qué
hiciste ese movimiento? ¿No te leíste el mensaje de advertencia
ww
sobre hacer ese movimiento? Bueno, pues yo sí que me he
encontrado con ese tipo de llamadas, y más de una vez. Escribimos el texto del mensaje. Guardamos.
Como en Juegos de Guerra, esa película de 1983 en la que el
protagonista no hace caso al mensaje de la máquina en una de
las escenas.
[embedded content]
/w
–Máquina: ¿Jugamos?
Ahora introducimos el mensaje en nuestro programa ABAP.
–Actor: ¿Qué tal si jugamos à la “Guerra global
termonuclear”? IF g_var = ‘YES’.
MESSAGE i397(zmensajes) WITH g_var.
–Máquina: ¿No prefiere una buena partida de ajedrez? ENDIF.
p:/
–Actor: Más tarde. Ahora vamos a jugar à la “Guerra global
Existe otra manera, escribe el mensaje directamente sin
termonuclear?
necesidad de introducirlo dentro de la tabla de mensajes.
La de problemas que se hubiese ahorrado el protagonista si
hubiese hecho caso al mensaje del ordenador y no hubiese IF g_var = ‘YES’.
continuado. Por supuesto, esto es una exageración, pero MESSAGE ‘La orden YES inicia la guerra global
htt
demuestra que los mensajes están por alguna razón. termonuclear. Piénsatelo bien’
TYPE ‘I’.
Crear un mensaje en SAP
ENDIF.
En primer lugar tienes que saber que SAP proporciona diferentes
tipos de mensaje, aunque los más habituales son: En cualquier caso, el resultado sería una ventana con el siguiente
25. mensaje…
La orden YES inicia la guerra global termonuclear.
Piénsatelo bien
Advertencia: no hagáis esto en casa de vuestro cliente, puede
m
perjudicar seriamente vuestra reputación dentro de la empresa.
Aunque por otro lado, quién sabe, haciéndolo quizá el usuario
realmente se lo piensa antes de continuar ;-)
.co
Los lamentos
Entonces, ¿Por qué si hemos escrito el mensaje el usuario no ha
seguido sus indicaciones? Bien, los motivos que personalmente
más he escuchado son:
Tengo mucho trabajo y no tengo tiempo para ir leyendo
sap
todos los mensajes que da el ordenador.
Hay tantos mensajes que ya ni me los leo, le doy a continuar
y ya está.
¿Cuál es el problema? El mensaje sólo era de advertencia,
pero me dejaba continuar. Así que he continuado.
No me ha dado tiempo a leerlo. He ido rápido y he
continuado sin querer. Así que no he podido leer el mensaje.
La solución de
og
Si lo miramos desde el punto de vista la persona que trabaja cada
día con las mismas transacciones, podría darles incluso la razón.
El trabajo puede llegar a ser demasiado mecánico y los mensajes
algo que sólo están ahí para molestar. Pero no es así en
.bl
absoluto, un mensaje es información adicional y hay que leerla.
Desde mi punto de vista, lo mejor es mostrar los consecuencias
de no leer estos pequeños mensajes. Sobre todo, formar y pedir
a los usuarios que se los lean. Pero como siempre hay personas
reticentes y malas actitudes, entonces si el error generado ha
ww
sido debido a no querer leer un mesaje yo opto por dejar que sea
la persona quien arregle el problema que ha generado. Puede
sonar duro, pero es mejor que permitir que los mismos
problemas se produzcan una y otra vez.
De todos modos, estas soluciones no suelen gustar a los key
users y mucho menos à la empresa. Por lo que seguramente os
van a pedir que convirtáis aquellos mensajes de tipo informativo
/w
(I) o advertencia (W) en mensajes de tipo error (E). Así, los
usuarios no podrán continuar. Aunque eso suponga muchas
veces que tengan que empezar otra vez la transacción, que esta
transacción acabe abruptamente (suele pasar cuando se
introduce un mensaje de error dentro de una user exit) o peor
p:/
aún, que el trabajo del usuario se convierta todavía en más
mecánico y rutinario.
Por cierto, si no habéis visto la película Juegos de guerra os la
recomiendo, pasaréis un rato muy agradable.
htt
Imagen inicial | randomduck
¿Crees que este artículo es útil? ¿Por qué no me ayudas
a compartirlo? :-)
26. blogdesap.com created using fivefilters.org
m
¿Son mis entornos
diferentes?
.co
¿Y si no es así? ¿Cuáles son las diferencias?
sap
El editor split screen
Si queremos saber cuáles son las diferencias de nuestro
desarrollo entre entornos SAP nos lo muestra en una serie de
sencillos pasos:
Herramientas /Workbench ABAP /Desarrollo /SE38 – Editor ABAP
de Desde nuestro programa navegamos al menú Utilidades
/Más utilidades /Editor split screen
Escribimos el nombre de nuestro programa de nuestros
og
respectivos entornos.
Nos encontramos en nuestro entorno de desarrollo, delante de
uno de nuestros programas y no sabemos si lo que tenemos
Marcamos el botón ‘Comparación de sistemas’, indicamos
delante coincide completamente con la versión que existe en el
con qué entorno queremos comparar nuestro programa.
entorno productivo. Empezar a modificar un programa sin estar
.bl
seguro de ello puede convertirse en un verdadero quebradero de Marcamos el botón ‘Visualizar’.
cabeza. Si ambos entornos no coinciden, nuestros cambios
pueden subir a productivo modificaciones inesperadas, que nos Nos solicitará nuestro usuario y contraseña del entorno
llevan a tener que recuperar cambios y volver a reprogramar destino. Lo escribimos.
nuestro código ABAP.
Se nos abre una pantalla doble, arriba el programa en
ww
Para empezar comparar las versiones nuestro entorno origen, debajo el programa en el entorno
destino.
Lo primero que debemos comprobar son coincidencias en las
versiones. Para ello
Herramientas /Workbench ABAP /Desarrollo /SE38 – Editor ABAP
Nos situamos sobre nuestro programa en el entorno de
/w
desarrollo y vamos al menú Utilidades /Versiones /Gestión
de versiones. Nos apuntamos la última orden de transporte
activa que veamos.
Nos situamos sobre nuestro mismo programa en el entorno
p:/
productivo e igualmente vamos al menú Utilidades
/Versiones /Gestión de versiones. ¿Coincide la orden de
transporte que vemos con la orden de transporte que
teníamos en desarrollo? Entonces, podemos saber que
nuestros programas coinciden.
htt
Si vamos al menú Tratar /Modo de comparación /Menú on,
el sistema nos dirá si ambos programas son iguales.
27. a compartirlo? :-)
m
.co
Si no son iguales, volvemos al menú y pulsamos Tratar
/Modo de comparación /Diferencia siguiente. Y nos llevará al
punto del programa donde hay diferencias.
sap
Esto también nos sirve para detectar diferencias en módulos de
funciones:
de
Herramientas /Workbench ABAP /Desarrollo /SE37 – Biblioteca
de funciones
Igualmente, desde el menú Utilidades /Más utilidades /Editor
split screen.
og
E incluso para detectar diferencias en smartforms, pero en este
caso hay que realizar algunos pasos adicionales. Todo smartform
en SAP se guarda como un módulo de funciones del cual hay que
conocer el nombre.
.bl
Herramientas /Imprimir formularios /SMARTFORMS –
Smart Forms
Entramos en nuestro smartform.
Vamos al menú Entorno /Módulo de funciones en el entorno
ww
de desarrollo. Nos guardamos el nombre que nos ha dado.
Vamos al menú Entorno /Módulo de funciones en el entorno
productivo. Nos guardamos el nombre que nos ha dado.
Vamos al editor split screen, por ejemplo, a partir de la
SE38 e introducimos ambos módulos de funciones en sus
correspondientes lugares. Como veis el nombre del módulo
/w
de funciones que SAP que da al mismo smartform es
diferente según el entorno. Por eso, cuando hagáis la
comparación entre entornos siempre va a haber diferencias,
pero tened cuidado, no siempre es debido a diferencias en el
código sino simplemente al nombre del propio módulo de
p:/
funciones llamado. Por ejemplo, lo que se muestra en la
imagen siguiente no sería una diferencia porque se refiere
solamente al nombre del módulo de funciones dado al
smartform en cada entorno.
htt
Imagen inicial | R0Ng
¿Crees que este artículo es útil? ¿Por qué no me ayudas
28. blogdesap.com created using fivefilters.org
m
Regeneración de objetos Generación de objetos todos de componentes de software
seleccionados: se da cuando se instala por primera vez el
sistema. Al seleccionar esta opción se regenerarán todos los
.co
objetos del sistema SAP.
Regeneración después de un upgrade de sistema SAP: se da
cuando hemos cambiado de versión de SAP y deseamos
regenerar todos los objetos modificados en la versión.
sap
Generación de objetos de una orden de transporte: si hemos
realizado una modificación de varios programas à la vez,
agrupados en una sola orden, utilizaremos esta opción para
regener todos los objetos incluidos dentro de la orden.
Ejemplo
de
Tomemos que queremos regenerar todos los programas que
hemos modificado e incluido en una orden de transporte.
Llamamos à la transacción SGEN.
og
Indicamos nuestra orden de transporte.
¿Cuántos de vosotros no habéis visto alguna vez lo siguiente?
.bl
ww
La primera vez que un usuario ejecuta una transacción tras un
cambio realizado sobre dicha transacción SAP ejecuta un proceso
de regeneración. Un cambio en una transacción (y la necesidad
de regeneración) sucede cuando modificamos la parametrización Decidimos si lo queremos hacer online o en job de fondo. En
asociada a una transacción, cuando modificamos el código ABAP este caso, lo hago en job de fondo.
asociado a su programa, cuando hacemos un upgrade del
sistema, cuando implementamos una nota, etc. Sin embargo, una
/w
vez regenerada la transacción ya no volverá a aparecer este
proceso nunca más.
No soy un experto pero hasta donde yo sabía y me habían
explicado ABAP es un lenguaje de programación interpretado, no
p:/
compilado. Así que nunca he entendido muy bien qué es lo que
hace exactamente SAP cuando dice que está compilando la
transacción. Sea como sea, SAP provee de una herramienta que
nos permite, llamémosle regenerar, en forma masiva una
transacción modificada.
htt
Casos
Transacción: SGEN
Atención, mientras estemos realizando una regeneración de
La documentación de la propia transacción es abundante, pero objetos no podemos hacer simultáneamente una segunda
voy a explicar solamente los casos con los que me he encontrado: regeneración, aunque referencia a objetos distintos.
29. Es aconsejable hacer todas las regeneraciones en job de fondo.
Más información en la propia documentación de la transacción
SGEN y en la nota 379918
Imagen inicial | Patrick Hoesly
m
.co
sap
de
og
.bl
ww
/w
p:/
htt