Problema con factura de proveedores con pago

Por lo que te entiendo

FacturaProv.Add()

Debe estar antes de oPay.Add(). Cierto?

Y eso es lo que muestra mi código o por favor me podrias indicar como registrar esa parte?
Gracias de antemano

Quedaria así:

 facturaPROV.Add()
 Dim DocEntry As String
 DocEntry = oCompany.GetNewObjectKey()

        ''Pago de Factura

        Dim oPay As SAPbobsCOM.Payments
        oPay = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oIncomingPayments)
        oPay.CardCode = frm_registro.txt_ruc.Text

        oPay.Invoices.InvoiceType = BoRcptInvTypes.it_PurchaseInvoice
        oPay.Invoices.DocEntry = Int32.Parse(DocEntry)
        oPay.CashAccount = "101101"
        ....

Gracias Julian

Acabo de realizar la modificación y me sale “La cadena de entrada no tiene el formato correcto”
Adjunto nuevamente el código.

        facturaPROV.Add()
        Dim DocEntry As String
        DocEntry = oCompany.GetNewObjectKey()
        'MsgBox(DocEntry)
        'Pago de Factura

        Dim oPay As SAPbobsCOM.Payments
        oPay = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oIncomingPayments)
        oPay.CardCode = frm_registro.txt_ruc.Text

        oPay.Invoices.InvoiceType = BoRcptInvTypes.it_PurchaseInvoice
        'DocEntry = oCompany.GetNewObjectCode 'oCompany.GetNewObjectKey
        oPay.Invoices.DocEntry = Int32.Parse(DocEntry)
        oPay.CashAccount = "101101"
        oPay.CashSum = frm_registro.txt_total.Text
        oPay.DocDate = DateTime.Now

Gracias nuevamente por tu apoyo

1.- Recuerda que no lleva paréntesis
2.- Validaste si te da algún valor?
3.- Tienes localizado bien la linea que te genera ese msg. yo diria que vayas haciendo un debug linea a linea.

Julian gracias por tu apoyo.

Sobre tus comentarios, el punto 1 lo ejecute sin parentesis, el punto 2, el valor que sale en DocEntry es vacio lo revisé con MsgBox, el error salta en la línea donde asigna al pago “oPay.Invoices.DocEntry = Int32.Parse(DocEntry)”.

Mi factura es una factura de proveedor, yo tome como base la creación de una factura de cliente, pero tengo entendido que solo se cambia el objeto oPurchaseInvoice y los campos que requiere la factura en SAP. Espero tu apoyo, gracias de antemano.

Algo me dice que no te esta creando la factura. Ya lo validaste en SAP. Ya que asi como esta tu código a pesar que marca error, te debió crear la factura en SAP, si eso no sucede es por eso que te arroja DocEntry vacío.

1 me gusta

