Показать сообщение отдельно
Старый 20.08.2008, 13:01   #2  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Shakr Посмотреть сообщение
Почему возник вопрос - недавно на этом форуме очень нелестно отзывались о программировании на формах, его нужно избегать? Сводить к минимуму? Есть какие-то правила хорошего тона?
Dev Duide:
Цитата:
Code on form methods

Only place code on a form when you cannot possibly place it on a class or on a table method. This means that you will not generally find X++ code here!

If you have to place code on a form, you should strive to place it on the data source. Only when you are absolutely certain that there is no other solution should you place code directly on controls.

Code on a form must be for the purpose of manipulating the form, including the form’s query.
Цитата:
Сообщение от Shakr Посмотреть сообщение
У меня 2 варианта: или перекрывать Lookup на контроле, который EDT (GroupFilter), или сделать несколько наследников EDT с нужными фильтрами и подсовывать их в GroupFilter.extendedDataType(). Можно ещё создать кучу контролов, каждый со своим EDT и отображать их в зависимости от выбранного Enum...

Какой способ правильней?
Третий: перекрыть лукап на поле датасорса (если поле связано с датасорсом) или второй (если нет). При этом код лукапа все равно вынести в статический метод таблицы, чтобы была возможность этим методом воспользоваться и для других форм. Примеров в АОТе куча.

Поясню. Делать разные ЕДТ и подсовывать их в рантайме - плохо. Вы совсем не любой алгоритм фильтрации сможете сделать через ЕДТ. Стоит ему стать сколько-нибудь сложным и упс, придется код писать. Да и в рантайме менять свойства объектов - тоже не лучший способ, в общем случае. Надо стараться такого избегать. Делать много контролов и управлять видимостью? К чему такие сложности? Плюс еще и придется при изменении квери датасорса анализировать, значение какого из фильтров брать. Зачем? А не на контроле - чтобы лукап срабатывал и в том случае, если это поле будет еще где-то на форме. На контролах вообще почти никогда не стоит ничего программировать.См. выше.
__________________
С уважением,
Олег.

Последний раз редактировалось oip; 20.08.2008 в 15:36. Причина: Еще раз исправил и добавил.