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
Por ejemplo podríamos diseñar un script que ocultase campos que no se utilizan del maestro de materiales.

Cambiando el maestro de materiales (MM03)
GuiXT no modifica nada en el servidor de aplicación. las modificaciones son locales , únicamente en el equipo conectado a Sap y con GuiXT activado, otro equipo sin GuiXT seguiría viendo la MM03 estándar.

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. 

Los productos de software que ofrece son los siguientes:


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 
Para activar GUIXT, desde pantalla de inicio de SAP, click sobre el icono (  ALT+F12 ).

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:
  1. Lee los archivos del directorio "fuente"
  2. Busca los doc. contables con BKPF-XBLNR igual al nombre del archivo
  3. Si existe, anexa el archivo al doc. contable y mueve el archivo al directorio "procesados".
  4. 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

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:

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 


Entradas Siguientes:
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:
   Transacción DB12 -> Space -> Single Table Analysis -> SOFFCONT1

DB12 - 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





Si ya existe SOFFHTTP o no queréis utilizar esta categoría de archivo, podéis crear una nueva, por ejemplo ZPDF_IMAGE.



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.



domingo, 30 de septiembre de 2012

I ain't afraid of no GOS

G.O.S ( Generic Object Services )  nos ofrecen una serie de servicios  con los que poder anexar  archivos (pdf, doc, xml, jpg, bmp,.. ),  URL y notas personales a un objeto de negocio de Sap ( Facturas, Doc. contables, pedidos de venta, doc. del material...). Un ejemplo real seria, cuando a un pedido de venta, le adjuntamos una hoja donde esta detalladas las características del producto y lo agarramos con un clip.

Es mucho mas recomendable crear URLs que anexar un archivo, Una URL es simplemente un link a un archivo existente localmente en el pc o en un servidor, mientras que anexar un archivo implica subir ese archivo a la base de datos de SAP lo que puede generar un problema de espacio y si anexamos un gran numero de archivos puede sobrecargar la base de datos, tampoco existe la opción de actualizar un archivo anexado, tendríamos que borrar el archivo anexado actual y subir el nuevo archivo.

En muchas transacciones de Sap esta opción esta disponible en la esquina superior izquierda:

Botón Anexos, en la esquina superior izquierda
Imaginemos que tienes una factura en PDF y quieres adjuntarla a su documento contable.


Accedemos al doc. contable en la FB03 y desplegamos el menú, seleccionamos "crear anexo".

A continuación, aparecerá el explorador de archivos del sistema, seleccionamos el archivo a exportar


Para poder visualizar, desplegamos el menú otra vez y seleccionamos "lista de anexos"


Doble click sobre el documento ara abrirlo.

Bien, ahora os estaréis preguntado " ¿Donde ha guardado SAP el documento anexado?".
Los archivos anexados, URL y notas se tratan como documentos del Sapoffice y su contenido, hasta la versión 4.6B, se guardaba en la tabla SOC3. Pero a partir de la versión 4.6B el almacenamiento de estos documentos pasa a ser responsabilidad del Knowledge Provider (Kpro) que permite un almacenamiento externo evitando la sobrecarga de la base de datos de SAP.

A partir de la versión 4.6B lsa notas personales y URL siguen almacenándose en la tabla SOC3, pero los archivos anexados pasan a almacenarse en la tabla SOFFCONT1, para gestionar estos anexos, SAP crea un vinculo entre el objeto de negocio y el archivo indexado, estos vínculos se almacenan en la tabla SRGBTBREL, enlaces en el entorno GOS.

En el ejemplo anterior, hemos anexado el pfd al doc. contable 131 de la sociedad 1000 del ejercicio 2011, si buscamos en la tabla  SRGBTBREL  encontramos:






Vamos a seguir tirando del hilo, nos quedamos con la cadena 'EXT37000000000105' del campo INSTID_B. Nos vamos a la SE37 y ejecutamos la bapi SO_OBJECT_GET_CONTENT , rellenamos el parámetro de entrada OBJECT_ID con los anteriores datos.


