Mostrando entradas con la etiqueta ABAP. Mostrar todas las entradas
Mostrando entradas con la etiqueta ABAP. Mostrar todas las entradas

martes, agosto 28, 2012

Acceder al contenido de cualquier tabla remota

El siguiente programa muestra el contenido de cualquier tabla que se encuentre en un sistema remoto (y cuya estructura sea conocida para el sistema actual). Esto es útil si se desea hacer una copia de los datos de una tabla de producción en el entorno de desarrollo, por ejemplo.

Como requisito, es necesario tener definida en el sistema local la conexión a la BD del sistema remoto. Esto se hace a través de la transacción DBACOCKPIT.  Una vez configurada y probada, podemos probar el siguiente código:

miércoles, abril 25, 2012

Redondeos en ABAP

Este es un ejemplo de cómo se comportan los distintos tipos de redondeo en ABAP:

  imp_round = round( val  = imp_total
                     dec  = 2
                     mode = cl_abap_math=>round_up ).



*--------------------------------------------------------------------*
*  Ejemplo: 438,7648

*--------------------------------------------------------------------*
*  ROUND_HALF_UP     438,7600
*  ROUND_HALF_DOWN   438,7600
*  ROUND_HALF_EVEN   438,7600
*  ROUND_UP          438,7700  <-- Es lo mismo
*  ROUND_DOWN        438,7600
*  ROUND_CEILING     438,7700  <-- No es igual
*  ROUND_FLOOR       438,7600
*--------------------------------------------------------------------*
*  Ejemplo:
438,7648-
*--------------------------------------------------------------------*
*  ROUND_HALF_UP     438,7600-
*  ROUND_HALF_DOWN   438,7600-
*  ROUND_HALF_EVEN   438,7600-
*  ROUND_UP          438,7700- <-- Es lo mismo
*  ROUND_DOWN        438,7600-
*  ROUND_CEILING     438,7600- <-- No es igual (tira hacia positivo)
*  ROUND_FLOOR       438,7700-
*--------------------------------------------------------------------*


martes, marzo 20, 2012

Parámetros de Memoria (Memory ID)

Una manera de establecer medidas de control análoga a los objetos de autorización es mediante parámetros de memoria que se asignen a los usuarios.

Para crear un parámetro de memoria, se puede realizar mediante la tx: SE80: Crear -> Otros (1) -> ID parámetros SET/GET.

Una vez creado, se puede añadir a los parámetros de los usuarios que se deseen en la pestaña "Parámetros" de la SU01.

Para comprobar se puede utilizar la función "ISH_USR05_GET":

  DATA l_value TYPE xuvalue.

  CALL FUNCTION 'ISH_USR05_GET'
    EXPORTING
      ss_bname         = sy-uname
      ss_parid         = 'ZPARAMETER'
    IMPORTING
      ss_value         = l_value
    EXCEPTIONS
      parid_not_found  = 1
      bname_is_initial = 2
      parid_is_initial = 3
      OTHERS           = 4.
  IF sy-subrc <> 0.
    CLEAR l_value.
  ENDIF.
  IF l_value  = 'X'.
    RETURN.
  ENDIF.

martes, septiembre 06, 2011

Caracteres de escape

En las expresiones regulares, se pueden emplear ciertos caracteres comodín para realizar búsquedas que encajen con determinados patrones. Dichos caracteres dependen del entorno en el que se empleen.

Si se va a realizar comparaciones entre valores de variables del código ABAP, los comodines disponibles son:
  • Asterisco ('*') para ristras de caracteres
  • Signo más ('+') para caracteres individuales. 
Si la comparación se va a realizar a nivel de base de datos, en este caso los comodines son:
  • Signo porcentaje ('%') para las ristras de caracteres
  • Guión bajo ('_') para caracteres individuales.

lunes, agosto 29, 2011

SERIALIZATION ERROR

A la hora de enviar un eMail mediante el adaptador de correo de PI, es necesario pasar el contenido del mensaje a formato XSDANY (ver nota 748024), el cual se trata de un RAWSTRING.

Para realizar la conversión del contenido, nos vale alguna función que convierta de STRING a XSTRING, tal como SCMS_STRING_TO_XSTRING. El problema está en que, si pasamos este contenido al proxy encargado de realizar el envío del mail, así tal cual, lo más seguro es que el método devuelva una excepción indicando que ha habido un error en la serialización.

Esto es porque el mensaje del contenido que vamos a pasar debe estar contenido entre etiquetas (da igual lo que pongan), pero deben delimitar el mensaje.Ejemplo:



Enlaces relacionados:

jueves, julio 21, 2011

Probar BAPIs en SE37 con commits

