Как программно создать организацию и заполнить её адрес в 1С:Бухгалтерия 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При автоматизации процессов в 1С:Бухгалтерия Предприятия 3.0 (БП 3.0) часто возникает задача программного создания элементов справочника Организации. Если заполнение ИНН, КПП или наименования не вызывает сложностей, то работа с адресами может поставить в тупик. Это связано с тем, что в современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), контактная информация хранится не в виде простых строк, а в сложном сериализованном формате.

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

Где хранятся данные адреса?

Проанализируем структуру хранения данных. Начиная с определенных версий БСП, разработчики отказались от хранения контактной информации исключительно в регистрах сведений для основных справочников. Теперь в справочнике Организации существует табличная часть под названием КонтактнаяИнформация.

Рассмотрим основные реквизиты этой табличной части:

Если вы попытаетесь просто записать строку в Представление, не заполнив ЗначенияПолей, то при открытии карточки организации программа может не «увидеть» адрес в полях ввода, так как она пытается распарсить именно внутреннюю структуру из ЗначенияПолей.

Использование общих модулей для работы с КИ

Выясним причину, почему не стоит формировать строку ЗначенияПолей вручную. Формат JSON или XML для адресов в 1С достаточно сложен и может меняться от версии к версии. Для корректной работы следует использовать программный интерфейс БСП, а именно общий модуль УправлениеКонтактнойИнформацией.

Рассмотрим по шагам процесс программного создания организации с заполнением юридического адреса.

Шаг 1: Подготовка структуры адреса

Для начала нам нужно подготовить данные в формате, который понимает система. Обычно это структура, где ключами являются названия адресных элементов.


// Подготовим структуру с составляющими адреса
СтруктураАдреса = Новый Структура;
СтруктураАдреса.Вставить("Индекс", "123456");
СтруктураАдреса.Вставить("Регион", "г. Москва");
СтруктураАдреса.Вставить("Город", "Москва г");
СтруктураАдреса.Вставить("Улица", "Ленина ул");
СтруктураАдреса.Вставить("Дом", "10");

Шаг 2: Генерация значений для записи

Теперь воспользуемся методами общего модуля, чтобы получить готовое текстовое представление и сериализованную строку для поля ЗначенияПолей. Проанализируем следующий фрагмент кода:


// Определим вид контактной информации (Юридический адрес организации)
ВидАдреса = Справочники.ВидыКонтактнойИнформации.ЮридическийАдресОрганизации;

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

// На выходе мы получим структуру с полями:
// ДанныеАдреса.Представление
// ДанныеАдреса.ЗначенияПолей

Шаг 3: Программное создание организации

Теперь объединим всё вместе. Создадим объект организации и заполним его табличную часть. Разберем пример реализации полноценной процедуры:


Процедура СоздатьОрганизациюСАдресом()
    
    // Создаем новый элемент справочника
    НоваяОрганизация = Справочники.Организации.СоздатьЭлемент();
    НоваяОрганизация.Наименование = "ООО 'Новая Компания'";
    НоваяОрганизация.НаименованиеПолное = "Общество с ограниченной ответственностью 'Новая Компания'";
    НоваяОрганизация.ИНН = "7700000000";
    
    // Получаем ссылку на вид контактной информации
    // В БП 3.0 это обычно предопределенный элемент
    ВидКИ = Справочники.ВидыКонтактнойИнформации.ЮридическийАдресОрганизации;
    ТипКИ = Перечисления.ТипыКонтактнойИнформации.Адрес;
    
    // Заполняем составляющие адреса
    АдресныеДанные = Новый Структура;
    АдресныеДанные.Вставить("Страна", "РОССИЯ");
    АдресныеДанные.Вставить("Индекс", "101000");
    АдресныеДанные.Вставить("Регион", "77"); // Код региона
    АдресныеДанные.Вставить("Город", "Москва г");
    АдресныеДанные.Вставить("Улица", "Мясницкая ул");
    АдресныеДанные.Вставить("Дом", "1");

    // Формируем внутренние данные КИ
    РезультатЗаполнения = УправлениеКонтактнойИнформацией.СформироватьПредставлениеИЗначенияПолей(АдресныеДанные, ВидКИ);
    
    // Добавляем строку в табличную часть организации
    НоваяСтрока = НоваяОрганизация.КонтактнаяИнформация.Добавить();
    НоваяСтрока.Тип = ТипКИ;
    НоваяСтрока.Вид = ВидКИ;
    НоваяСтрока.Представление = РезультатЗаполнения.Представление;
    НоваяСтрока.ЗначенияПолей = РезультатЗаполнения.ЗначенияПолей;
    
    // Записываем объект
    Попытка
        НоваяОрганизация.Записать();
        Сообщить("Организация успешно создана!");
    Исключение
        Сообщить("Ошибка при записи: " + ОписаниеОшибки());
    КонецПопытки;
    
КонецПроцедуры

Альтернативный метод: ЗаписатьКонтактнуюИнформацию

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


// Подготовка объекта к записи
ОбъектОрганизация = Справочники.Организации.СоздатьЭлемент();
// ... заполнение основных реквизитов ...
ОбъектОрганизация.Записать(); // Сначала нужно записать сам объект, чтобы получить ссылку

// Заполнение структуры адреса
СтруктураАдреса = Новый Структура("Город, Улица, Дом", "г. Тверь", "ул. Советская", "5");

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

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

Работа с ФИАС и ГАР

Проанализируем ситуацию, когда адрес должен быть не просто «текстом», а юридически значимым для сдачи отчетности. Для этого в структуру адреса крайне желательно передавать идентификаторы из адресного классификатора. Если вы просто передадите строку «Москва», система попытается сопоставить её, но гарантии корректности нет.

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

Подведем итоги

Мы выяснили, что программное создание организации требует особого подхода к заполнению контактной информации. Основные выводы:

  1. Адреса в БП 3.0 хранятся в табличной части КонтактнаяИнформация справочника Организации.
  2. Главное поле для хранения структуры — ЗначенияПолей, где данные лежат в формате JSON или XML.
  3. Для формирования этого поля обязательно используйте функции общего модуля УправлениеКонтактнойИнформацией.
  4. Прямая запись текста в Представление без заполнения ЗначенияПолей сделает адрес «невидимым» для стандартных форм редактирования.

Следуя этим правилам и используя приведенные примеры кода, вы сможете корректно автоматизировать процесс создания организаций в вашей информационной базе.

← На главную