Importar clientes a SAP por SDK

Buen dia,
@DavidSDK
acabo de empezar con esto de los SDK y alguien mo podria hacer un ejemplo de como importar clientes a sap desde con codigo de visual basic .net, estare agradecido ya que quiero ver como funciona el sdk a nivel de datos maestros.

gracias.

1 me gusta

Hola.

Para crear un SN deberas usar el Objeto BusinessPartners de la DIAPI:

        Dim nErr As Long
        Dim errMsg As String
 
        'Crear el Objeto SN (BP)
        Dim vBP As SAPbobsCOM.BusinessPartners
        vBP = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oBusinessPartners) 'Calls BusinessPartners object
 
        'Asignar los valores a los campo obligatorios y opcionales
        vBP.CardCode = "HU1003" 'Campo Obligatorio
        vBP.CardName = "ABCD"
        vBP.CardType = SAPbobsCOM.BoCardTypes.cCustomer
        vBP.SubjectToWithholdingTax = SAPbobsCOM.BoYesNoEnum.tNO
      
        If (0 <> vBP.Add()) Then
            MsgBox("Error al crear el Socio de Negocio")
        Else
            Dim objCode As String
            MsgBox("Socio de Negocio creado, Nuevo Codigo =" + vBP.CardCode)
         End If

        'Check Error
        Call oCompany.GetLastError(nErr, errMsg)
        If (0 <> nErr) Then
            MsgBox ("Found error:" + Str(nErr) + "," + errMsg)
        End If

Ten en cuenta que hay campos que son Llaves Foraneas, por lo tanto deberan existir en las tablas relacionadas.

Saludos.

1 me gusta

Estoy revisando el codigo pero me da un error en el objeto vCompany esta variable deberia de declararla al principio?

disculpa mi ignorancia.

gracias.

1 me gusta
oCompany.GetLastError(nErr, errMsg)
1 me gusta

Si esa parte la corregi, y declare mis variables como estan en mi modulo de variables globales…

pero ahora tengo el siguiente error me podrias indicar que es lo que sucede?

image

gracias.

1 me gusta

Eso es porque faltan definir campos obligatorios, como el metodo de pago, trata de ver cuales son los campos obligatorios al momento de crear un SC en SAP, y toma nota del nombre del campo correspondiente (Menu Visualizar -> Informacion del Sistema).
Con eso conoceras los campos minimos requeridos y cuales son sus nombres.

ya encontre el campo que me hacia falta y logre ingresar el cliente, solo una consulta mas… que objeto deberia de utilizar para actualizar ese mismo registro en caso de que quiera cambiar el vendedor, o la direccion.

gracias, estoy aprendiendo mucho.

1 me gusta

Hola @Oscar_Lara. Me alegra que lograras realizar con exito el proceso.

Por favor, si puedes compartir como lo hiciste, para que quede registro en el foro y las personas con la misma duda puedan beneficiarse en el futuro, tambien recuerda marcar como solucion la respuesta correspondiente.

Respecto a como modificar o actualizar cualquier objeto por la DIAPI, es a traves del mismo que utilizaste para registrarlo, es decir en el caso del SN usaste SAPbobsCOM.BusinessPartners, para poder actualizarlo, debemos primero ubicar el registro correspondiente mediante su Campo Clave (CardCode) y por medio del metodo GetByKey().

Por Ejemplo, si quiero el campo “Address2” del SC:

        Dim BP As SAPbobsCOM.BusinessPartners = oCompany.GetBusinessObject(BoObjectTypes.oBusinessPartners)

        If BP.GetByKey("ABCXYZ") Then 'Este metodo retorna la instancia de SC con el CardCode  ABCXYZ'
        For i As Integer = 0 To BP.Addresses.Count - 1
            BP.Addresses.SetCurrentLine(i)
            If BP.Addresses.AddressName = "Address2" Then
                BP.Addresses.Block = "2"
                BP.Addresses.Street = "street 2"
                BP.Addresses.City = "City 2"
                BP.Addresses.Country = "DE"
                Exit For
            End If
        Next
        BP.Update()
       End If

Saludos.

1 me gusta

el campo RFC al que se refiere el error es el Registro Federal de Contribuyente que en nuestro por default es “000000000000”
image
o en algunos casos podria ser el campo LicTradNum

2 Me gusta

Hola nuevamente @GabrielGS implemente el codigo que me diste pero no me actualiza el cliente, estaba revisando mi BD y no entiendo muy bien porque utilizamos este comando Addresses.

disculpa mi ignorancia.

1 me gusta

Era un ejemplo, el campo “Addresses” del BP corresponde al conjunto de direcciones que puede tener un SN (Que pueden ser muchas).

Pero solo debes enfocarte en los campo que quieres modificar:

