Ir para conteúdo
  • Cadastre-se

dev botao

Continuar uma NFCe pós queda/energia, ACBrECF+ ACBrECFVirtualNFCe


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

Recommended Posts

Boa tarde... 

* Estou implementando minha aplicação que utiliza ACBrECF para trabalhar com NFCe,

para isto estou utilizando os componentes da imagem anexada abaixo (fiz este resumo para facilitar pra mim).

 

* Só que estou com uma dificuldade: Após simular uma "queda de energia", não consigo recuperar as propriedades da NFCe aberta,

com seus devidos itens (imagina um CARRINHO de COMPRAS em um SUPERMERCADO com um CAIXA com 100 itens já passados, CAI a ENERGIA e VOLTA,

e o NOBREAK está com DEFEITO)

 

* Fiz o seguinte teste, com o programa "C:\ACBR\Exemplos\ACBrSerial\ACBrECF\Delphi\ECFTeste.dpr" que tenho alterado...

(a) Abri um "cupom" (ACBrECF.AbreCupom) para iniciar a NFCe

(b) Vendi um ITEM

(c) AQUI simulo a "queda de energia", então DESATIVEI o ACBrECF e REATIVEI  

ACBrECF1.Desativar ;  ACBrECF1.Ativar ;

(d) Tento "Subtotalizar", já ocorre o erro "List Index of Bounds(0)"

Observação: CASO eu não desative e reative o objeto, funciona tudo PERFEITAMENTE,

 

posso imprimir a DANFe da NFCe certinho, com desconto, sem desconto no item, com 1 ou mais itens... tudo correto

 

Abaixo as conexões dos componentes ACBr que fiz no meu sistema :

 

image.thumb.png.0ae45956e6e83c1a5e28e96a8e206761.png

Link para o comentário
Compartilhar em outros sites

1 hora atrás, ROGERIO EDVAR DE SOUZA disse:

Boa tarde... 

* Estou implementando minha aplicação que utiliza ACBrECF para trabalhar com NFCe,

para isto estou utilizando os componentes da imagem anexada abaixo (fiz este resumo para facilitar pra mim).

 

* Só que estou com uma dificuldade: Após simular uma "queda de energia", não consigo recuperar as propriedades da NFCe aberta,

com seus devidos itens (imagina um CARRINHO de COMPRAS em um SUPERMERCADO com um CAIXA com 100 itens já passados, CAI a ENERGIA e VOLTA,

e o NOBREAK está com DEFEITO)

 

* Fiz o seguinte teste, com o programa "C:\ACBR\Exemplos\ACBrSerial\ACBrECF\Delphi\ECFTeste.dpr" que tenho alterado...

(a) Abri um "cupom" (ACBrECF.AbreCupom) para iniciar a NFCe

(b) Vendi um ITEM

(c) AQUI simulo a "queda de energia", então DESATIVEI o ACBrECF e REATIVEI  

ACBrECF1.Desativar ;  ACBrECF1.Ativar ;

(d) Tento "Subtotalizar", já ocorre o erro "List Index of Bounds(0)"

Observação: CASO eu não desative e reative o objeto, funciona tudo PERFEITAMENTE,

 

posso imprimir a DANFe da NFCe certinho, com desconto, sem desconto no item, com 1 ou mais itens... tudo correto

 

Abaixo as conexões dos componentes ACBr que fiz no meu sistema :

 

image.thumb.png.0ae45956e6e83c1a5e28e96a8e206761.png

Tentei agora a opção

ACBrECF1.Desativar ;   ACBrECF1.Ativar ;

ACBrECFVirtualNFCe1.LeArqINI ; 

Deu parcialmente certo mas, ao fechar documento, dá erro pois, aparentemente,

não releu os ITENS vindos do .ini. Releu somente o cabeçalho... 

Será que alguém poderia ajudar? ...

Obrigado!!!

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Vou verificar o caso com calma...

O mais correto, seria recuperar o carrinho do seu Danco de Dados... e comparar os totais de Itens vendidos e Valor Total do Cupom, com os do ECFVirtual.. Se ambos baterem, seria permitido continuar o cupom...

  • Curtir 3
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

17 horas atrás, Daniel Simoes disse:

Vou verificar o caso com calma...

O mais correto, seria recuperar o carrinho do seu Danco de Dados... e comparar os totais de Itens vendidos e Valor Total do Cupom, com os do ECFVirtual.. Se ambos baterem, seria permitido continuar o cupom...

Entendi...

