Avalados por :

Como resolver o erro 'O valor vinculado 03 não existe' ao criar Notas de Crédito de A/P

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

Estou tentando criar um documento de cancelamento para algumas Faturas de Pagamento Antecipado de A/P, criando Notas de Crédito de A/P vinculadas. Ao tentar adicionar o documento, ocorre um erro:

[RPC1.CSTfIPI][linha: 1], 'O valor vinculado 03 não existe'

Mesmo que eu preencha manualmente o campo 'CST para IPI' com um valor que sei que é válido, o erro persiste. Estou um pouco perdido sobre qual poderia ser o problema.

Aqui está o código que estou usando:

        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);


                // Adicionar detalhes do cabeçalho.
                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...

Obrigado, Diego, pela sugestão, mas parece que não está funcionando. Gerei (mas não adicionei) um documento de Cópia para -> Nota de Crédito de minha fatura de teste de DP, peguei os valores que B1 estabeleceu e configurei o TaxCode (depois, em execuções posteriores, o Código CFOP e o Código CSTforIPI) no código. Ainda assim, recebi o mesmo erro. Estou pensando que talvez esteja faltando algum outro campo de referência que eu precise preencher ou que, quando B1 faz a geração automática a partir de BaseEntry, BaseType e BaseLine, esteja sobrescrevendo o que coloquei.

Deixaria os campos BaseEntry, Type e Line vazios e não vincularia a NC à fatura, mas se o fizer, pede para selecionar lotes (que a fatura não possui). Parece que estou preso de qualquer maneira.

Obrigado novamente.

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

Olá Zach,

Tente o seguinte:

Preencha a propriedade TaxCode ao nível da linha do seu documento. O TaxCode fornecerá automaticamente as informações para CSTforIPI. Provavelmente o CSTforIPI que você forneceu não corresponde ao CSTforIPI do TaxCode. Após isso, você provavelmente receberá uma mensagem de CFOPCode inválido se não for fornecido na linha da sua fatura de adiantamento de A/P.

Espero que isso ajude.

Atenciosamente,

Diego Lother

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

Olá Diego,

Executei seu código e parece que se eu criar a fatura DP usando o código, ou manualmente, então o crédito funciona, mas ainda dá o mesmo erro se eu executar em uma fatura DP já existente no banco de dados de teste (que foi copiada diretamente de uma instância de produção). Embora eu ache que encontrei o problema. A maioria dessas faturas DP é registrada a partir de um sistema integrado, que está inserindo valores para CSTfIPI, CSTfPIS, CSTfCOFINS nas linhas da fatura DP. Na fatura gerada manualmente ou a partir do código anterior, esses valores no banco de dados para esses campos são NULL. Se os valores no banco de dados forem NULL, não há problema em gerar um crédito, se tiverem valores, sim, há. Você pode ver isso na imagem anexada, o DocEntry #3932 é o que foi gerado pelo sistema integrado e o DocEntry #3975 é o gerado pelo código anterior e não teve problema. Também é de onde acho que vem o '03' na mensagem de erro.

Parece que realmente não há uma maneira de resolver isso, então terei que procurar outras abordagens. Obrigado pela sua ajuda!

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

Olá Zach,

Com base no seu cenário e código, escrevi este exemplo de código. Execute-o no seu banco de dados e verifique se funciona. (Eu executei no banco de dados SBODemoBR, o banco de dados de demonstração para o Brasil e funcionou bem).

Substitua os valores codificados diretamente por valores válidos no seu banco de dados.

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


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


                oPchDowPay.Lines.ItemCode = "A00002";//Altere isso
                oPchDowPay.Lines.Quantity = 2;
                oPchDowPay.Lines.Add();
                oPchDowPay.Lines.ItemCode = "A00004";//Altere isso
                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?