При автоматизации процессов в 1С:Бухгалтерия Предприятия 3.0 (БП 3.0) часто возникает задача программного создания элементов справочника Организации. Если заполнение ИНН, КПП или наименования не вызывает сложностей, то работа с адресами может поставить в тупик. Это связано с тем, что в современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), контактная информация хранится не в виде простых строк, а в сложном сериализованном формате.
В этой статье мы подробно разберем, где именно хранятся адресные данные, как устроена структура контактной информации и какими методами следует пользоваться для её корректной записи, чтобы адрес правильно отображался в интерфейсе и распознавался адресным классификатором (ФИАС/ГАР).
Проанализируем структуру хранения данных. Начиная с определенных версий БСП, разработчики отказались от хранения контактной информации исключительно в регистрах сведений для основных справочников. Теперь в справочнике Организации существует табличная часть под названием КонтактнаяИнформация.
Рассмотрим основные реквизиты этой табличной части:
ТипыКонтактнойИнформации (например, Адрес, Телефон, Электронная почта).ВидыКонтактнойИнформации. Это конкретизация (например, «Юридический адрес» или «Фактический адрес»).Если вы попытаетесь просто записать строку в Представление, не заполнив ЗначенияПолей, то при открытии карточки организации программа может не «увидеть» адрес в полях ввода, так как она пытается распарсить именно внутреннюю структуру из ЗначенияПолей.
Выясним причину, почему не стоит формировать строку ЗначенияПолей вручную. Формат JSON или XML для адресов в 1С достаточно сложен и может меняться от версии к версии. Для корректной работы следует использовать программный интерфейс БСП, а именно общий модуль УправлениеКонтактнойИнформацией.
Рассмотрим по шагам процесс программного создания организации с заполнением юридического адреса.
Для начала нам нужно подготовить данные в формате, который понимает система. Обычно это структура, где ключами являются названия адресных элементов.
// Подготовим структуру с составляющими адреса
СтруктураАдреса = Новый Структура;
СтруктураАдреса.Вставить("Индекс", "123456");
СтруктураАдреса.Вставить("Регион", "г. Москва");
СтруктураАдреса.Вставить("Город", "Москва г");
СтруктураАдреса.Вставить("Улица", "Ленина ул");
СтруктураАдреса.Вставить("Дом", "10");
Теперь воспользуемся методами общего модуля, чтобы получить готовое текстовое представление и сериализованную строку для поля ЗначенияПолей. Проанализируем следующий фрагмент кода:
// Определим вид контактной информации (Юридический адрес организации)
ВидАдреса = Справочники.ВидыКонтактнойИнформации.ЮридическийАдресОрганизации;
// Используем функцию модуля КИ для формирования нужных строк
ДанныеАдреса = УправлениеКонтактнойИнформацией.СформироватьПредставлениеИЗначенияПолей(СтруктураАдреса, ВидАдреса);
// На выходе мы получим структуру с полями:
// ДанныеАдреса.Представление
// ДанныеАдреса.ЗначенияПолей
Теперь объединим всё вместе. Создадим объект организации и заполним его табличную часть. Разберем пример реализации полноценной процедуры:
Процедура СоздатьОрганизациюСАдресом()
// Создаем новый элемент справочника
НоваяОрганизация = Справочники.Организации.СоздатьЭлемент();
НоваяОрганизация.Наименование = "ООО 'Новая Компания'";
НоваяОрганизация.НаименованиеПолное = "Общество с ограниченной ответственностью 'Новая Компания'";
НоваяОрганизация.ИНН = "7700000000";
// Получаем ссылку на вид контактной информации
// В БП 3.0 это обычно предопределенный элемент
ВидКИ = Справочники.ВидыКонтактнойИнформации.ЮридическийАдресОрганизации;
ТипКИ = Перечисления.ТипыКонтактнойИнформации.Адрес;
// Заполняем составляющие адреса
АдресныеДанные = Новый Структура;
АдресныеДанные.Вставить("Страна", "РОССИЯ");
АдресныеДанные.Вставить("Индекс", "101000");
АдресныеДанные.Вставить("Регион", "77"); // Код региона
АдресныеДанные.Вставить("Город", "Москва г");
АдресныеДанные.Вставить("Улица", "Мясницкая ул");
АдресныеДанные.Вставить("Дом", "1");
// Формируем внутренние данные КИ
РезультатЗаполнения = УправлениеКонтактнойИнформацией.СформироватьПредставлениеИЗначенияПолей(АдресныеДанные, ВидКИ);
// Добавляем строку в табличную часть организации
НоваяСтрока = НоваяОрганизация.КонтактнаяИнформация.Добавить();
НоваяСтрока.Тип = ТипКИ;
НоваяСтрока.Вид = ВидКИ;
НоваяСтрока.Представление = РезультатЗаполнения.Представление;
НоваяСтрока.ЗначенияПолей = РезультатЗаполнения.ЗначенияПолей;
// Записываем объект
Попытка
НоваяОрганизация.Записать();
Сообщить("Организация успешно создана!");
Исключение
Сообщить("Ошибка при записи: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
В составе БСП есть еще более универсальный метод, который позволяет записывать КИ, не работая напрямую с табличными частями. Это особенно полезно, если вы не хотите вникать в то, где именно в текущей версии конфигурации лежат данные (в ТЧ или в регистре). Рассмотрим этот способ:
// Подготовка объекта к записи
ОбъектОрганизация = Справочники.Организации.СоздатьЭлемент();
// ... заполнение основных реквизитов ...
ОбъектОрганизация.Записать(); // Сначала нужно записать сам объект, чтобы получить ссылку
// Заполнение структуры адреса
СтруктураАдреса = Новый Структура("Город, Улица, Дом", "г. Тверь", "ул. Советская", "5");
// Вызов универсального метода
УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(ОбъектОрганизация.Ссылка, СтруктураАдреса, ВидКИ, ТипКИ);
Важный нюанс: метод ЗаписатьКонтактнуюИнформацию работает непосредственно с базой данных (выполняет Update), поэтому его лучше вызывать уже после того, как основной объект организации был записан и у него появилась ссылка.
Проанализируем ситуацию, когда адрес должен быть не просто «текстом», а юридически значимым для сдачи отчетности. Для этого в структуру адреса крайне желательно передавать идентификаторы из адресного классификатора. Если вы просто передадите строку «Москва», система попытается сопоставить её, но гарантии корректности нет.
Рекомендуется использовать методы поиска по ФИАС из модуля РаботаСАдреснымКлассификатором, чтобы получить точные идентификаторы (GUID) для города, улицы и дома. Это обеспечит стопроцентную валидность адреса при проверке отчетности в налоговую.
Мы выяснили, что программное создание организации требует особого подхода к заполнению контактной информации. Основные выводы:
КонтактнаяИнформация справочника Организации.ЗначенияПолей, где данные лежат в формате JSON или XML.УправлениеКонтактнойИнформацией.Представление без заполнения ЗначенияПолей сделает адрес «невидимым» для стандартных форм редактирования.Следуя этим правилам и используя приведенные примеры кода, вы сможете корректно автоматизировать процесс создания организаций в вашей информационной базе.