+ Obrigado pela dica, Daniel Simões, tentei aqui e estou conseguindo recarregar o objeto descendente do componente "TACBrNFe"... 

+ Mas o descendente do "TACBrECFVirtualNFCe" ,  

ainda não consegui recarregar, apenas através deste método ACBrECFVirtualNFCe1.LeArqINI  supracitado ...

Mas daí os itens não são carregados ...

Vou tentar mais um pouco, se você tiver o código, poderia me passar , por favor ...?

(ou é somente eu recarregar o "TACBrNFe" que daria certo o fechamento do "cupom fiscal virtual"...? ) 

Obrigado mais uma vez...!

 

Link para o comentário
Compartilhar em outros sites

17 horas atrás, Daniel Simoes disse:

Vou verificar o caso com calma...

O mais correto, seria recuperar o carrinho do seu Danco de Dados... e comparar os totais de Itens vendidos e Valor Total do Cupom, com os do ECFVirtual.. Se ambos baterem, seria permitido continuar o cupom...

Daniel...

Eu não estou conseguindo...

Teria que recarregar tudo...

Será que o erro não está na procedure :

procedure TACBrECFVirtualClassCupom.LoadFromINI(AIni: TCustomIniFile);

do ACBrECFVirtual ?

Mas acho estranho que está passando aparentemente pelos itens do .ini (estou debugando aqui)

mas ao  subtotalizar, efetuar pagamento e fechar o documento, os itens

não aparecem gerados no XML ...

Obrigado!

Link para o comentário
Compartilhar em outros sites

  • Consultores
Em 23/04/2019 at 11:12, ROGERIO EDVAR DE SOUZA disse:

Daniel...

Eu não estou conseguindo...

Teria que recarregar tudo...

Olá Rogério,

   A verdade é que o componente não foi feito pra refazer tudo automaticamente. Então se você sofre uma queda de energia, precisaria colocar seu sistema e o componente em estado operacional.

   Isso é relativo de como vai ser feito. Por exemplo, devido a complexidade do PAF-ECF, algumas empresas sempre cancelavam o cupom aberto no caso de quedas de energia. Daí, ao invés de tentar reabrir o cupom, colocam no sistema uma função de recuperar um cupom já emitido que refaz a venda.

   Eu particularmente acho isso mais fácil de fazer e dá menor brecha para erros no sistema.

Em 23/04/2019 at 11:12, ROGERIO EDVAR DE SOUZA disse:

Será que o erro não está na procedure :

procedure TACBrECFVirtualClassCupom.LoadFromINI(AIni: TCustomIniFile);

do ACBrECFVirtual ?

Mas acho estranho que está passando aparentemente pelos itens do .ini (estou debugando aqui)

mas ao  subtotalizar, efetuar pagamento e fechar o documento, os itens 

não aparecem gerados no XML ...

   Como você percebeu, o arquivo XML não está sendo atualizado a cada item vendido. Isso acontece porque o comando em TACBrECFVirtualNFCeClass.GravaArqINIVirtual não está chamando o comando GerarXML na nota. Ele poderia ser alterado para algo como:

procedure TACBrECFVirtualNFCeClass.GravaArqINIVirtual(ConteudoINI: TStrings);
begin
  // Se cupom está aberto, deve persistir o CFe //
  if (fpEstado in estCupomAberto) and (fsEhVenda) then
  begin
    fsACBrNFCe.NotasFiscais[0].GerarXML; //<--- alteração
    fsACBrNFCe.NotasFiscais.GravarXML(fsNomeArqTempXML);
  end
  else if (fsNomeArqTempXML <> '') and FileExists(fsNomeArqTempXML) then
    DeleteFile(fsNomeArqTempXML);

  inherited GravaArqINIVirtual(ConteudoINI);
end;

   Mas só essa alteração acima não resolve o problema que fez você abrir este tópico.

   Estou avaliando se e o que é possível fazer para que essa mensagem de erro seja tratada de maneira mais automática pelo componente.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

19 horas atrás, EMBarbosa disse:

Olá Rogério,

   A verdade é que o componente não foi feito pra refazer tudo automaticamente. Então se você sofre uma queda de energia, precisaria colocar seu sistema e o componente em estado operacional.

   Isso é relativo de como vai ser feito. Por exemplo, devido a complexidade do PAF-ECF, algumas empresas sempre cancelavam o cupom aberto no caso de quedas de energia. Daí, ao invés de tentar reabrir o cupom, colocam no sistema uma função de recuperar um cupom já emitido que refaz a venda.

   Eu particularmente acho isso mais fácil de fazer e dá menor brecha para erros no sistema.

   Como você percebeu, o arquivo XML não está sendo atualizado a cada item vendido. Isso acontece porque o comando em TACBrECFVirtualNFCeClass.GravaArqINIVirtual não está chamando o comando GerarXML na nota. Ele poderia ser alterado para algo como:


