Descrição:
Como exibir o valor de um campo com milissegundos em um Relatório?
Solução:
A partir da versão 3.5 b. 174, para formatar uma data/hora com milissegundos, a propriedade DataField do campo do relatório deve ter o seguinte valor:
=E3Globals.E3Format(E3TimeStamp, "dd/MM/yyyy HH:mm:ss.000")
_______________________________________________________________________
Se a versão utilizada for inferior a 3.5 b.174, utilize uma das soluções apresentadas abaixo:
1. Insira o cálculo abaixo na propriedade DataField do objeto Campo de Dados de um Relatório:
=Right("0" + CStr(Day(Fix((CDbl(E3TimeStamp) + (1.0 / 172800000.0))*86400.0)/86400.0)),2)+"/"+Right("0" +CStr(Month(Fix((CDbl(E3TimeStamp) + (1.0/172800000.0))*86400.0)/86400.0)),2)+"/"+CStr(Year(Fix((CDbl(E3TimeStamp) + (1.0 / 172800000.0))*86400.0)/86400.0))+" "+Right("0" +CStr(Hour(Fix((CDbl(E3TimeStamp)+(1.0 /172800000.0))*86400.0)/86400.0)),2)+":"+String(2-Len(CStr(Minute(Fix((CDbl(E3TimeStamp)+(1.0 /172800000.0))*86400.0)/86400.0))), "0") & CStr(Minute(Fix((CDbl(E3TimeStamp)+(1.0 /172800000.0))*86400.0)/86400.0))+":"+String(2-Len(CStr(Second(Fix((CDbl(E3TimeStamp) + (1.0 /172800000.0))*86400.0)/86400.0))), "0") & CStr(Second(Fix((CDbl(E3TimeStamp) + (1.0 /172800000.0))*86400.0)/86400.0)) + "." +String(3-Len((Round(((((CDbl(E3TimeStamp)+(1/172800000))*86400.0) -Fix((CDbl(E3TimeStamp) + (1/172800000))*86400.0))*1000),0))), "0") & (Round(((((CDbl(E3TimeStamp) +(1/172800000))*86400.0) - Fix((CDbl(E3TimeStamp)+(1/172800000))*86400.0))*1000),0))
2. Outra solução é deixar a propriedade DataField vazia, e colocar o seguinte script na seção Detail:
Function FormatDateMs(dtDate)
DIM dMSec, dSec, dt
' Primeiro converte a data de Dias para milissegundos
' (já arredonda os milissegundos)
dMSec = Round(CDbl(dtDate) * 86400000)
' Pega o número de segundos (descarta os milissegundos)
dSec = Fix(dMSec / 1000)
' Gera uma data novamente (sem os milissegundos)
dt = CDate(dSec / 86400)
' Calcula os milissegundos (0 a 999)
dMSec = dMSec - (dSec * 1000)
FormatDateMs = Right("0" + CStr(Day(dt)), 2) + "/" + _
Right("0" + CStr(Month(dt)), 2) + "/" + _
CStr(Year(dt)) + " " + _
Right("0" + CStr(Hour(dt)), 2) + ":" + _
Right("0" + CStr(Minute(dt)), 2) + ":" + _
Right("0" + CStr(Second(dt)), 2) + "." + _
Right("00" + CStr(dMSec), 3)
End Function
Sub OnFormat
' Repetir a linha abaixo para cada campo Data/Hora que você
' desejar mostrar os milissegundos, apenas trocando "Field1"
' pelo nome do objeto "Field", e "E3TimeStamp" pelo nome do campo.
Report.Sections("Detail").Controls("Field1").Text = _
FormatDateMs(Report.Fields("E3TimeStamp"))
End Sub
NOTA: este exemplo utiliza o campo E3TimeStamp, mas o código pode ser alterado para qualquer outro campo.