Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

  • Moderadores
Postado

Uma ajuda por favor. 

No ACBrTEFD evento ACBrTEFD1ComandaECF(Operacao: TACBrTEFDOperacaoECF; Resp: TACBrTEFDResp;  var RetornoECF: Integer) a primeira coisa é checar o estado atual do ECF. 

Como não uso o ACBrECF estou adaptando uma função que me retorne uma variavel do tipo TACBrECFEstado, para substituir no momento de chegar o status atual (não o status do retorno da ultima função executada). Na Bemafi32 isso é feito pela função Bematech_FI_VerificaEstadoImpressoraMFD(iACk,iST1,iST2,iST3). A implementação abaixo está correta?

Em qual dos erros abaixo poderia se encaixar os estados do ECF conf ACBrECF para Bematech?

estNaoFiscal,estNaoInicializada,estDesconhecido,estLivre,estVenda,estPagamento,estRelatorio?

estBloqueada,estRequerZ,estRequerX --> creio que estas estejam corretas. 

Já implementei todos os eventos do ACBrTEFD com a Bemafi32.dll, mas ainda ocorrem alguns erros devido ao mau tratamento do estado atual da impressora. 

 

Function  ACBr_TEF_VerificaEstadoECF: TACBrECFEstado;
var
  iStatus: Integer;
  Function Checa(Valor1,Valor2: Integer): Integer;
  begin
    Result := Valor1-Valor2;
  end;