En la tabla se salida OBJCONT, encontramos el identificador lógico del objeto, necesitamos el identificador físico, la relación entre ambos esta almacenada en la tabla SOFFPHIO, instancias de objetos de información físicos.


Con este identificador físico , vamos a la SOFFCONT1 donde se almacena el archivo como cluster en formato hexadecimal. como veis un solo archivo anexado puede ocupar MUCHO espacio.


Para saber como esta parametrizado tu sistema SAP, nos vamos a la tabla SDOKPHCL, clases de objetos de información físicos. Buscamos la clase SOFFPHIO.




Si STOR_CAT = SOFFDB, significa que los anexos se suben a la base de datos de SAP en la tabla  SOFFCONT1.
transacción OACT: Categorías de archivo


Notas OSS de interes:
530792 - Storing documents in the generic object services
904711 - SAPoficce: Where are documents physically stored?

jueves, 6 de septiembre de 2012

Sybase Unwired Platform

Este mes, Blag ( Alvaro Tejada Galindo ) y Tobias Hofmann, han escrito sendos artículos contando su experiencia desarrollando aplicaciones móviles con Sybase Unwired Platform (SUP) y los Amazon Web Services (AWS).




El articulo de Blag me ha gustado mucho, es un sencillo ejemplo de una aplicación móvil. Tomando como base un típico ejemplo de Sap con sus famosas tablas de vuelos,monta una aplicación para consultar los vuelos de las compañías desde un dispositivo móvil. 

En cuanto mi "agenda" me lo permita, tengo que probar Sybase.

Gracias Blag!!





jueves, 2 de agosto de 2012

Conseguir acceso a un servidor SAP - 2º parte

SAPGUI 

SAP R/3 es un software basado en la arquitectura cliente/servidor. SAPGUI o SAP FRONTEND es el programa cliente de SAP y hace las funciones de interfaces entre el usuario y el servidor sap. Trabaja en la capa de presentación y "presenta" la información al usuario, interactua con el usuario y le permite navegar por las diferentes aplicaciones integradas en SAP R/3 



Existen dos SAPGUI: 
- SAPGUI for Windows: Como su propio nombre indica, para sistemas operativos windows.
- SAPGUI for Java: Es un cliente multiplataforma ( Mac OS X, Windows, Linux, Solaris y AIX ).

Actualmente puedes encontrar 4 versiones para SAPGUI for windows:
   - SAPGUI 6.20  sin soporte por parte de SAP desde 31.12.2010
   - SAPGUI 7.10  sin soporte por parte de SAP desde 31.04.2011
   - SAPGUI 7.20  con soporte por parte de SAP hasta 09.04.2013
   - SAPGUI 7.30  con soporte por parte de SAP hasta 15.07.2015

Y 3 versiones para SAPGUI for Java:
   - SAPGUI 7.10  sin soporte por parte de SAP desde 31.04.2011
   - SAPGUI 7.20  la ultima versión liberada es SAPGUI for Java rev11, no soporta Java SE 7.
                              Soporta OpenSUSE 12.1 y Fedora 16.
                              En la Nota 1400273 tenéis la lista completa de sistemas operativos que soporta.
   SAPGUI 7.30  Soporta Java 7 y  Java de 64bits para windows
                              Soporta los siguientes sistemas operativos: 

          • OpenSUSE 12.2
          • Fedora 17
          • Red Hat Enterprise Linux 6
          • Ububtu 12.04
          • OS X 10.8
          • Microsoft Windows 8   
Aparte de la versión tenemos que tener en cuenta el nivel de parcheado, a mayor nivel de parcheado, menos bugs. Para ver el nivel de parcheado, hacer click en la esquina superior izquierda de la ventana del  SAPGUI-> Acerca de SAP Logon.



Para Windows 7 y Oficce 2012, necesitáis la versión 7.20 que va ya por el nivel de parcheado 14.
Para Windows XP, os vale con la 7.10 pero el nivel de parcheado dependerá de vuestro Explorer y Oficce.

