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
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.
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
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
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.
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,
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)