Как программно преобразовать строковый адрес в структурированный вид в 1С

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

В практике разработчика 1С часто встречается задача нормализации контактной информации. Когда адреса загружаются из внешних систем или вводятся пользователями вручную, они часто превращаются в «кашу» вида «Бурятия РеспУлан-Удэ гМунгонова ул». Для системы такой адрес — это просто набор символов, который невозможно использовать для корректной печати в формах или выгрузки в государственные органы. В этой статье мы проанализируем ситуацию и разберем по шагам, как превратить произвольную строку в «нормальный» структурированный адрес, который будет корректно открываться в форме ввода по полям (город, улица, дом).

Понимание механизма хранения адреса в 1С

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

Чтобы адрес открывался «по полям», нам необходимо программно заполнить именно Значения полей. Рассмотрим подробнее, как это сделать.

Метод 1. Использование функций модуля УправлениеКонтактнойИнформацией

Проанализируем наиболее универсальный способ, который предлагают разработчики БСП. Основным инструментом здесь выступает модуль УправлениеКонтактнойИнформацией. Если у вас есть адрес в виде XML (например, полученный при интеграции), его нужно преобразовать в структуру, а затем обратно в системную строку 1С.

Рассмотрим пример кода, который часто применяется в конфигурациях типа ЗУП или ERP:


МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение", Истина);

// ФактическийАдресXML - это ваша исходная строка в формате XML
ФактическийАдресСтруктура = МодульРаботаСАдресами.СведенияОбАдресе(ФактическийАдресXML, ДополнительныеПараметры);

// Теперь мы можем обратиться к полям структуры:
Город = ФактическийАдресСтруктура.Город;
Улица = ФактическийАдресСтруктура.Улица;
КодФИАС = ФактическийАдресСтруктура.Идентификатор;

Метод 2. Работа с современным форматом JSON

В последних версиях 1С произошел переход с формата XML на JSON. Если ваша конфигурация актуальна, рекомендуется использовать методы десериализации. Проанализируем работу с модулем КонтактнаяИнформацияСлужебный.

Функция КонтактнаяИнформацияСлужебный.ДесериализоватьАдрес позволяет превратить JSON-строку в удобный объект. Однако, если у вас «на входе» простая строка без разметки, нам поможет другой механизм — попытка автоматического разбора.


// Попытка преобразовать "грязную" строку в системный формат 1С
СтрокаАдреса = "Бурятия Респ, Улан-Удэ г, Мунгонова ул, дом № 76";
РезультатJSON = УправлениеКонтактнойИнформацией.АдресВнутреннимПредставлением(СтрокаАдреса, Перечисления.ТипыКонтактнойИнформации.Адрес);

// РезультатJSON теперь содержит размеченную структуру, которую можно записывать 
// в поле "Значения полей" объекта КонтактнаяИнформация

Метод 3. Интеграция с классификатором ГАР (ФИАС)

Для того чтобы адрес стал «валидным», система должна сопоставить его с Государственным адресным реестром. Разберем по шагам, как программно верифицировать адрес, если стандартного разбора строки недостаточно:

  1. Программный поиск идентификаторов: Используйте функции поиска по ГАР в БСП. Система попробует найти наиболее близкое соответствие для «криво» написанных названий.
  2. Генерация представления: После того как структура получена, используйте УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеАдреса. Это создаст «красивую» строку на основе официальных сокращений (например, заменит «Респ» на «Респ.»).
  3. Заполнение кодов: При получении сведений об адресе через СведенияОбАдресе, вы также получаете коды ОКТМО и ОКАТО, что критически важно для регламентированной отчетности.

Метод 4. Что делать с «тяжелыми» случаями (внешние сервисы)

Бывают ситуации, когда встроенные средства 1С не справляются (например, в адресе полностью отсутствуют пробелы или допущено много опечаток). В таких случаях проанализируем ситуацию с привлечением внешних API, таких как DaData.

Алгоритм работы будет следующим:

Пример формирования структуры вручную для последующего сохранения:


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

Важные рекомендации при нормализации

При реализации программного разбора обратите внимание на следующие моменты:

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

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

← На главную