Problema con factura de proveedores con pago

Buenas tardes.

Estoy intentando ingresar una factura de proveedores con pago, pero me indica que no he registrado los medios de pago adjunto el código para que me puedan apoyar, gracias.

    Try

        Dim facturaCLIENTE As SAPbobsCOM.Documents

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

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

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

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

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

        facturaCLIENTE.DocType = BoDocumentTypes.dDocument_Service

        'Linea de Rendicion
        facturaCLIENTE.Lines.UserFields.Fields.Item("U_SYP_TIPOSERV").Value = frm_registro.txt_gasto.Text
        facturaCLIENTE.Lines.ItemDescription = "COMBUSTIBLE Y LUBRICANTES"
        facturaCLIENTE.Lines.AccountCode = "659906"
        facturaCLIENTE.Lines.CostingCode = frm_registro.txt_unegocio.Text
        facturaCLIENTE.Lines.CostingCode2 = frm_registro.txt_costo.Text
        facturaCLIENTE.Lines.CostingCode3 = frm_registro.txt_proyecto.Text
        facturaCLIENTE.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
                facturaCLIENTE.Lines.LineTotal = (ppre - padi) / 1.18
                facturaCLIENTE.Lines.TaxCode = ptig
            Else
                facturaCLIENTE.Lines.LineTotal = ppre / 1.18
                facturaCLIENTE.Lines.TaxCode = ptig
            End If

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

        facturaCLIENTE.Lines.Add()
        facturaCLIENTE.Add()

        'Pago de Factura

        Dim sNewObjCode As String = ""
        Dim tmpKey As String = oCompany.GetNewObjectCode(sNewObjCode)
        MsgBox(tmpKey)

        Dim oPay As SAPbobsCOM.Payments
        oPay = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oIncomingPayments)
        oPay.CardCode = frm_registro.txt_ruc.Text
        'oPay.Invoices.DocEntry = tmpKey
        oPay.Invoices.InvoiceType = BoRcptInvTypes.it_PurchaseInvoice
        oPay.CashAccount = "101101"
        oPay.CashSum = frm_registro.txt_total.Text
        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, revise por favor ...\n\n" + 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

esta parte de tu código esta mal, estas colocando un tipo de factura de compras.

Usa algo asi:

pagoRECIBIDO.Invoices.InvoiceType = BoRcptInvTypes.it_Invoice;
pagoRECIBIDO.Invoices.DocEntry = Int32.Parse(DocEntry_ultimaFacturaAdicionada);

Saludos,

1 me gusta

Gracias por responder, pero cuando uso esta sentencia me indica que esta vacio o nulo, estoy usando Visual Basic, si me puedes orientar te lo agradeceré

corregiste el InvoiceType?

Si, pero al jalar el documento con

Dim tmpKey As String = oCompany.GetNewObjectCode(sNewObjCode)

me indica que esta vacio o nulo

Me refiero a esta parte que es posterior:

Invoices.InvoiceType = BoRcptInvTypes.it_Invoice;

Gracias por tu aporte, pero aun me sigue saliendo error. Adjunto el codigo modificado para que me des pistas por favor.

        facturaCLIENTE.Add()


        '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_Invoice
        Dim sNewObjCode As String = ""
        Dim tmpKey As String = oCompany.GetNewObjectCode(sNewObjCode)
        MsgBox(tmpKey)
        oPay.Invoices.DocEntry = Int32.Parse(tmpKey)
        oPay.CashAccount = "101101"
        oPay.CashSum = frm_registro.txt_total.Text
        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

Gracias de antemano

puedes pasar el error que te sale.

Adjunto la imagen del error pan1

Hiciste debug, en que linea especificamente te sale el error?

El error sale en la línea donde obtengo el GetNewObjectCode

        Dim tmpKey As String = oCompany.GetNewObjectCode(sNewObjCode)
        'MsgBox(tmpKey)
        oPay.Invoices.DocEntry = Int32.Parse(tmpKey) (Aqui salta el error)

Intenta no pasar a una variable, el docentry recuperado:

oPay.Invoices.DocEntry = oCompany.GetNewObjectCode()

Saludos,

Acabo de hacer la prueba pero en la misma linea me ha salido el siguiente error.
pan2

ponele el parametro que tenia.

Cuando agrego el parámetro me sale el otro error que indica “El valor no puede ser nulo. Nombre del parámetro: String”

Intenta solo poniendo esto:

Dim DocEntry as String =""
DocEntry = oCompany.GetNewObjectKey

Ojo: No lleva parentesis

Estimado, ya hice lo que me indicaste pero me sale el siguiente error

La cadena de entrada no tiene el formato correcto

Mi código es

        Dim DocEntry As String
        DocEntry = oCompany.GetNewObjectKey
        oPay.Invoices.DocEntry = Int32.Parse(DocEntry)

Cuando lo visualizo con un MsgBox me sale que el DocEntry esta vacio

esa linea ponlo inmediatamente despues del ADD de la factura.

1 me gusta

Gracias por responder. Efectivamente lo estoy colocando posterior al add de la factura. Pero lo que tengo una duda es que en el mismo SAP antes de grabar siempre me pide el medio de pago y luego de llenar esa información recien graba, no hay un objeto temporal donde grabo la información? y cuando realizo el Add de la factura recien graba el DocEntry?.

Adjunto parte del codigo del registro de pago

        facturaPROV.Lines.Add()



        facturaPROV.Add()


        '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
        Dim DocEntry As String
        DocEntry = 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()

Gracias de antemano por tu pronta respuesta

cuando te digo inmediatamente después del ADD de la factura es porque el oCompany aun sigue con ese objeto. Tu lo tienes después de asignarle el objeto PAGO y por eso no te manda ningún valor porque aun no has generado el PAGO.