begin
  Result  := estDesconhecido;
  iStatus := Bematech_FI_VerificaEstadoImpressoraMFD(iACK,iST1,iST2,iST3);
  If iStatus = 0 then
  begin
    Result := estNaoInicializada;
    Exit;
  end;
  If iStatus = 1 then
  begin
    if (iACK = 0) and (iST1 = 0) and (iST2 = 0) and (iST3 = 0) then
    begin
      Result := estLivre;
      Exit;
    end;
    if (iACK = 6) and (iST1 = 0) and (iST2 = 0) and (iST3 = 0) then
    begin
      Result := estLivre;
      Exit;
    end;
    if (iACK = 21) then
    begin
      Result := estNaoInicializada;
      Exit;
    end;
    if ( iST1 <> 0 ) or ( iST2 <> 0 ) or (iST3 <> 0) then
    begin
      {Analisa ST1}
      if ( iST1 > 0 )
      begin
        if iST1 >= 128 then iST1 := Checa( iST1,128 ); //Fim de Papel
        if iST1 >= 64  then iST1 := Checa( iST1, 64 ); //Pouco Papel
        if iST1 >= 32  then iST1 := Checa( iST1, 32 ); //Erro no Relogio
        if iST1 >= 16  then iST1 := Checa( iST1, 16 ); //Alíquota Não Programada
        if iST1 >=  8  then iST1 := Checa( iST1,  8 ); //Primeito Dado do Comando Não foi <ESC>
        if iST1 >=  4  then iST1 := Checa( iST1,  4 ); //Comando Inexistente
        if iST1 >=  2  then begin                      //Cupom Fiscal Aberto
                            iST1 := Checa( iST1,  2 );
                            Result := estVenda;
                            end;
        if iST1 >=  1  then iST1 := Checa( iST1,  1 );   //Numero de Parametros Inválido
      end;
      {Analisa ST2}
      if ( iST2 > 0 ) then
      begin
        if iST2 >= 128 then iST2 := Checa( iST2,128 ); //Tipo de Parametro de Comando Inválido
        if iST2 >=  64 then iST2 := Checa( iST2, 64 ); //Memória Fiscal Lotada
        if iST2 >=  32 then iST2 := Checa( iST2, 32 ); //Erro na RAM CMOS Não Volátil
        if iST2 >=  16 then iST2 := Checa( iST2, 16 ); //Alíquota Não Programada
        if iST2 >=   8 then iST2 := Checa( iST2,  8 ); //Capacidade de Alíquotas Programáveis Lotada
        if iST2 >=   4 then iST2 := Checa( iST2,  4 ); //Cancelamento Não Permitido
        if iST2 >=   2 then iST2 := Checa( iST2,  2 ); //CNPJ/INSCRICAO ESTADUAL do Proprietário Não Programados Na Impressora Fiscal
        if iST2 >=   1 then iST2 := Checa( iST2,  1 ); //Comando não executado
      end;
      {Analisa ST3 se a impressora for MFD e o Retorno Estendido estiver habilitado}
      If ( iST3 > 0 ) then
      begin
        if iST3 >= 218 then iST3 := Checa( iST3,218 );  //Cancelamento de acréscimo/desconto não permitido');
        if iST3 >= 217 then iST3 := Checa( iST3,217 );  //Detectada Abertura do EQUIPAMENTO');
        if iST3 >= 215 then iST3 := Checa( iST3,215 );  //Usuário já Programado');
        if iST3 >= 214 then iST3 := Checa( iST3,214 );  //Intervalo Invalido');
        if iST3 >= 213 then iST3 := Checa( iST3,213 );  //CRC DO Cliche Grafico Diferente do Informado');
        if iST3 >= 212 then iST3 := Checa( iST3,212 );  //Cliche Grafico Não Disponível Para Confirmação');
        if iST3 >= 211 then iST3 := Checa( iST3,211 );  //Espaço Para Armazenamento do Cliche Esgotado');
        if iST3 >= 210 then iST3 := Checa( iST3,210 );  //Retorno Pacote Cliche Fora da Sequencia');
        if iST3 >= 209 then iST3 := Checa( iST3,209 );  //Aliquota DE ISS Não Permitida Sem INSCRIÇÃO MUNICIPAL');
        if iST3 >= 208 then iST3 := Checa( iST3,208 );  //Data de embarque anterior a data de emissão');
        if iST3 >= 207 then iST3 := Checa( iST3,207 );  //Todas as alíquotas com a mesma vinculação não permitido');
        if iST3 >= 206 then iST3 := Checa( iST3,206 );  //Posição reservada para iss');
        if iST3 >= 205 then iST3 := Checa( iST3,205 );  //Posição Reservada Para ICMS');
        if iST3 >= 204 then iST3 := Checa( iST3,204 );  //Casas Decimais do Unitário Maior do que o Permitida');
        if iST3 >= 203 then iST3 := Checa( iST3,203 );  //Casas Decimais Em Quantidade Maior do que a Permitida');
        if iST3 >= 202 then iST3 := Checa( iST3,202 );  //Identificação do Consumidor Não Permitida Para Sangria Ou Suprimento');
        if iST3 >= 201 then iST3 := Checa( iST3,201 );  //Não permite cadastrar usuários diferentes na mesma mfd');
        if iST3 >= 200 then iST3 := Checa( iST3,200 );  //Casas decimais devem ser programadas com 2 ou 3');
        if iST3 >= 199 then iST3 := Checa( iST3,199 );  //Programação da moeda com espaços em braco não permitido');
        if iST3 >= 198 then iST3 := Checa( iST3,198 );  //Valor total do item excede 11 dígitos');
        if iST3 >= 197 then iST3 := Checa( iST3,197 );  //Configuração permitida somente pela porta dos fisco');
        if iST3 >= 196 then iST3 := Checa( iST3,196 );  //Parâmetro baud rate inválido');
        if iST3 >= 195 then iST3 := Checa( iST3,195 );  //Programação de alíquota com valor nulo não permitido');
        if iST3 >= 194 then iST3 := Checa( iST3,194 );  //Equipamento não possui leitor de cheque');
        if iST3 >= 193 then iST3 := Checa( iST3,193 );  //Programação de espaços entre cupons menor que o mínimo permitido');
        if iST3 >= 192 then iST3 := Checa( iST3,192 );  //Overflow na capacidade de texto do comprovante de crédito ou débito');
        if iST3 >= 191 then iST3 := Checa( iST3,191 );  //Timeout na inserção do cheque');
        if iST3 >= 190 then iST3 := Checa( iST3,190 );  //Impressão automática no verso não permitido neste equipamento');
        if iST3 >= 189 then iST3 := Checa( iST3,189 );  //Texto opcional do cheque excedeu o máximo permitido');
        if iST3 >= 188 then iST3 := Checa( iST3,188 );  //Cliche já impresso');
        if iST3 >= 187 then iST3 := Checa( iST3,187 );  //Cancelamento de acréscimo ou desconto em item não permitido');
        if iST3 >= 186 then iST3 := Checa( iST3,186 );  //Acréscimo ou desconto em item não permitido');
        if iST3 >= 185 then iST3 := Checa( iST3,185 );  //Mais que duas alíquotas diferentes no bilhete de passagem não permitido');
        if iST3 >= 184 then iST3 := Checa( iST3,184 );  //Número de ítem nulo não permitido');
        if iST3 >= 183 then iST3 := Checa( iST3,183 );  //Número máximo de ítens atingido');
        if iST3 >= 182 then iST3 := Checa( iST3,182 );  //Cancelamento desconto em ítem não permitido');
        if iST3 >= 181 then iST3 := Checa( iST3,181 );  //Cancelamento acréscimo em ítem não permitido');
        if iST3 >= 180 then iST3 := Checa( iST3,180 );  //Cheque sem localidade não permitido');
        if iST3 >= 179 then iST3 := Checa( iST3,179 );  //Valor do cheque inválido');
        if iST3 >= 178 then iST3 := Checa( iST3,178 );  //Valor do cheque nulo não permitido');
        if iST3 >= 177 then iST3 := Checa( iST3,177 );  //Data inválida');
        if iST3 >= 176 then iST3 := Checa( iST3,176 );  //Cancelamento de acréscimo ou desconto em subtotal não permitido');
        if iST3 >= 175 then iST3 := Checa( iST3,175 );  //Desconto nulo não permitido');
        if iST3 >= 174 then iST3 := Checa( iST3,174 );  //Acréscimo nulo não permitido');
        if iST3 >= 173 then iST3 := Checa( iST3,173 );  //Desconto em subtotal já efetuado');
        if iST3 >= 172 then iST3 := Checa( iST3,172 );  //Acréscimo em subtotal já efetuado');
        if iST3 >= 171 then iST3 := Checa( iST3,171 );  //Cupom não subtotalizado');
        if iST3 >= 170 then begin                       //Cf já subtotalizado');
                            iST3 := Checa( iST3,170 );
                            Result := estPagamento;
                            end;
        if iST3 >= 169 then iST3 := Checa( iST3,169 );  //Número de impressões da fita detalhe nesta intervenção técnica esgotado');
        if iST3 >= 168 then iST3 := Checa( iST3,168 );  //Não permitido programação uf com espaços em branco');
        if iST3 >= 167 then iST3 := Checa( iST3,167 );  //Não permitido programaçao cnpj ie com espaços em branco');
        if iST3 >= 166 then iST3 := Checa( iST3,166 );  //Aguardando impressão de cheque ou autenticação');
        if iST3 >= 165 then iST3 := Checa( iST3,165 );  //Descrição do primeiro ítem do bilhete de passagem diferente de tarifa');
        if iST3 >= 164 then iST3 := Checa( iST3,164 );  //Tipo de transporte incompatível com uf destino');
        if iST3 >= 163 then iST3 := Checa( iST3,163 );  //UF destino inválida');
        if iST3 >= 162 then iST3 := Checa( iST3,162 );  //Indice da forma de pagamento nulo não permitido');
        if iST3 >= 161 then iST3 := Checa( iST3,161 );  //Sangria ou suprimento devem ser únicos no cnf');
        if iST3 >= 160 then iST3 := Checa( iST3,160 );  //Não encontrado dados na mfd');
        if iST3 >= 159 then iST3 := Checa( iST3,159 );  //Timeout na inicialização da nova mf');
        if iST3 >= 158 then iST3 := Checa( iST3,158 );  //Senha cnpj inválida');
        if iST3 >= 157 then iST3 := Checa( iST3,157 );  //It não permitida mf reservada para rz');
        if iST3 >= 156 then iST3 := Checa( iST3,156 );  //Acerto de horário de verão só imediatamente após rz');
        if iST3 >= 155 then iST3 := Checa( iST3,155 );  //Descrição forma de pagamento igual já programada');
        if iST3 >= 154 then iST3 := Checa( iST3,154 );  //Estorno de forma de pagamento não permitido');
        if iST3 >= 153 then iST3 := Checa( iST3,153 );  //Dados do proprietário iguais ao atual');
        if iST3 >= 152 then iST3 := Checa( iST3,152 );  //Estorno de cdc não permitido');
        if iST3 >= 151 then iST3 := Checa( iST3,151 );  //Endereço em branco');
        if iST3 >= 150 then iST3 := Checa( iST3,150 );  //Nome de fantasia em branco');
        if iST3 >= 149 then iST3 := Checa( iST3,149 );  //Razão social em branco');
        if iST3 >= 148 then begin                       //Valor forma de pagamento maior que máximo permitido');
                            iST3 := Checa( iST3,148 );
                            Result := estPagamento;
                            end;
        if iST3 >= 147 then iST3 := Checa( iST3,147 );  //Aguardando acerto do relógio ou desbloqueio pelo teclado');
        if iST3 >= 146 then iST3 := Checa( iST3,146 );  //MFD já inicializada para outra mf');
        if iST3 >= 145 then iST3 := Checa( iST3,145 );  //Aguardando acerto de relógio');
        if iST3 >= 144 then iST3 := Checa( iST3,144 );  //Comando não permitido no modo inicialização');
        if iST3 >= 143 then iST3 := Checa( iST3,143 );  //Dados da última rz corrompidos');
        if iST3 >= 142 then iST3 := Checa( iST3,142 );  //Não permitido alterar sem intervenção técnica');
        if iST3 >= 141 then iST3 := Checa( iST3,141 );  //Primeiro dado diferente de esc ou 1c');
        if iST3 >= 140 then iST3 := Checa( iST3,140 );  //Usando mfd de outro ecf');
        if iST3 >= 139 then iST3 := Checa( iST3,139 );  //Sobreposição de texto no ano');
        if iST3 >= 138 then iST3 := Checa( iST3,138 );  //Sobreposição de texto no mês');
        if iST3 >= 137 then iST3 := Checa( iST3,137 );  //Sobreposição de texto no dia');
        if iST3 >= 136 then iST3 := Checa( iST3,136 );  //Sobreposição de texto no opcional');
        if iST3 >= 135 then iST3 := Checa( iST3,135 );  //Sobreposição de texto na localidade');
        if iST3 >= 134 then iST3 := Checa( iST3,134 );  //Sobreposição de texto no favorecido');
        if iST3 >= 133 then iST3 := Checa( iST3,133 );  //Sobreposição de texto no extenso');
        if iST3 >= 132 then iST3 := Checa( iST3,132 );  //Sobreposição de texto no valor');
        if iST3 >= 131 then iST3 := Checa( iST3,131 );  //Sobreposição de texto');
        if iST3 >= 130 then iST3 := Checa( iST3,130 );  //Coordenada inválida');
        if iST3 >= 129 then iST3 := Checa( iST3,129 );  //Mês inválido');
        if iST3 >= 128 then iST3 := Checa( iST3,128 );  //Timeout na leitura do cheque');
        if iST3 >= 127 then iST3 := Checa( iST3,127 );  //Estouro de capacidade no cheque');
        if iST3 >= 126 then iST3 := Checa( iST3,126 );  //Versão já gravada na memória fiscal');
        if iST3 >= 125 then iST3 := Checa( iST3,125 );  //Caracter repetido na codificação do gt');
        if iST3 >= 124 then iST3 := Checa( iST3,124 );  //Aguardando gravação na memória fiscal');
        if iST3 >= 123 then iST3 := Checa( iST3,123 );  //Erro na memória fiscal chamar credenciado');
        if iST3 >= 122 then iST3 := Checa( iST3,122 );  //Desconto em ítem já efetuado');
        if iST3 >= 121 then iST3 := Checa( iST3,121 );  //Acréscimo em ítem já efetuado');
        if iST3 >= 120 then iST3 := Checa( iST3,120 );  //Desconto em iss não permitido');
        if iST3 >= 119 then iST3 := Checa( iST3,119 );  //Desconto maior que valor do ítem');
        if iST3 >= 118 then iST3 := Checa( iST3,118 );  //Acréscimo maior que valor do ítem');
        if iST3 >= 117 then iST3 := Checa( iST3,117 );  //Descricao sem caracter alfabético não permitido');
        if iST3 >= 116 then iST3 := Checa( iST3,116 );  //Código com espaços não permitido');
        if iST3 >= 115 then iST3 := Checa( iST3,115 );  //Item não existe ou já cancelado');
        if iST3 >= 114 then iST3 := Checa( iST3,114 );  //Item anterior aos trezentos últimos');
        if iST3 >= 113 then iST3 := Checa( iST3,113 );  //Parâmetro de acréscimo ou desconto inválido');
        if iST3 >= 112 then iST3 := Checa( iST3,112 );  //Data e hora anteriores ao último doc armazenado');
        if iST3 >= 111 then iST3 := Checa( iST3,111 );  //Nome do totalizador em branco não permitido');
        if iST3 >= 110 then iST3 := Checa( iST3,110 );  //Erro na inicialização da mf');
        if iST3 >= 109 then iST3 := Checa( iST3,109 );  //Caracter numérico na codificação gt não permitido');
        if iST3 >= 108 then iST3 := Checa( iST3,108 );  //Estorno maior que forma pagamento');
        if iST3 >= 107 then iST3 := Checa( iST3,107 );  //Forma de pagamento destino não programada');
        if iST3 >= 106 then iST3 := Checa( iST3,106 );  //Forma de pagamento origem não programada');
        if iST3 >= 105 then iST3 := Checa( iST3,105 );  //Número do relatório gerencial inválido');
        if iST3 >= 104 then iST3 := Checa( iST3,104 );  //Acréscimo ou desconto em sangria ou suprimento não permitido');
        if iST3 >= 103 then iST3 := Checa( iST3,103 );  //Parâmetro de acréscimo ou desconto inválido');
        if iST3 >= 102 then iST3 := Checa( iST3,102 );  //Número do totalizador não fiscal inválido');
        if iST3 >= 101 then iST3 := Checa( iST3,101 );  //Sem relatório gerencial ou comprovante de crédito ou débito aberto');
        if iST3 >= 100 then iST3 := Checa( iST3,100 );  //Data e hora inválida');
        if iST3 >=  99 then iST3 := Checa( iST3, 99 );  //Tipo de transporte inválido');
        if iST3 >=  98 then iST3 := Checa( iST3, 98 );  //Parâmetro não ascii numérico em campo ascii numérico');
        if iST3 >=  97 then iST3 := Checa( iST3, 97 );  //Parâmetro não ascii em campo ascii');
        if iST3 >=  96 then iST3 := Checa( iST3, 96 );  //Cupom não fiscal fechado');
        if iST3 >=  95 then iST3 := Checa( iST3, 95 );  //Comando não executado em impressora de cupom fiscal');
        if iST3 >=  94 then iST3 := Checa( iST3, 94 );  //Comando não executado em impressora bilhete de passagem');
        if iST3 >=  93 then iST3 := Checa( iST3, 93 );  //Timeout na validação');
        if iST3 >=  92 then iST3 := Checa( iST3, 92 );  //Autenticação não permitida');
        if iST3 >=  91 then iST3 := Checa( iST3, 91 );  //Acréscimo e desconto maior que valor do ítem');
        if iST3 >=  90 then iST3 := Checa( iST3, 90 );  //Forma de pagamento com valor nulo não permitido');
        if iST3 >=  89 then iST3 := Checa( iST3, 89 );  //Aguardando rz para entrada em intervenção técnica');
        if iST3 >=  88 then iST3 := Checa( iST3, 88 );  //Redução não permitida em intervenção técnica');
        if iST3 >=  87 then iST3 := Checa( iST3, 87 );  //Forma de pagamento diferente do total da sangria');
        if iST3 >=  86 then iST3 := Checa( iST3, 86 );  //Estorno de valor nulo');
        if iST3 >=  85 then begin                       //Venda com valor nulo');
                            iST3 := Checa( iST3, 85 );
                            Result := estVenda;
                            end;
        if iST3 >=  84 then iST3 := Checa( iST3, 84 );  //Texto com sequência de esc incompleta');
        if iST3 >=  83 then iST3 := Checa( iST3, 83 );  //Texto com sequência de esc inválida');
        if iST3 >=  82 then begin                       //Comprovante de crédito ou débito aberto');
                            iST3 := Checa( iST3, 82 );
                            Result := estNaoFiscal;
                            end;
        if iST3 >=  81 then iST3 := Checa( iST3, 81 );  //Parcelamento fora da sequência');
        if iST3 >=  80 then iST3 := Checa( iST3, 80 );  //Segunda via do comprovante de crédito ou débito não permitido');
        if iST3 >=  79 then iST3 := Checa( iST3, 79 );  //Extrapolado número de repetições permitidas');
        if iST3 >=  78 then iST3 := Checa( iST3, 78 );  //Descrição igual a default não permitido');
        if iST3 >=  77 then iST3 := Checa( iST3, 77 );  //Memória fiscal sem espaço para gravar versao do sb');
        if iST3 >=  76 then iST3 := Checa( iST3, 76 );  //Memória fiscal sem espaço para gravar leituras da mfd');
        if iST3 >=  75 then iST3 := Checa( iST3, 75 );  //Dados do rtc anteriores ao último doc armazenado');
        if iST3 >=  74 then iST3 := Checa( iST3, 74 );  //Erro de gravação na mfd');
        if iST3 >=  73 then iST3 := Checa( iST3, 73 );  //Erro de gravação na mf');
        if iST3 >=  72 then iST3 := Checa( iST3, 72 );  //Memória fiscal lotada para novo cartucho');
        if iST3 >=  71 then iST3 := Checa( iST3, 71 );  //Acréscimo ou desconto maior que total não fiscal');
        if iST3 >=  70 then iST3 := Checa( iST3, 70 );  //Recebimento não fiscal nulo não permitido');
        if iST3 >=  69 then iST3 := Checa( iST3, 69 );  //Desconto maior que total vendido em icms');
        if iST3 >=  68 then iST3 := Checa( iST3, 68 );  //Cupom adicional não permitido');
        if iST3 >=  67 then iST3 := Checa( iST3, 67 );  //ECF ou LOJA igual a zero');
        if iST3 >=  66 then begin                       //Aguardando rz');
                            iST3 := Checa( iST3, 66 );
                            Result := estRequerZ;
                            end;
        if iST3 >=  65 then iST3 := Checa( iST3, 65 );  //Aguardando primeiro proprietário');
        if iST3 >=  64 then begin                       //Forma de pagamento aberta');
                            iST3 := Checa( iST3, 64 );
                            Result := estPagamento;
                            end;
        if iST3 >=  63 then begin                      //Bloqueio por rz');
                            iST3 := Checa( iST3, 63 );
                            Result := estBloqueada;
                            end;
        if iST3 >=  62 then iST3 := Checa( iST3, 62 );  //Já houve movimento no dia');
        if iST3 >=  61 then iST3 := Checa( iST3, 61 );  //Erro na memória de trabalho');
        if iST3 >=  60 then iST3 := Checa( iST3, 60 );  //Em intervenção técnica');
        if iST3 >=  59 then iST3 := Checa( iST3, 59 );  //Fora de intervenção técnica');
        if iST3 >=  58 then iST3 := Checa( iST3, 58 );  //Data anterior ao último documento emitido');
        if iST3 >=  57 then iST3 := Checa( iST3, 57 );  //Dados do rtc incorretos');
        if iST3 >=  56 then iST3 := Checa( iST3, 56 );  //Erro de alocação');
        if iST3 >=  55 then iST3 := Checa( iST3, 55 );  //Contador de redução z final inválido');
        if iST3 >=  54 then iST3 := Checa( iST3, 54 );  //Contador de redução z inicial inválido');
        if iST3 >=  53 then iST3 := Checa( iST3, 53 );  //Data final inválida');
        if iST3 >=  52 then iST3 := Checa( iST3, 52 );  //Data inicial inválida');
        if iST3 >=  51 then iST3 := Checa( iST3, 51 );  //Memória fiscal lotada');
        if iST3 >=  50 then iST3 := Checa( iST3, 50 );  //Memória fiscal sem número de série da mfd');
        if iST3 >=  49 then iST3 := Checa( iST3, 49 );  //Memória fiscal desconectada');
        if iST3 >=  48 then begin                       //Cupom não fiscal aberto');
                            iST3 := Checa( iST3, 48 );
                            Result := estNaoFiscal;
                            end;
        if iST3 >=  47 then iST3 := Checa( iST3, 47 );  //MFD lotada');
        if iST3 >=  46 then iST3 := Checa( iST3, 46 );  //MFD já inicializada');
        if iST3 >=  45 then iST3 := Checa( iST3, 45 );  //MFD sem número de série');
        if iST3 >=  44 then iST3 := Checa( iST3, 44 );  //MFD ausente');
        if iST3 >=  43 then iST3 := Checa( iST3, 43 );  //MFD não inicializada');
        if iST3 >=  42 then iST3 := Checa( iST3, 42 );  //Relatório gerencial não permitido');
        if iST3 >=  41 then iST3 := Checa( iST3, 41 );  //Relatório gerencial não programado');
        if iST3 >=  40 then iST3 := Checa( iST3, 40 );  //Relatório gerencial já programado');
        if iST3 >=  39 then iST3 := Checa( iST3, 39 );  //Não permitido mais de uma sangria ou suprimento');
        if iST3 >=  38 then iST3 := Checa( iST3, 38 );  //Meio de pagamento diferente do total do recebimento');
        if iST3 >=  37 then iST3 := Checa( iST3, 37 );  //Meio de pagamento não indicado');
        if iST3 >=  36 then iST3 := Checa( iST3, 36 );  //Acréscimo e desconto maior que total cnf');
        if iST3 >=  35 then begin                       //Cupom não fiscal sem ítem vendido');
                            iST3 := Checa( iST3, 35 );
                            Result := estNaoFiscal;
                            end;
        if iST3 >=  34 then iST3 := Checa( iST3, 34 );  //Totalizador não fiscal não programado');
        if iST3 >=  33 then begin                       //Comprovante não fiscal já aberto');
                            iST3 := Checa( iST3, 34 );
                            Result := estNaoFiscal;
                            end;
        if iST3 >=  32 then iST3 := Checa( iST3, 32 );  //Reimpressão não permitida');
        if iST3 >=  31 then begin                       //Comprovante de crédito ou débito já aberto');
                            iST3 := Checa( iST3, 31 );
                            Result := estNaoFiscal;
                            end;
        if iST3 >=  30 then iST3 := Checa( iST3, 30 );  //comprovante não fiscal não aberto
        if iST3 >=  29 then iST3 := Checa( iST3, 29 );  //Meio de pagamento não permite tef');
        if iST3 >=  28 then iST3 := Checa( iST3, 28 );  //Comprovante de crédito ou débito não permitido ou já emitido');
        if iST3 >=  27 then iST3 := Checa( iST3, 27 );  //Cancelamento já efetuado');
        if iST3 >=  26 then iST3 := Checa( iST3, 26 );  //Cancelamento não imediatamente após');
        if iST3 >=  25 then begin                       //Cupom fiscal aberto e sem ítem');
                            iST3 := Checa( iST3, 25 );
                            Result := estVenda;
                            end;
        if iST3 >=  24 then iST3 := Checa( iST3, 24 );  //Comando maior que 7fH (127D)');
        if iST3 >=  23 then iST3 := Checa( iST3, 23 );  //Cupom não totalizado');
        if iST3 >=  22 then begin                       //Formas de pagamento encerradas');
                            iST3 := Checa( iST3, 22 );
                            Result := estPagamento;
                            end;
        if iST3 >=  21 then iST3 := Checa( iST3, 21 );  //Indice maior que número de forma de pagamento');
        if iST3 >=  20 then iST3 := Checa( iST3, 20 );  //Forma de pagamento não programada');
        if iST3 >=  19 then iST3 := Checa( iST3, 19 );  //Sem espaço para novas formas de pagamento');
        if iST3 >=  18 then iST3 := Checa( iST3, 18 );  //Comando não efetivado');
        if iST3 >=  17 then begin                       //Cupom fiscal sem item vendido');
                            iST3 := Checa( iST3, 17 );
                            Result := estVenda;
                            end;
        if iST3 >=  16 then iST3 := Checa( iST3, 16 );  //Acréscimo ou desconto maior que o total do cupom fiscal');
        if iST3 >=  15 then iST3 := Checa( iST3, 15 );  //Terminador de string faltando');
        if iST3 >=  14 then iST3 := Checa( iST3, 14 );  //Alíquota não programada');
        if iST3 >=  13 then iST3 := Checa( iST3, 13 );  //Impressora off line');
        if iST3 >=  12 then iST3 := Checa( iST3, 12 );  //Impressora com cabeça levantada');
        if iST3 >=  11 then iST3 := Checa( iST3, 11 );  //Impressora sem papel');
        if iST3 >=  10 then iST3 := Checa( iST3, 10 );  //Impressora em erro');
        if iST3 >=   9 then iST3 := Checa( iST3,  9 );  //ECF ocupado');
        if iST3 >=   8 then begin                       //Cupom fiscal fechado');
                            iST3 := Checa( iST3,  8 );
                            Result := estLivre;
                            end;
        if iST3 >=   7 then begin                       //Cupom fiscal aberto');
                            iST3 := Checa( iST3,  7 );
                            Result := estVenda;
                            end;
        if iST3 >=   6 then iST3 := Checa( iST3,  6 );  //Totalizador não fiscal já programado');
        if iST3 >=   5 then iST3 := Checa( iST3,  5 );  //Todas alíquotas já programadas');
        if iST3 >=   4 then iST3 := Checa( iST3,  4 );  //Tipo de parâmetro inválido');
        if iST3 >=   3 then iST3 := Checa( iST3,  3 );  //Número de parâmetro inválido');
        if iST3 >=   2 then iST3 := Checa( iST3,  2 );  //Erro desconhecido');
        if iST3 >=   1 then iST3 := Checa( iST3,  1 );  //Comando inválido');
      end;
    end;
  end;