procedure TACBrECFVirtualNFCeClass.GravaArqINIVirtual(ConteudoINI: TStrings);
begin
  // Se cupom está aberto, deve persistir o CFe //
  if (fpEstado in estCupomAberto) and (fsEhVenda) then
  begin
    fsACBrNFCe.NotasFiscais[0].GerarXML; //<--- alteração
    fsACBrNFCe.NotasFiscais.GravarXML(fsNomeArqTempXML);
  end
  else if (fsNomeArqTempXML <> '') and FileExists(fsNomeArqTempXML) then
    DeleteFile(fsNomeArqTempXML);

  inherited GravaArqINIVirtual(ConteudoINI);
end;

   Mas só essa alteração acima não resolve o problema que fez você abrir este tópico.

   Estou avaliando se e o que é possível fazer para que essa mensagem de erro seja tratada de maneira mais automática pelo componente.

Ontem criei uma função que, com base no .ini,

ela cria um BKP no .ini do ACBrECFVirtualNFCe,

ela CANCELA o CUPOM que está aberto e reabre e revende os itens,

voltando o "CCF VIRTUAL" e "COO VIRTUAL".

Estou fazendo mais uns testes mas já está funcionando perfeitamente.

E um dos parâmetros que coloquei foi a opção de, ao reabrir, retirar o desconto.

Terminando os testes eu passo para o fórum aqui para auxiliar outros.

Obrigado por tentar ajudar!

(isto faz com que a NFCe seja REFEITA com base no ACBrECF e não altera seu COO ou CCF virtuais)

Editado por ROGERIO EDVAR DE SOUZA
( inserir mais informações )
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Consultores
7 horas atrás, ROGERIO EDVAR DE SOUZA disse:

Ontem criei uma função que, com base no .ini,

ela cria um BKP no .ini do ACBrECFVirtualNFCe,

ela CANCELA o CUPOM que está aberto e reabre e revende os itens,

voltando o "CCF VIRTUAL" e "COO VIRTUAL".

Estou fazendo mais uns testes mas já está funcionando perfeitamente.

E um dos parâmetros que coloquei foi a opção de, ao reabrir, retirar o desconto.

Terminando os testes eu passo para o fórum aqui para auxiliar outros.

Obrigado por tentar ajudar!

(isto faz com que a NFCe seja REFEITA com base no ACBrECF e não altera seu COO ou CCF virtuais)

Eu fiz alterações no componente  TACBrECFVirtualNFCe para poder recuperar os itens do XML e assim resolver o problema que fez você iniciar esse tópico, mas preciso fazer mais testes.

Me ajudaria muito se você (ou outra pessoa) quiser dar uma olhada e verificar se estaria OK para o que você pretende usar. Seguem os arquivos alterados:

ACBrECFVirtual.pasACBrECFVirtualNFCe.pas

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

12 minutos atrás, EMBarbosa disse:

Eu fiz alterações no componente  TACBrECFVirtualNFCe para poder recuperar os itens do XML e assim resolver o problema que fez você iniciar esse tópico, mas preciso fazer mais testes.

Me ajudaria muito se você (ou outra pessoa) quiser dar uma olhada e verificar se estaria OK para o que você pretende usar. Seguem os arquivos alterados:

ACBrECFVirtual.pas 117 kB · 0 downloads ACBrECFVirtualNFCe.pas 32 kB · 0 downloads

Vou viajar hoje e chego somente segunda à tarde... depois eu faço testes...

Acabei criando uma função que cria um bkp do .ini,

cancela e reabre o cupom e através do bkp do .ini

ele volta o COO e CCF, refaz um NOVO cupom e reinclui os itens, com opção até de retirar os descontos...

deu tudo certo...

( o COO e CCF continuam o mesmo, permite reabrir a venda cancelando os descontos dos itens ou não ... )

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Conversei agora pouco com o @EMBarbosa, e faremos um amplo refactoring nos ECFs virtuais

A ideia principal do refactoring... é que o Documento só seja encaminhado para o componente ACBrNFe ou ACBrSAT, no Fechamento do Cupom...

  • Triste 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

Em 30/04/2019 at 17:26, Daniel Simoes disse:

