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