Страница 1 из 1

Locator по дате

Добавлено: 11 Январь 2007, 3:32
lexa
Пытаюсь в Browse использовать Filtered Locator по ключу, основанному на поле даты(@D05-). При вводе Locator отсекает записи в соответствие с форматом Long. Это понятно. Как можно все-таки корректно использовать имено формат даты.

Для себя решил проблему просто, введя в таблицу вычисляемую переменную(@s8)=Format(исходная дата,@D05-) и формируя соответствующий ей ключ.
В List Box-e Browse скрываю исходную дату, показываю преобразованную в строку вычисляемую дату и все нормально.

А есть ли решение в лоб?

Заранее благодарен за подсказку или решение.
C55ee(ABC)

Добавлено: 21 Январь 2007, 17:30
lexa
Может кто-нибудь что-нибудь скажет?

Добавлено: 23 Январь 2007, 9:25
ru_alex
1) Локатор работает по ключу, а не по формату.
2) Если хранить дату как строку в формате @D5, то ключ строится не корректно. Сначала все первые числа, затем все вторые и тд. Возможно что-то получится если хранить дату в форматах @D9 - @D12, когда сначала идет год, потом месяц, потом день.
3) Имхо, для дат лучше использовать не локатор, а сделать условие Range of Values и добавить на окно два Entry с календарями, где пользователь будет ограничивать диапазон.

Добавлено: 23 Январь 2007, 19:23
lexa
ru_alex писал(а):1) Локатор работает по ключу, а не по формату.
Я не спорю, изначально указав в теме - Пытаюсь в Browse использовать Filtered Locator по ключу, основанному на поле даты(@D05-). Формат в скобках указал потому, что именно по такому формату выводится дата в Browse и по такому же формату хочу включить locator по дате.
ru_alex писал(а):2) Если хранить дату как строку в формате @D5, то ключ строится не корректно. Сначала все первые числа, затем все вторые и тд. Возможно что-то получится если хранить дату в форматах @D9 - @D12, когда сначала идет год, потом месяц, потом день.
Если использовать дату как строковую в формате @D05-, то не вижу никакой некорректности, очень удобно - набираю число 25 -> отсекаю другие числа (список выстраивается по 25-**-**), набираю месяц 09 -> отсекаю другие месяцы (список выстраивается по 25-09-**), набираю год 06 -> список показывает все записи, относящиеся к 25-09-06. Почему @D05 - для меня прежде всего важнее день и месяц.
Но преобразование даты в строковую переменную (как я оценил для себя позже) не решение проблемы - слишком много переделок, добавлений, конвертирования и т.п.
ru_alex писал(а):3) Имхо, для дат лучше использовать не локатор, а сделать условие Range of Values и добавить на окно два Entry с календарями, где пользователь будет ограничивать диапазон.
Это как у продуктов 1С? Да, это решение, но все-таки в лоб можно? Локатор более динамичен.
Подсознательно понимаю, что это не так просто.

Заранее благодарен за помощь.

Добавлено: 24 Январь 2007, 9:27
ru_alex
25-09-2000 это в формате long 72955
25-09-2001 это 73320
Соответственно, набрав в локаторе 25-09, получаем, что выбирать нужно не некую непрерывную последовательность данных в порядке ключа по полю long, а некий определенный набор значений, что, сам понимаешь, средства browse не поддерживают. Соответственно, наверно только через string, как ты и реализовал.
Что до некорректности, то это я неправильно выразился, нужно было добавить ИМХО, все же фильтровать все 25 числа всех месяцев и годов при вводе в локатор 25 , мне кажется, кривенько. Если же использовать форматs @D9-@D12, то есть сначала вводить 2006, фильтруем данные за год, затем 09, получаем сентябрь 2006, затем 25, получили нужную дату. Но повторюсь - это дело вкуса.
Может тогда сделать одно поле, в котором пользователь будет заносить long переменную a формате @D05 и после ввода фильтровать на по ней browse.

Добавлено: 24 Январь 2007, 9:32
ru_alex
В догонку.
Подумал тут, если использовать форматы @D9-@D12, то локатор можно полноценно реализовать и по полю long. Правда надо точки вставки искать, а скорее всего и стандартные классы рихтовать, что опять же не все любят и одобряют.