• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

работа с типом "date" (@ формула)

  • Автор темы 777DEN777
  • Дата начала
7

777DEN777

Приветствую, подскажите пожалуйста по вопросу:
в представлении столбца введена формула
Код:
@Implode(ExDate;"*")

в результате получаем значение столбца:
27.04.2011*25.04.2011*26.04.2011*21.04.2011

формат даты верный

возникли случаи отображения формата следующего вида
08/21/2011 (08 месяц 21 число)

как корректно выполнить конвертацию даты в форат DD.MM.YYYY

или просто вместо даты ничего не показывать

Вариант не сработал (ОШИБКА: Неверный тип данных для оператора или @-функции: ожидался текстовый):
Код:
@Implode(@IfError(@ToTime(ExDate);"");"*")
 
O

Omh

ExDate в документах какой тип?
Как дата или как строка хранится?
 
T

turumbay

как корректно выполнить конвертацию даты в форат DD.MM.YYYY
Интересно, почему никому не приходит в голову хранить числа в текстовых полях? Ну типа "1,237.12", "100 500,80". Свежо, необычно и держит в тонусе коллег по цеху...

У Вас поле ExDate текстовое...
Правильное решение - переделать его в Date/Time ( на форме и агентом во всех существующих документах ) и работать с датой, а не с текстом.
Парсить текст, преобразовывать в DateTime, форматировать этот DateTime к нужному виду - неправильное решение, т.к. это костыль для костыля. Устраните причину проблемы - исчезнет сама проблема.
P.S. В уголовный кодекс стоит внести ответственность за хранение даты в текстовом поле.
 
7

777DEN777

Код:
@Implode(@IfError(@TextToTime(@Text(ExDate));"");"*")

ОШИБКА: Неверный тип данных для оператора или @функции: ожидался текстовый

ExDate в документах какой тип?
Как дата или как строка хранится?

см. вложенный файл

Интересно, почему никому не приходит в голову хранить числа в текстовых полях? Ну типа "1,237.12", "100 500,80". Свежо, необычно и держит в тонусе коллег по цеху...

У Вас поле ExDate текстовое...
Правильное решение - переделать его в Date/Time ( на форме и агентом во всех существующих документах ) и работать с датой, а не с текстом.
Парсить текст, преобразовывать в DateTime, форматировать этот DateTime к нужному виду - неправильное решение, т.к. это костыль для костыля. Устраните причину проблемы - исчезнет сама проблема.
P.S. В уголовный кодекс стоит внести ответственность за хранение даты в текстовом поле.

ребятам из InterTrust виднее,
для меня решение пока только с преобразованием
 

Вложения

  • 777.JPG
    777.JPG
    17,6 КБ · Просмотры: 609
T

turumbay

см. вложенный файл
ну как бы из картинки не следует, что поле текстовое... пустое поле лотус в любом случае сохранит как текст...
я бы для верности посмотрел на аналогичную картинку для непустого поля.
 
7

777DEN777

ну как бы из картинки не следует, что поле текстовое... пустое поле лотус в любом случае сохранит как текст...
я бы для верности посмотрел на аналогичную картинку для непустого поля.

у пользователя который работал с документом в системе был установлен Английский (США) формат, от этого и поехало
 

Вложения

  • 1.JPG
    1.JPG
    19,8 КБ · Просмотры: 334
  • 2.JPG
    2.JPG
    17,9 КБ · Просмотры: 594
H

hosm

Ну, если разработка чужая, то преобразовать в дату не получится.
тогда можно попробовать настроить у пользователя правильно формат дат, а документы отобрать во вьюху с отбором по @contains(ExDate; "/") или через поиск и дальше сконвертировать эти документы агентом типа такого:
@if(@contains(ExDate; "/");
Field ExDate :=
@transform(ExDate; "var";
@If(@contains(var;"/");@do(d3:=@explode(var; "/"); d3[2]+"."+d3[1]+"."+d3[3]); var));
@nothing)
к сожалению, не тестила код, писала сходу, но идея для замены формата должна быть понятна.
 
O

Omh

777DEN777
Пичааааль

Ты в этой базе можешь модифицировать код?

Надо избавляться от этого г. однозначно.
В крайнем случае, на сохранении продублировать данные в своё поле сохраняя их в правильном типе.
Хранить дату как string - верх ламерства.
 
