Ir para conteúdo
  • Cadastre-se

dev botao

Erro: Já foi adicionado um item com a mesma chave.


Ver Solução Respondido por Daniel InfoCotidiano,
  • Este tópico foi criado há 330 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

boa noite pessoal, eu uso o acbrlib boleto já algum tempo e td esta rodando normal...Fui atualizar as dlls e não consigo mais gerar mais de um boleto junto.

ele me retorna a msg "Já foi adicionado um item com a mesma chave." qnd chamo IncluirTitulos
ACBoleto
.LimparLista()
CBoleto
.IncluirTitulos(Titulos.ToArray)
CBoleto
.Imprimir()

alguém tem ideia do que pode ser
? se eu não atualizar a dll td funciona normalmente

td esta preenchido corretamente
, nenhum SeNumero, NossoNumero ou NumeroDocumento se repete

Tiago Borges
Head de Produtos

separado.png

logo.gif


Cel: (12) 98190.3952
Site:
www.estrategiasoftware.com.br

  • Consultores
Postado

Bom dia @tborges
isso está acontecendo com todos os bancos ou com um banco especifico ?
se puder nos fornecer mais informações, como qual banco, se é via cnab 240 ou 400 ou API para que possamos reproduzir
com a utlima dll 0.2.0.267 atualizado na segunda vc chegou a testar ?

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado

Olá, bom dia.

Estou com a versão 0.2.0.267 e nela da esse erro descrito, anteriormente eu estava com a versão 0.2.0.156 e nela o erro não ocorre, se eu voltar ela, tudo funciona normalmente.

Eu gero os boletos usando as classes titulos, monto um array com todos os boletos que o usuário deseja imprimir e chamo IncluirTitulos passando esse array:
                        ACBoleto.LimparLista()
                        ACBoleto.IncluirTitulos(Titulos.ToArray)
                        ACBoleto.Imprimir()

O problema ocorre com qualquer banco. Abaixo um exemplo de 3 titulos dentro do array que estou passando para IncluirTitulos, se eu voltar a versão 0.2.0.156 isso funciona normal:

{[Titulo]
Aceite=1
TipoDiasProtesto=1
TipoDiasNegativacao=0
TipoImpressao=1
TipoDesconto=0
TipoDesconto2=0
CarteiraEnvio=0
MultaValorFixo=0
LocalPagamento=PAGÁVEL EM QUALQUER AGÊNCIA BANCÁRIA MESMO APÓS O VENCIMENTO
Vencimento=31/01/2023
DataDocumento=20/12/2023
DataProcessamento=20/12/2023
DataMoraJuros=01/02/2023
DataMulta=01/02/2023
DiasDeProtesto=0
CodigoNegativacao=3
DiasDeNegativacao=0
DataBaixa=15/02/2023
DataLimitePagto=15/02/2023
NumeroDocumento=2023-56511/1
Especie=RC
Carteira=RG
NossoNumero=6
ValorDocumento=6951
EspecieMod=R$
Parcela=1
TotalParcelas=0
ValorAbatimento=0,00
ValorDesconto=0
ValorMoraJuros=20,853
ValorIOF=0,00
ValorOutrasDespesas=0,00
SeuNumero=1082
PercentualMulta=2
CodigoMora=1
CodigoMoraJuros=0
ArquivoLogoEmp=C:\Projetos\AGE\01. Dev\bin\x86\Debug\Temp\logo1.PNG
Verso=0
OcorrenciaOriginal.TipoOcorrencia=0
Sacado.Pessoa=1
Sacado.NomeSacado=ESTRA PRODUTOS ALIMENTÍCIOS LTDA
[email protected]
Sacado.CNPJCPF=82957335150134
Sacado.Logradouro=RUA ARISTÍDES DE OLIVEIRA PATRÍCIO
Sacado.Numero=34
Sacado.Bairro=JARDIM ANA EMILIA
Sacado.Cidade=TAUBATE
Sacado.UF=SP
Sacado.CEP=12070-230
Sacado.SacadoAvalista.Pessoa=0
Sacado.SacadoAvalista.CNPJCPF=00000000000000
Mensagem=   

}

