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.