При разработке на базе типовых конфигураций 1С часто возникает необходимость расширить функционал объектов, которые изначально не поддерживают работу с контактной информацией (КИ). Справочник Договоры — классический пример такой задачи. Давайте разберем, как реализовать полноценный выбор адресов, телефонов и электронной почты, используя механизмы Библиотеки стандартных подсистем (БСП) и возможности расширений.
Для того чтобы система «понимала», что в нашем справочнике должны храниться данные КИ, недостаточно просто вывести поля на форму. Необходимо выполнить «регистрацию» объекта. Мы не будем изменять основную конфигурацию, а используем расширение, чтобы сохранить возможность легкого обновления системы.
Прежде чем программно добавлять поля, нам нужно сказать БСП, что справочник Договоры теперь является владельцем контактной информации. Для этого в расширении необходимо создать процедуру ПриОпределенииОбъектовСКонтактнойИнформацией с использованием аннотации &После. В этой процедуре мы добавим наш справочник в список объектов, поддерживающих стандартный механизм.
Для того чтобы на форме справочника появились необходимые поля, мы должны программно инициализировать механизм БСП. Рассмотрим подробнее код, который необходимо разместить в модуле формы вашего справочника внутри расширения.
Для корректной инициализации при открытии формы используйте следующий код на сервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ИсключаемыеВиды = Новый Массив;
ДополнительныеПараметрыКонтактнойИнформации = УправлениеКонтактнойИнформациейБСП.ПараметрыКонтактнойИнформации();
ДополнительныеПараметрыКонтактнойИнформации.ОтложеннаяИнициализация = Истина;
ДополнительныеПараметрыКонтактнойИнформации.ИсключаемыеВиды = ИсключаемыеВиды;
УправлениеКонтактнойИнформациейБСП.ПриСозданииНаСервере(ЭтаФорма, Объект, ДополнительныеПараметрыКонтактнойИнформации);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
УправлениеКонтактнойИнформациейБСП.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
УправлениеКонтактнойИнформациейБСП.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);
КонецПроцедуры
Чтобы поля КИ реагировали на действия пользователя (открытие формы ввода адреса, очистка, изменение), нам нужно подключить обработчики событий. БСП предоставляет готовый API для этих целей. Разберем реализацию основных методов:
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка)
УправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтаФорма, Элемент,, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент)
УправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтаФорма, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
УправлениеКонтактнойИнформациейКлиент.ОбработкаВыбора(ЭтаФорма, ВыбранноеЗначение, Элемент.Имя, СтандартнаяОбработка);
КонецПроцедуры
В процессе разработки вы можете столкнуться с вопросом: создавать ли «предопределенные» виды или использовать обычные элементы справочника ВидыКонтактнойИнформации?
Договоры. Это позволит системе автоматически связывать записи в регистре сведений с конкретным договором.Реализация контактной информации в объектах, где она не была предусмотрена изначально — это стандартная задача для опытного разработчика 1С. Ключ к успеху заключается в правильной регистрации объекта через КонтактнаяИнформацияПереопределяемый и использовании стандартных процедур БСП УправлениеКонтактнойИнформациейБСП. Такой подход гарантирует, что вы получите полнофункциональные поля с возможностью проверки адресов по классификатору (ФИАС/ГАР) и проверкой корректности данных, не нарушая целостность типового обновления конфигурации.