Aloquevamos.com Blog, ocasionalmente…

18Apr/120

SAP – Dar Salida a Mensajes de MM

Posted by Canyita

En este artículo se explican las principales transacciones para Impresión de mensajes de Compras dentro del módulo de MM de SAP.

Los mensajes de salida se aplican sobre infinidad de objetos, en el caso de compras solemos ver mensajes de salida en los siguientes objetos:

  • Planes de Entrega
  • Repartos de Planes de Entrega
  • Solicitudes de Pedido de Compras
  • Pedidos de Compras
  • Movimientos de Mercancías
  • Facturación Logística

Las siguientes transacciones estándar nos permiten realizar la salida de mensajes por primera vez o repetir la salida de mensajes que ya se han imprimido. Generalmente en SAP, la salida de los mensajes se configura para que se realiza al Grabar el objeto tratado (Pedido, Solicitud, etc.), pero cuando estamos realizando el desarrollo de los mensajes a través de formularios SAPScript, Smartform o PDFForm, es necesario poder probar en repetidas ocasiones la impresión, para poder validar correctamente el formato y datos de dicho formulario asociado a un mensaje.

Lista de transacciones para dar Salida a Mensajes:

  • MR90 --> para Facturas de Compras.
  • MB90 --> para Documentos de Movimiento de Mercancías.
  • ME9L --> para Pedidos de Compras y otros tipos de documentos.
  • ME9F --> para Planes de Entregas y otros tipos de documentos.

En cada transacción deberemos revisar los valores posibles de los campos de Aplicación y Clase de Mensajes para ver que es este el programa que aplica para realizar la salida de mensajes.

Deberemos jugar con el campo de Modo de Procesamiento para poder obtener resultados en el listado de mensajes de salida a imprimir o previsualizar. Los valores del modo de procesamiento son:

  • 1 - Primer Proceso
  • 2 - Proceso de repetición
  • 3 - Proceso con errores

Generalmente, buscaremos objetos que tengan clases de mensajes que ya se han imprimido, y marcaremos el Proceso de Repetición para realizar pruebas de funcionamiento del Formulario.

Cabe destacar, que en las transacciones de impresión de movimientos y las otras en algún caso, suelen validar la autorización sobre Centros, es decir, el usuario que imprime, debe estar autorizado en el Centro al que pertenece el objeto o línea del objeto tratado.

5Apr/120

ABAP OO – Tutorial ALV Simple

Posted by Canyita

Este tutorial explica y demuestra mediante un ejemplo el uso de ALV's en desarrollos a medida en el Sistema SAP. En mi caso prefiero los ALV Orientados a Objetos y además añado una capa de Objetos que
representan y permiten la interacción entre la visualización y los datos de la base de datos. Para el tutorial utilizaré el modelo de datos de Test de Vuelos y Aerolíneas (Tablas SFLIGHT, ...) que SAP proporciona de forma estándar como DEMO para las pruebas en desarrollos.

Para rellenar el modelo DEMO de tablas de SAP con datos podemos usar el programa estándar SAPBC_DATA_GENERATOR, detallado en la documentación de SAP que podemor ver en este enlace.

El siguiente diagrama muestra la forma de separar los datos mediante objetos que aplico en mis desarrollos ABAP.

Diagrama Capa Modelo de Datos

20Mar/120

Mostrar Errores Estándar en un POPUP

Posted by Canyita

Cada vez que ejecutamos un módulo de funciones estándar es habitual que dicho módulo retorne una tabla de mensajes. Esta tabla de mensajes nos indicará si la ejecución ha ido bien o en caso contrario los errores que se han producido.

En nuestros programas es habitual que tengamos que mostrar un log de errores a los usuarios una vez han ejecutado una funcionalidad. Como no queremos construir una ventana a medida para mostrar los errores, podemos utilizar la siguiente función estándar que hace dicho trabajo por nosotros:

  C14ALD_BAPIRET2_SHOW

Si rellenamos la tabla de tipo BAPIRET2, y ejecutamos el módulo de funciones podremos ver el siguiente resultado:

19Mar/120

Ayuda Z para un campo en una Screen

Posted by Canyita

Si necesitamos añadir una ayuda para búsqueda sobre un campo que facilite la entrada de datos a los usuarios, pero los datos que necesitamos añadir para la selección los queremos fijar nosotros, podemos usar el siguiente código ABAP:

* Declaraciones de Variables
****************************
 
TYPES: BEGIN OF ty_fields.
         INCLUDE STRUCTURE help_value.
TYPES: END OF ty_fields.
 
TYPES: BEGIN OF ty_helptab,
         feld(50),
       END OF ty_helptab.
 
DATA: it_centro       TYPE TABLE OF t001w,
      et_centtro      LIKE LINE OF it_centro,
      it_fields       TYPE TABLE OF ty_fields,
      et_fields       LIKE LINE OF it_fields,
      it_helptab      TYPE TABLE OF ty_helptab,
      et_helptab      LIKE LINE OF it_helptab.
 
* Variables para Tablas de Información (F1) de Ayuda de Usuario.
DATA: gv_tabla_f1 LIKE help_info-tabname,
      gv_campo_f1 LIKE help_info-fieldname.
 
* Asociar Ayuda a un Campo de la Pantalla de Selección
***************************************************************
* Variable de la Pantalla para la Ayuda
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_werks.
 
PERFORM prepara_ayuda_centro_z.
 
PERFORM ayuda USING    'Centros de 0 a 100'
              CHANGING p_centro.
 
* Rutina de Carga de Datos de la Ayuda
***************************************************************
 
FORM prepara_ayuda_centro_z.
 
