AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.09.2010, 15:28   #1  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
? Сортировка по "дате" (поле строковое)
Доброго времени суток!
В поле таблицы (строковое) пришлось записывать еще и дату (углубляться в подробности не буду - сам знаю что не правильно .... но пришлось).
Нужно сделать отчет с сортировкой по этому полю. Нужно что то типа:
select table order by str2date(val..) desc ...
Как нибудь можно такой селект реализовать? Есть мысль во временную табу скинуть (с переводом строки в дату), но не хотелось бы

Заранее спасибо!
Старый 29.09.2010, 15:35   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Можно дату хранить в формате odbc типа ГГГГ-ММ-ДД:ЧЧ:ММ:СС
Тогда можно просто строку сортировать и не мучаться.
Старый 29.09.2010, 15:53   #3  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,506 / 428 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от Logger Посмотреть сообщение
Можно дату хранить в формате odbc типа ГГГГ-ММ-ДД:ЧЧ:ММ:СС
Тогда можно просто строку сортировать и не мучаться.
Как я понял, в данной строке не только дата, и эта дата не вначале строки. Так что не прокатит.
По-хорошему - надо добавить в таблицу поле с датой, проапдейтить это поле нужными датами (ну и initValue дописать, если надо), а потом сортировать отчёт уже по этому новому полю.
По-плохому - насколько я помню, в мапе идёт автоматическая сортировка по возрастанию, если ключом является число. Тогда можно сделать так - возьмите какую-нибудь ОЧЕНЬ далёкую дату (например, 01/01/2059); заполните мап значениями таблицы, используя в качестве ключа расстояние между далёкой датой и датой из строки (при этом они отсортируются по убыванию дат); затем выводите мап в отчёт, пересчитывая ключ обратно в дату.

upd. В принципе, в качестве далёкой даты можно и текущую использовать. Но я не знаю, как себя поведёт мап, если в таблице окажутся даты больше текущей
__________________
С уважением,
Вячеслав

Последний раз редактировалось pitersky; 29.09.2010 в 15:59.
За это сообщение автора поблагодарили: lev (2).
Старый 29.09.2010, 15:59   #4  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
а если создать дополнительный столбец, с типом "дата" и в начале построения отчета заполнять его, обрезая при этом строку с датой по последним 10-ти символам? Таблица большая? А в функционале добавить заполнение этого поля, и при запуске отчета заполнять только для тех строк (исторических), у которых дата = datenull()?
Старый 29.09.2010, 16:02   #5  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
ИМХО, все же в данной ситуации лучше прибегнуть к использованию временной таблицы.
__________________
С уважением, Александр.
Старый 29.09.2010, 16:07   #6  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Сообщение от samolalex Посмотреть сообщение
ИМХО, все же в данной ситуации лучше прибегнуть к использованию временной таблицы.
samolalex, по идее с одной стороны вы правы, я бы тоже так подумал. С другой стороны придется каждый раз строить целую таблицу (причем из-за одного поля, и записей может быть о-о-о-о-о-о-о-очень много), быстродействие точно будет хуже.
Старый 29.09.2010, 16:09   #7  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от pitersky Посмотреть сообщение
По-хорошему - надо добавить в таблицу поле с датой, проапдейтить это поле нужными датами (ну и initValue дописать, если надо), а потом сортировать отчёт уже по этому новому полю.
хороший совет!
мне кажется лучше так и сделать, и не надо мутить никаких промежуточных преобразований. так и код в будущем поддерживать будет проще, и в ваше строковое поле может добавиться ещё что-то, тогда придется все опять переделывать... и проблемы могут начать нарастать как снежный ком!
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: kornix (1).
Старый 29.09.2010, 16:24   #8  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
такой вариант мне не подходит (юзвери уже привыкли к формату дд мм гг)... Нет больше вариантов?
За ответ спасибо!
Старый 29.09.2010, 16:25   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от pitersky Посмотреть сообщение
Как я понял, в данной строке не только дата, и эта дата не вначале строки. Так что не прокатит.
По-хорошему - надо добавить в таблицу поле с датой, проапдейтить это поле нужными датами (ну и initValue дописать, если надо), а потом сортировать отчёт уже по этому новому полю.
По-плохому - насколько я помню, в мапе идёт автоматическая сортировка по возрастанию, если ключом является число. Тогда можно сделать так - возьмите какую-нибудь ОЧЕНЬ далёкую дату (например, 01/01/2059); заполните мап значениями таблицы, используя в качестве ключа расстояние между далёкой датой и датой из строки (при этом они отсортируются по убыванию дат); затем выводите мап в отчёт, пересчитывая ключ обратно в дату.

