MA - Clase SAP - A
MA - Clase SAP - A
MA - Clase SAP - A
OT
Clase desarrollo = paquete
Paquete local ($TMP), para asegurarse que no pase de una instancia a otra, solo para pruebas.
Las Notas OSS de SAP dicen “Reparación”, mis OTs siempre dicen “Desarr/Corrección”. SAP modifica programas estándar y el
origen de esas modificaciones es otro sistema SAP no el nuestro.
SNOTE, para implementar notas OSS, identifica pre-requisitos.
Cuando modificas un objeto estas modificaciones pasan a la tarea del usuario.
Puedo incluir objetos sin modificar en una OT (padre), como?
Cuando liberas una tarea, sus modificaciones pasan a la OT (padre) y ya pueden enviarse al otro ambiente.
ABAP Debugger
/h: cambiar a la modalidad de debugger, sale un mensaje en la barra de status
Luego ejecutado cualquier transacción y se ejecutara paso a paso (F5) / ejecuta la rutina (no línea por línea) (F6) / salir de la
rutina (si estamos dentro) (F7)
F8 y se ejecuta todo y veo el resultado, se desactiva el debugger
Watch point: condición para que el debugger pare. Otro caso para identificar en que línea se cae (por privilegios por ejemplo)
Breakpoint: usando SE38 ir a la línea y marcar, el programa parara en esa línea.
Stop externo: bapis, acceso desde otros programas
Al entrar a una variable (doble click) podemos ver el contenido de la variable y cambiarlo para que continue la ejecución con el
valor que le damos.
Watch point, luego de colocarlo, presionar F8 para que pare en la condición, una sentencia después de que se cumple la
condición.
Desde SE11, ver en que objetos se usa un objeto en particular, ( ) Referencia de utilización.
1
Miércoles 09 Noviembre
Una tabla creada en la base de datos no se puede ver en el diccionario de datos, si la creamos desde el diccionario de datos la
podemos ver en ambos.
BKPF -> tabla transparente, es física, está en BD,
BSEG -> tabla cluster, no se ve en la BD, usa tablas transparentes encriptados, extrae la información de estas tablas y se
muestra.
T03 -> tabla tipo C (customizing), pq es una tabla de configuración – clases de documento. Pide una OT cuando hacemos un
cambio. Se crea primero en la instancia DEV o QAs.
Elemento de dato (de un campo de una tabla) -> hereda los atributos de un dominio, información que describe el dato.
Se puede ampliar la estructura de una tabla estándar.
Un campo creado tiene valor nulo para los registros ya existentes, para los nuevos registros tendrá valor espacio “ ”, para que
SAP inicialice todos los registros con espacio “ ”debemos marcar el indicador con el valor No Nulo.
No es obligatorio crear un Elem. Dato para un campo, pero es lo más recomendable. A excepción de campos que se usen para
interfacear otros sistemas que se usen en un solo programa.
Opciones técnicas:
Categ.tamaño, es solo una referencia, no restringe nada. No es modificable.
Grabación de memoria intermedia (buffer), está en megas, si esta activada guarda la información en el buffer.
Forma de grabar …, si dice grabado completamente en MI, guarda en el buffer toda la información de la tabla no solo los
registros leídos.
La transacción SM30
Sirve para llamar a la vista o la tabla si en caso no tenemos una transacción asociada, botón actualizar (modo modificación).
Para crear la transacción: llamar a la SM30, con la vista, y que no salga la primera pantalla: campo transacción, check omitir
imagen inicial, marcar SAP GUI (las 3), agregar en la lista el nombre de la vista (viewname, nn vista), agregar en la lista el modo
invocación (update, X) modo modificación – el X es como el check.
BSEG -> tabla cluster:
Si esta así, por la SE16 o SE11 no se puede ingresar información
2
La tabla RFBLG si es una tabla física
BSEG: Al visualizarla SE16, el campo VARDATA contiene toda la data del registro encriptado, también tiene los campos llave y
un campo PAGENO ¿?
Si vemos la RFBLG por la SE16 vemos la data real sin encriptación con todos los campos como son.
3
Jueves 10 Noviembre
Creación de llaves foráneas (SE11)
Desde la modificación de una tabla (SE11), pestaña Ayuda p/verif.entr, ….
Vista de supresión, solo se visualizan algunos campos de una tabla (extensa).
Todo esto aplica para tablas transparente, no tablas cluster.
Creación de Vistas (SE11)
Funciones
BAPI = Es una referencia, debe tener como Forma de ejecución remota (configuración). La palabra BAPI en el nombre no
asegura esto, uno debe verificar.
SE38, visualizamos un grupo usando el prefijo SAPL + nombre del grupo de funciones
Al crear un grupo se crean 2 funciones automáticamente:
INCLUDE L + nombre del grupo + _TOP
““ + _UXX
TYPE -> Luego viene el Elemento de Dato
Crear elemento de datos (SE11), opción tipo de datos, opción elementos de datos
SY_SUBRC, variable SAP que devuelve la función, si es 0 ejecución exitosa, de lo contario ocurrió un error.
Si vota un dump, es porque el programa no está manejando el Error.
4
Viernes 11 Noviembre (David):
Creación de Reportes
ZPSD02 -> Estadística de venta por títulos -> ALB Estructurado, tiene cabeceras, datos filtros, fechas, hora, tiene barra
herramientas (sumatorias, ordenamiento, disposición, exportación), columnas de colores, celdas por colores, posicionar en
cada celda, permite hacer doble clic sobre las celdas y llamar otras ventanas (smartforms, transacciones), en las celdas muestra
matchcodes.
ZPP03 -> ALB Estructurado
ZPP12 -> ALB Objetos (más eficiente)
Otro tipo de reporte: Smartforms, formularios - ejemplo: facturas, guía de remisión.
ZPSD02 – analizando el reporte:
5
Visualizar los objetos ( )
Transacción: es el nombre de la transacción creada para llamar al programa. Se le puede crear más de una transacción a un
programa.
Dynpros: pantalla presentación – layout, si dice 1000 es creada por SAP por defecto, generalmente cuando se programa por
código.
Subrutinas: creadas para el reporte.
Eventos: disparadores ante una acción del usuario. Ejem: llamada a un smartforms.
Macros: para crear una especie de variable global para una rutina, una copia en memoria que pueda usar cualquier rutina del
programa.
Sentencia DEFINE.
Tipos: Son las estructuras (records, pueden tener varios campos), dependiendo de la declaración puede tener varios registros.
No se pueden usar directamente, sirven para declarar Tablas internas, siendo estas ultimas las que se usan en el programa. En
el código sentencia TYPE: BEGIN OF.
Campos (Variables): Lista de los campos creados por código o directamente en el nodo (si es así se genera el código de la
definición del campo). Se pueden crear variables de tipo tabla interna (TYPE STANDARD/SORTED/HASHED TABLE OF “NOMBRE
DE LA ESTRUCTURA - TIPO”) cuyo tipo es una Estructura. Sentencia DATA.
6
Estructuras Dict: son las tablas estándar y Z que se usan en el programa, en el código sentencia TABLES. No se inscriben las
tablas que se usan para declarar tipos de datos.
Field-Symbols: Punteros, <nombre del puntero> LIKE (LINE OF nombre tabla interna / nombre estructura). <nombre del
puntero> TYPE (nombre un campo / “nombre tabla – nombre campo” / elemento de dato) – apunta solo a una variable.
Campo: LIKE Sy-datum (=Syst-datum), Syst = Estructura del sistema que guarda la información de la sesión (fechas, horas,
usuario, etc).
Rangos (RANGES:) Una variable declarada como Ranges tiene atributos por defecto (sign, option, low, high), el valor es del tipo
declarado con FOR.
Constants:
7
Creación de una Dympro (pantallas)
En el árbol, crear Dympro, luego click en el Layout.
En el Layout () para extraer campos de una tabla, generalmente para visualizar su información.
El bloque que vemos en código corresponde al icono Marco.
Parámetros de entrada:
Recomendación de David: los parámetros de entrada deben ingresarse por código.
Rango
Para modificar el texto por defecto que le da el SAP a los campos que uno va añadiendo a la Dympro.
Eventos, que deben crearse siempre (otra manera de manejar esto es con INCLUDES - preguntar):
INITIALIZATION
AT SELECTION-SCREEN
Siempre debe colocarse la sentencia INITIALIZATION, para inicializar nuestras variables con las variables del sistema.
8
Mostrar la pantalla de parámetros, luego colocamos AT SELECTION-SCREEN para dispara la pantalla de entrada de
parámetros:
Entrada de parámetros (usuario), luego siempre debe venir START-OF-SELECTION, para que el programa entre en un modo de
espera (wait), donde el usuario ingrese los parámetros de entrada y ejecute el reporte (F8). Una vez ejecutado (F8) continuara
con la ejecución de las demás líneas del reporte (sentencias PERFORM) usando los parámetros ingresados. Si no colocamos
esta la línea el reporte no se ejecutara – no mostrara los resultados.
Luego en el código (líneas más abajo) iniciamos la rutina de presentación del reporte (salida) FORM alv_columnas, y usamos
estas variables:
Llenamos la data (previamente obtenida en tablas, variables, etc) en la variable declarada para visualizar los resultados:
posición, nombre del campo de la tabla (se cargo previamente), nombre de la tabla (se cargo previamente), cabecera de la
columna, color de fondo. Finalmente pintamos estos datos en el reporte usando la sentencia APPEND.
9
Lunes 14 de Noviembre 2011
Tanto los smartforms como los ALV usan una tabla interna con el contenido de los datos a mostrar, incluyen totales, cálculos,
etc.
Smartforms, recibe tabla interna llena a través de una función, del SE38 al formulario.
Estructura de la tabla interna – depende de cada reporte, cada campo es una columna de la ALV. Aquí es t_salida
Llenado de variables:
PERFORM -> Llama a una rutina, que empieza en FORM / END FORM.
10
Una vez llena la tabla interna, ejecutar la rutina que presentara los datos en pantalla.
“fieldname” -> es la información que va a ser presentada en esa columna, se asigna una vez y el reporte carga toda la columna.
Se usa un loop para llenar las columnas en base a la lógica del reporte.
11
Averiguar que hace alv_fill_layout.
Alv_lineas_de_titulo, pinta la cabecera del reporte, incluye fecha y hora.
alv_carga_evento, para que se dispare y muestre la cabecera (perform anterior)
alv_desplegar, analizar y revisar que hace m_sort
Perform Carga_datos
(*)mkpf: tabla de cabecera de documentos de material, no esta la clase de movimiento, tampoco el material.
Si el SELECT anterior encontró algún registro (y no hubo error), continuar con el contenido del IF:
(*)mseg: tabla de segmento (detalle?) de documentos de material, aquí si esta la clase de movimiento y material.
Este campo tiene los atributos de la MARA (no es la tabla en si), como podemos ver en la ayuda de la pantalla:
12
Buscando movimientos de anulación de un movimiento, se hace haciendo referencia al documento original (padre) en la tabla
hija. La tabla hija guarda esto como referencia el movimiento padre al cual esta anulando.
T_mseg, posee todos los movimientos de venta, buscamos si estos tienen movimientos de anulación, esto tambien se guarda
en la tabla mseg:
READ TABLE
Transporting no fields
13
CHECK log_exp: Si log_exp es incorrecta culmina con la actual iteración del loop y continúa con la sgte.
En particular, este check TERMINA la actual iteración del loop si el READ TABLE (sentencia anterior) lee algún registro (sy-
subrc = 0). Pasa a la sgte iteración del LOOP.
Si la condicion se cumple (el READ TABLE no devuelve registros: sy-subrc <> 0) CONTINUA con las sgtes instrucciones del
LOOP.
Es decir, continúa con el LOOP (sentencia Perform) si el movimiento de venta (en cuestión) no tiene anulaciones. No toma en
cuentan los movimientos que tienen su correspondiente movimiento de anulación.
14
Martes 15 Noviembre (Jorge)
Ampliaciones:
Notas OSS: mejoras al SAP
Los user exists (Include _..._Z_) solicitan una clave, dado que se va a modificar el estándar.
Customer exit
BTE
BADI
Enhancement Business (add-ins)(puntos de ampliación): objetos dentro del sistema que están inactivos, listos para ser
utilizados por el cliente.
vtm?
Personalization: configuraciones hechas en el sistema propias del cliente relacionadas a roles y perfiles.
Ejemplo Bady: XXXXXX “si esta activado se ejecuta cuando documento en moneda extranjera, el usuario no ingrese el tipo de
cambio”. Esta información la podemos encontrar en foros o documentación SAP.
S11: reutilización de objetos, clases, buscamos funciones en base a la tabla que guarda la información (ejemplo jerarquías)
SMOD: para ver o crear una ampliación dentro del sistema de tipo Customer exit. Ejemplo: VO5I0001
Vemos sus componentes (botón componentes) -> toda ampliación tiene 4 componentes
Tiene 03 user exits, deben trabajar las 3 en conjunto, no deberíamos activar solo alguna de ellas, pq por algo SAP las ha
empaquetado.
15
User Exit: Tiene por nombre EXIT_NombrePrograma_Correaltivo
Vemos el código del user-exit, para añadir funcionalidad a un User Exit se hace a través del INCLUDE (un include empieza
generalmente en ZXV)
16
Encontramos (vemos que la 001 esta en varios programas)
17
Al revés, buscamos su ampliación en SMOD
Encontramos:
18
CMOD: Activar o desactivar Ampliaciones.
Una ampliación solo puede estar asignada a un proyecto.
Para que ya no funciones debemos desactivarla, no es necesario borrar el código.
Visualizamos:
19
Para buscar si un programa usa user_exits, ir a su programa, buscar CALL CUSTOMER, con ello encuentro el/los USER EXISTS
que tiene, luego voy a la CMOD y veo si tiene algun proyecto activado. Con esto compruebo si esta funcionando o no.
Para buscar objetos que usen otro objeto ir a Referencia de utilización, con ello puedo encontrar funciones, rutinas que puedo
necesitar para trabajar con ese objeto.
FILL EXIT?
20
Miércoles 16 Noviembre (Jorge)
SM35:
SU3
SE11
Tabla BDCData: tabla que existe en el sistema, entiende a partir de una estructura.
21
SU01: Información del usuario (antes de cambiar algunos atributos con el Batch input)
22
SM35: creamos el modelo de grabación para la carga masiva.
Opción de grabación
Opción Grabación nueva, llenamos un nombre y el código de la transacción que queremos cargar en forma masiva (SU3):
23
Ingresar los datos, presionar el ENTER, luego grabar. Nos bota de la transacción y nos muestra una pantalla con la estructura de
con los datos que hemos ingresado. Grabamos.
Icono de
modificar
Se puede optimizar,
cambiar /00 por
=CHAN, eliminar todo
el segundo bloque.
Icono de
grabar
Para probarla, seleccionamos el registro y presionamos , ejecutara paso a paso la estructura que hemos grabado,
finalmente si todo ok guardara el registro con los cambios. Procesar tiene una opción para procesar con debuging.
24
Para preparar el archivo de carga, tenemos que crear el fichero presionamos y lo buscamos con la AL11.
AL11: directorio de todas las carpetas del SAP, buscamos nuestro archivo (por defecto lo guarda en el DIR_HOME):
Filtramos en File Name con el nombre del archivo que hemos creado (fichero*)
25
Ahora creamos el Juego de datos (en la SM35), seleccionamos el registro y presionamos y presionamos
No se podrá ejecutar
hasta esa fecha
Esto genera un conjunto de datos (no lo ejecuta SAP), es como una foto con todos los pasos que SAP realizara con los datos
ingresados en el paso anterior.
Retrocedemos:
Lo ejecutamos , luego
26
Confirmamos los pasos y al final:
Podemos ver el resultado de lo procesado. Foto con el dympro que va a ser trabajado más adelante. Todo juego de datos bota
un Log.
FALTA
27
SM35, seleccionamos grabación y creamos el Programa correspondiente, botón
Obtenemos:
28
Luego confirmamos la primera opción y aparece
Nos solicita la OT
29
Creamos una nueva OT y grabamos
Vemos el programa con la SE38: ZSU01_9X_PROG, este programa será usado para la carga masiva.
30
Ejecutamos F8
El carácter “/” (campo INDICADOR NODATA del programa generado) al inicio de un campo en el archivo de carga, indica al
programa que no utilice este campo, es decir no será cargado. No hacerlo con campos llave.
Cambiamos algunos datos.
Se trabaja con el archivo creado anteriormente (formato creado por la estructura), para ello debemos transferirlo a nuestra PC
(en la ruta SAP no se puede modificar), lo modificamos y lo volvemos a transferir al servidor.
Jorge tuvo un problema con los caracteres al pasar el archivo a su PC, el SAP ya no lo reconoció.
31
CG3Z: Para transferir un archivo al servidor
32
Preguntas para Jorge:
Como añadir un objeto a una Ot sin modificarlo
Programas sin calculo de coma fija (algunos programas estándar)
Se puede hacer un join entre tablas internas, ejm: mkpf, mseg
Link para ver la Gama de ampliaciones posibles SAP
Puntos de ampliación?
Read table
33