* Campo que se muestra en el F1
  gv_campo_f1 = 'WERKS'.
  gv_tabla_f1 = 'T001W'.
 
  FREE it_ihelp_fields.
  CLEAR: et_fields, it_fields[].
 
  et_fields-tabname    = 'T001W'.    " Tabla de referencia del campo
  et_fields-fieldname  = 'WERKS'.    " Campo para mostrar en la ayuda
  et_fields-selectflag = 'X'.        " Flag de Retorno del Campo
  APPEND et_fields TO it_fields.
 
* Para mostrar otro campo, en este caso la Descripción
  et_fields-tabname    = 'T001W'.    " Tabla de referencia del campo
  et_fields-fieldname  = 'NAME1'.    " Descripción
  et_fields-selectflag = ''.         " Sin Retorno
  APPEND et_fields TO it_fields.
 
  CLEAR : it_helptab[], it_centro[].
  SELECT werks name1 FROM t001w
    INTO CORRESPONDING FIELDS OF TABLE it_centro
    WHERE werks BETWEEN '0' AND '100'
    ORDER BY werks ASCENDING.
 
* Rellena la Tabla de Valores de uno a uno en orden
  LOOP AT it_centro INTO et_centro.
 
    et_helptab-feld = et_centro-werks.
    APPEND it_helptab.
 
    et_helptab-feld = et_centro-name1.
    APPEND et_helptab TO it_helptab.
 
  ENDLOOP.
 
ENDFORM.
 
* Rutina Lanzador de la Ayuda
***************************************************************
 
FORM ayuda USING    p_titulo
           CHANGING p_return.
 
  CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
    EXPORTING
      TITEL = p_titulo
      fieldname = gv_campo_f1
      tabname = gv_tabla_f1
    IMPORTING
      SELECT_VALUE = p_return
    TABLES
      FIELDS = it_fields
      VALUETAB = it_helptab
    EXCEPTIONS
      FIELD_NOT_IN_DDIC = 1
      MORE_THEN_ONE_SELECTFIELD = 2
      NO_SELECTFIELD = 3
      OTHERS = 4.
 
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
 
ENDFORM.

19Mar/120

Convertir Importes de Carácter a Decimal

Posted by Canyita

La conversión de importes en ABAP es un poco liosa y se generan dumps a menudo debido a una mala conversión de importes recibidos en formato carácter o String. En ABAP los importes se guardan en un tipo CURRENCY, es decir, un número decimal.

Si queremos convertir de formato carácter a un formato CURRENCY, como por ejemplo el elemento de datos DMBTR de la tabla estándar de posiciones contables FI de SAP podemos usar el siguiente código para convertir las variables:

" Quito el separador
REPLACE ALL OCCURRENCES OF '.' IN string_importe WITH space.
 
" Elimino Posibles Espacios
CONDENSE string_importe NO-GAPS.
 
" Convierto a DMBTR que es una variable ABAP de tipo decimal
" para importes, concretamente de posiciones de documentos FI
PACK string_importe TO dmbtr.

 

12Dec/100

Acceso a la pila de Memoria de Ejecución ABAP o Hachazo

Posted by Canyita

El sistema SAP está basado en un código de programación estático que puede ser personalizado y adaptado en puntos especificos del proceso de ejecución. Esto es que SAP nos permite escribir código ABAP en ciertos puntos de ejecución del proceso estándar para adaptarlo a las necesidades del cliente.

En muchas ocasiones, cuando estamos programando una Exit, dentro de la exit no tenemos acceso a todos los datos necesarios para llevar a cabo la tarea o decisión que tiene como objetivo la exit en cuestión.

Para solucionar este problema de datos, mediante debugging de la exit, podemos acceder a la pila de memoria ABAP de ejecución del programa estándar que estamos adaptando, y en este punto rastrear los datos que necesitamos a lo largo de las diferentes llamadas de programa que sean realizado durante el proceso estándar.

12Dec/100

Nuevo Laboratorio de Pruebas Virtual con ESXI

Posted by Canyita

Tras bastante tiempo chapuzeando pruebas en diferentes chatarras reaprovechadas, segundos pc's guarrufos, que siempre se quedaban cortos, etc... decidimos profesionalizarnos un poco.

Hemos dado el paso y nos hemos comprado una máquina especialmente para realizar pruebas, pero queríamos la flexibilidad para montar sistemas a diestro y siniestro, lo que no dejaba una única solución: Virtualización.

12Dec/100

Activar Debug en un Popup ABAP

Posted by Canyita

En ciertas ocasiones nos encontramos que queremos empezar a debugar un report a partir de una ventana Popup, pero dichas ventanas no tienen el interprete de comandos SAP para ejecutar /h, y activar el mdo debugging.

En estos casos tenemos la siguiente opción para activar el modo debigging de ABAP:

  • Creamos un fichero de texto plano con el editor que prefiramos. Podemos poner el nombre que queramos pero esta bien que se entienda para que sirve. En mi  caso tengo puesto "ActivarDebugging.txt".
  • Dentro del fichero debemos escribir lo siguiente:
             [Function]
             Command=/h
             Type=SystemCommand
  • Guardamos el fichero, lo cerramos y ejecutamos el report hasta el punto en que se muestra el Popup donde queremos activar el modo debugging.
  • En este punto, lo único que tenemos que hacer, es abrir el explorador de carpetas y arrastrar el fichero, en mi caso "ActivarDebugging.txt", sobre el Popup del report de SAP. Al soltar el fichero sobre el Popup el modo debuggind de ABAP quedará activado, y se podrá ver mediante el mensaje informativo en color verde en la barra de estado de la ventana SAP.

Archivado en: ABAP Nadie dijo nada