Как программно получить адрес организации в 1С:Предприятие 8?

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

В процессе разработки печатных форм или автоматизации документооборота в 1С часто возникает задача получения контактной информации организации, в частности её юридического или фактического адреса — для этого есть шаблон заполнения документов Word контактной информацией из 1С. Сложность заключается в том, что в современных конфигурациях адрес — это не просто строка, а сложная структура данных, хранящаяся в регистрах сведений или табличных частях. В данной статье мы разберем, как правильно извлечь эту информацию, используя как универсальные механизмы Библиотеки стандартных подсистем (БСП), так и специфические функции различных конфигураций.

Разберем основной механизм хранения контактной информации

Прежде чем переходить к коду, проанализируем, где именно хранятся данные. В большинстве современных решений 1С (БП 3.0, ЗУП 3.1, УТ 11) используется механизм БСП. Контактная информация (КИ) может храниться либо в табличной части КонтактнаяИнформация справочника Организации, либо в одноименном регистре сведений. Кроме того, адрес часто хранится во внутреннем формате (XML или JSON), соответствующем классификатору ФИАС/ГАР, что требует специальной обработки для вывода в печатную форму.

Вариант 1: Универсальный метод через функции БСП

Если вы работаете в современной конфигурации на базе БСП, самым правильным и надежным способом будет использование программного интерфейса общего модуля УправлениеКонтактнойИнформацией. Этот метод позволяет получить представление адреса одной строкой.

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


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

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

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


МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаОрганизацию);

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

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

Если ТаблицаКИ.Количество() > 0 Тогда
    ЮридическийАдрес = ТаблицаКИ[0].Представление;
КонецЕсли;

Вариант 2: Получение адреса в «1С:Бухгалтерия предприятия 3.0»

В конфигурации «Бухгалтерия предприятия 3.0» существуют специализированные модули, которые подготавливают данные специально для печатных форм, учитывая все требования учета. Рассмотрим использование модуля БухгалтерскийУчетПереопределяемый.


// СсылкаНаОбъект.Организация — это ссылка на справочник Организации
// ДатаДокумента — дата, на которую нужно получить сведения (важно для истории адресов)
СведенияОбОрганизации = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(СсылкаНаОбъект.Организация, ДатаДокумента);

// Из структуры можно достать юридический адрес
ЮридическийАдрес = СведенияОбОрганизации.ЮридическийАдрес;

Также для БП 3.0 эффективным методом является вызов ОбщегоНазначенияБП.ДанныеПечатиОрганизации. Этот метод за один запрос собирает не только адрес, но и ИНН, КПП, расчетные счета и прочие реквизиты, что существенно ускоряет работу программы — для вывода этих данных в шаблоны разработан модуль автоподстановки реквизитов в договоры 1С.

Вариант 3: Работа в «1С:Зарплата и управление персоналом» (ЗУП)

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


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

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

Вариант 4: Использование запроса к табличной части

Иногда самым быстрым способом (например, внутри сложного отчета на СКД) является прямое обращение к табличной части справочника Организации. Проанализируем пример такого запроса:


ВЫБРАТЬ
    ОрганизацииКонтактнаяИнформация.Представление КАК АдресСтрокой
ИЗ
    Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформация
ГДЕ
    ОрганизацииКонтактнаяИнформация.Ссылка = &Организация
    И ОрганизацииКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
    И ОрганизацииКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресОрганизации)

Обратите внимание на проверку вида контактной информации. Рекомендуется использовать предопределенные элементы (например, ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресОрганизации)), так как поиск по наименованию («Юридический адрес») может привести к ошибкам, если пользователь изменит название в справочнике.

Почему адрес может возвращаться пустым?

Выясним причину ситуации, когда в справочнике адрес визуально заполнен, но программно возвращается пустая строка. Рассмотрим основные причины:

  1. Несоответствие видов КИ: Вы пытаетесь получить ЮрАдресОрганизации, а у конкретной организации заполнен только ФактическийАдресОрганизации.
  2. История изменений: В конфигурации включено хранение истории контактной информации. Если вы запрашиваете данные на 01.01.2023, а адрес был введен 01.02.2023, система вернет пустое значение. Всегда проверяйте дату, передаваемую в параметры функций.
  3. Синхронизация данных: В редких случаях данные в табличной части справочника и в регистре КонтактнаяИнформация могут рассинхронизироваться после некорректных обновлений. В этом случае стоит проверить оба источника.

Рекомендации для разработчиков

Подводя итог, проанализируем лучшие практики для решения этой задачи:

  1. Для простых задач в современных конфигурациях используйте УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации.
  2. Для печатных форм в БП 3.0 используйте БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице — это гарантирует получение данных в том виде, в котором их ожидает бухгалтер.
  3. Всегда передавайте Дату в функции получения адреса, чтобы избежать вывода неактуальных данных в архивных документах.
  4. Если нужно разобрать адрес на части (индекс, регион, город), используйте функции разбора XML/JSON из модуля УправлениеКонтактнойИнформацией, а не пытайтесь парсить строку самостоятельно или искать данные в Поле1...Поле9.

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

← На главную