При разработке конфигураций на платформе 1С:Предприятие 8.3 часто возникает задача организовать ввод контактной информации (поможет инструмент для ввода контактной информации в 1С) (адресов, телефонов) не в стандартных реквизитах справочников, а в произвольных таблицах на форме. Использование типового конструктора адресов из Библиотеки стандартных подсистем (БСП) позволяет обеспечить проверку по ФИАС/ГАР, корректное форматирование и удобство для пользователя. Разберем подробно, как интегрировать этот механизм в вашу разработку.
Прежде чем приступать к кодингу, проанализируем, как 1С хранит адресную информацию. Обычной строки с текстом адреса недостаточно для работы стандартного конструктора. В современных версиях БСП адрес хранится в трех видах:
Для корректной работы вашей таблицы необходимо добавить в нее скрытые колонки для хранения JSON и XML данных. Если передать в форму только строку-представление, конструктор не сможет разложить её обратно по полям (город, улица, дом) с гарантированной точностью.
Рассмотрим ситуацию, когда у нас есть таблица формы (например, СписокАдресов). Нам необходимо убедиться, что в структуре таблицы присутствуют следующие реквизиты:
АдресПредставление (тип Строка)АдресЗначение (тип Строка, неограниченная длина)АдресЗначенияПолей (тип Строка, неограниченная длина)Выясним причину, почему это важно: при открытии формы редактирования механизм БСП первым делом ищет данные в формате JSON. Если их нет — в XML. И только в крайнем случае пытается "распарсить" строку, что часто приводит к ошибкам.
Для открытия формы ввода адреса в управляемом приложении рекомендуется использовать методы общего модуля УправлениеКонтактнойИнформацииКлиент. Основной метод, который нам понадобится — ОткрытьФормуВводаКонтактнойИнформации.
Разберем по шагам, как настроить событие НачалоВыбора для ячейки таблицы, где вводится адрес. Проанализируем пример кода, который поможет подготовить консоль кода + ИИ-помощник — есть готовая консоль кода с ИИ-помощником для разработки:
&НаКлиенте
Процедура СписокАдресовАдресПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущаяСтрока = Элементы.СписокАдресов.ТекущиеДанные;
// Подготавливаем параметры для открытия формы
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Значение", ТекущаяСтрока.АдресЗначение);
ПараметрыФормы.Вставить("Текст", ТекущаяСтрока.АдресПредставление);
// Указываем вид контактной информации.
// Это важно для определения логики работы формы (только адреса РФ, проверка по ФИАС и т.д.)
ПараметрыФормы.Вставить("Вид", ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.АдресРегистрации"));
// Описываем оповещение, которое сработает после закрытия формы адреса
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗакрытияФормыАдреса", ЭтотОбъект, ТекущаяСтрока);
// Вызываем стандартный метод БСП
УправлениеКонтактнойИнформацииКлиент.ОткрытьФормуВводаКонтактнойИнформации(ПараметрыФормы, ОписаниеОповещения);
КонецПроцедуры
После того как пользователь заполнит адрес и нажмет "ОК", управление вернется в процедуру обратного вызова. Посмотрим на пример реализации обработки результата:
&НаКлиенте
Процедура ПослеЗакрытияФормыАдреса(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат; // Пользователь отменил ввод
КонецЕсли;
// Результат — это структура, возвращаемая формой ввода КИ
// ДополнительныеПараметры — это наша текущая строка таблицы
ТекущаяСтрока = ДополнительныеПараметры;
ТекущаяСтрока.АдресЗначение = Результат.Значение;
ТекущаяСтрока.АдресПредставление = Результат.Представление;
// Если требуется XML для совместимости:
// ТекущаяСтрока.АдресЗначенияПолей = Результат.ЗначенияПолей;
ЭтаФорма.Модифицированность = Истина;
КонецПроцедуры
Проанализируем роль параметра Вид. В БСП настройки формы (обязательность заполнения, проверка по ФИАС/ГАР, возможность ввода адреса за пределами РФ) хранятся в справочнике ВидыКонтактнойИнформации.
Если вы создаете полностью автономную таблицу, рекомендуется либо выбрать подходящий существующий предопределенный вид, либо создать новый программно при инициализации. Если передать пустую ссылку или неверный тип, форма может открыться как обычное текстовое поле, лишив вас всех преимуществ конструктора.
При программном вызове формы крайне важно, чтобы в базе данных были актуальные адресные сведения. Механизм УправлениеКонтактнойИнформацииКлиент автоматически проверяет наличие подключенных классификаторов. Если форма открывается, но поиск городов или улиц не работает, проверьте настройки поддержки классификаторов в разделе "Администрирование — Интернет-поддержка и сервисы".
Если вам требуется более тонкая настройка формирования строк, рассмотрим использование серверных функций — для этого подойдёт MCP-сервер для поиска по синтакс-помощнику и метаданным. В общем модуле УправлениеКонтактнойИнформацииСлужебный существуют методы для преобразования структур данных в JSON и XML. Это может понадобиться, если вы хотите "собрать" начальное значение адреса программно из имеющихся у вас данных (например, из полей старой базы).
Рассмотрим пример формирования новой структуры:
// На сервере
НоваяКИ = УправлениеКонтактнойИнформации.ОписаниеНовойКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес);
НоваяКИ.Представление = "г. Москва, ул. Новая, д. 10";
// Далее можно заполнить отдельные поля структуры и конвертировать в JSON
ЗначениеJSON = УправлениеКонтактнойИнформации.КонтактнаяИнформацияВФорматеJSON(НоваяКИ);
Подведем итог: для реализации качественного ввода адресов в произвольную таблицу не нужно изобретать велосипед. Достаточно использовать API БСП, организовать хранение данных в формате JSON и правильно настроить ОписаниеОповещения для обработки выбора пользователя. Это обеспечит бесшовную интеграцию вашего интерфейса в общую экосистему программ 1С.