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