Как автоматизировать заполнение адресов в 1С:УВС и получить GUID ФИАС для синхронизации с ВетИС?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Промышленность, строительство и АПК
← На главную

При внедрении системы 1С:Управление ветеринарными сертификатами (УВС) одной из наиболее трудоемких задач является массовая регистрация площадок (предприятий) в системе ВетИС (Меркурий). Основная сложность заключается в том, что сервер ВетИС требует строго структурированный адрес с обязательным указанием уникальных идентификаторов (GUID) адресных объектов по классификатору ФИАС (или ГАР). Если адрес записан «одной строкой» или в «свободной форме», синхронизация прерывается с ошибкой некорректных данных.

В данной статье мы разберем, как программно формировать XML-структуру контактной информации, откуда извлекать идентификаторы и как избежать типичных ошибок при парсинге адресов.

Почему стандартный парсинг адреса в 1С выдает «свободную форму»

Часто программисты пытаются использовать стандартный метод БСП УправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению(). Однако, если в базе 1С не загружен адресный классификатор по конкретному региону, система не может сопоставить текстовую строку с объектами ФИАС. В результате формируется XML, где адрес помещается в поле Представление, а структурные поля (город, улица, дом) и их GUID остаются пустыми.

Рассмотрим ситуацию: нам нужно передать адрес в ВетИС. Сервер ожидает увидеть не просто строку «г. Екатеринбург, ул. Радищева, д. 20», а конкретные коды: IDРегион, IDГород, IDУлица. Без этих данных автоматическая регистрация площадки невозможна.

Шаг 1: Программное формирование структуры контактной информации

Для того чтобы адрес был принят системой ВетИС, он должен быть представлен во внутреннем формате 1С (XDTO-пакет ContactInfo). Проанализируем пример кода, который позволяет подготовить структуру для записи в справочник Предприятия:


// Определяем адрес в виде строки
АдресТекст = "Свердловская обл., г. Екатеринбург, Радищева ул., дом № 20";

// Получаем вид контактной информации (например, адрес предприятия)
ВидКИ = Справочники.ВидыКонтактнойИнформации.АдресПредприятия;

// Пытаемся получить XML-структуру на основе текстового представления
XMLСтруктура = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению(АдресТекст, ВидКИ);

// Если классификатор загружен, БСП сама заполнит идентификаторы.
// Если нет — XML будет содержать только текстовое поле.

Чтобы гарантированно получить идентификаторы, необходимо убедиться, что адрес прошел валидацию. Проанализируем ситуацию, когда нам нужно принудительно заполнить идентификаторы, полученные из внешних систем (например, через Яндекс.Геокодер или Dadata).

Шаг 2: Получение идентификаторов ФИАС/ГАР

Если локальный классификатор в 1С не заполнен, мы можем воспользоваться программным поиском идентификаторов. Начиная с последних версий БСП, рекомендуется использовать модуль АдресныйКлассификатор. Выясним, как получить GUID программно:


// Пример получения идентификаторов через внутренний классификатор 1С
ПараметрыПоиска = АдресныйКлассификатор.ПараметрыПоискаИдентификаторов();
ПараметрыПоиска.Адрес = "Екатеринбург, Радищева 20";
РезультатПоиска = АдресныйКлассификатор.ИдентификаторыАдреса(ПараметрыПоиска);

Если РезультатПоиска.Свойства().Количество() > 0 Тогда
    // Теперь у нас есть структура с IDРегион, IDГород, IDУлица
    GUID_Города = РезультатПоиска.Город;
КонецЕсли;

Важный нюанс: ВетИС использует систему Икар, которая тесно интегрирована с ФИАС. Если объект отсутствует в ФИАС, но есть в Икаре, регистрация также пройдет успешно. Однако в 99% случаев достаточно корректных GUID из ГАР (Государственного адресного реестра).

Шаг 3: Запись данных и отправка в ВетИС

После того как мы получили XML-структуру, ее нужно корректно записать в табличную часть КонтактнаяИнформация объекта и инициировать обмен с ВетИС. Рассмотрим пошаговый алгоритм:

  1. Создаем или получаем объект предприятия (площадки).
  2. Используем метод УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию() для записи XML.
  3. Вызываем методы интеграционного модуля УВС для актуализации данных на сервере.

Пример реализации записи и выгрузки:


// ТекПодр - Ссылка на элемент справочника Предприятия
ТекПодрОбъект = ТекПодр.ПолучитьОбъект();

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

ТекПодрОбъект.Записать();

// Подготавливаем массив для отправки в ВетИС
МассивПредприятий = Новый Массив;
МассивПредприятий.Добавить(ТекПодр);

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

Рекомендации по массовой автоматизации

При работе с большим количеством точек (от 300 и выше), как в случае с местами перегрузки товара, ручной контроль каждого адреса невозможен. Рассмотрим стратегии оптимизации процесса:

Использование сторонних API. Если база ФИАС в 1С не актуальна, используйте сервисы вроде Dadata. Они позволяют передать «грязную» строку адреса и получить в ответ структурированный JSON со всеми кодами ФИАС (fias_id, house_fias_id). Эти ID можно напрямую подставлять в XML-пакет перед записью в 1С.

Проверка типа адреса. В структуре XML обязательно должен быть указан тип АдресРФ. Если система ошибочно определяет адрес как ИностранныйАдрес или СвободнаяФорма, ВетИС вернет ошибку схемы. Убедитесь, что в XML присутствуют узлы СубъектРФ и IDРегион.

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

Резюме

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

← На главную