T

turumbay

вообще конечно жесть. "ребятам из InterTrust" пламенный привет...

рискну предположить:
судя по тому, что система нормально функциклирует на таких данных - данное поле тупо нигде не используется, либо используется только для отображения.
В противном случае это гамно где-нибудь вылезло. Ну не может система нормально работать, когда дата храница текстом, да еще и в произвольном формате.
Я бы ( ни секунды не сомневаясь :) ) перегнал пару документов в к нормальному DateTime и посмотрел пару дней на реакцию системы. Если криминала не обнаружится, перегнал бы все остальное. Ибо нех.
Если боязно, тогда по варианту Omh...

Оставшиеся два варианта:
- поправить american date format на нужный ( по примеру Oken ) и следить за локализацией всех клиентов
- обратиться в суппорт с вопросом "как жить дальше?"
 
7

777DEN777

вопрос решен. :)
Большое спасибо всем за помощь,

особено kizarek то что надо, спасибо
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
33
вопрос решен. i45.gif
Большое спасибо всем за помощь,

особено kizarek то что надо, спасибо

Совсем не факт что будут корректно преобразовываться даты других форматов, так что лучше делайте как советовали (поле должно быть типа Дата).

Будет месяц с днем местами изменены и пипка)
 
7

777DEN777

Совсем не факт что будут корректно преобразовываться даты других форматов, так что лучше делайте как советовали (поле должно быть типа Дата).

Будет месяц с днем местами изменены и пипка)

это единичный случай, думаю в дальнейшем не должно быть проблем

к сожалению БД и разработки сторонней организации, доступ на изменения ограничен


не совсем понял насчет изменения местами месяца и дня. в скрине №2 такая ситуация 08/21/2011, но Ваш пример возвращает 21.08.2011.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
не совсем понял насчет изменения местами месяца и дня. в скрине №2 такая ситуация 08/21/2011, но Ваш пример возвращает 21.08.2011.
Это пока можно однозначно определить где месяц, а где число. Когда станет нельзя(08/09/2011), начнется веселье.
 
A

Anatoly

я не восторге от Интертрастовского OfficeMedia (а речь, похоже, о нем).
Но не надо их обвинять в том чего они не делали, рискуете подать им идею. :)
Вот описание поля ExDate из их шаблона
ExDate.JPG

Добавлено: Кстати, везде, где приходится сопровождать Office* и CompanyMedia от InterTrust - код открыт для сопровождения.
За исключением некоторых модулей.
 
7

777DEN777

я не восторге от Интертрастовского OfficeMedia (а речь, похоже, о нем).
Но не надо их обвинять в том чего они не делали, рискуете подать им идею. :)
Вот описание поля ExDate из их шаблона
Посмотреть вложение 4572

Добавлено: Кстати, везде, где приходится сопровождать Office* и CompanyMedia от InterTrust - код открыт для сопровождения.
За исключением некоторых модулей.

видимо мы говорим о разным БД (не буду указывать БД, это не имеет отношения к теме)
обвинения конкретно адресованные Интертраст в топике никто не указывал.
думаю такое решение результатом было необходимость разработчиков.
насчет риска )) бывает необходимость оперативного решения, в некоторых случаях касательно моего краткой консультацией, тем более это не ошибка системы, а собственная разработка в виде представления, думаю не стоит
 
H

hosm

если
обвинения конкретно адресованные Интертраст в топике никто не указывал.
, то тогда стоит поаккуратней с фразами типа
ребятам из InterTrust виднее,
можно обойтись без указания компании, тем более, что я не вижу представителей ИТ особо желающих отвечать на нашем форуме. как-то некорректно получается, имхо.
П.С. Я к ИТ отношения не имею, если что :)
ОФф:
Кстати, везде, где приходится сопровождать Office* и CompanyMedia от InterTrust - код открыт для сопровождения.
Код вроде и открыт, но лично я сталкивалась на запрет модификации элементов дизайна на проекте на базе СМ. Неудобно тем, что когда находят баги в твоей БД, но в "запретном" дизайне, то либо пишешь интересные вопросы, либо ищешь, как баг обойти - порой пишешь у себя "костыли", порой просто забиваешь :(
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!