ник: AlexSyr
В наборе элементов управления MSA имеется довольно интересный элемент - SubForm. Данный элемент насколько полезный, настолько и специфичный. К примеру, имеет всего два события - Enter и Exit, при этом все остальные события скрываются в форме, запросе, которые могут являться источником данных для этого элемента контроля.
Каким же существуют способы работы с SubForm по передачи событий в главную форму?
- Вариант 00 - Разделенная форма - создается автоматически на основе таблицы. То, что, при небольшом приближении, хотелось бы получить. Т.е. перемещаясь по записям в подчиненной форме, получать значения (с возможностью редактирования) в полях главной формы. Грубо говоря использовать элемент SubForm как "расширенный ListBox" (перемещать колонки, редактировать их ширину, применение различных фильтров и т.п.)
Недостатки:
- По сути не содержит SubForm;
- Работает с MSA2007 и выше.
- Вариант 01 - SubForm создается мастером, при этом автоматом в качестве источника данных присваивается вновь созданная форма, созданная на основе таблицы или запроса. Данные в полях главной формы, отображающих значения из подчиненной формы, связываются с SubForm вручную, через построитель.
Недостатки:
- Невозможно редактировать данные в полях главной формы;
- Для SubForm, в качестве объекта-источника, которого, используется запрос, таким способом связывание невозможно.
- Вариант 02 - связывание полей главной формы с записями SubForm через процедуру, функцию. Т.е. в подчиненной форме на событие Current ставится вызов процедуры, функции главной формы.
Недостатки:
- Для SubForm, в качестве объекта-источника, которого, используется запрос, таким способом связывание невозможно.
- Вариант 03 - связывание полей главной формы с записями SubForm через общую функцию. Т.е. в главной форме, при загрузке, обработчик события Current подчиненной формы ставится на вызов общей функции, которая, в свою очередь вызывает процедуру, функцию главной формы.
Недостатки:
- Как то некрасиво вызывать общую функцию, которая вызовет процедуру, функцию.
Похоже, что существует всего один универсальный способ (для форм, запросов) - Вариант 03?
Может кто поделится идеями, опытом, наработками в этом вопросе.
Прикреплен пример всех описанных вариантов для MSA2010 и 2003. (Правда экспорт в 2003 формат произошел как то не очень гладко, так что не пинайте )