En SAP cada vez que realizo la creación de la factura de proveedor automáticamente me obliga a colocar el medio de pago, sino realizo eso, no lo graba. De acuerdo al proceso mencionado adjunto mi codigo completo para ver si en alguna parte estoy generando mal la factura.

    Try

        Dim facturaPROV As SAPbobsCOM.Documents

        facturaPROV = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPurchaseInvoices)
        facturaPROV.CardCode = frm_registro.txt_ruc.Text
        facturaPROV.Series = 4573
        facturaPROV.DocDate = frm_registro.dtp_contable.Text
        facturaPROV.DocDueDate = frm_registro.dtp_contable.Text
        facturaPROV.TaxDate = frm_registro.dtp_documento.Text

        facturaPROV.SalesPersonCode = frm_registro.txt_encargado.Text
        facturaPROV.DocumentsOwner = frm_registro.txt_titular.Text
        facturaPROV.Comments = frm_registro.txt_comentario.Text

        facturaPROV.UserFields.Fields.Item("U_SYP_DIM1").Value = frm_registro.txt_unegocio.Text
        facturaPROV.UserFields.Fields.Item("U_SYP_DIM2").Value = frm_registro.txt_costo.Text
        facturaPROV.UserFields.Fields.Item("U_SYP_DIM3").Value = frm_registro.txt_proyecto.Text
        facturaPROV.UserFields.Fields.Item("U_SYP_DIM4").Value = frm_registro.txt_sproyecto.Text

        facturaPROV.UserFields.Fields.Item("U_SYP_MDTD").Value = frm_registro.txt_tdocumento.Text
        facturaPROV.UserFields.Fields.Item("U_SYP_MDSD").Value = frm_registro.txt_sdocumento.Text
        facturaPROV.UserFields.Fields.Item("U_SYP_MDCD").Value = frm_registro.txt_ndocumento.Text

        facturaPROV.UserFields.Fields.Item("U_SYP_TCOMPRA").Value = "ER"
        facturaPROV.UserFields.Fields.Item("U_SYP_CODERCC").Value = frm_registro.txt_rendicion.Text
        facturaPROV.UserFields.Fields.Item("U_SYP_BIESRVADQ").Value = frm_registro.txt_bservicio.Text

        facturaPROV.DocType = BoDocumentTypes.dDocument_Service

        'Linea de Rendicion
        facturaPROV.Lines.UserFields.Fields.Item("U_SYP_TIPOSERV").Value = frm_registro.txt_gasto.Text
        facturaPROV.Lines.ItemDescription = "COMBUSTIBLE Y LUBRICANTES"
        facturaPROV.Lines.AccountCode = "659906"
        facturaPROV.Lines.CostingCode = frm_registro.txt_unegocio.Text
        facturaPROV.Lines.CostingCode2 = frm_registro.txt_costo.Text
        facturaPROV.Lines.CostingCode3 = frm_registro.txt_proyecto.Text
        facturaPROV.Lines.CostingCode4 = frm_registro.txt_sproyecto.Text

        Dim ppre As Double = frm_registro.txt_total.Text
        Dim padi As Double = frm_registro.txt_adicional.Text
        Dim ptig As String = frm_registro.txt_tigv.Text

        If ptig = "IGV" Then

            If padi > 0 Then
                facturaPROV.Lines.LineTotal = (ppre - padi) / 1.18
                facturaPROV.Lines.TaxCode = ptig
            Else
                facturaPROV.Lines.LineTotal = ppre / 1.18
                facturaPROV.Lines.TaxCode = ptig
            End If

        Else
            If padi > 0 Then
                facturaPROV.Lines.LineTotal = (ppre - padi)
                facturaPROV.Lines.TaxCode = ptig
            Else
                facturaPROV.Lines.LineTotal = ppre
                facturaPROV.Lines.TaxCode = ptig
            End If
        End If

        facturaPROV.Lines.Add()

        facturaPROV.Add()
        Dim DocEntry As String
        DocEntry = oCompany.GetNewObjectKey
        MsgBox(DocEntry)
        'Pago de Factura

        Dim oPay As SAPbobsCOM.Payments
        oPay = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oIncomingPayments)
        oPay.CardCode = frm_registro.txt_ruc.Text

        oPay.Invoices.InvoiceType = BoRcptInvTypes.it_PurchaseInvoice
        'DocEntry = oCompany.GetNewObjectCode 'oCompany.GetNewObjectKey
        oPay.Invoices.DocEntry = Int32.Parse(DocEntry)
        oPay.CashAccount = "101101"
        oPay.CashSum = frm_registro.txt_total.Text
        oPay.DocDate = DateTime.Now
        oPay.DueDate = DateTime.Now
        oPay.TaxDate = DateTime.Now
        oPay.VatDate = DateTime.Now
        oPay.Remarks = "Concepto del pago"
        oPay.JournalRemarks = "Concepto de la póliza del pago"
        oPay.Invoices.SumApplied = frm_registro.txt_total.Text
        oPay.UserFields.Fields.Item("U_SYP_REF2").Value = "1911000123"
        oPay.UserFields.Fields.Item("U_SYP_MPPG").Value = "001"
        oPay.UserFields.Fields.Item("U_SYP_TPOOPER").Value = "01"
        oPay.UserFields.Fields.Item("U_SYP_IDFLUJO").Value = "7"

        Dim resultado = oPay.Add()



        If resultado <> 0 Then
            Dim errNumero As Integer = 0
            Dim errMensaje As String = ""
            oCompany.GetLastError(errNumero, errMensaje)

            If oCompany.InTransaction = True Then
                oCompany.EndTransaction(BoWfTransOpt.wf_RollBack)
            End If

            Throw New Exception("Ha ocurrido el siguiente error, al intentar crear la Factura de Proveedor: " & Chr("10") & Chr("13") & errMensaje)
        End If



    Catch ex As Exception

        MessageBox.Show(ex.Message, "General", MessageBoxButtons.OK, MessageBoxIcon.Warning)

        If oCompany.InTransaction = True Then
            oCompany.EndTransaction(BoWfTransOpt.wf_RollBack)
        End If

        If oCompany.Connected Then
            oCompany.Disconnect()
        End If

    End Try

End Sub

Adjunto imagen del proceso que se tiene que hacer en el medio de pago

creacion

Existe alguna manera de primero registrar el medio de pago y posterior a ello registrar la factura de proveedor?

Acabo de investigar un poco mas y me indica que no graba por que no esta colocado el medio de pago con el codigo “facturaPROV.PaymentGroupCode” y aun con esa información me sigue saliendo el DocEntry vacio o nulo

hola disculpa, apenas voy retomando tu caso.

Tenemos que hacer algo primero, para ir descartando. Tu código modifícalo de tal manera que solo cree la factura…sin este elemento aterrizado lo demás procesos que vengan estarán demás.
Si no se guarda la factura, algo no esta correcto.

Hola Julian