{[Titulo]
Aceite=1
TipoDiasProtesto=1
TipoDiasNegativacao=0
TipoImpressao=1
TipoDesconto=0
TipoDesconto2=0
CarteiraEnvio=0
MultaValorFixo=1
LocalPagamento=PAGÁVEL EM QUALQUER AGÊNCIA BANCÁRIA MESMO APÓS O VENCIMENTO
Vencimento=31/01/2023
DataDocumento=20/12/2023
DataProcessamento=20/12/2023
DataMoraJuros=01/02/2023
DataMulta=01/02/2023
DiasDeProtesto=0
CodigoNegativacao=3
DiasDeNegativacao=0
DataBaixa=15/02/2023
DataLimitePagto=15/02/2023
NumeroDocumento=2023-5515/1
Especie=RC
Carteira=RG
NossoNumero=7
ValorDocumento=500
EspecieMod=R$
Parcela=1
TotalParcelas=0
ValorAbatimento=0,00
ValorDesconto=0
ValorMoraJuros=1,5
ValorIOF=0,00
ValorOutrasDespesas=0,00
SeuNumero=1078
PercentualMulta=2
CodigoMora=1
CodigoMoraJuros=0
ArquivoLogoEmp=C:\Projetos\AGE\01. Dev\bin\x86\Debug\Temp\logo1.PNG
Verso=0
OcorrenciaOriginal.TipoOcorrencia=0
Sacado.Pessoa=1
Sacado.NomeSacado=ESTRA PRODUTOS ALIMENTÍCIOS LTDA
[email protected]
Sacado.CNPJCPF=82957335150134
Sacado.Logradouro=RUA ARISTÍDES DE OLIVEIRA PATRÍCIO
Sacado.Numero=34
Sacado.Bairro=JARDIM ANA EMILIA
Sacado.Cidade=TAUBATE
Sacado.UF=SP
Sacado.CEP=12070-230
Sacado.SacadoAvalista.Pessoa=0
Sacado.SacadoAvalista.CNPJCPF=00000000000000
Mensagem=   

}

{[Titulo]
Aceite=1
TipoDiasProtesto=1
TipoDiasNegativacao=0
TipoImpressao=1
TipoDesconto=0
TipoDesconto2=0
CarteiraEnvio=0
MultaValorFixo=1
LocalPagamento=PAGÁVEL EM QUALQUER AGÊNCIA BANCÁRIA MESMO APÓS O VENCIMENTO
Vencimento=31/01/2023
DataDocumento=20/12/2023
DataProcessamento=20/12/2023
DataMoraJuros=01/02/2023
DataMulta=01/02/2023
DiasDeProtesto=0
CodigoNegativacao=3
DiasDeNegativacao=0
DataBaixa=15/02/2023
DataLimitePagto=15/02/2023
NumeroDocumento=2023-505450/1
Especie=RC
Carteira=RG
NossoNumero=8
ValorDocumento=600
EspecieMod=R$
Parcela=1
TotalParcelas=0
ValorAbatimento=0,00
ValorDesconto=0
ValorMoraJuros=1,8
ValorIOF=0,00
ValorOutrasDespesas=0,00
SeuNumero=1075
PercentualMulta=2
CodigoMora=1
CodigoMoraJuros=0
ArquivoLogoEmp=C:\Projetos\AGE\01. Dev\bin\x86\Debug\Temp\logo1.PNG
Verso=0
OcorrenciaOriginal.TipoOcorrencia=0
Sacado.Pessoa=1
Sacado.NomeSacado=ESTRA PRODUTOS ALIMENTÍCIOS LTDA
[email protected]
Sacado.CNPJCPF=82957335150134
Sacado.Logradouro=RUA ARISTÍDES DE OLIVEIRA PATRÍCIO
Sacado.Numero=34
Sacado.Bairro=JARDIM ANA EMILIA
Sacado.Cidade=TAUBATE
Sacado.UF=SP
Sacado.CEP=12070-230
Sacado.SacadoAvalista.Pessoa=0
Sacado.SacadoAvalista.CNPJCPF=00000000000000
Mensagem=   

}

Tiago Borges
Head de Produtos

separado.png

logo.gif


Cel: (12) 98190.3952
Site:
www.estrategiasoftware.com.br

  • Consultores
Postado

@tborges pode realizar um teste por favor.


Sempre que for incluir um titulo é obrigatório passar na seção titulo o número sequencial, exemplo:
[Titulo1], [Titulo2], [Titulo3] , se não ele vai sobrescrever o primeiro titulo.
você esta passando assim:
[Titulo], [Titulo], [Titulo]

