Как корректно загрузить адреса в 1С:ERP из Excel и других источников

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

Загрузка контактной информации в современные конфигурации, такие как 1С:ERP Управление предприятием или 1С:Комплексная автоматизация, существенно отличается от старых методов, применявшихся в 1С:УПП или 1С:Бухгалтерии 2.0. Основная сложность заключается в том, что система ожидает не просто текстовую строку, а строго структурированные данные, соответствующие адресному классификатору (ФИАС/ГАР). Давайте подробно разберем, как решить эту задачу программно и с помощью типовых инструментов.

Почему недостаточно заполнить только поле Представление

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

  1. Тип — ссылка на перечисление (Адрес, Телефон и т.д.).
  2. Вид — ссылка на справочник ВидыКонтактнойИнформации (например, Юридический адрес контрагента).
  3. Представление — текстовая строка, которую видит пользователь.
  4. Значения полей — скрытое, но критически важное поле. В актуальных версиях ERP здесь хранится строка в формате JSON (в более старых — XML).

Если мы запишем данные только в Представление, при открытии карточки контрагента система не сможет сопоставить адрес с ФИАС. Это приведет к ошибкам при выгрузке отчетности в ФНС или формировании электронных счетов-фактур. Поэтому наша задача — научиться формировать содержимое поля Значения полей.

Программный парсинг адреса из строки

Если у нас есть «сырой» адрес из Excel, нам нужно превратить его в структуру, которую понимает 1С. Для этого мы проанализируем возможности общего модуля УправлениеКонтактнойИнформацией. Рассмотрим основной метод разбора:


// Пример программного разбора текстовой строки в структуру адреса
ТекстАдреса = "127051, Москва г, Неглинная ул, дом 10";
ТипАдреса = Перечисления.ТипыКонтактнойИнформации.Адрес;
// Функция пытается сопоставить текст с ФИАС
СтруктураАдреса = УправлениеКонтактнойИнформацией.АдресИзПредставления(ТекстАдреса, Ложь, ТипАдреса);

Функция АдресИзПредставления берет на себя самую сложную часть работы — поиск соответствий в загруженном классификаторе. После того как мы получили структуру, её необходимо преобразовать в JSON-строку для записи в базу данных.

Формирование JSON для поля Значения полей

После получения структуры данных нам нужно воспользоваться методом формирования итоговой строки. Это обеспечит «валидность» адреса для системы. Посмотрим на пример кода:


// Преобразуем структуру в JSON-строку
ЗначениеДляЗаписи = УправлениеКонтактнойИнформацией.СформироватьJSONЗначениПолей(СтруктураАдреса);

// Записываем в табличную часть контрагента
НоваяСтрокаКИ = ОбъектКонтрагент.КонтактнаяИнформация.Добавить();
НоваяСтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
НоваяСтрокаКИ.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
НоваяСтрокаКИ.Представление = ТекстАдреса;
НоваяСтрокаКИ.ЗначенияПолей = ЗначениеДляЗаписи;

Важный нюанс: при работе с современными версиями 1С:ERP важно учитывать переход на ГАР (Государственный адресный реестр). В структуре адреса теперь важно разделять административно-территориальное и муниципальное деление. Штатные функции БСП обычно учитывают это автоматически, если классификатор в базе актуален.

Пакетная загрузка и нормализация по ИНН

Часто бывает так, что адреса в Excel-файле «грязные» или неполные. Выясним причину, по которой ручной разбор может быть неэффективен: человеческий фактор при заполнении Excel. В этом случае лучшим решением будет использование сервиса 1С:Контрагент.

Мы можем автоматизировать процесс, имея только ИНН контрагентов. Рассмотрим алгоритм пакетного заполнения:

  1. Создаем обработку, которая обходит список контрагентов.
  2. Для каждого ИНН вызываем программный интерфейс сервиса 1С:Контрагент.
  3. Получаем официально зарегистрированный адрес в виде готовой структуры.
  4. Записываем данные в карточку.

Пример вызова метода для получения данных по ИНН:


// Метод возвращает структуру с данными из ЕГРЮЛ
Данные = СведенияОКонтрагентах.ДанныеЮридическогоЛицаПоИНН(КонтрагентИНН);
Если Данные <> Неопределено Тогда
    ЮридическийАдрес = Данные.ЮридическийАдрес;
    // ЮридическийАдрес уже содержит структурированные данные
КонецЕсли;

Особенности использования внешней обработки Загрузка данных из табличного документа

Типовая обработка Загрузка данных из табличного документа часто не позволяет напрямую корректно заполнить табличную часть контактной информации в ERP, так как она не умеет «на лету» формировать JSON. В этом случае мы рекомендуем следующий порядок действий:

Использование внешних сервисов нормализации (DaData и др.)

Если встроенный парсер 1С не справляется (например, адрес написан в очень свободной форме), проанализируем ситуацию с внешними API. Сервисы типа DaData позволяют передать любую строку и получить обратно массив данных с четким разделением на индекс, город, улицу и, что самое важное, ID ФИАС (GUID). Получив GUID объекта, мы можем найти его в базе 1С и программно заполнить адресные поля, что гарантирует 100% точность данных.

Подведем итог: для корректной работы 1С:ERP с адресами всегда стремитесь заполнять поле Значения полей в формате JSON. Используйте штатные модули БСП для разбора строк и, по возможности, автоматизируйте заполнение через ИНН и сервис 1С:Контрагент, чтобы избежать ошибок ручного ввода.

← На главную