Как реализовать ввод адреса (КЛАДРизацию) на форме в 1С:ERP 2.4?

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

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

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

Понимание механизмов контактной информации в ERP 2.4

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

Рассмотрим ситуацию, упомянутую в обсуждении: почему в справочнике «Партнеры» на месте адресов в конфигураторе видна лишь ПустаяДекорацияКонтактнаяИнформация? Это так называемый «якорь». Система БСП при создании формы программно ищет этот элемент, удаляет его и на его место вставляет массив полей ввода. Это позволяет пользователям добавлять новые виды адресов (например, «Адрес дополнительного склада») через пользовательский интерфейс без изменения кода программы.

Способ 1. Использование стандартной подсистемы КИ (рекомендуемый)

Если вам нужно добавить адрес в новый документ или справочник, лучше всего следовать логике БСП. Рассмотрим этот процесс по шагам.

Шаг 1. Настройка метаданных

Добавьте в ваш объект табличную часть с именем КонтактнаяИнформация. Она должна иметь стандартный набор реквизитов (Тип, Вид, Представление, ЗначенияПолей и т.д.), как это сделано в типовых справочниках. Также необходимо включить объект в состав определяемого типа ВладелецКонтактнойИнформации.

Шаг 2. Размещение декорации на форме

Разместите на форме обычную декорацию (вид — «Надпись») и дайте ей имя, например, ГруппаКонтактнаяИнформация. Установите ей заголовок, который будет виден, если полей нет.

Шаг 3. Программная инициализация

В модуле формы в процедуре ПриСозданииНаСервере необходимо вызвать инициализацию подсистемы. Проанализируем пример кода:


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

Этот метод автоматически создаст все необходимые поля ввода, привяжет их к данным и добавит кнопку выбора, которая открывает форму ФИАС.

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

Бывают случаи, когда адрес нужно хранить просто в строковом реквизите или переменной, не создавая табличных частей КИ. Чтобы «КЛАДРизировать» такое поле, нам нужно вручную обработать событие начала выбора.

Настройка поля на форме:

  1. Создайте реквизит формы (например, АдресДоставки с типом Строка).
  2. Вынесите его на форму.
  3. В свойствах поля установите КнопкаВыбора = Да.
  4. Создайте обработчик события НачалоВыбора.

Реализация логики выбора:

Разберем, как вызвать стандартное окно ввода адреса программно. Выясним, какие параметры для этого требуются.


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

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

Важный нюанс: В ERP 2.4 адрес хранится в двух видах. Представление — это то, что видит человек. ЗначенияПолей — это скрытая строка в формате JSON (ранее был XML), в которой хранятся уникальные идентификаторы (GUID) объектов ФИАС. Если вы будете передавать в форму только строку, то при повторном открытии форма будет пустой или не сможет точно определить дом и улицу.

Особенности работы с ФИАС и ГАР

Проанализируем ситуацию с классификаторами. В ERP 2.4 произошел окончательный отказ от устаревшего формата КЛАДР в пользу ФИАС и его развития ГАР. При реализации ввода адреса помните о следующих моментах:

Итоги

Мы рассмотрели два основных пути «КЛАДРизации» полей в ERP 2.4. Первый путь — через стандартную подсистему — более сложен в настройке метаданных, но обеспечивает автоматическую поддержку всех функций 1С (история изменений, проверка корректности, автоматическое обновление). Второй путь — программный вызов ОткрытьФормуВводаАдреса — идеален для быстрых доработок и произвольных полей на форме.

Использование декораций-якорей типа ПустаяДекорацияКонтактнаяИнформация является стандартом разработки в ERP. Рекомендуем изучить форму ПомощникНового в справочнике «Партнеры», чтобы увидеть, как система динамически управляет видимостью и составом полей в зависимости от настроек программы.

← На главную