![]() |
#1 |
MCTS
|
AX2009: Глючат даты.
Форма "Часовой прогноз" Проекты \ Запросы \ Прогноз \ Час.
Если создать 12 записей с разными датами (01.01.10, 02.02.10 .. 12.12.10) в поле "Дата проекта" и потом по очереди открывать лукапы этих дат, то можно наблюдать любопытное явление. Начиная с 3-4 даты лукап будет открываться, но активной будет другая дата другого месяца. Очень не удобно, приводит к кривым данным. Например, пользователь видит дату 01.03.10, ему надо поменять на дату 05.03.10. Он открывает лукап, ставит 5 число, и сохраняет. А месяц при открытии поменялся и уже не март, а май. Получаем неправильную дату. В тройке и четверке все работает корректно. Баг проявляется только в АХ 2009. Наших доработок нет. Пробовал на разных приложениях/данных АХ2009 - баг повторяется. Почему так происходит и как это можно исправить?
__________________
С уважением, Павел Цераниди. На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага. |
|
![]() |
#2 |
Moderator
|
Была уже раньше подобная тема (правда, про аналогичный глюк даты в 4ке), не могу найти что-то.
Суть в том, что в форме SysDateLookup дата для инициализации берется 2мя способами: либо из текущего контрола формы (если удается его идентифицировать и он заполнен), либо текущая. Соответственно, при открытии лукапа на гриде понятие "значение текущего контрола формы" для системы ничего не значит, и может вернуться любое видимое значение даты в текущем столбце. Если лукап срабатывает не на гриде, то все нормально. Решения для себя не нашел. Тут возможно либо всегда использовать текущую дату, либо как-то попытаться переделать лукап для забора даты из поля текущей записи.
__________________
Андрей. |
|
![]() |
#3 |
MCTS
|
Цитата:
может вернуться любое видимое значение даты в текущем столбце
![]() Пока решил следующим образом. Перекрыл метод lookup() на поле дата: X++: public void lookup(FormControl _formControl, str _filterStr) { FormDateControl fdc = _formControl; ; fdc.dateValue(str2date(_formControl.valueStr(), 123)); super(fdc, _filterStr); } Сейчас думаю какие минусы такой доработки.
__________________
С уважением, Павел Цераниди. На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага. Последний раз редактировалось e@gle; 28.01.2010 в 11:42. |
|
![]() |
#4 |
Moderator
|
Это странно, и не факт, что сработает всегда и во всех версиях.
__________________
Андрей. |
|
![]() |
#5 |
MCTS
|
Цитата:
Это странно, и не факт, что сработает всегда и во всех версиях.
Пока помогает, даты перестали глючить.
__________________
С уважением, Павел Цераниди. На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага. |
|
![]() |
#6 |
Участник
|
Баг еще "глубже". Для контрола ДатаВремя на гриде оно еще и время портит. Там в методе closeSelect форма пытается "вынуть" текущее установленное время и "приклеить" его к новой дате. Так вот, берет всегда черт-знает откуда (судя по всему, что в кеше последнее "завалялось" при отрисовке формы. Причем при разработке все гуд (или наступить на грабли так и не смог), а вот под правами "обычных" юзеров - глюк. Еще не выяснил, каких прав не хватает, но как показывает практика предоставление ключа SysDevelopment может убирать некоторые глюки :-)
Случайно заметили этот эффект. "Лечится" лишним вызовом currentDateTimeControl.valueStr(); ДО ТОГО, как вызывается currentDateTimeControl.dateTimeValue() Просто вызвать и все. Даже значение никуда присваивать не надо. Видимо при этом в памяти кое-что "сдвигается" в нужную сторону. Ну и конечно такой же вызов поставил в методе run, дабы описанная выше ситуация с открытием календаря не на том месте вылечилась. |
|