Para probar una BAPI, se puede utilizar la transacción SE37 y rellenar los campos que sean necesarios con el inconveniente de no poder ver el objeto creado en la base de datos debido a que falta el commit. Pues para solucionar este problema, existe una opción en el menú de la SE37 que te permite ejecutar varias funciones seguidas: Módulo funciones -> Verificar -> Secuencias test.

 

viernes, junio 17, 2011

Mensajes de confirmación en proxies asíncronos

Cuando se envía una mensaje de manera asíncrona, puede interesar conocer si el mensaje ha llegado correctamente o si  ha habido algún tipo de error. Este escenario me lo encontré en una comunicación proxy -> jdbc, donde quería conocer si la inserción en la base de datos se hizo correctamente.

Como requisito, es necesario que el sistema origen tenga definido el adaptador proxy de recepción para que pueda recibir el mensaje de confirmación (con esto es suficiente, no es necesario definir nada más como el "Receiver agreement"). En el caso de PI 7.11 en adelante, también será necesario definir en el adaptador de envío, la conexión que utilizará para devolver las confirmaciones (esta conexión debe ser creada previamente en el NWA de PI).


Un aspecto a tener en cuenta es que, en mi caso no servía indicar el path "/MessagingSystem/receive/AFW/XI", ya que me daba un error de servicio no activado. Sin embargo sí me sirvió utilizar el path "/sap/xi/engine?type=receiver" y activar el servicio sap/xi/engine en el sistema ECC (tx: SICF), para que pueda recibir dichas respuestas.

viernes, marzo 25, 2011

lunes, septiembre 27, 2010

Conocer los Objetos de Autorización de una Transacción

A través de las transacciones SU22 y SU24 podremos conocer y editar los objetos de autorización que afectan a las transacciones que indiquemos. La principal diferencia entre ambas transacciones es que la SU22 se encarga de mantener la relación de objetos de autorización de SAP, los cuales se recogen en las tablas USOBT y USOBX, y se mantiene mediante la transacción SU25, mientras que la SU24 está enfocada a los objetos de autorización definidos por el cliente, los cuales se almacenan en las tablas USOBT_C y USOBX_C. (NOTA: Todos los objetos de SAP aparecen también en los objetos del cliente).

jueves, septiembre 16, 2010

Crear ficheros de pruebas para programas Batch Input

La aplicación "Data Transfer Tools" (tx: SXDA_TOOLS) permite generar de manera automática ficheros de prueba necesarios para programas batch input.

Dicho fichero se puede utilizar a modo de plantilla para realizar las pruebas que se deseen. Por ejemplo, si se quiere realizar una actualización de los datos de un acreedor, existe el report estándar RFBIKR00 el cual ejecuta un B-I a partir de un fichero de entrada con una estructura específica. Con el fin de no generar el fichero de prueba a pelo, iríamos a la transacción SXDA_TOOLS e indicaremos que deseamos crear un fichero para el tipo de objeto LFA1 (Vendor), para el programa RFBIKR00 que es de tipo BINP (Batch Input):

miércoles, septiembre 15, 2010

Crear transacción de una vista de actualización

Para crear una transacción de una vista de actualización deberemos, a través de la tx. SE93, crear una "Transacción con parámetros (transacción de parámetros)". En el bloque de valores de propuesta indicaremos que la transacción objetivo es la SM30 y marcaremos el flag "Omitir imagen inicial".


Por último, al final de la pantalla, habrá que añadir los siguientes parámetros:
  • VIEWNAME: (nombre de la vista)
  • UPDATE: X
Existen más parámetros (SHOW, TRANSPORT, etc.), en este caso he indicado que deseo actualizar la vista.

Enlaces de referencia:

martes, agosto 17, 2010

Cancelar importación de una orden de transporte en curso

Para cancelar una orden de transporte que se encuentre colgada en estado "Import en ejecución" hay que seguir los siguientes pasos:
  1. Seleccionamos la orden que se desea cancelar en la STMS.
  2. Vamos a la opción Pasar a -> Importar monitor (Ctrl+F8).
  3. Una vez ahí, aparece una lista con entradas de ejecución de importaciones anteriores que estarán en verde, excepto la orden que se encuentra colgada, la cual aparecerá en gris.
  4. Seleccionamos la orden en gris y haciendo clic con el botón derecho del ratón, escogemos la opción "Borrar entrada".
  5. Por último, nos autenticamos en el sistema y con ello se habrá reiniciado el estado de la importación y podremos reimportar la orden, si fuera necesario.
Esto es útil por si se ha introducido un parámetro incorrecto en los datos de transportes (p.ej. un mandante que no exista) y la orden se queda colgada, no dejando reimportarla al mandante correcto.

viernes, julio 30, 2010

Importar y exportar clases en formato XML