SAP ,en la nota 30460, informa que siempre es posible conectarse a un sistema SAP R/3 antiguo con una versión mas actual de SAPGUI ya que  sus productos tiene retro-compatibilidad. Pero no aseguran que lo contrario, conectarnos con un SAPGUI antiguo a un sistema SAP R/3 mas actual,  funcione o si funciona no se responsabilizan de los fallos que puedan suceder.

Por ejemplo, es posible conectarse y trabajar  con un sistema SAP R/3  3.11I con SAPGUI 7.20, pero conectarse con un  SAPGUI inferior a 6.20 a un SAP ECC 6, puede dar problemas, ya que el sistema sap puede  llevar aplicaciones que no sean soportadas por el cliente SAPGUI antiguo .

Si vais a usar el "SAPGUI for Java", tenéis que utilizar la 7.30, las anteriores versiones han dejado de ser soportadas por SAP.
¿ Donde puedo conseguir e SAPGUI ?

El único problema es que para descargarlo, necesitas una cuenta en el  SAP Service Marketplace

Pero aquí os dejo un par de enlaces para conseguir la 7.20 con el parche 14 y la versión 7.30 de Java:

SAPGUI 7.20 for Windows + parche 12,13 y 14
SAPGUI 7.30 for Java - MAC OS 10.8
SAPGUI 7.30 for Java - Windows
SAPGUI 7.30 for Java - Linux

Crear una conexión a un servidor SAP

Lo primero, necesitas la dirección IP del servidor y un usuario/password.

En la anterior entrada ya explique como conseguir un acceso a un servidor sap para practicas.

Para crear la conexión al servidor sap, click en "Nuevo" -> "Continuar"


- Descripción: Descripción de la conexión
- Servidor de Aplicación: Ip del servidor del sistema SAP R/3
- Nº de Instancia: Pueden convivir varios sistemas SAP R/3 en un mismo servidor
- Id del sistema: Cadena de 3 caracteres que identifica el sistema

Una vez creada la nueva conexión, aparecerá su descripción en el SAPGUI.
Doble click en la descripción y se lanzara la conexión, si no hay errores, aparecera la pantalla de identificación del sisteam SAP R/3 solicitando que nos identifiquemos con un usuario/password valido.


Si hay otra persona usando nuestro usuario/password en el sistema cuando intentemos conectarnos. Aparecera una ventada informado sobre los usuarios conectados con el mismo usuario/passwd y tres opciones


  • Cerrar todas las entradas con el mismo usuario y entrar nosotros en el sistema.
  • Mantener el resto de entradas con el mismo usuario y entrar en el sistema
  • Cerrar y salir del sistema


Navegando por SAP una guia rapida

Una vez autentificados, nos aparece la pantalla de inicio de SAP


En SAP, cuando queremos ejecutar  aplicación ( crear un pedido, facturar, etc... ) tenemos que ejecutar la transacción correspondiente. Una transacción es como un acceso directo del sistema, llama  a un programa con unos parámetros iniciales y se ejecuta dentro de la ventana o modo. Se pueden tener varias ventanas o modos abiertos en el escritorio, ejecutando diferentes transacciones en cada una y el limite por defecto , suele ser de 7 ventanas o modos abiertos para un usuario. Podríamos tener un modo para crear pedidos de compras, otro para la entrada de mercancías en el almacén, otro para facturación, hasta el máximo permitido por el sistema a cada usuario.

Se puede seleccionar la transacción desde el árbol de transacciones ( como los accesos directos del escritorio ) o introducir el nombre de la transacción directamente en el campo comandos (seria parecido a ejecutar un programa desde la linea de comandos del sistema ).


Para ejecutar una transacción desde el campo de comandos, primero se escribe el comando y después el código de la transacción,  por ejemplo, para acceder al editor ABAP:


