Как реализовать ввод адреса в документе 1С с использованием механизмов БСП?

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

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

Зачем использовать БСП вместо обычной строки?

Прежде чем мы перейдем к коду, давайте выясним причину, по которой обычное текстовое поле для адреса — это плохая практика. Использование подсистемы БСП дает следующие преимущества:

  1. Валидация данных: Автоматическая проверка существования адреса в государственном адресном реестре — для этого есть автоматическое заполнение адресов и реквизитов из реестров ФНС.
  2. Удобный интерфейс: Пользователь выбирает город, улицу и дом из выпадающих списков, что минимизирует ошибки.
  3. Структурированное хранение: Адрес хранится не только в виде строки (представления), но и в формате JSON или XML, где каждый элемент (индекс, регион, город) имеет свой уникальный идентификатор (GUID).
  4. Совместимость: Данные в формате БСП легко выгружаются в регламентированную отчетность или передаются в другие системы (например, в логистические сервисы).

Шаг 1. Подготовка метаданных объекта

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

Создайте в документе табличную часть с именем КонтактнаяИнформация и добавьте в нее следующие реквизиты:

  1. Тип — ПеречислениеСсылка.ТипыКонтактнойИнформации.
  2. Вид — СправочникСсылка.ВидыКонтактнойИнформации.
  3. Представление — Строка (неограниченная).
  4. ЗначенияПолей — Строка (неограниченная).
  5. Страна — Строка (100).
  6. Регион — Строка (100).
  7. Город — Строка (100).
  8. Значение — Строка (неограниченная) — используется в последних версиях БСП для хранения JSON.

Совет: Самый простой способ не ошибиться в типах и длине полей — скопировать эту табличную часть из любого типового справочника (например, Контрагенты или ФизическиеЛица).

Шаг 2. Регистрация объекта в подсистеме

Теперь выясним причину, по которой система должна «узнать» о нашем новом объекте. Для этого необходимо прописать наш документ в программном интерфейсе БСП. Рассмотрим подробнее этот процесс.

Найдем в конфигурации общий модуль (обычно это УправлениеКонтактнойИнформациейПереопределяемый) и процедуру ПриОпределенииОбъектовСКонтактнойИнформацией. Нам нужно добавить наш документ в массив объектов, поддерживающих контактную информацию:


Процедура ПриОпределенииОбъектовСКонтактнойИнформацией(Объекты) Экспорт
    Объекты.Добавить(Метаданные.Документы.НашНовыйДокумент);
КонецПроцедуры

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

Шаг 3. Настройка в пользовательском режиме

Перейдем в режим «1С:Предприятие». Нам нужно создать конкретный вид адреса для нашего документа. Разберем по шагам:

  1. Откройте справочник «Виды контактной информации».
  2. Найдите в списке ваш документ (он появится там благодаря регистрации на предыдущем шаге).
  3. Создайте новый элемент. Выберите тип «Адрес».
  4. Укажите наименование (например, «Адрес доставки»).
  5. Настройте параметры проверки (например, «Запрещать ввод некорректного адреса»).

Шаг 4. Работа с формой документа

Проанализируем ситуацию с интерфейсом. Чтобы на форме появились красивые поля ввода с «лупой», нам не нужно рисовать их вручную. БСП делает это динамически — для этого подойдёт инструмент управления формами и контроля ввода данных. Рассмотрим, какой код необходимо добавить в модуль формы документа.

В обработчике ПриСозданииНаСервере вызовем процедуру подготовки:


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

Далее нам нужно обеспечить корректное чтение и запись данных. Для этого добавим вызовы в соответствующие серверные обработчики:


&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    УправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
КонецПроцедуры

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

Важный момент: Эти методы автоматически найдут табличную часть КонтактнаяИнформация, вычитают оттуда данные и создадут на форме элементы управления для каждого вида контактной информации, который вы настроили в пользовательском режиме.

Шаг 5. Программный вызов диалога ввода адреса

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

Для открытия формы адреса используем метод ОткрытьФормуВводаАдреса. Посмотрим на пример кода:


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

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

В этом примере мы вызываем стандартное окно БСП, где пользователь может ввести адрес. После закрытия окна результат (структура с данными) возвращается в процедуру-обработчик ПослеВводаАдреса.

Шаг 6. Особенности хранения и работы с ФИАС/ГАР

Посмотрим на структуру хранения данных в ЗначенияПолей. Это строка, содержащая внутреннее представление адреса. БСП версии 3.0 и выше активно использует формат JSON. Это позволяет легко разбирать адрес на составляющие без обращения к тяжелым процедурам парсинга XML.

Если ваша база подключена к интернет-поддержке (сервис 1С:Контрагент), то при вводе адреса система сама будет предлагать варианты из облачного классификатора ФИАС. Это избавляет от необходимости загружать гигабайты адресных данных в локальную базу данных.

Выясним причину, почему иногда адрес не находится. Чаще всего это связано с тем, что в настройках Вида контактной информации не установлен флаг «Проверять по ФИАС» или в базе не обновлены классификаторы. Рекомендуем всегда проверять эти настройки при внедрении подсистемы.

Резюме по внедрению

Мы проанализировали процесс подключения ввода адреса через БСП и выяснили, что это гораздо эффективнее ручной разработки. Основные этапы включают подготовку табличной части, регистрацию объекта в общем модуле и вставку стандартных вызовов процедур УправлениеКонтактнойИнформацией в модуле формы. Такой подход гарантирует, что ваша конфигурация будет работать стабильно, соответствовать стандартам 1С и легко поддерживаться при обновлениях.

← На главную