Dim BP As SAPbobsCOM.BusinessPartners = oCompany.GetBusinessObject(BoObjectTypes.oBusinessPartners)

        If BP.GetByKey("ABCXYZ") Then 'Este metodo retorna la instancia de SC con el CardCode  ABCXYZ'
             vBP.CardName = "Nuevo Nombre"        
             vBP.Phone1= "Nuevo Telefono 1"        
             vBP.E_Mail= "Nuevo email"        
            ' Y Asi con los campos respectivos que se requieran modificar '
        BP.Update()
       End If
1 me gusta

Hola @GabrielGS corri este ultimo codigo y me actualiza muy bien, el unico problema es que hay campos que le coloco la informacion y no me la actualiza, probe con las direcciones pero sigue sin hacer el update…

gracias por toda la atencion prestada.

1 me gusta

Si quisiera actualizar ese registro tanto a nivel de cabecera como direcciones como seria?

1 me gusta

Esto es para Agregar Nuevas Direcciones:

    Dim bp As SAPbobsCOM.BusinessPartners
    Dim bpA As SAPbobsCOM.BPAddresses
    Set bp = oCompany.GetBusinessObject(oBusinessPartners)

    bp.GetByKey ("C00067")
    Set bpA = bp.Addresses
    
    bpA.AddressName = "Entrega1"
    bpA.Street = "Entrega1 street"
    bpA.AddressType = SAPbobsCOM.BoAddressType.bo_BillTo
    bpA.Add
    bp.Update

    bpA.AddressName = "Entrega2"
    bpA.Street = "Entrega2 street"
    bpA.AddressType = SAPbobsCOM.BoAddressType.bo_ShipTo
    bpA.Add
    bp.Update

Para MODIFICAR debes hacer tal cual el ejemplo Inicial, usando SetCurrentLine en el objeto BusinessPartners.Addresses:

Dim BP As SAPbobsCOM.BusinessPartners = oCompany.GetBusinessObject(BoObjectTypes.oBusinessPartners)

        If BP.GetByKey("ABCXYZ") Then 'Este metodo retorna la instancia de SN con el CardCode  ABCXYZ'
        For i As Integer = 0 To BP.Addresses.Count - 1 'Este ciclo recorre todas las direcciones asociadas al SN'
            BP.Addresses.SetCurrentLine(i)
            If BP.Addresses.AddressName = "Address2" Then 'Aqui verifica que solo se modificara el Address2'
                BP.Addresses.Block = "2"
                BP.Addresses.Street = "street 2"
                BP.Addresses.City = "City 2"
                BP.Addresses.Country = "DE"
                Exit For
            End If
        Next
        BP.Update()
       End If
1 me gusta

Hola @GabrielGS me estoy inclinando por este codigo solo que cuando corro el codigo, solo me agrega el primer tipo de direccion. y en cuanto al otro codigo me sigue sin funcionar.

gracias.

1 me gusta

hola @GabrielGS ya solvente el problema tus codigos estan bien solo tuve que separar en 2 funciones diferentes la direcciones en ‘Bill to’ y ‘Ship to’, solo necesito que me ayudes en una ultima cosa, como agrego informacion a un campo de usuario agregado a la tabla de Socios de negocios, con esto culminaria mis dudas por hoy.

gracias por tu ayuda.

Agregar Direccion Bill to en una funcion

    Dim bp As SAPbobsCOM.BusinessPartners
    Dim bpA As SAPbobsCOM.BPAddresses
    bp = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oBusinessPartners)

    bp.GetByKey(TextBox1.Text)
    bpA = bp.Addresses

    bpA.AddressName = "Bill to"
    bpA.City = "city"
    bpA.AddressName2 = "DKSAJDKASKDAK"
    bpA.State = "XX"
    bpA.AddressType = SAPbobsCOM.BoAddressType.bo_BillTo
    bpA.Add()
    bp.Update()

agregar Direccion Ship to en otra funcion

     Dim bp As SAPbobsCOM.BusinessPartners
    Dim bpA As SAPbobsCOM.BPAddresses
    bp = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oBusinessPartners)

    bp.GetByKey(TextBox1.Text)
    bpA = bp.Addresses


    bpA.AddressName = "Ship to"
    bpA.City = "city"
    bpA.AddressName2 = "DKSAJDKASKDAK"
    bpA.State = "XX"
    bpA.AddressType = SAPbobsCOM.BoAddressType.bo_ShipTo
    bpA.Add()
    bp.Update()
2 Me gusta

Excelente @Oscar_Lara.

Recuerda postear como lo hiciste para futuras consultas.
Para mantener el orden y las normas dentro del foro, abre un nuevo tema con el titulo: “Asignar informacion a un campo de usuario (UDF) por medio del SDK(DI API)”. Para asi responderte en ese nuevo tema.

Saludos.

1 me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.