te comento, hice la prueba con el siguiente código, sólo factura

        Dim facturaPROV As SAPbobsCOM.Documents

        facturaPROV = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPurchaseInvoices)
        facturaPROV.CardCode = frm_registro.txt_ruc.Text
        facturaPROV.Series = 4573
        facturaPROV.DocDate = frm_registro.dtp_contable.Text
        facturaPROV.DocDueDate = frm_registro.dtp_contable.Text
        facturaPROV.TaxDate = frm_registro.dtp_documento.Text

        facturaPROV.SalesPersonCode = frm_registro.txt_encargado.Text
        facturaPROV.DocumentsOwner = frm_registro.txt_titular.Text
        facturaPROV.Comments = frm_registro.txt_comentario.Text

        facturaPROV.UserFields.Fields.Item("U_SYP_DIM1").Value = frm_registro.txt_unegocio.Text
        facturaPROV.UserFields.Fields.Item("U_SYP_DIM2").Value = frm_registro.txt_costo.Text
        facturaPROV.UserFields.Fields.Item("U_SYP_DIM3").Value = frm_registro.txt_proyecto.Text
        facturaPROV.UserFields.Fields.Item("U_SYP_DIM4").Value = frm_registro.txt_sproyecto.Text

        facturaPROV.UserFields.Fields.Item("U_SYP_MDTD").Value = frm_registro.txt_tdocumento.Text
        facturaPROV.UserFields.Fields.Item("U_SYP_MDSD").Value = frm_registro.txt_sdocumento.Text
        facturaPROV.UserFields.Fields.Item("U_SYP_MDCD").Value = frm_registro.txt_ndocumento.Text

        facturaPROV.UserFields.Fields.Item("U_SYP_TCOMPRA").Value = "ER"
        facturaPROV.UserFields.Fields.Item("U_SYP_CODERCC").Value = frm_registro.txt_rendicion.Text
        facturaPROV.UserFields.Fields.Item("U_SYP_BIESRVADQ").Value = frm_registro.txt_bservicio.Text

        facturaPROV.DocType = BoDocumentTypes.dDocument_Service

        'Linea de Rendicion
        facturaPROV.Lines.UserFields.Fields.Item("U_SYP_TIPOSERV").Value = frm_registro.txt_gasto.Text
        facturaPROV.Lines.ItemDescription = "COMBUSTIBLE Y LUBRICANTES"
        facturaPROV.Lines.AccountCode = "659906"
        facturaPROV.Lines.CostingCode = frm_registro.txt_unegocio.Text
        facturaPROV.Lines.CostingCode2 = frm_registro.txt_costo.Text
        facturaPROV.Lines.CostingCode3 = frm_registro.txt_proyecto.Text
        facturaPROV.Lines.CostingCode4 = frm_registro.txt_sproyecto.Text

        Dim ppre As Double = frm_registro.txt_total.Text
        Dim padi As Double = frm_registro.txt_adicional.Text
        Dim ptig As String = frm_registro.txt_tigv.Text

        If ptig = "IGV" Then

            If padi > 0 Then
                facturaPROV.Lines.LineTotal = (ppre - padi) / 1.18
                facturaPROV.Lines.TaxCode = ptig
            Else
                facturaPROV.Lines.LineTotal = ppre / 1.18
                facturaPROV.Lines.TaxCode = ptig
            End If

        Else
            If padi > 0 Then
                facturaPROV.Lines.LineTotal = (ppre - padi)
                facturaPROV.Lines.TaxCode = ptig
            Else
                facturaPROV.Lines.LineTotal = ppre
                facturaPROV.Lines.TaxCode = ptig
            End If
        End If

        facturaPROV.Lines.Add()
        'facturaPROV.PaymentMethod = "Contado"
        'facturaPROV.PaymentGroupCode = 0
        Dim resultado = facturaPROV.Add()

        DocEntry = facturaPROV.DocEntry  'oCompany.GetNewObjectKey
        MsgBox(DocEntry)

El resultado es “0” y luego me sale el error que esta en el grafico

Que puedo estar haciendo mal? de acuerdo a la imagen y el codigo que subi?

Este mensaje no parece nativo de SAP, al parece es in TRANSACTION NOTIFICATION

1 me gusta

Acabo de revisarlo y es correcto es una validacion de nuestro proveedor que implemento SAP, evalua si hay registro en OVPM y VPM2, hay alguna manera de saltar esa opcion?
o No podria hacer el registro del pago antes de registrar la factura?

La única opción es deshabilitarlo. Yo creo ya eso estaría demás, ya que por código estas amarrando la factura + pago.

1 me gusta

tendrias que modificar la validacion para permitir esos pagos por SDK. puedes marcar algun UDF, o incluso creo que ya hay un campo nativo que indica si la factura es creada por SDK.

Saludos,

1 me gusta

Gracias, disculpa la demora tuve una reunion con el area contable para ver si me dan luz verde en quitar esa opcion porque influye en sus actividades, ya lo desactive y me sale ahora el siguiente aviso “clase de interlocutor comercial no coincide con documento”, por favor su apoyo para indicarme porque sale eso, tengo entendido que la clase de pago que elegi no coincide

Gracias Willy por tu aporte, he realizado la anulación de ese aviso y ahora me graba la factura, pero al realizar el pago me sale el siguiente aviso “clase de interlocutor comercial no coincide con documento” quiero saber porque esta saliendo dicho mensaje

**Cambia esta linea :**
 oPay = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oIncomingPayments)

**por esta otra:**
 oPay = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oVendorPayments)

1 me gusta