Как программно создать физлицо и заполнить адрес в формате ФИАС в 1С:Документооборот

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

При автоматизации загрузки данных в «1С:Документооборот» (особенно версии КОРП 2.1) одной из самых трудоемких задач является программное заполнение контактной информации. Обычного создания элемента справочника ФизическиеЛица недостаточно — необходимо корректно прописать данные в табличную часть КонтактнаяИнформация, чтобы они не только хранились в базе, но и правильно отображались в интерфейсе, а также проходили проверку по классификатору ФИАС.

В этой статье мы подробно разберем, как использовать механизмы Библиотеки стандартных подсистем (БСП) для решения этой задачи. Мы пройдем путь от создания объекта до формирования сложной структуры адреса, которая будет распознана системой как валидная.

Основы работы с контактной информацией в БСП

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

Для работы с КИ в 1С предусмотрены общие модули: УправлениеКонтактнойИнформацией и РаботаСАдресами. Рассмотрим пошагово, как ими пользоваться.

Шаг 1. Создание объекта и подготовка данных

Проанализируем типичную ситуацию: у нас есть ФИО физического лица и его номер телефона. Сначала создадим сам элемент справочника. Обратите внимание на оптимизацию: записывать объект дважды (до и после добавления контактов) не всегда эффективно. Рассмотрим, как сделать это правильно.

Проанализируем пример кода для создания физического лица и добавления номера телефона:


НовоеФЛ = Справочники.ФизическиеЛица.СоздатьЭлемент();
НовоеФЛ.Наименование = "Иванов Иван Иванович";
НовоеФЛ.ГруппаДоступа = Справочники.ГруппыДоступаФизическихЛиц.НайтиПоНаименованию("Контрагенты");

// Предварительно записывать не обязательно, если мы передаем объект в метод добавления КИ
// НовоеФЛ.Записать(); 

// Подготовим структуру телефона
ТелефонСтруктура = Новый Структура;
ТелефонСтруктура.Вставить("Представление", "+7 (123) 456-78-90");
ТелефонСтруктура.Вставить("КодСтраны", "7");
ТелефонСтруктура.Вставить("КодГорода", "123");
ТелефонСтруктура.Вставить("НомерТелефона", "456-78-90");

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

// Важный момент: выбор правильного Вида контактной информации
ВидКИ = Справочники.ВидыКонтактнойИнформации.МобильныйТелефонФизическогоЛица;

// Добавляем информацию в объект (не в ссылку!)
УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию(НовоеФЛ, ТелефонJSON, ВидКИ, ТекущаяДата(), Ложь);

// Теперь записываем объект один раз со всеми данными
НовоеФЛ.Записать();

Шаг 2. Проблема пустого поля на форме

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

В «1С:Документооборот» и других конфигурациях на БСП состав полей на форме часто формируется динамически. Если вы указали неверный ВидКонтактнойИнформации, форма просто не «подтянет» данные в нужный элемент управления. Например, вместо общего Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента для физического лица в ДО КОРП следует использовать Справочники.ВидыКонтактнойИнформации.МобильныйТелефонФизическогоЛица. Всегда проверяйте точное наименование предопределенных элементов в вашей конкретной базе.

Шаг 3. Формирование адреса в формате ФИАС

Самое сложное — это загрузка адреса так, чтобы кнопка «Проверить заполнение» не выдавала ошибок, а адрес считался структурированным. Если просто передать строку в поле КИ, система воспримет это как «адрес в свободной форме».

Для того чтобы адрес «лег» правильно, необходимо использовать функции поиска по классификатору. Разберем, как программно превратить строку в JSON с данными ФИАС:


СтрокаАдреса = "127051, г. Москва, ул. Петровка, д. 38";
ВидАдреса = Справочники.ВидыКонтактнойИнформации.АдресМестаЖительстваФизическогоЛица;

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

// Если нам нужно гарантировать структурированность, используем РаботаСАдресами
// Можно предварительно найти адрес в классификаторе:
СтруктураАдреса = РаботаСАдресами.СведенияОбАдресе(СтрокаАдреса);
// Система вернет структуру с GUID-ами ФИАС, если адрес найден

УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию(НовоеФЛ, АдресJSON, ВидАдреса, ТекущаяДата(), Истина);

Разбор нюансов валидации

Рассмотрим подробнее, почему адрес может не проходить проверку. Система считает адрес корректным, когда в поле ЗначенияПолей (внутренний JSON/XML) присутствуют идентификаторы (GUID) из адресного классификатора.

Если вы загружаете данные из внешнего файла (например, XML или CSV), где адрес уже разбит по полям (город, улица, дом), рекомендуем следующий алгоритм:

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

Использование веб-сервиса проверки

Если в вашей базе не загружен полный классификатор ФИАС (так как он занимает много места), убедитесь, что включена поддержка 1С:Контрагент или облачный классификатор. В этом случае метод УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению будет обращаться к серверам 1С для получения структуры адреса.

Проверим доступность сервиса программно:


Если РаботаСАдресами.ИспользоватьСервисПроверкиАдресов() Тогда
    // Можно выполнять нормализацию строки через облако
КонецЕсли;

Резюме для реализации

Подведем итоги нашего анализа. Для успешного программного создания физического лица с данными ФИАС необходимо:

  1. Работать с объектом справочника, а не со ссылкой, чтобы минимизировать количество обращений к базе данных.
  2. Использовать модуль УправлениеКонтактнойИнформацией для преобразования данных в JSON.
  3. Тщательно подбирать ВидКонтактнойИнформации, соответствующий метаданным вашей конфигурации (в ДО КОРП они отличаются от БП или ЗУП).
  4. Стремиться к заполнению не только текстового представления, но и структуры ЗначенияПолей через функции поиска в классификаторе РаботаСАдресами.СведенияОбАдресе.

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

← На главную