Ir para conteúdo
  • Cadastre-se

dev botao

Z PENDENTE NA IF BEMATECH


Ver Solução Respondido por Miguel Franco Galego,
  • Este tópico foi criado há 2986 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Alguem pode me ajudar a indentificar quando a "Z" esta pendente na IF da Bematech. Estou utilizando o cadigo abaixo mas não esta funcionando

ACK := 0;

ST1 := 0;

ST2 := 0;

Flag := 0;

dmff_Flags_Fiscals_ECF := [];

dmin_Retorno := Bematech_FI_VerificaEstadoImpressora(ACK, ST1, ST2);

// JA HOUVE REDUÇAO Z NO DIA

If Flag >= 8 Then

begin

Flag := Flag - 8;

Result := True;

end

else

begin

Result := False;

end;

  • Moderadores
Postado

Utilize a propriedade ACBrECF.Estado ele vai retornar "estRequerZ" quando for Z pendente.

TACBrECFEstado = (estNaoInicializada, { Porta Serial ainda nao foi aberta }
estDesconhecido, {Porta aberta, mas estado ainda nao definido}
estLivre, { Impressora Livre, sem nenhum cupom aberto,
pronta para nova venda, Reducao Z e Leitura X ok,
pode ou nao já ter ocorrido 1ª venda no dia...}
estVenda, { Cupom de Venda Aberto com ou sem venda do 1º Item}
estPagamento, { Iniciado Fechamento de Cupom com Formas Pagto
pode ou nao ter efetuado o 1º pagto. Nao pode
mais vender itens, ou alterar Subtotal}
estRelatorio, { Imprimindo Cupom Fiscal Vinculado ou
Relatorio Gerencial }
estBloqueada, { Reduçao Z já emitida, bloqueada até as 00:00 }
estRequerZ, {Reducao Z dia anterior nao emitida. Emita agora } estRequerX, {Esta impressora requer Leitura X todo inicio de
dia. Imprima uma Leitura X para poder vender}
estNaoFiscal { Comprovante Nao Fiscal Aberto }
) ;[/code]

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Postado

Regys, obrigado pela resposta, mas ainda não estou utilizando o ACBr para ECF, gostaria de saber como realizar este procedimento utilizando a Dll da Bematech.

  • 6 meses depois ...
  • 4 meses depois ...
Postado (editado)

Estava com o mesmo problema, então fiz o seguinte codigo, esta em ruby, não sei se lhe ajuda:

 

 

#1   - DT_RZ=0 & DT_MOV=H            => NÃO PENDENTE
#2   - DT_RZ=A & DT_MOV=A            => PENDENTE

#3    - DT_RZ=H & DT_MOV=0            => BLOQUEADO
#4.1 - DT_RZ=0 & DT_MOV=0 & DT_URZ=A => DESBLOQUEADO
#4.2 - DT_RZ=0 & DT_MOV=0 & DT_URZ=H => BLOQUEADO

#*A = data anterior

#*H = Hoje       #data atual

#*0 = '000000' #nulo

 

