Operação matemática com TimeStamp

Estou precisando calcular o tempo transcorrido entre o primeiro registro de uma Ordem de Produção e o último registro para cálculo de tempo de processo.

Busco os dados em BD, acho o primeiro registro e o último registro sem problemas.

No entanto, quando vou realizar a subtração, o sistema não aceita e gera erro.

Como realizo a formatação correta dos dados para que seja possível realizar a subtração?

@Fernando_Weiss, bom dia.

Qual erro aparece?

Chegou a verificar os KBs abaixo?
http://kb.elipse.com.br/pt-br/questions/4842/
http://kb.elipse.com.br/pt-br/questions/2775/
http://kb.elipse.com.br/pt-br/questions/4272/
http://kb.elipse.com.br/pt-br/questions/4698/

Bom dia.
O erro que aparece é o abaixo, utilizando o scrit:

_Dim First, Last, Dif_

_ Screen.Item(“E3Browser3”).Item(“Consulta2”).SetVariableValue “OP”, “00061500” & Application.GetObject("[LP&A].Mesa_Throughput.OP").Value_
__ Set rs = Screen.Item(“E3Browser3”).Item(“Consulta2”).GetADORecordset()__
__ rs.MoveFirst__
__ First = rs.Fields.Item(“CreatedDate”).Value__


__ rs.MoveLast__
__ Last = rs.Fields.Item(“CreatedDate”).Value__

__ Dif = Last - First__

Acredito que seja uma questão de formatação de dados, uma vez que utlizando o método ShowDatePicker(), consigo realizar tranquilamente a subtração.
O formato que retorna é o seguinte:

Tenta com o CDate().

Dif = CDate(Last) - CDate(First)

Ainda ocorre o erro:

Não faz muito sentido o Type mismatch já que estou subtraindo uma data de outra. Inclusive, em testes, funcionou normalmente. Pode ser que esteja configura como uma string, talvez.

Neste primeiro momento, gostaria de saber como a coluna ‘CreatedDate’ está configurada no Hist e como é o tipo da tag que está utilizando?

Essa consulta está se conectando a um Banco de Dados de ERP existente, não gerado pelo Elipse.

O tipo de dado é DataTime de um BD SQL.

@Fernando_Weiss, gostaria que fizesse dois testes:

  • retornar o valor do Last e do First em um MsgBox e postar aqui as imagens. Ex.: MsgBox Last
  • retornar o tipo do Last e/ou do First em um MsgBox utilizando o TypeName() e postar aqui as imagens. Ex.: MsgBox TypeName(Last)

Agradeço.

Consegui tranformar a string em format de Data através do seguinte script:
Utilizei por base http://kb.elipse.com.br/pt-br/questions/5338/Converting+a+string-type+date+into+a+DateTime-type+one.

Agradeço a atenção dispensada.

Dim First, Last, Dif

Screen.Item("E3Browser3").Item("Consulta2").SetVariableValue "OP", "00061500" & Application.GetObject("[LP&A].Mesa_Throughput.OP").Value
Set rs = Screen.Item("E3Browser3").Item("Consulta2").GetADORecordset()
	rs.MoveFirst
	First = rs.Fields.Item("CreatedDate").Value
	Screen.Item("HORA_INICIO").Value = First
	
	rs.MoveLast
	Last = rs.Fields.Item("CreatedDate").Value
	Screen.Item("HORA_FIM").Value = Last
	
	MsgBox Screen.Item("HORA_INICIO").Value
	MsgBox Screen.Item("HORA_FIM").Value
	
SegundosAux = Right(Screen.Item("HORA_INICIO").Value, 6)
Segundos = Left(SegundosAux, 2)
MinutosAux = Right(Screen.Item("HORA_INICIO").Value, 9)
Minutos = Left(MinutosAux, 2)
HorasAux = Right(Screen.Item("HORA_INICIO").Value, 12)
Horas = Left(HorasAux, 2)
DiaAux = Left(Screen.Item("HORA_INICIO").Value, 10)
Dia = Right(DiaAux, 2)
MesAux = Left(Screen.Item("HORA_INICIO").Value, 7)
Mes = Right(MesAux, 2)
Ano = Left(Screen.Item("HORA_INICIO").Value, 4)

SegundosAux1 = Right(Screen.Item("HORA_FIM").Value, 6)
Segundos1 = Left(SegundosAux1, 2)
MinutosAux1 = Right(Screen.Item("HORA_FIM").Value, 9)
Minutos1 = Left(MinutosAux1, 2)
HorasAux1 = Right(Screen.Item("HORA_FIM").Value, 12)
Horas1 = Left(HorasAux1, 2)
DiaAux1 = Left(Screen.Item("HORA_FIM").Value, 10)
Dia1 = Right(DiaAux1, 2)
MesAux1 = Left(Screen.Item("HORA_FIM").Value, 7)
Mes1 = Right(MesAux1, 2)
Ano1 = Left(Screen.Item("HORA_FIM").Value, 4)

Str_data = Dia &"/"& Mes &"/"& Ano &" "& Horas &":"& Minutos &":"& Segundos
Screen.Item("HORA_INICIO").Value = CDate(Str_data)
MsgBox Screen.Item("HORA_INICIO").Value

Str_data1 = Dia1 &"/"& Mes1 &"/"& Ano1 &" "& Horas1 &":"& Minutos1 &":"& Segundos1
Screen.Item("HORA_FIM").Value = CDate(Str_data1)
MsgBox Screen.Item("HORA_FIM").Value

Diferenca = Screen.Item("HORA_FIM").Value - Screen.Item("HORA_INICIO").Value
Diferencaa = Diferenca/(1/24)
MsgBox Diferenca 
MsgBox Diferencaa
1 Like

@Fernando_Weiss, perfeito.

Estava tentando por outro método, mas não estava funcionando.

Obrigado pelo retorno.

1 Like