Actualizar registros en SAP B1 desde excel usando la DI API

He hablado ya en 3 ocaciones sobre como crear registros en SAP B1 usando la DI API desde MS Excel. Pero la DI API no es solo para crear nuevos registros, dependiendo del objeto que estemos usando podemos tambien actualizar, cancelar, eliminar o cerrar (mismas operaciones que valida el transaction).

Para saber que métodos permite un objeto, debemos ir a la documentacion (SDK help) que trae Business One, una vez ahí debemos buscar el objeto para ver que metodos permite.

SDK 1

Personalmente, al inicio, no comprendía bien para que servía el SDK, pero una vez que empece a programar algunas aplicaciones descubrí la gran utilidad e información que nos entrega.

Lo primero que debemos hacer al trabajar con la DI API, es buscar el objeto con el que vamos a trabajar.

En la pestaña index, escribimos “boo” y nos aparecerá de primera opción “BoObjecTypes Enumeration”.
La columna “Member” es el nombre único del objeto, la columna “Value” contiene el número de indentificación en la base de datos y la columna “Description” contiene el objeto al cual pertenece.

SDK 2

Para los que leyeron el artculo anterior
Importar ordenes de compra desde excel via DI API

En el codigo está la siguiente sintax:

Si volvemos al SDK\BoObjecTypes Enumeration veremos que el documento “oPurchaseOrders” (orden de compra o pedido de compra), pertenece al objeto “Documents” y es por eso que se declara de esa manera. Si en vez de una orden de compra, quisieramos trabajar un pago recibido, habría que cambiar la syntax a la siguiente (siguiendo al SDK):

Los métodos que tiene un objeto se pueden ver accediendo a él, haciendo clic en el nombre del objeto (de color azul y subrayado) en la lista de objetos del SDK y luego en “members”.

SDK 3

Como vemos en la imagen, el objeto “items” tiene los metodos añadir, cancelar, remover, actualizar, es decir que podemos realizar esas acciones desde una aplicacion externa.

Bien, ya hemos hablado mucho de como usar la SDK (objetivo que no era de este post, pero me gusta que aprendan), ahora vamos a hablar del objeto que deseamos trabajar.

Vamos a trabajar con el objeto Items (articulos) y vamos a actualizar un campo “X” masivamente.

Lo primero que tenemos que tener es una planilla con los ItemCode de los articulos en la primera columna de excel hacia abajo

SDK 4

Ahora vamos a colocar el siguiente codigo

En este caso, lo primero que debemos decirle a la DI API es que encuentre el producto, para eso utilizamos el método “GetByKey”, al cual le debemos pasar el ItemCode (la clave unica del objeto).

Si encuentra el Item devolvera un “true” y en caso de que sea así seteamos el nombre y nombre extranjero (ustedes pueden añadir mas campos si así lo desean) con los valores en las celdas correspondientes e invocamos el metodo “Update” el cual intenta actualizar el item con los nuevos valores seteados.

Por último, agregan un boton y asignan la macro “ConnSAP” para que se ejecute el codigo y esperamos a que termine.

Con eso me despido, espero les sirva.

Publicado en SAP Business One Etiquetado con: , , , , ,
9 Comentarios en “Actualizar registros en SAP B1 desde excel usando la DI API
  1. Adriano dice:

    Quisiera saber si para poder actualizar registros desde Excel usando DI-API hay que tener alguna licencia especial?

    • Buenas tardes

      En teoria, debes usar una licencia de acceso de terceros (indirect access) pero creo que es solo si vas a comercializar tu producto.
      Para uso local en la empresa la licencia del usuario que se logea es suficiente.

      Saludos

  2. Jose dice:

    Buen Día estimado Felipe, puedes compartir nuevamente en tu blog el desarrollo para copiar desde el clipboard a SAP

  3. German dice:

    Hola, quisiera saber como hacer cuando es un campo de usuario el que se va a actualizar

    • Así sería:

      oItem.UserFields.Fields.Item(“U_TU_CAMPO”).Value = Mi_valor
      Retval = oItem.Update()

      Saludos

      • luis roberto dice:

        Ese metodo funciona cuando el campo de usuario se creo como Apunte en SAP?

        yo cree 2 columnas en el detalle de las ordenes de compra de clientes las mismas columnas salen en facturas y notas de credito y debito y demas y quiero cargar por cada articulo el campo U_DescFijo pero me indica que el nombre del campo no es valido, el dato a agregar es de tipo double.y el codigo que uso es el siguiente

        Dim oOrder As SAPbobsCOM.Documents
        oOrder = oCompany.GetBusinessObject(BoObjectTypes.oOrders)
        oOrder.UserFields.Fields.Item(“U_DescFijo”).Value = 1

        alguna idea de por que no sirve?

  4. Victr Benitez dice:

    Hola Felipe,

    Si no es mucha molestía, para campos de precios que hacen referencia a una 2nda Tabla (ITM1), como se pudiera poner?
    gracias!

  5. Uriel dice:

    Excelente articulo, en lo personal me ayudo mucho, tengo una duda si tengo que eliminar una línea intermedia ¿Como le puedo hacer?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*