Community

Нормализация даты (приведение даты к виду дд.мм.гггг)

Как известно, на разных документах дата может быть представлена в разном виде. А на экспорте, как правило, ее хочется иметь в каком-то унифицированном представлении. Поле даты обычно для этих целей делают форматным полем, подключая соответствующий тип данных из раздела "Дата" на закладке "Тип данных". Если используется стандартный экспорт в базу данных, то содержимое форматного поля будет приведено к тому виду, который задан в настройках соответствующего поля базы данных. Если выбран экспорт в XLS и установлена опция "Сохранять тип значения при экспорте", то дата будет приведена к виду дд.мм.гггг независимо от формы представления даты в документе. В случае стандартного экспорта в TXT или CSV или если экспорт пользовательский, и необходимо обратиться к свойству Text поля даты, приведение к единому виду необходимо. Также бывают случаи, когда клиенту просто комфортно видеть дату в едином формате в окне формы "Данные" во время верификации. Для этих целей обычно и используется скрипт для нормализации даты. В примере в качестве разделителя используется точка, но это может быть любой другой разделитель в зависимости от конкретной задачи.
Данный скрипт будет работать независимо от региональных настроек компьютера.


Dim vDate, vLen, vFieldName
vFieldName = "SignedDate"

Dim vField


vField = me.Field(vFieldName).Value
if IsDate (vField) then
vField = CDate(me.Field(vFieldName).Value)


Dim vY
vY = Year(vField)
' содержимое опозналось как дата, но на самом деле она некорректная
if CStr(vY) = "1601" Then
Exit Sub
end if

Dim vDay, vMonth, vYear

vDay = Day(vField)
if Len(vDay) = 1 then
vDay = "0" & vDay
end if

vMonth = Month(vField)
if Len(vMonth) = 1 then
vMonth = "0" & vMonth
end if

vYear = Year(vField)
me.Field(vFieldName).Text = CStr(vDay)& "." & CStr(vMonth)& "." & CStr(vYear)
else
vDate = me.Field(vFieldName).Text

vDate = Replace (vDate, "/", "")
vDate = Replace (vDate, ".", "")
vDate = Replace (vDate, "-", "")

vDate = CStr (vDate)
vLen = Len (vDate)

if IsNumeric (vDate) then
if vLen = 6 then
vDate = Mid (vDate,1,2) & "." & Mid (vDate,3,2) & ".20" & Mid (vDate,5,2)
elseif (vLen = 8) then
vDate = Mid (vDate,1,2) & "." & Mid (vDate,3,2) & "." & Mid (vDate,5,4)
else
Exit Sub
end if
else
Exit Sub
end if

me.Field(vFieldName).Text = vDate

end if

0

Comments

0 comments

Please sign in to leave a comment.