Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 3067 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

boa tarde a todos,

estou desenvolvendo minha rotida de tef com a nfce

estou usando o tef Daruma hoje pertencente a Linx

uso para isso o ACBrTEFD

nao sei se é eu que estou fazendo algo errado mas nao estava conseguindo cancelar visto que uso uma impressora nao fiscal Bematech MP4200

mas tive que alterar uma funcao do componete e ai consegui efetuar o cancelamento

segue funcao onde tive que mexer pra analize

Function TACBrTEFDCliDTEF.FazerRequisicao( Funcao : Integer;  AHeader : AnsiString = '';
  Valor : Double = 0; Documento : AnsiString = ''; QuantidadeCheques : AnsiString = '';
  PeriodicidadeCheques : AnsiString = ''; DataPrimeiroCheque : AnsiString = '';
  CarenciaPrimeiroCheque : AnsiString = '') : Integer ;
Var
  ValorStr, DataStr, HoraStr : AnsiString;
  ANow : TDateTime ;
  pValorTransacao, pNumeroCupomVenda, pNumeroControle,
    pQuantidadeCheques, pPeriodicidadeCheques, pDataPrimeiroCheque,
    pCarenciaPrimeiroCheque : AnsiString;
  SL, ArquivoResposta : TStringList;
  Voltar, Parar : Boolean;
  ItemSelecionado : integer;