no seu caso:
{[Titulo1] (marquei em vermelho "1", é obrigatório seguir este padrao do ACBr)
Aceite=1
TipoDiasProtesto=1
TipoDiasNegativacao=0
...
{[Titulo2] (marquei em vermelho "2", é obrigatório seguir este padrao do ACBr)
Aceite=1
TipoDiasProtesto=1
TipoDiasNegativacao=0
...
{[Titulo3] (marquei em vermelho "3", é obrigatório seguir este padrao do ACBr)
Aceite=1
TipoDiasProtesto=1
TipoDiasNegativacao=0
...

  • Curtir 1
Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado

@Daniel InfoCotidiano eu gero o array de forma dinamica.

Olhe esse trecho de código

            Dim Titulo As ACBrLib.Boleto.Titulo
            Dim Titulos As New List(Of ACBrLib.Boleto.Titulo)

                        For Each dr As DataRow In DTTitulo.Rows
                            boTF = dr("Titulo.NossoNumero") > 0 And dr("A.BancoNr") = drConta("Banco.Numero") 'True - mantém mesmo número do boleto
                            If Not boTF Then
                                nNossoNumero += 1
                                dr("Titulo.NossoNumero") = nNossoNumero
                            End If

                            'aqui prepara valores de colunas e passar corrreto para a function abaixo
                            If dr.Table.Columns("Mensagem") IsNot Nothing Then
                                dr("Mensagem") = RemoveAcentos(dr("Mensagem").ToString)
                            Else
                                dr("Titulo.Mensagem") = RemoveAcentos(dr("Titulo.Mensagem").ToString)
                            End If
                            Titulo = New ACBrLib.Boleto.Titulo

                            Call DataRowObject(dr, Titulo, "Titulo.", True)
                            Call DataRowObject(dr, Titulo.Sacado, "Sacado.", True)
                            Call DataRowObject(dr, Titulo.Sacado.Avalista, "Sacado.Avalista.", True)

                           Titulos.Add(Titulo)

Se você olhar o código fonte do ACBRLib.Boleto vera que ele seta index = 0, por isso meu array fica sempre [Titulo]

namespace ACBrLib.Boleto
{
    public sealed class Titulo
    {
        [IniIgnore]
        public int Index { get; internal set; } = 0;

 

O que eu fiz, editei o código e compilei uma nova dll com
public int Index { get; set; }

dentro do meu for, eu contei titulo.index, então agora chega um array da forma como você pediu (mas só depois que eu mexi no código fonte de vocês)


image.png.49d1ca12ee272e8856d2e56df734dd53.png

No entanto, apesar de agora ele passar no ACBoleto.IncluirTitulos(Titulos.ToArray) e como você pode ver na imagem acima, tem 5 boletos dentro do array, quando chamo      ACBoleto.Imprimir(), ele imprime apenas 1 boleto (o primeiro item do array)

Repito, todo esse código funciona há 3 anos, ele só deu problema agora que atualizei a dll de vocês visando tentar resolver um erro no arquivo retorno do C6 bank, se não tivesse erro na versão 0.2.0.156, eu nem estaria perdendo tempo tentando refazer o que já esta rodando.

Alguma coisa foi alterada nesse sentido?

 

image.thumb.png.80b55219468ca90a9946f4bdc635d53b.png

Apenas mais um detalhe, mesmo index sendo = 0 como estava antes, IncluirTitulos deveria estar contando eles e o erro de item com a mesma chave não deveria ocorrer

        public void IncluirTitulos(params Titulo[] titulos)
        {
            ACBrIniFile aCBrIniFile = new ACBrIniFile();
            for (int i = 0; i < titulos.Length; i++)
            {
                titulos[i].WriteToIni(aCBrIniFile);
                titulos[i].Index = i++;
            }

            IncluirTitulos(aCBrIniFile.ToString());
        }

Tiago Borges
Head de Produtos

separado.png

logo.gif


Cel: (12) 98190.3952
Site:
www.estrategiasoftware.com.br

  • Consultores
Postado

Oi Tiago, desculpe a demora, estava-mos testando em meu ambiente. Como não domino sua linguagem, por isso a demora.
A Lib que tem ai realmente é Antiga 30/03/2022. como não tenho disponível no site, por favor pode me enviar por email (nao anexe aqui) [email protected]
Nos testes com array, realmente apresentou o comportamento que você citou. no meu caso de 5 títulos ele gerou 2 apenas . (mas como nao tenho esta dll antiga, gostaria de testar com ela.)
Para testes substitui o "array" por um "FOR" ele adicionou todos os títulos, gerou impressão e remessa corretamente.
Usando INI ele adicionou todos os títulos, gerou impressão e remessa corretamente.
Estamos tentando identificar o problema com o "ARRAY", então para seu sistema não ficar parado se possível testar substitui-lo pelo "For" por enquanto ou utilizar o INI seria uma saída.
O Mais estranho que a classe q vc alterou não teve modificações pelo que analisamos (sempre começou do zero) e acredito nenhum usuário tentou utilizar o "ARRAY" pois não identificamos registros de ocorrências semelhantes.
Então se puder nos enviar via email a lib q esta funcional ai p vc, ja testo assim q chegar.
Obrigado

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Consultores
  • Solution
Postado

@tborges Bom dia !
Por favor atualize o svn para deixar as classes e exemplo na ultima versão.
Apos os testes pode nos dar um peedback por favor

 

image.png
 

Adicionamos exemplos em array para testes.
image.png

Remessa
 

image.png

 

image.png

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.