Показать сообщение отдельно
Старый 09.06.2015, 10:23   #12  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Есть какой-нибудь общий системный класс, позволяющий глобально из одного места добраться до источников данных любой формы ? Есть, SysSetupFormRun, упомянутый S.Kuskov. Позволяет этот класс отслеживать смену позиции в источнике данных управляемой формы и идентифицировать сам источник, в котором произошли изменения? Нет, он больше для элементов управления, контролов то бишь, заточен. Более подходящим бы класс FormDataSource, но он системный и скрытый, в его active() не залезешь. Это первая птичка обломинго ...
Ну не такая уже и прям обломинго. Сходу могу назвать целых два способа руления событием active на любой форме:
1. info.formNotify и, например, основанный на нем в 2009 FormRunListener_RU
2. Рисование наследника FormObjectSetNotify и использование addNotifyHandler на датасорсе. Позволяет отслеживать несколько событий датасорса, в т.ч. и active. Правда у меня в итоге не прижился, ибо при его использовании если на форме в гриде потащить за скроллбар мышью, то при отпускании мыши клиент заворачивал ласты. Что-то в ядре там перемудрили. Это на 2009, в 2012 может поправили.
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Есть какой нибудь класс, общий для всех таблиц, позволяющий отслеживать изменения полей в табличной переменной ? Есть, xRecord - но он системный и скрытый. Влезть в его modifiedField() не выйдет. Это птичка обломинго номер два...

Глобально эту задачу доступными средствами не решить - просто смиритесь с этим и делайте как все, класс-обработчик доступа в каждую форму.
Ну, в 2009 наверное да, но в 2012 - почему бы и нет?
X++:
fds.object(fieldnum(...)).registerOverrideMethod(...)
И - вперед
PS: сам тоже не пробовал, но ведь уже есть куда копать...
За это сообщение автора поблагодарили: АртемМелихов (1).