def self.data_movimento
    data_pointer = FFI::MemoryPointer.new 6
    ECF::Bematech::FFI.Bematech_FI_DataMovimento(data_pointer)
    data = data_pointer.read_string
    data_pointer.free

    data.dup.insert(-3, "20").to_dateformat
  end

  def self.data_movimento_ultima_reducao_z
    data_pointer = FFI::MemoryPointer.new 6
    ECF::Bematech::FFI.Bematech_FI_DataMovimentoUltimaReducaoMFD(data_pointer)
    data = data_pointer.read_string
    data_pointer.free

    data.dup.insert(-3, "20").to_dateformat
  end

  def self.data_hora_ultima_reducao
    data_pointer = FFI::MemoryPointer.new 6
    hora_pointer = FFI::MemoryPointer.new 6
    ECF::Bematech::FFI.Bematech_FI_DataHoraReducao(data_pointer, hora_pointer)
    data = data_pointer.read_string
    data_pointer.free
    hora = hora_pointer.read_string
    hora_pointer.free
    {:data=> data.insert(-3, "20").to_dateformat, :hora => hora}

  end

 

  def self.reducao_z_pendente?
    puts 'verificando reducao z...'
    data_movimento = self.data_movimento
    data_reducao   = self.data_movimento_ultima_reducao_z
    data_hora      = self.data_hora_ultima_reducao
    puts "data_mov:#{data_movimento}; mov_reducao:#{data_reducao}; ult_reducao: #{data_hora}"
    if !data_reducao.nil? and !data_movimento.nil?
      if data_reducao.to_date < Time.now.to_date and data_movimento.to_date < Time.now.to_date
        puts "Redução Z pendente!"
        return true
      end
    end
    puts "Sem Pendencia"
    false
  end

Editado por John Tadeu
Postado

1   - DT_RZ=0 & DT_MOV=H            => NÃO PENDENTE
2   - DT_RZ=A & DT_MOV=A            => PENDENTE

3    - DT_RZ=H & DT_MOV=0            => BLOQUEADO
4.1 - DT_RZ=0 & DT_MOV=0 & DT_URZ=A => DESBLOQUEADO
4.2 - DT_RZ=0 & DT_MOV=0 & DT_URZ=H => BLOQUEADO

*A = data anterior

*H = Hoje       #data atual

*0 = '000000' #nulo

  • 2 anos depois...
  • Membros Pro
Postado

Sei que o topico já tem um bom tempo, mas a solução para quem não usa o ACBr é fazer assim :

      

         Aux := '1';
         // abilitar o retono estendido da bematech

          Ret.RetImp := Bematech_FI_HabilitaDesabilitaRetornoEstendidoMFD( pAnsichar(Aux) );

         // enviar algum comando fiscal para saber o retorno que virá no iST3
          Ret.RetImp := Bematech_FI_TerminaFechamentoCupom('ver pendente');
          iACK := 0; iST1 := 0; iST2 := 0; iST3 := 0;
          Ret.RetImp := Bematech_FI_RetornoImpressoraMFD( iACK, iST1, iST2, iST3 );

         // tem muitos outros estatus que podem ser verficados, como Fim de Papel, Tampa Aberta, Ect 

         if iST3 = 66 then
          BEGIN
            Texto   := 'RZ Pendente' ;
          END;

  • 1 ano depois...
  • Solution
Postado

depois de muitas tentativas, segue um exemplo de como verificar o status da redução z para uso da ecf bematech:

       se (dataUltimaReducao = dataImpressora)

              reducao_Z_bloqueada (quando efetuado reducao Z no final do dia depois de efetuado venda no mesmo dia)

       senao (dataMovimento < dataImpressora)

              reducao_Z_pendente (quando a data a ecf vira para a próxima data e não efetuado redução no dia anterior)

       senao

              reducao_Z_liberadao (ecf liberado para efetuar venda)

       fim

segue exemplo C#:

        public virtual StatusReducaoZ VerificarReducaoZ()
        {
            var dataImpressora = DataImpressora();
            var dataUltimaReducao = DataHoraUltimaReducao();
            var dataMovimento = DataMovimento();
 
            // quando efetuado reducao Z no final do dia depois de efetuado venda no mesmo dia
            if (dataUltimaReducao?.Date == dataImpressora.Date)
                return StatusReducaoZ.Bloqueado;
 
            // quando a data a ecf vira para a próxima data e não efetuado redução no dia anterior
            else if (dataMovimento?.Date < dataImpressora.Date)
                return StatusReducaoZ.Pendente;
 
            // ecf liberado para efetuar venda
            else
                return StatusReducaoZ.Liberado;
        }
  • Este tópico foi criado há 2986 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.

The popup will be closed in 10 segundos...