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