begin
  if fpAguardandoResposta then
    raise Exception.Create( ACBrStr( 'Requisição anterior não concluida' ) ) ;

  if AHeader = 'CRT' then
  begin
     ItemSelecionado := -1 ;
     fOnObtemInformacao( ItemSelecionado ) ;
     if ItemSelecionado > 0 then
        Funcao := ItemSelecionado
     else
        raise EACBrTEFDErro.Create( ACBrStr( 'Tipo de cartão não informado' ) );
  end;

  if AHeader = 'ADM' then
  begin
     SL := TStringList.Create;
     try
        SL.Add('Cancelamento');
        SL.Add('Consulta de Parcelas');
        SL.Add('Reimpressão');
        SL.Add('Resumo das Vendas');
        SL.Add('Resgate de Prêmios');

        Parar := False;
        while not Parar do
        begin
           if ItemSelecionado = 30 then Exit;

           Voltar := False;
           ItemSelecionado := -1;
           OnExibeMenu( 'Selecione a operação desejada', SL, ItemSelecionado, Voltar ) ;

           if (not Voltar) then
           begin
              if (ItemSelecionado >= 0) and (ItemSelecionado < SL.Count) then
              begin
                 case ItemSelecionado of
                   0: Funcao := 6;
                   1: Funcao := 9;
                   2: Funcao := 7;
                   3: Funcao := 8;
                   4: Funcao := 11;
                 end;

                 Parar := True;
              end;
           end;
        end;
     finally
        SL.Free ;
     end ;
  end;

   Result   := -1 ;
   ANow     := Now ;
   DataStr  := FormatDateTime('YYYYMMDD', ANow );
   HoraStr  := FormatDateTime('HHNNSS', ANow );
   ValorStr := FormatFloat( '0.00', Valor );
   ValorStr := StringReplace( ValorStr, ',', '', [rfReplaceAll]) ;
   ValorStr := StringReplace( ValorStr, '.', '', [rfReplaceAll]) ;

   fDocumentosProcessados := '' ;

   GravaLog( '*** IniciaFuncaoDPOS. Modalidade: '+AHeader+
                                  ' Valor: '     +ValorStr+
                                  ' Documento: ' +Documento+
                                  ' Data: '      +DataStr+
                                  ' Hora: '      +HoraStr) ;

   pValorTransacao   := PadLeft(ValorStr, 12, '0') ;
   pNumeroCupomVenda := PadLeft(Documento, 6, '0') ;
   pNumeroControle   := HoraStr ;

   if Funcao = 1 then // Cartão de Crédito
      Result := xTransacaoCartaoCredito( PAnsiChar( pValorTransacao ),
                                         PAnsiChar( pNumeroCupomVenda ),
                                         PAnsiChar( pNumeroControle ) );
   if Funcao = 2 then // Cartão de Débito
      Result := xTransacaoCartaoDebito( PAnsiChar( pValorTransacao ),
                                        PAnsiChar( pNumeroCupomVenda ),
                                        PAnsiChar( pNumeroControle ) );
   if Funcao = 3 then // Cartão Voucher
      Result := xTransacaoCartaoVoucher( PAnsiChar( pValorTransacao ),
                                         PAnsiChar( pNumeroCupomVenda ),
                                         PAnsiChar( pNumeroControle ) );
   if Funcao = 5 then // Cheque
   begin
      pQuantidadeCheques     := '00' ;
      pPeriodicidadeCheques  := '000' ;
      pDataPrimeiroCheque    := '00000000' ;
      pCarenciaPrimeiroCheque:= '000' ;

      Result := xTransacaoCheque( PAnsiChar( pValorTransacao ),
                                  PAnsiChar( pNumeroCupomVenda ),
                                  PAnsiChar( pNumeroControle ),
                                  PAnsiChar( pQuantidadeCheques ),
                                  PAnsiChar( pPeriodicidadeCheques ),
                                  PAnsiChar( pDataPrimeiroCheque ),
                                  PAnsiChar( pCarenciaPrimeiroCheque ) );
   end;

   if Funcao = 6 then   //Volmir
   begin
      //pNumeroControle := '      ';  //Aqui tive que comentar pois dava erro "acess violation""
      Result := xTransacaoCancelamentoPagamento( PAnsiChar( pNumeroControle ) );
   end;

   if Funcao = 7 then
      Result := xTransacaoReimpressaoCupom;

   if Funcao = 8 then
      Result := xTransacaoResumoVendas( PAnsiChar( pNumeroControle ) );

   if Funcao = 9 then
      Result := xTransacaoConsultaParcelas( PAnsiChar( pNumeroControle ) );

   if Funcao = 10 then
      Result := xTransacaoCartaoFrota( PAnsiChar( pValorTransacao ),
                                       PAnsiChar( pNumeroCupomVenda ),
                                       PAnsiChar( pNumeroControle ) );
   if Funcao = 11 then
      Result := xTransacaoResgatePremio( PAnsiChar( pNumeroCupomVenda),
                                       PAnsiChar( pNumeroControle ) );

   if Result <> 0 then
      raise EACBrTEFDErro.Create( ACBrStr( 'Retorno DTEF -> ' + IntToStr(Result) ) )
   else
   if Funcao <> 11 then
    begin
      Resp.Clear;

      with TACBrTEFDRespCliDTEF( Resp ) do
      begin
         fpIDSeq := fpIDSeq + 1 ;
         if Documento = '' then
            Documento := IntToStr(fpIDSeq) ;

         ArquivoResposta := TStringList.Create;
         try
           if ((Funcao = 7) or (Funcao = 9)) then
            begin
              ArquivoResposta.LoadFromFile(ArqResp + 'ULTIMO.PRN');
              DeleteFile(ArqResp + 'ULTIMO.PRN');
              ImprimirComprovantes(ArquivoResposta);
              ApagaEVerifica( ArqBackup );
            end
           else
            begin
              ArquivoResposta.LoadFromFile(ArqResp + pNumeroControle + '.' + NumeroTerminal);

              if Funcao = 8 then
              begin
                 ImprimirComprovantes(ArquivoResposta);
                 ApagaEVerifica( ArqResp + pNumeroControle + '.' + NumeroTerminal );
              end;

              if Funcao = 6 then
              begin
                 ImprimirComprovantes(ArquivoResposta);
                 ApagaEVerifica( ArqResp + pNumeroControle + '.' + NumeroTerminal );
                 ApagaEVerifica( ArqBackup );
                 xConfirmaCartaoCredito( PAnsiChar( pNumeroControle ) );
                 xFinalizaTransacao;
              end
              else
               begin
                 MontaArquivoResposta(pNumeroControle, ArquivoResposta);

                 Conteudo.Conteudo.Text := ArquivoResposta.Text;
                 Conteudo.GravaInformacao(899,100, AHeader ) ;
                 Conteudo.GravaInformacao(899,101, IntToStr(fpIDSeq) ) ;
                 Conteudo.GravaInformacao(899,102, Documento ) ;
                 Conteudo.GravaInformacao(899,103, IntToStr(Trunc(SimpleRoundTo( Valor * 100 ,0))) );
                 Conteudo.GravaInformacao(899,104, IntToStr(Funcao) );
                 Conteudo.GravaInformacao(899,130, 'IMPRIMINDO...' ) ;

                 Resp.TipoGP := fpTipo;
               end;
            end;
         finally
           try
              ArquivoResposta.Free;  //volmir
           except  //Aqui tive que colocar um Try Except pois dava erro "acess violation""  
           end;
         end ;
      end;
    end;
end;

 

fazendo isso consegui cancelar 

lembrando que cacenlei pelo ADM => cancelamento

unit ACBrTEFDCliDTEF;

 

Editado por volmir
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3067 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

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