upd. В принципе, в качестве далёкой даты можно и текущую использовать. Но я не знаю, как себя поведёт мап, если в таблице окажутся даты больше текущей
Не уверен что 2059 дата обработается. Кажется было ограничение на 2053 год. На сортировку в мапе нехорошо закладываться. я не проверял но не исключено что он числа отсортирует как числа а не как строки. Лучше уж времянка или дополнительное поле. Плюс где то в дебрях ax32.exe видел ссылку на ключ командной строки, смысл которого сводился к тому что сортировка в мапах будет обратная - по убыванию ключа. Зачем это могло понадобиться - ума не приложу но по-любому понятно что некомильфо закладываться на сортировку по возрастанию ключа в мапе.
Старый 29.09.2010, 16:30   #10  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
В данном столбце (кпп/дата выдачи) хранится либо кпп либо дата (в зависимости от реквизита).
То есть, допустим, для "лицензии" клиента - дата выдачи, а для "Адреса поставки" - кпп.
Походу придется столбец дополнительный добавлять) а как не хотелось... думал есть ч нить подходящее)
Старый 29.09.2010, 16:36   #11  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
Цитата:
Сообщение от lev Посмотреть сообщение
хороший совет!
мне кажется лучше так и сделать, и не надо мутить никаких промежуточных преобразований. так и код в будущем поддерживать будет проще, и в ваше строковое поле может добавиться ещё что-то, тогда придется все опять переделывать... и проблемы могут начать нарастать как снежный ком!
я б так сразу и сделал... но... нащальника не доволен)))))
Старый 29.09.2010, 16:38   #12  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,506 / 428 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от Logger Посмотреть сообщение
Не уверен что 2059 дата обработается. Кажется было ограничение на 2053 год. На сортировку в мапе нехорошо закладываться. я не проверял но не исключено что он числа отсортирует как числа а не как строки. Лучше уж времянка или дополнительное поле. Плюс где то в дебрях ax32.exe видел ссылку на ключ командной строки, смысл которого сводился к тому что сортировка в мапах будет обратная - по убыванию ключа. Зачем это могло понадобиться - ума не приложу но по-любому понятно что некомильфо закладываться на сортировку по возрастанию ключа в мапе.
1) Только что создал заказ на продажу с датой 01/01/2059. Всё сохранилось нормально
2) Так я и предлагал сортировать числа как числа Именно это и нужно, если взять плохой вариант. При всём том это именно плохой вариант - отдельное поле со всех сторон лучше
3) Закладываться на сортировку вполне комильфо. Вряд ли (если оный параметр существует) Аксу можно с ним запустить случайно. А неслучайно никто запускать и не станет.
__________________
С уважением,
Вячеслав
Старый 29.09.2010, 17:20   #13  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от Logger Посмотреть сообщение
Кажется было ограничение на 2053 год.
X++:
info (strfmt("%1",  maxdate()));
Старый 29.09.2010, 17:54   #14  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Alexius Посмотреть сообщение
X++:
info (strfmt("%1",  maxdate()));
Гы !
Промахнулся на 100 лет
Старый 29.09.2010, 17:54   #15  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от pitersky Посмотреть сообщение
2) Так я и предлагал сортировать числа как числа Именно это и нужно, если взять плохой вариант.
Да это я опечатался при написании ответа. Тоже имел в виду числа.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Поле "Оплатить до" в строке общего журнала longson DAX: Функционал 7 29.03.2008 14:38
Ошибка: фантомное дублирующее поле типа "дата" в гриде belugin DAX: Программирование 8 14.06.2006 00:15
поле "Документы к обновлению" в форме "Обработка закупки" sev DAX: Функционал 3 08.12.2005 17:21
Заказ. Форма "Разноска накладной"->Строки-> Поле "закрытие" ATimTim DAX: Функционал 2 30.11.2004 16:14
Журнал переноса->Строки->Поле "Количество" . Нужен "0" по умолчанию вместо ATimTim DAX: Функционал 5 26.06.2004 12:17

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:04.