Conversei agora pouco com o @EMBarbosa, e faremos um amplo refactoring nos ECFs virtuais

A ideia principal do refactoring... é que o Documento só seja encaminhado para o componente ACBrNFe ou ACBrSAT, no Fechamento do Cupom...

Eu acho interessante da forma que está pois temos ajustes que podemos fazer.
Exemplo
Quando o cliente é SIMPLESNACIONAL, já estou fazendo vários ajustes

de CFOP do item da NFCe que já está sendo preenchida,

e isto está me auxiliando e muito.

...

Se vocês alterarem a forma que está, irá dificultar pra mim e creio

que para outros programadores

...

Veja este trecho do código, inserindo no evento "ACBrECFVirtualNFCe1QuandoVenderItem(Det: TDetCollectionItem);" :

( mas tem VÁRIOS outros trechos 
 

     If V_Eh_SimplesNacional=True then 
      Begin
         // quando o produto estiver no cadastro com o CSOSN = "0102" o CFOP será "5102"
         // quando o produto estiver no cadastro com o CSOSN = "0500' o CFOP será "5405"' +
         // ....
         // E_CSOSNIcms; :TpcnCSOSNIcms // TpcnCSOSNIcms = (csosnVazio,csosn101, csosn102, csosn103,
         // csosn201, csosn202, csosn203, csosn300, csosn400, csosn500,csosn900 );

         If      E_CSOSNIcms=csosn102 then  // CSOSN = "0102" o CFOP será "5102"
         Prod.CFOP     := '5102'
         // ...
         Else If E_CSOSNIcms=csosn500 then  // CSOSN = "0500' o CFOP será "5405"
         Prod.CFOP     := '5405'
      End
      Else
      Begin
         // Explicação para estabelecimento do REGIME NORMAL
         // quando o produto estiver no cadastro com CST = '000' ou '040' ou '041' o CFOP será "5102"
         // quando o produto estiver no cadastro com CST = '060' ou '070' o CFOP será "5405"
         // ...
         // E_CSTIcms : TpcnCSTIcms ;   //  TpcnCSTIcms = (cst00, cst10, cst20, cst30, cst40, cst41, cst45, cst50, cst51,
         //  cst60, cst70, cst80, cst81, cst90, cstPart10, cstPart90,
         //  cstRep41, cstVazio, cstICMSOutraUF, cstICMSSN, cstRep60); //80 e 81 apenas para CTe
         // ... 
         If        (E_CSTIcms=cst00) or (E_CSTIcms=cst40) or (E_CSTIcms=cst41)  then  // CST = '000' ou '040' ou '041' o CFOP será "5102"
         Prod.CFOP     := '5102'
         // ...
         Else  If  (E_CSTIcms=cst60) or (E_CSTIcms=cst70) then  // CST = '060' ou '070' o CFOP será "5405"
         Prod.CFOP     := '5405'
      End ;

Resumindo,  eu estou achando ótimo da maneira que está e bem mais fácil pois vou corrigindo item a item.

Caso mude, ao fechar o cupom, teria que passar por TODOS ITENS

da NFe novamente, reanalisando TUDO e vendo o que teria que alterar.

Se puderem deixar da forma que está, 

agradeceríamos MUITO.

( tenho vários trechos que estão utilizando estes eventos quandovenderitem e quandofechardocumento )

Obrigado!

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Consultores
  • Solution
Em 26/04/2019 at 17:09, ROGERIO EDVAR DE SOUZA disse:

Vou viajar hoje e chego somente segunda à tarde... depois eu faço testes...

Fiz alterações no ECFVirtual visando facilitar essa questão de desativar e ativar novamente baseados nos arquivos que anexei anteriormente.

Está na revisão 17011.

As alterações visando o refactoring que o Daniel mencionou estou analisando para evitar que gere algum problema como é o seu medo acima.

 

Em 02/05/2019 at 11:59, ROGERIO EDVAR DE SOUZA disse:

Se puderem deixar da forma que está, 

agradeceríamos MUITO. 

( tenho vários trechos que estão utilizando estes eventos quandovenderitem e quandofechardocumento ) 

Fique tranquilo que se houver alterações no componente, isso não afetará a possibilidade de alterar os dados dos itens ou do documento e você poderá manter o código atual ou simplesmente copiá-lo para outro evento.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...
  • Consultores

Moderação: Os posts de outro usuário mencionando sugestões para o refactoring foram movidos para um tópico próprio alistado abaixo.

 

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

×
×
  • 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.