- /n : Cierra la transacción actual, los datos no salvados se pierden y vuelve a la pantalla de inicio.
- /nXXXX  : Cierra la transacción actual y ejecuta la nueva transacción en la misma ventana.
- /o : Abre una nueva ventana en el sistema.
- /oXXXX : Abre una nueva ventana donde se ejecutara la nueva transacción.
- /i : Cierra la ventana actual, si es la única ventana, sale del sistema.
- /h : Activa el modo debugger.
- /nend : Pide confirmación del usuario y cierra todas las ventanas y transacciones y sale del sistema.
- /nex : Mi preferida del viernes, cierra todas las ventanas y transacciones, sale del sistema sin pedir confirmación.


Por ejemplo, para crear, modificar  o visualizar un pedido de venta tenemos las transacciones:
  • VA01: crear pedido de ventas
  • VA02: modificar pedido de venta
  • VA03: visualizar pedido de venta
O si queremos crear, modificar o visualizar un pedido de compra.
  • MM21N: Crear pedido de compra
  • MM22N: Modificar pedido de compra
  • MM23N: Visualizar pedido de compra
Pero estáis aquí por la programación en SAP, algunas de las transacciones que nos interesan son:
  • SE38: editor de programas ABAP
  • SE24: Generador de clases ( prog. orientada a objetos )
  • SE37: Bapis, funciones del sistema
  • SE80: Object Navigator
Encontrareis todas las transacciones para programación y desarrollo, en el árbol de transacciones siguiendo el camino Herramientas->Workbench ABAP -> Desarrollo




Fuentes:
SAP GUI Family

Entradas anteriores:
Conseguir acceso a un servidor SAP

miércoles, 1 de agosto de 2012

ABAP Objects: Introduction to Programming SAP Applications


Unos de mis primeros libros sobre programación en ABAP, el lenguaje de programación de SAP. El libro esta pensado para gente que esta dando sus primeros pasos en la programación con ABAP o que quiere dar el salto a la  la programación orientada a objetos en ABAP, desde la  programación estructurada en ABAP.

Empieza con una breve introducción al  lector al sistema SAP R/3 y a la programación estructurada en ABAP. Después salta a la programación orienta a objetos en ABAP. Incluye muhos ejemplos para que el lectos practique y aprenda.


Este libro solo cubre hasta sistemas SAP R/3 release 4.6, es decir no incluye ni XML, ni Web Dynpro o Web Services, existe una segunda versión que cubre hasta SAP R/3 release 7.10.

No es un típico libro "Aprenda en 21 dias...". Son 600 paginas y solo lo encontrareis en ingles y alemán. Lleva su tiempo leerlo, a mi me costo varios meses, pero cumple su objetivo.


Incluye 2 CD con MiniSAP, una distribución de SAP con lo básico para practicar con los ejemplos del libro, personalmente, prefiero el SAP IDES 4.7 o acceder a un servidor sap para practicas en internet. 


El libro esta estructurado en 8 capítulos:
  1. Introducción
  2. Un introducción practica
  3. Programación en ABAP basica
  4. Elementos Básicos del lenguaje ABAP
  5. Modelos de programación ABAP
  6. Conceptos avanzados de programación orientada a objetos
  7. Programación de pantallas 
  8. Trabajando con datos externos
Poco mas que decir de este estupendo libro, cuando empeze a programar en SAP, su lectura me fue de mucha ayuda durante mi aprendizaje. Después de 6 años programando en ABAP, aun lo consulto cuando tengo alguna duda.

Para los que empezáis a programar con ABAP, encontrareis multitud de código para practicar y desarrollar aplicaciones SA, para los mas expertos , un buen libro de consulta a la hora de desarrolar aplicaciones en SAP.


martes, 31 de julio de 2012

Nuevos foros en SCN en español

En el 2009 SAP estreno nuevos foros en español pero este año hubo una remodelación completa del SCN, Aquí os dejo una lista de los nuevos foros en español en el SCN de SAP.

En este articulo encontrareis las nuevas direcciones de los antiguos foros del SCN.

viernes, 27 de julio de 2012

