Ir para conteúdo
  • Cadastre-se

Bruno Siqueira

Membros
  • Total de ítens

    18
  • Registro em

  • Última visita

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

Bruno Siqueira's Achievements

Apprentice

Apprentice (3/14)

  • First Post
  • Collaborator Rare
  • Week One Done
  • One Month Later
  • One Year In

Recent Badges

9

Reputação

1

Community Answers

  1. @Daniel Simoes, por algum motivo não consegui editar o último post, então resolvi posta uma nova resposta... O motivo pelo qual precisamos adicionar a transação à lista é justamente pelo fato de uma das transações não ter sido adicionada. Observe que se tiver duas transações pendentes com o mesmo número de DocumentoVinculado a rotina cancela ambos logo no processamento do primeiro arquivo e adiciona os dados desse primeiro arquivo a lista. Contudo a segunda transação não é adicionada a lista apesar de ter sido cancelada através do processamento do primeiro arquivo que possui o mesmo DocumentoVinculado e com isso a lista que deveria conter dois registros tem apenas um. Dessa forma quando implemento o evento OnDepoisCancelarTransacoes uma rotina para listar as transações canceladas, apenas uma transação é exibida sendo que na verdade houveram duas transações canceladas. Agora respondendo diretamente seu questionamento, na verdade a transação em questão não foi de fato encontrada em RespostasCanceladas[I], o que foi encontrada foi a primeira transação cancelada que contem o mesmo DocumentoVinculado. Se essa segunda transação não for adicionada conforme sugestão, a lista RespostasCanceladas não vai possuir todas as transações canceladas. Exemplo: * Realizo uma venda de 100,00; Passo a primeira transação SiTef de 40,00 no cartão de credito MasterCard; A transação é aprovada e fica pendente de confirmação; Passo a segunda transação SiTef de 60,00 no cartão Visa; A transação é aprovada e fica pendente de confirmação; Encerro a aplicação antes de confirmar as transações pendentes; Abro novamente a aplicação; Inicializo o TEF; A rotina CancelarTransacoesPendentesClass processa os cancelamentos das transações pendentes; Ambas as transações são canceladas corretamente; O evento OnDepoisCancelarTransacoes retorna apenas uma das transações canceladas no argumento RespostasCanceladas; Qualquer dúvida, estou a disposição;
  2. @Daniel Simoes É justamente pelo fato da transação não ter sido adicionado anteriormente. Observe que se tiver duas transações pendentes com o mesmo número de DocumentoVinculado a rotina cancela ambos logo no processamento do primeiro arquivo e o adiciona a lista. Contudo a segunda transação não é adicionada pelo pois já foi cancelado anteriormente e possui o mesmo DocumentoVinculado e com isso a lista que deveria conter dois registros tem apenas um. Dessa forma quando implemento o evento OnDepoisCancelarTransacoes para listar as transações canceladas, apenas 1 é exibido sendo que foram 2 transações canceladas.
  3. Boa tarde @Daniel Simoes, anexei o patch e o fonte da implementação. Qualquer dúvida, estou a disposição! ACBrTEFDClass.pas ACBrTEFDClass.pas.patch
  4. Boa tarde! Com a rotina de SITEF preparada para cancelar transações pendentes ao inicializar o TEF, observei que se existirem mais de uma transação pendente para o mesmo DocumentoVinculado, as transações são devidamente canceladas, contudo, a lista de RespostasCanceladas não está sendo preenchida com todas as transações que foram canceladas pela rotina. Com isso, no evento OnDepoisCancelarTransacoes não é possível usar o argumento RespostasPendentes para dar um feedback para o operador sobre quais transações o sistema acabou de cancelar, pois neste caso o argumento retorna uma lista incompleta. Sugiro efetuar o seguinte ajuste (que está colorido de azul) no método a seguir: procedure TACBrTEFDClass.CancelarTransacoesPendentesClass; Var ArquivosVerficar : TStringList ; RespostaCancela : TACBrTEFDResp ; RespostasCanceladas : TACBrTEFDRespostasPendentes ; I, Topo : Integer; JaCancelado : Boolean ; ArqMask : String; begin GravaLog( Name +' CancelarTransacoesPendentesClass '); ArquivosVerficar := TStringList.Create; RespostasCanceladas := TACBrTEFDRespostasPendentes.create(True); try ArquivosVerficar.Clear; RespostasCanceladas.Clear; { Achando Arquivos de Backup deste GP } ArqMask := TACBrTEFD(Owner).PathBackup + PathDelim + 'ACBr_' + Self.Name + '_*.tef' ; FindFiles( ArqMask, ArquivosVerficar, True ); { Vamos processar primeiro os CNCs e ADMs, e as Não Confirmadas } I := ArquivosVerficar.Count-1 ; Topo := 0 ; while I > Topo do begin Resp.LeArquivo( ArquivosVerficar[ I ] ); if (pos(Resp.Header, 'CNC,ADM') > 0) or (not Resp.CNFEnviado) then begin ArquivosVerficar.Move(I,Topo); Topo := Topo + 1; end else I := I - 1 ; end; { Adicionando Arquivo de Resposta deste GP (se ainda não foi apagado) } if FileExists( ArqResp ) then ArquivosVerficar.Add( ArqResp ); { Enviando NCN ou CNC para todos os arquivos encontrados } while ArquivosVerficar.Count > 0 do begin if not FileExists( ArquivosVerficar[ 0 ] ) then begin ArquivosVerficar.Delete( 0 ); Continue; end; Resp.LeArquivo( ArquivosVerficar[ 0 ] ); { Verificando se essa Resposta já foi cancela em outro arquivo } JaCancelado := False ; I := 0 ; while (not JaCancelado) and (I < RespostasCanceladas.Count) do begin if (RespostasCanceladas[I] is TACBrTEFDRespTXT) or (Tipo = gpVeSPague) then begin with RespostasCanceladas[I] do begin JaCancelado := (Resp.Rede = Rede) and (Resp.NSU = NSU) and (Resp.Finalizacao = Finalizacao) and (Resp.ValorTotal = ValorTotal) ; end; end else begin with RespostasCanceladas[I] do begin JaCancelado := (Resp.DocumentoVinculado = DocumentoVinculado) ; // Se a resposta já foi cancelada em outro arquivo, adiciona a lista de respostas canceladas para que no evento // OnDepoisCancelarTransacoes a lista retornada no argumento RespostasCanceladas esteja devidamente preenchida com todas transações canceladas. if JaCancelado then begin RespostaCancela := CriarResposta( Tipo ); RespostaCancela.Assign( Resp ); RespostasCanceladas.Add( RespostaCancela ); end; end; end; Inc( I ) ; end; if not JaCancelado then begin { Criando cópia da Resposta Atual } RespostaCancela := CriarResposta( Tipo ); RespostaCancela.Assign( Resp ); { Enviando NCN ou CNC } try with TACBrTEFD(Owner) do begin if Assigned( OnAntesCancelarTransacao ) then try OnAntesCancelarTransacao( RespostaCancela ) ; except { Nao deixa exceptions em OnAntesCancelarTransacao interromper } end; end; if Resp.CNFEnviado and (Resp.Header <> 'CHQ') then begin if not CNC then raise EACBrTEFDErro.Create('CNC nao efetuado') ; end else NCN; DeleteFile( ArquivosVerficar[ 0 ] ); ArquivosVerficar.Delete( 0 ); { Adicionando na lista de Respostas Canceladas } RespostasCanceladas.Add( RespostaCancela ); except end; end else begin DeleteFile( ArquivosVerficar[ 0 ] ); ArquivosVerficar.Delete( 0 ); end; end; with TACBrTEFD(Owner) do begin if Assigned( OnDepoisCancelarTransacoes ) then OnDepoisCancelarTransacoes( RespostasCanceladas ); { TEF Auttar deve emitir msg apenas no Final de todos Desfazimentos } if Tipo = gpTefAuttar then if RespostasCanceladas.count > 0 then DoExibeMsg( opmOK, 'Transação TEF não Efetuada Reter o Cupom Fiscal!' ) ; end; finally ArquivosVerficar.Free; RespostasCanceladas.Free; end; end;
  5. Boa tarde Jean! Conseguiu descobrir se essa variável pode ser gerada randomicamente ou se a SiTef define algum tipo de preenchimento especifico quando se utiliza NFC-e?
  6. Boa tarde, Estou implementado o ACBRTEFD "usando apenas o SiTef" em um emissor de NFC-e que mais se parece com um sistema de Pedido de Vendas do que um PDV. Nesta automação comercial, o único documento fical que pode ser emitido é o NFC-e. A documentação que da Soft Express que estou usando é: SiTef - Interface Simplificada com a aplicação(VRS-228).pdf e notei que está bem direcionada as rotinas de emissão de ECF, bem como acontece com o componente ACBr totalmente baseado em emissão de ECF. Como não conheço a rotina ECF estou tendo algumas dúvidas que acredito a comunidade vai conseguir me ajudar. Observando o post seguinte consegui entender algumas coisa e já estou simulando o EstadoECF mas o que ficou meio confuso é como preencher os valores correspondentes a variável RetornoECF. Vou tentar explicar melhor através de um exemplo: 1. Crio uma venda no valor total: 100,00, 2. Realizo sequencialmente os seguintes registros de pagamentos: 2.1. Forma de pagamento DINHEIRO, valor: 10,00 - Refere-se a um pagamento registrado nessa venda que não foi feito por TEF 2.2. Forma de pagamento CARTÃO, valor: 30,00 - Logo após informar o valor do pagamento em cartão, executo a função CRT passando valor: 30,00 - Internamente será executada a função VerificarTransacaoPagamento passando o valor: 30,00 e será apurado SaldoRestante retornado qual valor: ??? - ineSubTotal: Qual o valor correto para RetornoECF? - ineTotalAPagar: Qual o valor correto para RetornoECF? 2.3. Forma de pagamento DINHEIRO, valor: 5,00 - Refere-se a outro pagamento registrado nessa venda que não foi feito por TEF 2.4. Forma de pagamento CARTÃO, valor: 40,00 - Logo após informar o valor do pagamento em cartão, executo a função CRT passando valor: 40,00 - Internamente será executada a função VerificarTransacaoPagamento passando o valor: 40,00 e será apurado SaldoRestante retornado qual valor: ??? - ineSubTotal: Qual o valor correto para RetornoECF? - ineTotalAPagar: Qual o valor correto para RetornoECF? 2.5. Forma de pagamento DINHEIRO, valor: 15,00 - Refere-se a mais um pagamento registrado nessa venda que não foi feito por TEF 3. Envio a NFC-e para SEFAZ; - Caso seja autorizada executo o método: ImprimirTransacoesPendentes - Caso seja rejeitada executo o método: CancelarTransacoesPendentes 4. Os dados abaixo foram retirados do arquivo CliSiTef.log, gostaria de saber se essas informações são coletadas pela SiTef ou se diz respeito apenas ao componente ACBR: -- 11/09 12:40:54:808 - InfoECF: ineEstadoECF -- 11/09 12:40:54:808 - Ret: V -- 11/09 12:40:54:809 - InfoECF: ineSubTotal -- 11/09 12:40:54:809 - Ret: 100 -- 11/09 12:40:54:809 - InfoECF: ineTotalAPagar -- 11/09 12:40:54:809 - Ret: 20 Obs: A minha automação não utiliza ACBR para fazer envio de NFCe.
  7. Cheguei a fazer essa implementação aqui, mas achei que poderia existir um caminho melhor... Na próxima conversa com a Software Express vou questionar isso, mas por hora vou manter essa implementação sugerida pois considero ser totalmente segura já que não deixaremos nenhuma mensagem sem ser exibida! Daniel, agradeço mais uma vez!
  8. Bom dia! Estou utilizando ACBrTEFD (SiTef) em minha aplicação emissora de NFC-e (Não PDV) e gostaria de saber se posso suprimir as mensagens do cliente retornadas no evento OnExibeMsg e exibir apenas as mensagens do operador, tendo em vista que não temos dois visores. Se é permitido suprimir, o correto seria exibir as mensagens do Operador ou do Cliente?
  9. Obtive a seguinte resposta do suporte da SoftwareExpress: "Referente a sua ultima pergunta, transações de débito digitado em geral são liberadas pelos autorizadores em ambiente de produção para casos específicos, mediante a isso no ambiente de simulação apenas transações de Crédito de Digitado serão aceitas, pois a carga de tabelas nele contida não prevê está transação" Desta forma, os testes utilizando cartão de débito devem ser realizados em ambiente de homologação apenas utilizando Pin-Pad. Obrigado!
  10. Assim que eles derem uma resposta, faço uma publicação aqui para auxiliar em dúvidas futuras! Obrigado Daniel!
  11. Boa tarde, Estou tentando fazer uma transação com cartão de débito (Visa Electron / Bradesco ) digitado, contudo após a digitação do número do cartão está sendo reportada a seguinte mensagem: Trans. nao habilitada Alguém sabe como resolver essa situação? Obs.: Mandei a pergunta para a SoftExpress mais ainda não obtive retorno. Obrigado!
  12. Reporto erro de compilação do exemplo TEFDemo. Para solucionar será necessário as seguintes alterações: ConfiguraSerial.pas: Adicionar ao uses a dependência ACBrDeviceSerial Unit5.pas: Adicionar ao uses a dependência ACBrConsts Obrigado!
  13. Amigos, bom dia! Observei que o no instalador do ACBr existe um código que marca a opção ACBr_TCP quando o ACBr_TEFD é marcada para instalação. Contudo, analisando os requires nos packages constatei que essa dependência não existe. Observei também na documentação "Bem_Vindo_ao_Trunk2.pdf", que corretamente não contem menção a dependência supracitada. Provavelmente ao longo do ciclo de desenvolvimento alguém removeu a dependência e esqueceu de ajustar o instalador. Se eu não estiver deixando passar algo acredito que poderia ser alterado o seguinte no instalador: unit: uFrameLista Linhas: 380 // dependencias do ACBrTEFD if (not ACBr_TCP_dpk.Checked) and (ACBr_MTER_dpk.Checked) then ACBr_TCP_dpk.Checked := True; Abraço,
×
×
  • 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.