domingo, 3 de febrero de 2013
GUIXT: Instalación y Configuración (I)
Este resumen no está disponible. Haz
clic en este enlace para ver la entrada.
viernes, 14 de diciembre de 2012
GUIXT: Introducción
GUIXT es un software que trabaja sobre el cliente SapGui y está basado en scripts que permite personalizar y mejorar la experiencia del usuario con nuevas funcionalidades ( botones personalizados, imágenes , datos por defecto, campos de entrada y textos…) o la posibilidad de cambiar el aspecto visual del cliente SapGui adaptándolo a las necesidades del usuario.
Cuando solicitamos o ejecutamos una transacción/programa/dynpro en SAP, el servidor de aplicacion envía un objeto al SapGui que lo ejecuta la información encapsulada en el objeto, interpreta las instrucciones y muestra por la pantalla al usuario la información. GuiXT consiste fundamentalmente, en que antes de que SapGui muestre la información en la pantalla, interpreta secuencialmente una serie de scripts contenidos en un archivo de texto plano ( .txt ). Estos scripts pueden modificar el contenido del objeto, pueden eliminar elementos de la pantalla, cargar valores por defecto, añadir imágenes, crear matchcodes, crear pulsadores, llamar a BAPIS y un sinfín de pequeñas utilidades que permiten al consultor poder personalizar el aspecto del sistema a cada usuario.
| Guixt trabaja sobre el cliente SapGui |
![]() |
| Cambiando el maestro de materiales (MM03) |
El cambio visual que se puede desarrollar con GuiXT no es solo aplicable a transacciones individualmente, es tan flexible que nos permite combinar varias transacciones en una sola o sustituir varios elementos de una transacción, también puede ejecutar BAPIS desarrolladas en ABAP a través de RFC.
Por ejemplo, podemos combinar todas las pestañas de la transacción MM01, con Info records de la transacción ME11. Imaginemos un usuario que para crear un material necesita utilizar 15 campos de las diferentes pestañas de la transacción MM01 y 4 pantallas de la transacción ME11, con GuiXT el usuario será capaz de crear el material, los info records y extender el material a 3 canales de distribución con solo un click sobre un pulsador. También, podemos a la vez, actualizar códigos de descuento que se almacenan en una tabla Z del diccionario, a través de una BAPI programada en ABAP.
| MM01 y ME11 recreada con GuiXT |
GuiXT ha sido desarrollado por la empresa Synactive, fundada en 1998 en Mannheim, Alemania por el Dr. Gerhard Rodé, desarrollan componentes de software de gran calidad en conjunto con SAP. Son productos a medida, enfocados a adaptar los interfaces de un sistema SAP, a las necesidades del usuario, pero con una instalación sencilla de sus componentes y sin modificar el sistema SAP.
Su software GUIXT ha sido integrado completamente en el sistema SAP ERP (SAPGUI) y viene ya incluido en el cliente SapGui a partir de la versión 4.6B y es compatible con todas las versiones certificadas por SAP para NETWEAVER.
Para comprobar si tenemos las DLLs instaladas, en la esquina superior izquierda del SapGui y sobre el símbolo hacer click con el botón derecho del ratón y seleccionar 'Acerca de Sap Logon' -> DLLs cargadas
| Sapgui DLLs cargadas |
El archivo ejecutable GUIXT.EXE podemos encontrarlo en la ruta:
- C:\Archivos de programa\SAP\FrontEnd\SapGui
Se desplegara el menú de 'Ajustar disposición local', seleccionar la opción 'Activar GUIXT', aparecerá en la pantalla una segunda ventana con el título “Synactive GUIXT”.
Fuente:
Synactive Documentation
Entradas siguientes:
GUIXT: Instalación y Configuración (I)
GUIXT: Instalación y Configuración (II)
GUIXT: Los scripts de GuiXT
GUIXT: Personalizar el acceso al sistema y el comando image
GUIXT: Añadir y Modificar campos de texto, pulsadores y radiobuttons
GUIXT: El modulo InputAssistant
GUIXT: Estructuras de control
GUIXT: Teclado numérico táctil para Sap
lunes, 3 de diciembre de 2012
Carga Masiva de anexos en SAP
El código de la anterior entrada esta limitado a un solo archivo que debe ser elegido por el usuario pero ¿ Y si necesitamos cargar 1000 pdf o 10000...o 100000!!? .
Si utilizamos la clase CL_GOS_DOCUMENT_SERVICE anexaríamos de uno en uno....demasiado tiempo y el programa podria llegar a ralenizar todo el sistema.
![]() |
Lo primero de todo, es especificar una relación entre los archivos y objetos de negocio en sap (solicitudes de compra, pedidos de compra, pedidos de venta documentos contables ) . Gracias a esta relación podremos determinar a que objeto de negocio anexar cada archivo del directorio. Podemos determinar cualquier relación como por ejemplo que el nombre del archivo coincidirá con el nº de factura que referencia el documento contable en SAP.
Por ejemplo, la Factura 0000157910 es el archivo 0000157910.PDF y el archivo 0000157910.PDF tiene que adjuntarse al documento contable que tenga la factura 0000157910 como documento de referencia (campo BKPF-XBLNR).
Como caso de prueba, tenemos un directorio "fuente" con 6 facturas en PDF,
![]() |
| Facturas en PDF y los doc. contables a los que deben ser adjuntadas |
El nombre del archivo es el nº de factura y coincide con el campo BKPF-XBLNR del doc. contable.
El programa seguirá la siguiente lógica:
- Lee los archivos del directorio "fuente"
- Busca los doc. contables con BKPF-XBLNR igual al nombre del archivo
- Si existe, anexa el archivo al doc. contable y mueve el archivo al directorio "procesados".
- Si no existe, deja el archivo en el directorio fuente
Podeis encontrar el código del programa en el repositorio git del blog:
Para organizar mejor el código he dividido el programa en 3 archivos:- ZZ_ATTA_MULTIPLES_PDF: programa pincipal.
- ZZ_ATTA_MULTIPLES_PDF_TOP: variables globales.
- ZZ_ATTA_MULTIPLES_PDF_F01: Subrutinas.
Notas OSS de interes:
927407 - Determining the content of GOS and SAPoffice documents
904711 - SAPoffice: Where are documents physically stored?
916512 - SAPoffice: Directory for upload/download/display
448074 - Calling generic object services from the dialog
927407 - Determining the content of GOS and SAPoffice documents
904711 - SAPoffice: Where are documents physically stored?
916512 - SAPoffice: Directory for upload/download/display
448074 - Calling generic object services from the dialog
Entradas Anteriores:
viernes, 9 de noviembre de 2012
Crear, Visualizar y Borrar anexos con CL_GOS_DOCUMENT_SERVICE
Seguimos con los anexos. Esta vez vamos a hablar de la clase CL_GOS_DOCUMENT_SERVICE.
En la transacción SE24 podemos visualizar sus métodos y atributos:
Esta clase tiene muchos métodos para crear, modificar, borrar y visualizar documentos anexos a un objeto de negocio.
Para los ejemplos con esta clase, seguiremos utilizando el anexo de archivos a documentos contables en SAP pero recordemos que es posible anexar archivos a un gran numero de objetos de negocio en SAP ( materiales, facuras, pedidos de compra, etc... ).
CREAR ANEXO
Seleccionado el documento contable, se abre una ventana del explorador de archivos, seleccionamos el archivo a anexar, y en la FB03 comprobamos que se ha anexado correctamente
VISUALIZAR ANEXOS
Primero recuperamos los anexos del documento contable en la tabla SRGBTBREL, pero aquí solo esta el enlace interno al anexo, para recuperar el nombre del anexo utilizar la bapi SO_OBJECT_GET_CONTENT
BORRAR ANEXOS
Primero recuperamos los anexos del documento contable en la tabla SRGBTBREL, pero aquí solo esta el enlace interno al anexo, para recuperar el nombre del anexo utilizar la bapi SO_OBJECT_GET_CONTENT selecionamos el anexo y comprobamos que se ha borrado en al FB03
CODIGO ABAP
Y llegamos lo importante, aqui esta el codigo ABAP que permite crear, visualizar y borrar anexos.
Teneis también el código ABAP disponible en el repositorio github del blog
Entradas Siguientes:
Carga masiva de anexos en SAP
En la transacción SE24 podemos visualizar sus métodos y atributos:
![]() |
| CL_GOS_DOCUMENT_SERVICE |
Esta clase tiene muchos métodos para crear, modificar, borrar y visualizar documentos anexos a un objeto de negocio.
Para los ejemplos con esta clase, seguiremos utilizando el anexo de archivos a documentos contables en SAP pero recordemos que es posible anexar archivos a un gran numero de objetos de negocio en SAP ( materiales, facuras, pedidos de compra, etc... ).
CREAR ANEXO
Seleccionado el documento contable, se abre una ventana del explorador de archivos, seleccionamos el archivo a anexar, y en la FB03 comprobamos que se ha anexado correctamente
![]() |
| Crear Anexo |
VISUALIZAR ANEXOS
Primero recuperamos los anexos del documento contable en la tabla SRGBTBREL, pero aquí solo esta el enlace interno al anexo, para recuperar el nombre del anexo utilizar la bapi SO_OBJECT_GET_CONTENT
![]() |
| Visualizar Anexo |
BORRAR ANEXOS
Primero recuperamos los anexos del documento contable en la tabla SRGBTBREL, pero aquí solo esta el enlace interno al anexo, para recuperar el nombre del anexo utilizar la bapi SO_OBJECT_GET_CONTENT selecionamos el anexo y comprobamos que se ha borrado en al FB03
![]() | |
| Borra Anexo |
CODIGO ABAP
Y llegamos lo importante, aqui esta el codigo ABAP que permite crear, visualizar y borrar anexos.
Teneis también el código ABAP disponible en el repositorio github del blog
REPORT ZZ_PRUEBA_ANEXOS_GOS.
*&---------------------------------------------------------------------*
*& TYPE-POOLS
*&---------------------------------------------------------------------*
TYPE-POOLS: slis.
*&---------------------------------------------------------------------*
*& Tablas
*&---------------------------------------------------------------------*
TABLES: BSEG.
*&---------------------------------------------------------------------*
*& Variables Glovales
*&---------------------------------------------------------------------*
DATA: obj_gos TYPE REF TO cl_gos_document_service.
DATA: wa_borident TYPE borident.
DATA: wa_objkey TYPE borident-objkey.
*&---------------------------------------------------------------------*
*& Parámetros de Selección
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLOCK01 WITH FRAME TITLE TEXT-S01.
PARAMETERS: P_BUKRS TYPE BUKRS OBLIGATORY,
P_BELNR TYPE BELNR_D OBLIGATORY,
P_GJAHR TYPE GJAHR OBLIGATORY.
SELECTION-SCREEN END OF BLOCK BLOCK01.
SELECTION-SCREEN BEGIN OF BLOCK BLOCK02 WITH FRAME TITLE TEXT-S01.
PARAMETERS: P_crear type c RADIOBUTTON GROUP GR1,
P_visua type c RADIOBUTTON GROUP GR1,
P_borra type c RADIOBUTTON GROUP GR1.
SELECTION-SCREEN END OF BLOCK BLOCK02.
*&---------------------------------------------------------------------*
*& Validaciones de Pantalla
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
*&---------------------------------------------------------------------*
*& INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
SELECT SINGLE *
FROM BSEG
WHERE BUKRS EQ P_BUKRS
AND BELNR EQ P_BELNR
AND GJAHR EQ P_GJAHR.
IF ( SY-SUBRC <> 0 ).
MESSAGE 'No existe el documento' TYPE 'S' DISPLAY LIKE 'E'.
ELSE.
CREATE OBJECT obj_gos.
CONCATENATE P_BUKRS P_BELNR P_GJAHR INTO wa_borident-objkey.
wa_borident-objtype = 'BKPF'.
IF P_crear IS NOT INITIAL.
CALL METHOD obj_gos->create_attachment
EXPORTING
is_object = wa_borident
IMPORTING
ep_attachment = wa_borident-objkey.
COMMIT WORK.
ELSEIF p_visua IS NOT INITIAL.
PERFORM SELECT_ATTA USING wa_borident CHANGING wa_objkey.
IF ( wa_objkey IS NOT INITIAL ).
CALL METHOD obj_gos->display_attachment
EXPORTING
ip_attachment = wa_objkey.
ENDIF.
ELSEIF P_Borra IS NOT INITIAL.
PERFORM SELECT_ATTA USING wa_borident CHANGING wa_objkey.
IF ( wa_objkey IS NOT INITIAL ).
CALL METHOD obj_gos->delete_attachment
EXPORTING
ip_attachment = wa_objkey.
COMMIT WORK.
ENDIF.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form SELECT_ATTA
*&---------------------------------------------------------------------*
* Muestra un Popu para que el cliente seleccione el adjunto
*----------------------------------------------------------------------*
FORM SELECT_ATTA USING pi_borident TYPE borident
CHANGING po_objkey TYPE borident-objkey.
TYPES: BEGIN OF type_anexos,
box(1) TYPE C,
instid_b TYPE srgbtbrel-instid_b,
name(15) TYPE C,
END OF type_anexos.
DATA: tl_anexos TYPE STANDARD TABLE OF type_anexos,
tl_head TYPE STANDARD TABLE OF SOLI,
tl_cond TYPE STANDARD TABLE OF SOLI,
i_fieldcat TYPE SLIS_T_FIELDCAT_ALV,
l_program TYPE sY-REPID.
DATA: Wl_SOODK TYPE SOODK,
w_fieldcat TYPE slis_fieldcat_alv.
FIELD-SYMBOLS: <fanexos> TYPE type_anexos,
<fsoli> TYPE SOLI.
CLEAR: po_objkey.
REFRESH: TL_anexos.
SELECT instid_b INTO CORRESPONDING FIELDS OF TABLE TL_anexos
FROM srgbtbrel
where instid_a = pi_borident-objkey
and typeid_a = pi_borident-objtype
and reltype = 'ATTA'.
LOOP AT TL_anexos ASSIGNING <fanexos>.
CLEAR Wl_SOODK.
Wl_SOODK-OBJTP = <fanexos>-instid_b+17(3).
Wl_SOODK-OBJYR = <fanexos>-instid_b+20(2).
Wl_SOODK-OBJNO = <fanexos>-instid_b+22.
CALL FUNCTION 'SO_OBJECT_GET_CONTENT'
EXPORTING
object_id = Wl_SOODK
tables
OBJHEAD = tl_head
objcont = tl_cond
EXCEPTIONS
ARCHIVE_ERROR = 1
OBJECT_NOT_EXIST = 2
OTHERS = 3
.
IF sy-subrc EQ 0.
READ TABLE tl_head INDEX 1 ASSIGNING <FSOLI>.
IF ( SY-SUBRC EQ 0 ).
<fanexos>-NAME = <FSOLI>-LINE+13.
ENDIF.
ENDIF.
ENDLOOP.
l_program = sy-repid.
w_fieldcat-fieldname = 'NAME'.
w_fieldcat-tabname = 'TL_ANEXOS'.
w_fieldcat-seltext_m = 'Anexo'.
APPEND w_fieldcat TO i_fieldcat.
call function 'REUSE_ALV_POPUP_TO_SELECT'
exporting
i_title = TEXT-T01
i_tabname = 'TL_ANEXOS'
i_selection = 'X'
i_zebra = 'X'
i_checkbox_fieldname = 'BOX'
it_fieldcat = i_fieldcat
i_callback_program = l_program
tables
t_outtab = TL_ANEXOS
exceptions
program_error = 1
others = 2.
IF ( Sy-SUBRC EQ 0 ).
READ TABLE TL_ANEXOS WITH KEY BOX = 'X' ASSIGNING <fanexos>.
IF ( SY-SUBRC EQ 0 ).
po_objkey = <fanexos>-instid_b.
ENDIF.
ENDIF.
endform. " SELECT_ATTA
Carga masiva de anexos en SAP
Entradas Anteriores:
domingo, 21 de octubre de 2012
RSIRPIRL: recolocando los contenidos de SOFFCONT1
En la transacción DB12 se puede comprobar el tamaño de la tabla SOFFCONT1:
- Transacción DB12 -> Space -> Single Table Analysis -> SOFFCONT1
![]() |
| DB12 tamaño de la tabla SOFFCONT1 |
Si el tamaño de la tabla es muy grande, con el programa estándar RSIRPIRL es posible mover el contenido de una categoría de archivo a otra es decir, podemos liberar espacio en la tabla SOFFCONT1 y traspasar el contenido de los archivos y documentos anexados a un repositorio externo.
Antes de ejecutar el programa, recomiendo aplicar los cambios de la siguiente nota de SAP:
Esta nota amplia la pantalla de selección del programa para poder seleccionar por la fecha de creación. Esto es muy útil para poder realizar pruebas o mover solamente algunos anexos.
Una vez aplicada la nota, podemos ejecutar el programa. Por ejemplo, vamos a traspasar desde la categoría de archivo SOFFDB ( base de datos , tabla SOFFCONT1 ) a la nueva categoría SOFFHTTP todos los anexos creados en el mes de septiembre de 2012:
El enlace entre Clase y Categoría puede verse en la Transacción SKPR08.
Las categorías de archivo están en la transacción OACT.
Notas OSS de interés:
Entradas Anteriores:
Cambiar la categoría de archivo para GOS
Como hemos comentado en la entrada anterior, el contenido de los archivos anexados se guardan en la tabla SOFFCONT1 de la base de datos. Si los archivos anexados son muy grandes o vamos a anexar un gran numero de archivos, esta tabla puede llegar a ocupar una gran cantidad de espacio y ralentizar el sistema. Imaginar por ejemplo una empresa que anexa cada mes 100 facturas a sus respectivos documentos contables cada mes; con el paso del tiempo, la tabla SOFFCONT1 puede llegar a contener miles de archivos anexados.
Podemos comprobar el tamaño de la tabla SOFFCONT1:
SAP recomienda que si el volumen de archivos va ha ser muy alto, se configure el sistema para almacenar los archivos en un contenedor de archivos o content server en ingles. Existen varios sistemas de gestión de contenido que ofrecen contenedor de archivos co con SAP, aquí solamente comentare alguno de ellos:- SAP Content Server es una aplicación stand-alone para el almacenamiento de archivos y documentos que puedan ser usados por las aplicaciones SAP. Si nuestro cliente tiene instalado el SAP Content Server podemos utilizarlo para almacenar en él los archivos anexados. Tiene ciertas limitaciones como que no podemos almacenar y anexar automáticamente un documento desde un escaner.
- OpenText Content Suite Platform es la solución de OpenText para la gestión documental o Enterprise Content Management (ECM). Es mucho mas potente que el SAP Content Server y recomendable si estamos pensado más a largo. Permite gestionar y controlar todo el proceso desde la creación o captura del documento hasta su archivado.
A continuación, explico el proceso para crear un repositorio externo y la categoría de archivo .
1.- Crear el repositorio de contenido y la conexión al content server. Transacción OAC0.
Este repositorio debe contener los datos de conexión al content servet como la IP. puerto, etc...
2.- Crear una nueva categoría de archivo SOFFHTTP y enlazar con el repositorio creado. Transacción OACT
3.- Asignar la categoría de archivo a la categoría para clases de documentos físicos.
Transacción SKPR08
Asignamos la nueva categoría de archivo SOFFHTTP a la clase SOFFPHIO.
Si no aparece la clase SOFFPHIO en la SKPR08, hay que aplicar la nota de SAP:
Desde la transacción SE16 abrimos la tabla SDOKPHCL , buscamos el registro PH CLASS=SOFFPHIO. Modificar el registro para quede como en la imagen:
Si ahora, por ejemplo, anexais un pdf a un documento contable. el contenido del archivo ya no se almacenara en la tabla SOFFCONT1. Podréis seguir visualizando el pdf pero ahora esta almacenado en el repositorio Z1.
Si aun no os creeis que ahora esta almacenado el archivo en el repositorio Z1, podéis cambiar la IP al repositorio Z1. Si lo haceis, comprobareis que ya no podremos acceder al anexo, porque nuestro repositorio ya no apunta al content server que lo guarda; esto es la prueba que el archivo se ha almacenado en el content server y no a la base de datos de SAP.
Referencias:
Notas OSS de interes:
Entradas anteriores:
Entradas siguientes:
jueves, 11 de octubre de 2012
Bapis para cambiar la moneda
En muchos empresas facturan con mas de una moneda ( euros, dolares ). En estos casos cuando tratamos los importes tenemos que tener en cuenta la moneda. Toda sociedad de una empresa tiene especificada una moneda local, que es la moneda por defecto con la que trabaja, viene indicada en la tabla T001-WAERS.
Los factores de cambio entre las monedas salen de la tabla TCURF.
Si tenemos el importe en moneda local y queremos cambiar a otra moneda:
CALL FUNCTION 'CONVERT_TO_FOREING_CURRENCY'
EXPORTING
CLIENT = SY-MANDT
date = SY-DATUM
foreign_currency = wl_foreing_waers
local_amount = wl_item_data-netpr
local_currency = wl_item_data-waers
* RATE = 0
* TYPE_OF_RATE = 'M'
* READ_TCURR = 'X'
IMPORTING
FOREING_AMOUNT = wl_foreing_netpr
EXCEPTIONS
NO_RATE_FOUND = 1
OVERFLOW = 2
NO_FACTORS_FOUND = 3
NO_SPREAD_FOUND = 4
DERIVED_2_TIMES = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Si tenemos el importe una moneda diferente a al local y queremos convertirlo a moneda local:
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
CLIENT = SY-MANDT
date = SY-DATUM
foreign_amount = wl_item_data-netpr
foreign_currency = wl_item_data-waers
local_currency = wl_waers
* RATE = 0
* TYPE_OF_RATE = 'M'
* READ_TCURR = 'X'
IMPORTING
LOCAL_AMOUNT = wl_local_netpr
EXCEPTIONS
NO_RATE_FOUND = 1
OVERFLOW = 2
NO_FACTORS_FOUND = 3
NO_SPREAD_FOUND = 4
DERIVED_2_TIMES = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Los factores de cambio entre las monedas salen de la tabla TCURF.
Si tenemos el importe en moneda local y queremos cambiar a otra moneda:
CALL FUNCTION 'CONVERT_TO_FOREING_CURRENCY'
EXPORTING
CLIENT = SY-MANDT
date = SY-DATUM
foreign_currency = wl_foreing_waers
local_amount = wl_item_data-netpr
local_currency = wl_item_data-waers
* RATE = 0
* TYPE_OF_RATE = 'M'
* READ_TCURR = 'X'
IMPORTING
FOREING_AMOUNT = wl_foreing_netpr
EXCEPTIONS
NO_RATE_FOUND = 1
OVERFLOW = 2
NO_FACTORS_FOUND = 3
NO_SPREAD_FOUND = 4
DERIVED_2_TIMES = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Si tenemos el importe una moneda diferente a al local y queremos convertirlo a moneda local:
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
CLIENT = SY-MANDT
date = SY-DATUM
foreign_amount = wl_item_data-netpr
foreign_currency = wl_item_data-waers
local_currency = wl_waers
* RATE = 0
* TYPE_OF_RATE = 'M'
* READ_TCURR = 'X'
IMPORTING
LOCAL_AMOUNT = wl_local_netpr
EXCEPTIONS
NO_RATE_FOUND = 1
OVERFLOW = 2
NO_FACTORS_FOUND = 3
NO_SPREAD_FOUND = 4
DERIVED_2_TIMES = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Suscribirse a:
Entradas (Atom)
























