Как подключить адресный классификатор ФИАС к собственному реквизиту в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке и доработке конфигураций на платформе 1С часто возникает задача добавить ввод адреса с проверкой и автоподбором по адресному классификатору ФИАС (ГАР) для произвольного реквизита справочника или документа. В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП) для этого предусмотрены готовые механизмы. Рассмотрим подробно два основных подхода к реализации этой задачи.

Вариант 1. Использование подсистемы «Контактная информация» БСП

Это стандартный и наиболее функциональный способ интеграции. Он позволяет сохранять не только строковое представление, но и полную структуру адреса, включая уникальные идентификаторы ФИАС (GUID), почтовый индекс, коды регионов и типы адресных объектов. Разберем реализацию по шагам.

Шаг 1. Создание реквизитов в метаданных

Для корректной работы подсистемы контактной информации в объект метаданных (например, в справочник или документ) добавляются два реквизита:

  1. Основной реквизит (хранилище структуры адреса): создаем реквизит с типом Строка неограниченной длины. В нем подсистема автоматически сохраняет сериализованный XML или JSON, содержащий все разобранные поля адреса и коды классификатора.
  2. Вспомогательный реквизит (представление): создаем реквизит с типом Строка фиксированной длины (например, 250–500 символов) или неограниченной длины. Он предназначен для хранения плоского текста адреса (например, «г. Москва, ул. Ленина, д. 1»), который отображается пользователю в списках, отчетах и формах.

Проанализируем вопрос о том, обязательно ли размещать вспомогательный реквизит на форме. Если пользователю требуется возможность редактировать или просматривать адрес прямо в строке ввода, вспомогательный реквизит выносится на форму как поле ввода. Если же прямой ввод текста не нужен, можно отображать адрес в виде гиперссылки или надписи, по нажатию на которую открывается окно ввода адреса.

Шаг 2. Регистрация вида контактной информации

В справочнике Виды контактной информации необходимо создать новый элемент с типом Адрес и связать его с соответствующим объектом метаданных и созданным реквизитом.

Шаг 3. Программная привязка в форме объекта

В модуле формы объекта подключаем обработчики событий подсистемы контактной информации. Рассмотрим пример серверного и клиентского кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Подключаем реквизиты контактной информации к элементам формы
    УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, Объект);
КонецПроцедуры

Для элемента формы, связанного со вспомогательным реквизитом представления адреса, подключаются клиентские обработчики событий:


&НаКлиенте
Процедура АдресНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    УправлениеКонтактнойИнформациейКлиент.НачатьВводАдреса(ЭтотОбъект, Объект, "Адрес");
КонецПроцедуры

&НаКлиенте
Процедура АдресАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
    УправлениеКонтактнойИнформациейКлиент.АвтоПодборАдреса(ЭтотОбъект, Объект, "Адрес", Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура АдресОчистка(Элемент, СтандартнаяОбработка)
    УправлениеКонтактнойИнформациейКлиент.ОчиститьКонтактнуюИнформацию(ЭтотОбъект, Объект, "Адрес");
КонецПроцедуры

Вариант 2. Прямой вызов диалога ввода адреса из классификатора

Если нет необходимости глубоко интегрировать реквизит в подсистему контактной информации и сохранять избыточные метаданные, можно вызвать стандартную форму ввода адреса напрямую из модуля адресного классификатора.

Разберем, как реализовать открытие диалога при нажатии кнопки выбора в поле ввода:

  1. Создаем у объекта реквизит с типом Строка.
  2. Размещаем поле на форме и включаем свойство КнопкаВыбора.
  3. В событии НачалоВыбора перехватываем стандартную обработку и открываем форму ввода адреса через общий модуль АдресныйКлассификаторКлиент.

&НаКлиенте
Процедура ПолеАдресаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    ПараметрыОткрытия = Новый Структура;
    ПараметрыОткрытия.Вставить("Значение", Объект.ПолеАдреса);
    
    ОповещениеОЗавершении = Новый ОписаниеОповещения("ПослеВыбораАдреса", ЭтотОбъект);
    
    АдресныйКлассификаторКлиент.ОткрытьФормуВводаАдреса(ПараметрыОткрытия, ОповещениеОЗавершении);
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораАдреса(Результат, ДополнительныеПараметры) Экспорт
    Если Результат <> Неопределено Тогда
        // Записываем полученное строковое представление
        Объект.ПолеАдреса = Результат.Представление;
        Модифицированность = Истина;
    КонецЕсли;
КонецПроцедуры

Технические нюансы работы с ФИАС

При настройке адресного классификатора обратим внимание на следующие особенности:

  1. Разбор неструктурированной строки: если адрес сохраняется только как плоский текст без XML/JSON-структуры, при повторном открытии диалога системе потребуется заново парсить строку по правилам классификатора. В спорных случаях пользователю придется уточнять элементы адреса вручную.
  2. Автоподбор подсказок: для работы выпадающих подсказок при вводе текста необходимо активировать у поля формы свойства РежимВыбораИзСписка и КнопкаВыпадающегоСписка, а также привязать процедуру автоподбора.
  3. Источник данных классификатора: подсистема ФИАС в 1С может работать как с локально загруженными таблицами классификатора в саму информационную базу, так и в режиме онлайн через подключение к сервисам интернет-поддержки пользователей.
← На главную