Ir para conteúdo
  • Cadastre-se

Smaili Amorim

Membros
  • Total de ítens

    15
  • Registro em

  • Última visita

Tudo que Smaili Amorim postou

  1. Eu fiz uma modificação no arquivo ACBrTEFAPICliSiTef.pas que está em anexo, somente para terminar a homologação. Só que dessa forma que eu fiz acho que não vai funcionar se estiver ativado a opção de FinalizarTransacaoIndividual Mas eles tbm não aceitaram homologar com essa opção ativado porque ela tbm está enviando o FinalizaTransacaoSiTefInterativo para cada transação, e no roteiro de homologação pede somente um FinalizaTransacaoSiTefInterativo. ACBrTEFAPICliSiTef.pas
  2. Esse exemplo é de múltiplos pagamentos 09:46:16:745 - *** IniciaFuncaoSiTefInterativo. Modalidade: 3 Valor: 40,00 Documento: 3133 Data: 20250527 Hora: 094616 Operador: ParamAdic: 09:46:45:314 - *** IniciaFuncaoSiTefInterativo. Modalidade: 2 Valor: 60,00 Documento: 3133 Data: 20250527 Hora: 094645 Operador: ParamAdic: 09:47:07:501 - *** FinalizaTransacaoSiTefInterativo. Confirma: SIM, Documento: 3133, Data: 20250527, Hora: 094633, ParametrosAdicionais: 1º Ele envia o primeiro pagamento com a hora 094616 2º Recupera a transação com a DataHora, que dá alguns segundos de diferença 094633 3º Ele envia o segundo pagamento com a hora 094645 4º Finaliza a função enviando a hora recuperada 094633 E eles querem que vá sempre o horário do primeiro pagamento que nesse exemplo seria o 094616
  3. Ele falou que no exemplo a hora é a mesma e teria que seguir o que esta no exemplo https://dev.softwareexpress.com.br/docs/clisitef/clisitef_documento_principal
  4. Ao homologar o Sitef com o ACBrTEFAPI foi retornado que o parâmetro hora deve ser o mesmo da primeira IniciaFuncaoSiTefInterativo para todas as transações tef 15:51:35:275 - *** IniciaFuncaoSiTefInterativo. Modalidade: 110 Valor: 0,00 Documento: 20250527155135 Data: 20250527 Hora: 155135 Operador: ParamAdic: 15:52:09:002 - *** FinalizaTransacaoSiTefInterativo. Confirma: SIM, Documento: 20250527155135, Data: 20250527, Hora: 155204, ParametrosAdicionais:
  5. Adicionado a propriedade EstornarPagamentoIndividual para ligar o novo comportamento ACBrTEFAPICliSiTef.pas ACBrTEFAPIComum.pas
  6. Só que o componente TEFD com o SiTef estorna os pagamentos individuais. Eu acho mais fácil ter pessoas que estão usando o componente achando que está estornando os pagamentos individualmente do que estornando todos, pq se alguém olha o comportamento no TEFAPIDemo vai achar que estorna os pagamentos individualmente
  7. Pequeno ajuste para validar se variavel NumeroPagamentoCupom esta vazia procedure TACBrTEFAPIClassCliSiTef.FinalizarTransacao(const Rede, NSU, CodigoFinalizacao: String; AStatus: TACBrTEFStatusTransacao); var Confirma: Boolean; i: Integer; DocumentoVinculado: String; DataHora: TDateTime; NumeroPagamentoCupom: String; begin // CliSiTEF não usa Rede, NSU e Finalizacao DocumentoVinculado := ''; DataHora := 0; Confirma := (AStatus in [tefstsSucessoAutomatico, tefstsSucessoManual]); if (NSU = '') and (CodigoFinalizacao <> '') then // capturado por 130 em CarregarRespostasPendentes ? begin DocumentoVinculado := CodigoFinalizacao; for i := 0 to fpACBrTEFAPI.RespostasTEF.Count-1 do begin if fpACBrTEFAPI.RespostasTEF[i].DocumentoVinculado = DocumentoVinculado then begin DataHora := fpACBrTEFAPI.RespostasTEF[i].DataHoraTransacaoComprovante; Break; end; end; end else begin i := fpACBrTEFAPI.RespostasTEF.AcharTransacao(Rede, NSU, CodigoFinalizacao); if (i >= 0) then begin DocumentoVinculado := fpACBrTEFAPI.RespostasTEF[i].DocumentoVinculado; DataHora := fpACBrTEFAPI.RespostasTEF[i].DataHoraTransacaoComprovante; if not Confirma then begin NumeroPagamentoCupom := '{NumeroPagamentoCupom='+IntToStr(fpACBrTEFAPI.RespostasTEF[i].IdPagamento)+'}'; ParamAdicFinalizacao.Add(NumeroPagamentoCupom); end; end; end; FinalizarTransacaoSiTef(Confirma, DocumentoVinculado, DataHora); if not Confirma and (NumeroPagamentoCupom <> '') then ParamAdicFinalizacao.Delete(ParamAdicFinalizacao.IndexOf(NumeroPagamentoCupom)); end;
  8. Alterar direto na classe TACBrTEFAPIClassCliSiTef procedure TACBrTEFAPIClassCliSiTef.FinalizarTransacao(const Rede, NSU, CodigoFinalizacao: String; AStatus: TACBrTEFStatusTransacao); var Confirma: Boolean; i: Integer; DocumentoVinculado: String; DataHora: TDateTime; NumeroPagamentoCupom: String; begin // CliSiTEF não usa Rede, NSU e Finalizacao DocumentoVinculado := ''; DataHora := 0; Confirma := (AStatus in [tefstsSucessoAutomatico, tefstsSucessoManual]); if (NSU = '') and (CodigoFinalizacao <> '') then // capturado por 130 em CarregarRespostasPendentes ? begin DocumentoVinculado := CodigoFinalizacao; for i := 0 to fpACBrTEFAPI.RespostasTEF.Count-1 do begin if fpACBrTEFAPI.RespostasTEF[i].DocumentoVinculado = DocumentoVinculado then begin DataHora := fpACBrTEFAPI.RespostasTEF[i].DataHoraTransacaoComprovante; Break; end; end; end else begin i := fpACBrTEFAPI.RespostasTEF.AcharTransacao(Rede, NSU, CodigoFinalizacao); if (i >= 0) then begin DocumentoVinculado := fpACBrTEFAPI.RespostasTEF[i].DocumentoVinculado; DataHora := fpACBrTEFAPI.RespostasTEF[i].DataHoraTransacaoComprovante; if not Confirma then begin NumeroPagamentoCupom := '{NumeroPagamentoCupom='+IntToStr(fpACBrTEFAPI.RespostasTEF[i].IdPagamento)+'}'; ParamAdicFinalizacao.Add(NumeroPagamentoCupom); end; end; end; FinalizarTransacaoSiTef(Confirma, DocumentoVinculado, DataHora); if not Confirma then ParamAdicFinalizacao.Delete(ParamAdicFinalizacao.IndexOf(NumeroPagamentoCupom)); end; E verificar se pode remover essa validação na função TACBrTEFAPIClassCliSiTef.FinalizarTransacaoSiTef if (pos(DoctoStr, fDocumentosFinalizados) > 0) then Exit; Pois ela não deixa estornar mais que um pagamento por venda
  9. Deu certo fazendo dessa forma TACBrTEFAPIClassCliSiTef(ACBrTEFAPI1.TEF).ParamAdicFinalizacao.add('{NumeroPagamentoCupom='+IntToStr(AResp.IdPagamento)+'}'); ACBrTEFAPI1.FinalizarTransacao(); Mas o componente já tem essas duas funções para cancelar ou estornar todas as transações ACBrTEFAPI1.FinalizarTransacoesPendentes(); ACBrTEFAPI1.CancelarOuEstornarTransacoesDiretorioTrabalho; Acho que a função ACBrTEFAPI1.FinalizarTransacao() está com o comportamento errado
  10. Sim, mas digamos que a venda 1 tenha 3 pagamentos, quando o atendente tentar estornar um, o componente vai estornar todos os pagamentos da venda 1 Depois na venda 2 tem dois pagamentos e o atendente tentar estornar um pagamento o componente vai estornar os dois.
  11. No componente TEFD o documento vinculado a transação era um número aleatório gerado por FormatDateTime('hhmmss',Now), com isso todo pagamento tinha um DocumentoVinculado único. No componente TEFAPI é passado no início do pagamento o parâmetro IdentificadorTransacao(que no TEFAPIdemo é passado o Venda.NumOperacao que é sempre 1). A função de FinalizarTransacao do SiTef estorna o pagamento filtrando pelo DocumentoVinculado, no TEFD como o identificador é único ele estorna somente o pagamento enviado na função de FinalizarTransacao, mas no caso TEFAPI é o 1 para todos os pagamentos então ele estorna todos.
  12. Teria como você colocar um exemplo? pq eu não entendi como eu sinalizo que o pagamento não deve ser confirmado. Utilizando o exemplo com o componente ACBrTEFD eu faço o mesmo procedimento e só é cancela o pagamento selecionado os outros continuam pendente.
  13. No caso eu não mandei cancelar, eu mandei o comando de FinalizarTransacao ACBrTEFAPI1.FinalizarTransacao( AResp.Rede, AResp.NSU, AResp.Finalizacao, tefstsErroDiverso ); Mas também testei o comando de CancelarTransacao ACBrTEFAPI1.CancelarTransacao( AResp.NSU, AResp.CodigoAutorizacaoTransacao, AResp.DataHoraTransacaoHost, AResp.ValorTotal, AResp.Finalizacao, AResp.Rede ); O comportamento foi o seguinte... Ele cancelou a transação que eu mandei cancelar, confirmou as outras transações pendentes e imprimiu todos os comprovantes seria esse mesmo o comportamento? ou seria outro comando para estorna?
  14. Bom dia, ao excluir um pagamento de uma venda, com múltiplos pagamentos utilizando o TACBrTEFAPI . O componente está cancelando todos os pagamentos pendentes.
×
×
  • 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.

The popup will be closed in 10 segundos...