При автоматизации загрузки данных в «1С:Документооборот» (особенно версии КОРП 2.1) одной из самых трудоемких задач является программное заполнение контактной информации. Обычного создания элемента справочника ФизическиеЛица недостаточно — необходимо корректно прописать данные в табличную часть КонтактнаяИнформация, чтобы они не только хранились в базе, но и правильно отображались в интерфейсе, а также проходили проверку по классификатору ФИАС.
В этой статье мы подробно разберем, как использовать механизмы Библиотеки стандартных подсистем (БСП) для решения этой задачи. Мы пройдем путь от создания объекта до формирования сложной структуры адреса, которая будет распознана системой как валидная.
В современных конфигурациях 1С данные контактной информации (КИ) хранятся в специальной табличной части объекта. Важно понимать, что КИ состоит не только из текстового представления, которое видит пользователь, но и из скрытых полей в форматах XML или JSON. Именно в этих строках зашифрованы идентификаторы ФИАС, коды стран, регионов и другие структурные единицы.
Для работы с КИ в 1С предусмотрены общие модули: УправлениеКонтактнойИнформацией и РаботаСАдресами. Рассмотрим пошагово, как ими пользоваться.
Проанализируем типичную ситуацию: у нас есть ФИО физического лица и его номер телефона. Сначала создадим сам элемент справочника. Обратите внимание на оптимизацию: записывать объект дважды (до и после добавления контактов) не всегда эффективно. Рассмотрим, как сделать это правильно.
Проанализируем пример кода для создания физического лица и добавления номера телефона:
НовоеФЛ = Справочники.ФизическиеЛица.СоздатьЭлемент();
НовоеФЛ.Наименование = "Иванов Иван Иванович";
НовоеФЛ.ГруппаДоступа = Справочники.ГруппыДоступаФизическихЛиц.НайтиПоНаименованию("Контрагенты");
// Предварительно записывать не обязательно, если мы передаем объект в метод добавления КИ
// НовоеФЛ.Записать();
// Подготовим структуру телефона
ТелефонСтруктура = Новый Структура;
ТелефонСтруктура.Вставить("Представление", "+7 (123) 456-78-90");
ТелефонСтруктура.Вставить("КодСтраны", "7");
ТелефонСтруктура.Вставить("КодГорода", "123");
ТелефонСтруктура.Вставить("НомерТелефона", "456-78-90");
// Преобразуем в формат XML/JSON через стандартные функции
ТелефонXML = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(ТелефонСтруктура, "", Перечисления.ТипыКонтактнойИнформации.Телефон);
ТелефонJSON = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(ТелефонXML);
// Важный момент: выбор правильного Вида контактной информации
ВидКИ = Справочники.ВидыКонтактнойИнформации.МобильныйТелефонФизическогоЛица;
// Добавляем информацию в объект (не в ссылку!)
УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию(НовоеФЛ, ТелефонJSON, ВидКИ, ТекущаяДата(), Ложь);
// Теперь записываем объект один раз со всеми данными
НовоеФЛ.Записать();
Часто программисты сталкиваются с тем, что после выполнения кода данные в базе есть (их видно через консоль запросов в табличной части КонтактнаяИнформация), но при открытии карточки физлица поля телефона или адреса остаются пустыми. Выясним причину этого поведения.
В «1С:Документооборот» и других конфигурациях на БСП состав полей на форме часто формируется динамически. Если вы указали неверный ВидКонтактнойИнформации, форма просто не «подтянет» данные в нужный элемент управления. Например, вместо общего Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента для физического лица в ДО КОРП следует использовать Справочники.ВидыКонтактнойИнформации.МобильныйТелефонФизическогоЛица. Всегда проверяйте точное наименование предопределенных элементов в вашей конкретной базе.
Самое сложное — это загрузка адреса так, чтобы кнопка «Проверить заполнение» не выдавала ошибок, а адрес считался структурированным. Если просто передать строку в поле КИ, система воспримет это как «адрес в свободной форме».
Для того чтобы адрес «лег» правильно, необходимо использовать функции поиска по классификатору. Разберем, как программно превратить строку в JSON с данными ФИАС:
СтрокаАдреса = "127051, г. Москва, ул. Петровка, д. 38";
ВидАдреса = Справочники.ВидыКонтактнойИнформации.АдресМестаЖительстваФизическогоЛица;
// Метод КонтактнаяИнформацияПоПредставлению пытается распарсить строку
// Для полноценного ФИАС рекомендуется, чтобы в системе был подключен интернет-поддержка
АдресJSON = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(СтрокаАдреса, ВидАдреса);
// Если нам нужно гарантировать структурированность, используем РаботаСАдресами
// Можно предварительно найти адрес в классификаторе:
СтруктураАдреса = РаботаСАдресами.СведенияОбАдресе(СтрокаАдреса);
// Система вернет структуру с GUID-ами ФИАС, если адрес найден
УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию(НовоеФЛ, АдресJSON, ВидАдреса, ТекущаяДата(), Истина);
Рассмотрим подробнее, почему адрес может не проходить проверку. Система считает адрес корректным, когда в поле ЗначенияПолей (внутренний JSON/XML) присутствуют идентификаторы (GUID) из адресного классификатора.
Если вы загружаете данные из внешнего файла (например, XML или CSV), где адрес уже разбит по полям (город, улица, дом), рекомендуем следующий алгоритм:
Город, Улица, Дом и т.д.РаботаСАдресами.АдресВФорматеJSON(СтруктураАдреса).Если в вашей базе не загружен полный классификатор ФИАС (так как он занимает много места), убедитесь, что включена поддержка 1С:Контрагент или облачный классификатор. В этом случае метод УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению будет обращаться к серверам 1С для получения структуры адреса.
Проверим доступность сервиса программно:
Если РаботаСАдресами.ИспользоватьСервисПроверкиАдресов() Тогда
// Можно выполнять нормализацию строки через облако
КонецЕсли;
Подведем итоги нашего анализа. Для успешного программного создания физического лица с данными ФИАС необходимо:
УправлениеКонтактнойИнформацией для преобразования данных в JSON.ВидКонтактнойИнформации, соответствующий метаданным вашей конфигурации (в ДО КОРП они отличаются от БП или ЗУП).ЗначенияПолей через функции поиска в классификаторе РаботаСАдресами.СведенияОбАдресе.При соблюдении этих правил загруженные физические лица будут иметь корректные, валидные адреса, которые будут открываться в карточке со всеми заполненными полями (индекс, город, улица, дом) в отдельных строках, как того требует формат ФИАС.