end;

 

  • Fundadores
Postado

Acho que falta algo... Exemplo: Para detectar se está com Redução Z pendente (dia seguinte) ou se está bloqueado porque a Red.Z já foi emitida no dia, você precisará ler outros registradores...

Os Fontes de ACBrECFBematech.pas, podem lhe servir de inspiração...

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

  • Consultores
Postado

Verdade. Dê uma olhada na função específica que retorna o estado do ECF.

Talvez nem seja necessário verificar a unit que trata dos ECF no modelo mais novos, como a Bematech 4200 TH-FI.

[]'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.
  • Moderadores
Postado

A implementação do ACBrTEFD com a Bemafi32.dll não está dando certo. Falta pouco, porém não consigo encontrar o problema:

1-Venda dos itens ok

2-Subtotalização com desconto/acrescimo ok

3-Transação TEF ok

4-Impressão da forma de pagamento cartão ok

5- Finalização do cupom -----> aqui deveria finalizar o cupom pois o valor da forma de pagamento é igual ao valor liquido do cupom, mas dá erro de memória. Debugando, percebo que o componente volta para tentar reenviar de novo a forma de pagamento, entrando novamente na operação opeImprimePagamento. 

se eu colocar a função da bemafi32 após o item 4 para finalizar o cupom dá erro também, porque o passo 4 que está incorreto.