ABAP in ECLIPSE (AiE)

SAP NETWEAVER 7.3, es la tercera y mas reciente versión que integra todas las aplicaciones Sap presentado así a las empresas una única plataforma donde desarrollar, ejecutar y manejar aplicaciones para los procesos de negocio que hayan sido desarrolladas tanto en Java como en Abap y negociar transacciones con otros desarrollos de Microsoft .Net o IBM Websphere . Esto repercute en un sistema mucho mas robusto y flexible.

En esta nueva plataforma tienen una mayor importancia los servicios web y la ejecución de aplicaciones no desarrolladas en Abap, para ello, dadas las limitaciones de Abap, se "adopta" el lenguaje Java y se incluye un servidor de aplicaciones propio desarrollado por SAP.

La "adopción" de Java trae consigo también un gran cambio en los componentes del Servidor Sap, que ahora lo llaman "SAP Netweaver Aplication Server", existiendo dos partes diferenciadas para Abap y Java dentro del servidor.

El ICM ( Internet Communication Manager ) se encarga de las comunicaciones del servidor Sap con el mundo exterior cuando se utilizan los protocolos HTTP, HTTPS, SMTP. Puede procesar tareas requeridas desde Internet en forma de URL que combinan el servidor/puerto, según esta URL combinada, el ICM es capaz de enviar la petición a Dispatcher de Abap o Java.

El SAP NetWeaver Developer Studio (NWDS) es el entorno de programación de  SAP para el desarrollo basadas en Java, como las Web Dynpro o Sap HANA.  Se basa en Eclipse, un producto de código abierto, cuya  arquitectura ampliable con  plug-in no sólo proporciona una base sólida para el desarrollo de aplicaciones con  Java , sino también una plataforma adecuada para su ampliación con más funciones específicas.

¿ A que a venido toda esta parrafada ?.....

SAP ha liberado este mes un pluging, Abap Development tools (ADT) para poder programar en Abap en su NWDS, podemos tener todo el potencial de un IDE como Eclipse para desarrollar nuestras aplicaciones con Abap. Esto es algo que no se puede dejar pasar y hay que probarlo Llevo semanas devorando artículos y manuales sobre el tema.

La verdad es que el editor de Abap, siempre me ha parecido pobre, con pocas herramientas de ayuda al programador. Hasta el 2004 , por ejemplo,  no existía algo tan básico como la sintaxis resaltada y la auto-completado de código.


Con este plugin, desarrollaremos nuestras aplicaciones  localmente, en nuestro equipo,  desde Eclipse nos conectaremos a uno o varios sistemas Sap a través de conexiones basadas en el protocolo RFC/REST. Completamente trasparente para el desarrollador , sea posible desde Eclipse crear, modificar o ejectar programas, tablas del diccionario, debuggear el codigo, gestion de versiones, etc..


En este vídeo de 2 minutos vemos la evolución desde 1990 del entorno de desarrollo de SAP:
         SAP ABAP Development Tools for Eclipse

Prerequisitos

Localmente, en nuestro equipo, es necesario  tener el SapGUI 7.20 con un nivel 9 de parcheado, esta versión instala el archivo Microsoft Runtime DLLs VS2010, fundamental para el funcionamiento del plugin. Es necesario para la ccomunicación con los sistemas Sap.

Para poder utilizar este pluging, el sistema Sap al que nos vamos  a conectar, tiene que tener como mínimo el  SAP Kernerl 7.20 y el SAP BASIS 7.31 con el nivel de parcheado 4. Se puede comprobar desde el SapGUI:

Sistema -> Status -> y en Datos del sistemas, debajo de Versión de componentes ->Info Componentes


Después de verificar el SAP BASIS, cerramos la ventana y le damos a Mas Info Nucleo


Si no tenéis acceso a un servidor Sap con estas características, podéis descargaros 
Es una versión trial de minisap que incluye SAP BASIS 7.31 .

Y para finalizar , aquí tenéis una captura de Abap Development Tools (ADT)


Entradas siguientes: