Обработкаполученияформы как задать параметры
Обработчики событий ОбработкаПолученияПредставления и ОбработкаПолученияПолейПредставления
Область применения: управляемое приложение, мобильное приложение.
1. С помощью данных обработчиков модуля менеджера объекта можно переопределить представление объекта информационной базы, которое выводится в полях форм и в списках.
Пример реализации:
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
Поля.Добавить(“Наименование”);
Поля.Добавить(“Дата”);
СтандартнаяОбработка = Ложь;
КонецПроцедуры
2. Обработчики вызываются при любой необходимости получения представления какого-либо объекта информационной базы. Поэтому избыточные данные или неправильный выбор данных для формирования представления могут привести к существенному замедлению работы системы.
Также не следует выполнять в этих обработчиках запросы или получение объектов информационной базы (в том числе, запрещены обращения к реквизитам объектов ссылочных типов через точку, что приводит к чтению всего объекта целиком из базы данных). Также нежелательно использовать получение представления и реквизитов ссылок.
Эти требования также справедливы при разработке планов обмена для синхронизации с другими программами (не РИБ, по правилам конвертации) с помощью подсистемы «Обмен данными» Библиотеки стандартных подсистем.
Например, недопустимо обращаться к предопределенным элементам, которые еще могли быть не загружены в базу или, наоборот, уже удалены в ходе обмена данными:
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Данные.ВидОбразования = Справочники.ВидыОбразованияФизическихЛиц.ПослевузовскоеОбразование Тогда
Представление = НСтр(“ru = ‘Послевузовское образование'”);
Иначе
.
4. При реализации обработчиков следует также учитывать требования о поддержке толстого клиента, управляемое приложение, клиент-сервер.
Подписка на событие “ОбработкаПолученияФормы” для обычных форм
Предисловие
Для чего может понадобиться отлавливать событие получения формы? Все просто. При изменении типовых конфигураций очень важным является сохранение возможности последующего обновления из пакетов поставщика. В случаях, когда разработчик меняет типовую форму объектов в конструкторе, при последующем обновление механизм сравнения/объединения не сможет подробно отобразить какие элементы и их свойства были изменены на форме. Поэтому велика вероятность, что обновление конфигурации может пройти некорректно.
Немного теории
Для упрощения процесса последующих обновлений типовой конфигурации рекомендуется изменять типовые формы объектов программным образом. Например, если нам нужно добавить на форму поле ввода, то в обработчике формы “ПередОткрытием” (для обычных форм) необходимо добавить соответствующий программный код. Для управляемых форм платформа поддерживает создания подписки на событие “ОбработкаПолученияФормы”, которое позволяет вмешиваться в процесс создания формы на сервере. Эта возможность намного упрощает изменение форм. Фактически, в некоторых ситуациях разработчик может вообще не трогать типовую форму, а изменять ее программно в процедуре-обработчике подсписки на событие.
Непонятно почему, но платформа 1С:Предприятие 8.2 не поддерживает создание подписок на получение формы объекта для обычных форм. Но есть нестандартный способ, который позволяет отловить событие получения обычной формы и в дальнейшем влиять на ее свойства и состав. Именно о нем и пойдет речь далее.
Реализация
Для того, чтобы отлавливать событие получения обычной формы поступим следующим образом. Первым делом для конфигурации включим использования управляемых форм в обычном приложении.
В параметрах конфигурации не забудьте поставить режим редактирования в “Управляемое приложение и обычное приложение”.
Теперь мы можем создать подписку на событие и связанный с ней обработчик, в котором будем изменять получаемую форму. Для этого добавим общий серверный модуль с возможностью вызова экспортных процедур со стороны клиента. Назовем его “DEV_ИзмененеиеФорм”.
И сразу добавим экспортную процедуру-обработчик для подписки на событие “DEV_ИзменениеФормы” (подписка на событие и общий модуль имеют одинаковое наименования для удобства разработки).
Теперь мы можем создать необходимую подписку на событие и привязать к созданной выше процедуре. Сразу отмечу, что в текущем примере мы будем изменять обычную форму элемента справочника “Банки”, поэтому в источнике подписки на событие установим значение “СправочникМенеджер.Банки”.
О его назначении будет понятно чуть позже. Теперь справочник “Банки” выглядит следующим образом:
Обратите внимание, что созданная нами управляемая форма элемента не содержит элементов на форме, поскольку они в данном случае не нужны. При получении этой формы вызывается обработчик получения формы “DEV_ИзменениеФормы”, в котором мы можем получить обычную форму и произвести все необходимые программные действия. Далее представлен программный код обработчика для изменения обычной формы элемента справочника “Банки”.
Полагаю, что рассказывать о приведенном выше программном коде не имеет смысла, в общих чертах ход действий описан соответствующими комментариями.
Нужно сказать, что метод “Закрыть()” в обработчике “ПриОткрытии” используется, чтобы управляемая форма не появлялась на экране пользователя. Если бы мы поставили флаг “Отказ” в обработчике “ПриСозданииНаСервере” или установили флаг “СтандартнаяОбработка” в ЛОЖЬ в обработчике подписки на событие, то возникла бы ошибка с идентификатором формы или невозможности работы с неоткрытой формой. В данный момент другого способа скрыть от пользователя “промежуточную” форму не нашел.
Что на практике
Запустив режим “предприятия” мы увидим следующие изменения формы элемента справочника “Банки”.
При этом для справочника “Банки” в конфигурации мы изменили настройку поддержки только для непосредственно самого объекта в режим “Редактируется с сохранением поддержки”.
Проделав вышеописанные действия, мы сохранили максимальную совместимость с конфигурацией поставщика.
Что в итоге
Таким образом, мы внесли минимальные изменения в типовые объекты конфигурации и изменили форму как нам это необходимо. Тут стоит заметить, что если нужно изменить программный код обработчиков элементов формы, то другого выхода нет, кроме как снять форму с поддержки и вносить изменения в обработчике событий.
Обработка Выбора в поле ввода формы
1С:Предприятие 8.3.14. Документация
Глава 7. Формы
Для демонстрации работы параметров формы рассмотрим реализацию выбора элемента в поле ввода. Сутью примера будет реализация механизма выбора элемента из списка на встроенном языке.
К моменту начала работы с примером нужно иметь конфигурацию, обладающую следующими свойствами:
Теперь реализуем в этой конфигурации все механизмы, которые использует платформа для выбора элемента из списка, на встроенном языке. При этом мы увидим:
Добавим дополнительный параметр, который будет управлять закрытием формы выбора после выбора элемента. Назовем этот параметр ЗакрыватьПослеВыбора (тип Булево). Добавим его в качестве параметра формы ФормаВыбора справочника Товары.
Для того чтобы открыть форму выбора элемента, необходимо в форме элемента справочника Аналоги создать обработчик события НачалоВыбора у элемента формы ВыбранныйТовар.
Следует отдельно остановиться на третьем параметре метода ОткрытьФорму(). Этот параметр определяет, кто будет владельцем формы выбора и кому будет приходить оповещение о сделанном выборе. В данном случае мы указали владельцем формы выбора сам элемент формы, но также мы можем указать этим параметром и саму форму. В этом случае будет необходимо реализовывать обработчик ОбработкаВыбора модуля формы и в нем решать, в какой реквизит формы помещать выбранные данные.
ПРИМЕЧАНИЕ. Если мы не будем реализовывать обработчик события НачалоВыбора, то его действия выполнит сама система. Это справедливо и для всех дальнейших обработчиков, которые использованы в примере.
Теперь необходимо обработать переданные параметры в форме выбора. Сделаем это в обработчике ПриСозданииНаСервере() модуля формы выбора.
Для того чтобы проверить работоспособность установленных нами параметров формы, установим, с помощью конфигуратора, у таблицы формы выбора Список свойство ВыборГруппИЭлементов в значение Группы (без применения параметра не будет доступен выбор элементов справочника).
ПРИМЕЧАНИЕ. Если у таблицы Список, отображающей список товаров, свойство РежимВыбора не будет установлено в значение Истина, то выбор товаров будет недоступен.
Теперь нам необходимо обработать выбор желаемого элемента в форме выбора. Для этого нужно определить обработчик события ВыборЗначения таблицы формы.
Нам осталось реализовать обработку выбора элемента в самом поле ввода. Для этого необходимо обработать событие ОбработкаВыбора нашего поля ввода ВыбранныйТовар.
Мы самостоятельно реализовали системный механизм выбора значения в поле ввода на форме.
ВНИМАНИЕ! Данный пример не является законченным. Его единственным назначением является демонстрация механизмов работы с параметрами формы.
Если при создании параметров (обработчик ВыбранныйТоварНачалоВыбора()) заменить строку:
то форма выбора перестанет закрываться после того, как будет осуществлен выбор. Это можно использовать, например, для реализации формы подбора (выбор нескольких товаров без закрытия формы выбора).
Программная модификация управляемых форм
Одним из требований для прохождения аудита расширения в модели сервиса является программная модификация управляемых форм без заимствования самой формы в расширение.
Мы рассмотрим основные составляющие этой задачи: добавление реквизитов, добавление элементов формы и назначение обработчиков событий элементов формы.
Добавление реквизитов
Для добавления реквизитов используется метод объекта ФормаКлиентскогоПриложения
Реквизиты формы, добавленные через конфигуратор, удалить невозможно, поэтому второй аргумент процедуры можно не указывать.
Например, если мы создаем таблицу значений из двух колонок, то программный код для их создания будет выглядеть следующим образом:
Данную процедуру можно заимствовать в расширение, добавить проверку имени формы и вставить код изменения реквизитов:
Для остальных конфигураций придется переопределять другие процедуры. Например
Использование той или иной процедуры следует проверить в модуле редактируемой формы.
Изменение элементов формы
Для добавления нового элемента формы требуется передать в функцию Добавить данной коллекции имя элемента, его тип и родителя (при необходимости). Например:
При создании новых элементов формы старайтесь добавлять к их именам префикс своего расширения, чтобы избежать конфликтов с элементами формы типовой конфигурации. Этот же совет следует применять к именованию реквизитов формы, процедур, функций и глобальным переменным.
Обработка событий формы
Выполнить код по событию элемента формы можно двумя способами:
Для самых простых случаев (команда или событие без параметров) можно использовать следующие комбинации обработчиков и переопределяемых процедур:
При этом в предопределенной процедуре обязательно проверять имя команды (или имя элемента формы) и имя самой формы.
Либо вариант с использованием команд:
Полезные советы
Работа с динамическими списками
Переопределение открываемой формы
В некоторых случаях, когда требуется кардинальное изменение формы, следует не забывать о возможности переопределения открываемой формы в модуле менеджера объекта метаданных.
Данный метод следует использовать с осторожностью или ограничивать его использование ключами открытия формы, т.к. в этом случае мы делаем недоступной типовую форму.
Работа с неактуальными (недействительными) объектами
Методическая рекомендация (полезный совет)
1. Данная рекомендация действует для ситуаций, когда какой-либо объект информационной базы перестает быть актуальным – навсегда или на время (сотрудник увольняется или уходит в декретный отпуск, подразделение расформируется и т.д.). При этом удалять этот объект из базы недопустимо, чтобы не нарушать ссылочную целостность: на него должны ссылаться другие ранее созданные объекты. Например, объект типа Файл должен содержать в поле Автор ссылку на уволившегося сотрудника и после его увольнения.
2.1. Если запрет должен действовать во всех или в большинстве полей ввода форм системы, то он задается по умолчанию.
2.1.1. В модуле менеджера справочника Пользователи реализуются обработчики ОбработкаПолученияДанныхВыбора и ОбработкаПолученияФормы для установки параметров отбора. Пример реализации этих обработчиков для справочника Пользователи :
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Если Не Параметры.Отбор.Свойство(“Недействителен”) Тогда
Параметры.Отбор.Вставить(“Недействителен”, Ложь);
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = “ФормаВыбора” Тогда
ПараметрИзменен = Ложь;
Если Не Параметры.Свойство(“Отбор”) Тогда
Параметры.Вставить(“Отбор”, Новый Структура(“Недействителен”, Ложь));
ПараметрИзменен = Истина;
ИначеЕсли Не Параметры.Отбор.Свойство(“Недействителен”) Тогда
Параметры.Отбор.Вставить(“Недействителен”, Ложь);
ПараметрИзменен = Истина;
КонецЕсли;
// Этот код нужен, чтобы были использованы измененные нами значения параметров
Если ПараметрИзменен Тогда
СтандартнаяОбработка = Ложь;
ВыбраннаяФорма = “ФормаВыбора”; // передаем имя формы выбора
КонецЕсли;
КонецЕсли;
КонецПроцедуры
2.1.2. Для тех реквизитов, где это поведение нужно изменить (например, нужно выводить всех пользователей или должно работать другое ограничение) следует явно установить свойства «Параметры выбора» и «Связи параметров выбора» с необходимыми в конкретном контексте значениями выбора:
2.2. Если запрет на выбор неактуальных объектов сильно зависит от контекста (сценариев работы), то не следует его устанавливать по умолчанию.
4. Для отображения неактуальных объектов в списках рекомендуется использовать элемент стиля ТекстЗапрещеннойЯчейкиЦвет (192,192,192).