Substituindo os passos 1,2,3,4 por funções da bemafi32 (deixando de usar o ACBrTEFD nesses momentos) e acrescentando o passo 5 fechando o cupom com a função da Bemafi32 fica correto. Porém fazendo isso, perco os recursos do ACBrTEFD para outros tratamentos. 

Confesso que não estou conseguindo usar o ACBrTEFD sem o ACBrECF, embora pense que falta pouco para corrigir. Todo o resto funciona: verificação do GP Ativo, ADM, reimpressão de comprovante, mensagem de impressão de transação pendente, cancelamento de transação TEF.

Acho que o jeito é fazer um novo aplicativo PAF-ECF usando ACBrECF+ACBrTEFD, o que vai me tomar um tempo precioso. Sem falar que o ACBrECF tem problemas com a usb da bematech e o conversor usb->serial que a bematech disponibilizou dá n erros até que se consiga fazer funcionar. 

segue anexo o log do processo da ultima tentativa de transação que fizCliSiTef.log

  • Fundadores
Postado
4 horas atrás, Gr@c@ disse:

5- Finalização do cupom -----> aqui deveria finalizar o cupom pois o valor da forma de pagamento é igual ao valor liquido do cupom, mas dá erro de memória. Debugando, percebo que o componente volta para tentar reenviar de novo a forma de pagamento, entrando novamente na operação opeImprimePagamento.

Pode ser algum estado de ECF, errado que você está retornando ao ACBrTEFD

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

  • Moderadores
Postado (editado)

qual deve ser o EstadoECF após a impressão da forma de pagamento única, para poder finalizar o cupom e em seguida o comprovante do TEF? 'P','V','L','O' ?

Editado por Gr@c@
  • Fundadores
Postado

Ele continuará em "P - Pagamento", pois essa fase compreende desde após a SubTotalização, até o Fechamento do Cupom... Após o Fechamento ele passará para "L - Livre"

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

  • Moderadores
Postado
Em 18/11/2016 at 18:28, Daniel Simoes disse:

Ele continuará em "P - Pagamento", pois essa fase compreende desde após a SubTotalização, até o Fechamento do Cupom... Após o Fechamento ele passará para "L - Livre"

Executando o ACBrTEFD que usa o ACBrECF, também está parando até o ponto que o meu aplicativo que usa Bemafi32.dll. Ou seja, abro cupom, realizo venda de itens, subtotaliza cupom, envio forma de pagamento CRT, Transação OK, a forma de pagamento cartão é impressa no ECF. Mas desse ponto, não finaliza o cupom.  Será que existe algum bug entre o ACBrTEFD e a impressora MP 3000 TH FI? 

Queria testar o demo do Lazarus, mas não tenho o exe. Teria como disponibilizar ele no svn? 

  • Consultores
Postado

 

4 horas atrás, Gr@c@ disse:

Mas desse ponto, não finaliza o cupom.  Será que existe algum bug entre o ACBrTEFD e a impressora MP 3000 TH FI? 

Dificilmente é por causa da MP-3000 TH FI. Conseguiu identificar o porque não é finalizado o cupom?

 

[]'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.
  • Este tópico foi criado há 2916 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.