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:

7 comentarios:

  1. Muy buen artículo ....tengo una duda: esto se podrá hacer para efectuar la carga masiva a una unidad externa? muchas gracias

    ResponderEliminar
    Respuestas
    1. Depende que tengas por "unidad externa" un servidor OpenTExt, un DMS o simplemente un servidor de archivos.
      Podrías cargar todos los pfd en el servidor y anexar en SAP la URL al archivo.
      Es una buena idea para no sobrecargar tanto SAP.


      Eliminar
  2. el programa no compila en ECC 6.0 ¿ ?

    ResponderEliminar
    Respuestas
    1. Buen dìa al compilar me da un error en la definiciòn de los Field-SYSMBOLS:

      FIELD-SYMBOLS: TYPE file_table,
      TYPE types_facturas.

      Unable to interpret "FILE_TABLE".

      Ademas no reconoce ninguna variable de las que comienzan con - , por ejemplo en la siguiente linea:

      MOVE -filename TO wl_filepath.

      Eliminar
    2. Gracias por el aviso, resulta que los field-symbos o punteros de SAP se definen con < > y el HTML los interpretaba como etiquetas, creo que ya lo he resuelto.

      Eliminar