Jump to content

chamada diadoacbr

Assista tectoy.png

nfce com tef


  • Este tópico foi criado há 2430 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;

 

Edited by volmir
Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.