En el siguiente enlace, Sergey Korolev indica cómo podemos importar/exportar clases abap entre sistemas por medio de ficheros XML. Bastante útil.

miércoles, abril 28, 2010

Usos de ALV en Netweaver 04

Para los que aún sigan utilizando el modelo de programación antiguo para los ALV de SAP, adjunto un par de enlaces en el que se definen cómo utilizar el modelo introducido a partir de SAP Netweaver 04:
SAP proporciona programas de ejemplo en sistema que comienzan por SALV_DEMO_*. Estos a su vez se basan en datos de ejemplo similares a los empleados con los ejemplos de vuelos, los cuales se pueden iniciar en el sistema a través del report BCALV_GENERATE_ALV_T_T2.

Enlace de referencia:

viernes, abril 23, 2010

Vista de actualización "no modificable"

Cuando queremos crear una vista de actualización de una tabla que sea editable en el entorno destino, necesitamos saber si dicho entorno permite modificaciones de tablas. Esto lo podremos saber porque si no definimos correctamente la rutina de grabación de la vista de actualización, al intentar editar la tabla en el destino (mediante tx: SM30, p.ej.) aparecerá un mensaje informativo indicando:

Mandante XXX tiene status "no modificable"

Esto se soluciona indicando la opción "Rutina de grabación individual o ninguna" en la vista de actualización:

jueves, febrero 25, 2010

Obtener contenido de campos de dynpros antes de pulsar Enter

La siguiente función permite obtener el contenido del campo que se desee de la pantalla de selección (dynpro) sin necesidad de que el usuario haya pulsado ENTER. Esto es útil para aquellos programas cuyos datos de selección dependen unos de otros.

lunes, febrero 22, 2010

Pragmas y Pseudocomentarios en ABAP

Hay algunos programas en los que aparecen comentarios del tipo "#EC seguido de un comando. Pues bien, dichos pseudocomentarios sirven para eludir los mensajes de aviso relacionados que aparecen al validar el código del programa mediante transacciones como SLIN y SCI. Estas transacciones sirven para garantizar la calidad del código.

Es a partir de SAP Netweaver 7.1 EhP1 cuando estos pseudocomentarios pasan a ser obsoletos y en su defecto se pasa a hacer uso de los pragmas.

Enlace de referencia:

    miércoles, enero 27, 2010

    Iniciación a WebDynpro

    En la siguiente entrada recojo información básica para iniciarse en el mundo de los WebDynpros.

    Enlaces de iniciación


    Conocimientos previos necesarios para probar una aplicación:

    Para acceder al servicio de aplicación es importante que enlace sea informado del estilo:

    http://<host>.<dominio>.<ext>:<puerto>/sap/bc/webdynpro/sap/<aplicación>
     

    Servicios necesarios activos (SICF)


    Servicio de aplicación Webdynpro
    • /sap/bc/webdynpro/sap/<aplicación>

    Servicios básicos del sistema

      Enlaces relacionados con seguridad

      martes, enero 19, 2010

      Depurar un proceso lanzado en fondo (job)

      En ocasiones un report funciona correctamente al ejecutarlo online, pero puede fallar cuando se ejecuta en fondo (modo batch). En ese caso, el job aparece como cancelado en la transacción SM37. La mayoría de las veces, la información que aparece en la transacción ST22 es suficiente para determinar la causa, pero esto no siempre es así. La cuestión es: ¿cómo puedo depurar el programa en fondo para saber dónde ha fallado?

      Existe un modo a través de la transacción SM37. Para ello se deberá seleccionar qué proceso se desea depurar, marcando la casilla correspondiente y, a continuación, introducir el comando "JDBG" en el campo de comandos tal como se muestra en la siguiente captura de pantalla:


      De este modo se iniciará un modo debug en el que se repetirá el proceso que falló considerando los mismos parámetros de entrada que tenía en su origen.

      Más información:

      lunes, octubre 26, 2009

      Calcular impuesto de un precio determinado

      Para conocer cuál es el impuesto que le corresponde a un importe determinado podremos utilizar la siguiente FM estándar:



      Donde "l_taxcom" es una estructura de entrada en la que rellenaremos los campos necesarios y "l_fwste" es el importe resultante del impuesto que le corresponde al precio indicado.

      Para que la función devuelva dicho importe, deberemos informar como mínimo los siguientes campos de la estructura "TAXCOM":
      • TAXCOM-BUKRS = Sociedad correspondiente
      • TAXCOM-MWSKZ = Indicador de impuestos correspondiente
      • TAXCOM-KPOSN <> '00000'
      • TAXCOM-XMWST = 'X'
        En la mayoría de los casos querremos calcular el impuesto que le corresponde a un determinado material, para ello será necesario acceder al registro info correspondiente (tablas EINA/EINE).