Jump to content

dev botao

Z PENDENTE NA IF BEMATECH


ALA
Go to solution Solved by Miguel Franco Galego,
  • Este tópico foi criado há 2908 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

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;

Link to comment
Share on other sites

  • Moderadores

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
Link to comment
Share on other sites

  • 6 months later...
  • 4 months later...

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

Edited by John Tadeu
Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 2 years later...
  • Membros Pro

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;

Link to comment
Share on other sites

  • 1 year later...
  • Solution

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;
        }
Link to comment
Share on other sites

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