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