¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo solucionar el error 'El valor vinculado 03 no existe' al crear Notas de Crédito de A/P

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 7 Vistas
0
Cargando...

Estoy tratando de crear un documento de cancelación para algunas Facturas de Pago Anticipado de A/P mediante la creación de Notas de Crédito de A/P vinculadas. Cuando intento agregar el documento, falla con el error:

[RPC1.CSTfIPI][línea: 1], 'El valor vinculado 03 no existe'

Incluso si completo manualmente el campo 'CST para IPI' con un valor que sé que es válido, sigue arrojando ese error. Estoy bastante perdido en cuanto a cuál podría ser el problema.

Aquí está el código que estoy utilizando:

        private void CancelInvoice(string Invoice)
        {
            SAPbobsCOM.Documents oMemo;
            SAPbobsCOM.Recordset oRSHeader;
            SAPbobsCOM.Recordset oRSLines;


            for (int i = 0; i < Invoices.Count; i++)
            {
                oMemo = Globals.oApplication.Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPurchaseCreditNotes);
                oRSHeader = Globals.oApplication.Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset);
                oRSLines = Globals.oApplication.Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset);


                Query = "SELECT ";
                Query += "T0.DocEntry, ";
                Query += "T0.CardCode, ";
                Query += "T0.NumAtCard, ";
                Query += "T0.BPLId, ";
                Query += "T0.DocCur, ";
                Query += "T0.DocRate, ";
                Query += "T1.MainUsage ";
                Query += "FROM ODPO T0 ";
                Query += "JOIN DPO12 T1 ON T0.DocEntry = T1.DocEntry ";
                Query += "WHERE DocNum = '" + Invoice + "'";
                oRSHeader.DoQuery(Query);


                // Agregar detalle de cabecera.
                oMemo.CardCode = oRSHeader.Fields.Item("CardCode").Value;
                oMemo.NumAtCard = oRSHeader.Fields.Item("NumAtCard").Value;
                oMemo.DocDueDate = DateTime.Today;
                oMemo.BPL_IDAssignedToInvoice = oRSHeader.Fields.Item("BPLId").Value;
                oMemo.DocCurrency = oRSHeader.Fields
            
            
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Gracias Diego por la sugerencia, pero parece que no funciona. Generé (pero no agregué) un documento de Copia a -> A/P Nota de Crédito de mi factura de prueba de DP, tomé los valores que B1 estableció y configuré el TaxCode (luego en ejecuciones posteriores el Código CFOP y el Código CSTforIPI) en el código. Aún así obtuve el mismo error. Estoy pensando que quizás me falta algún otro campo de referencia que tengo que completar o que cuando B1 hace la generación automática a partir de BaseEntry, BaseType y BaseLine está sobrescribiendo lo que puse.

Dejaría los campos BaseEntry, Type y Line vacíos y no vincularía la NC a la factura, pero si lo hago pide seleccionar lotes (que la factura no tiene). Parece que estoy atascado de cualquier manera.

Gracias de nuevo.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Zach,

Prueba lo siguiente:

Completa la propiedad TaxCode a nivel de línea de tu documento. El TaxCode proporcionará automáticamente la información para CSTforIPI. Probablemente el CSTforIPI que proporcionaste no coincide con el CSTforIPI del TaxCode. Después de esto, probablemente recibirás un mensaje de CFOPCode inválido si no se proporcionó en la línea de tu factura de anticipo de A/P.

Espero que te ayude.

Saludos cordiales,

Diego Lother

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Diego,

Ejecuté tu código y parece que si creo la factura DP utilizando el código, o manualmente, entonces la nota de crédito funciona, pero aún da el mismo error si lo ejecuto en una factura DP ya existente en la base de datos de prueba (que fue copiada directamente de una instancia de producción). Aunque creo que encontré el problema. La mayoría de estas facturas DP son registradas desde un sistema integrado, el cual está ingresando valores para CSTfIPI, CSTfPIS, CSTfCOFINS en las líneas de la factura DP. En la factura generada manualmente o desde el código anterior, estos valores en la base de datos para esos campos son NULL. Si los valores en la base de datos son NULL, no tiene problema en generar una nota de crédito, si tienen valores, sí lo tiene. Puedes ver esto en la imagen adjunta, el DocEntry #3932 es el que fue generado por el sistema integrado y el DocEntry #3975 es el generado por el código anterior y no tuvo problema. También es de donde creo que viene el '03' en el mensaje de error.

Parece que realmente no hay una forma de solucionar esto, así que tendré que buscar otros enfoques. ¡Gracias por tu ayuda!

capture.jpg
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hi Zach,

Basado en tu escenario y código, escribí este código de ejemplo. Ejecútalo en tu base de datos y verifica si funciona. (Lo ejecuté en la base de datos SBODemoBR, la base de datos de demostración para Brasil y funciona bien).

Cambia los valores codificados en duro por valores válidos en tu base de datos.

        private void CreateCancelAPDownPayment()
        {
            if (oCompany == null || !oCompany.Connected)
                this.connect();


            try
            {
                Documents oPchDowPay = oCompany.GetBusinessObject(BoObjectTypes.oPurchaseDownPayments);
                oPchDowPay.CardCode = "V10000"; //Cambia esto
                oPchDowPay.DocDate = DateTime.Now;
                oPchDowPay.DownPaymentType = DownPaymentTypeEnum.dptInvoice;


                oPchDowPay.Lines.ItemCode = "A00002";//Cambia esto
                oPchDowPay.Lines.Quantity = 2;
                oPchDowPay.Lines.Add();
                oPchDowPay.Lines.ItemCode = "A00004";//Cambia esto
                oPchDowPay.Lines.Quantity = 1;


                int docEntry = 0;
                if(oPchDowPay.Add() != 0)
                {
                    throw new Exception(oCompany.GetLastErrorDescription());
                }
                else
                {
                    docEntry = Convert.ToInt32(oCompany.GetNewObjectKey());
                    CancelPurchaseDownPayments(docEntry);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        private void CancelPurchaseDownPayments(int docEntry)
        {
            Documents oMemo = null;
            Recordset oRSHeader = null;
            Recordset oRSLines = null;


            <
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?