Как программно получить контактную информацию организации в 1С:УНФ

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

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

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

Способ 1: Использование программного интерфейса ПечатьДокументовУНФ

В актуальных версиях УНФ (включая 3.0) разработчики предусмотрели удобный механизм получения сводных данных об организации. Этот метод наиболее предпочтителен, так как он автоматически учитывает актуальность данных на конкретную дату и корректно обрабатывает типы данных. Разберем этот алгоритм на примере.

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


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

// 2. Формируем список необходимых полей через запятую
// Доступные поля: ПолноеНаименование, ИНН, ЮридическийАдрес, Телефоны, Факс, НомерСчета и др.
ПоляПредставления = "ПолноеНаименование,ИНН,ЮридическийАдрес,Телефоны";

// 3. Извлекаем строковое представление данных
КонтактыОрганизации = ПечатьДокументовУНФ.ОписаниеОрганизации(СведенияОбОрганизации, ПоляПредставления);

Почему это удобно? Функция ОписаниеОрганизации сама собирает строку из полученных данных. Если вам нужно вывести адрес и телефон в одну строку для шапки документа, этот метод сэкономит вам массу времени на конкатенацию строк и проверки на пустые значения.

Способ 2: Прямое обращение к общим модулям БСП

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

Для получения представления (текста) адреса или телефона используйте следующую конструкцию:


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

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

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

Способ 3: Получение данных через запрос (для опытных разработчиков)

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


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

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


ВЫБРАТЬ
    КИ.Представление
ИЗ
    РегистрСведений.КонтактнаяИнформация КАК КИ
ГДЕ
    КИ.Объект = &Организация
    И КИ.Вид = &ВидКИ

Способ 4: Работа с детализацией адреса (JSON)

В современных конфигурациях 1С адрес хранится в сложном формате JSON (поле ЗначенияПолей). Если вам недостаточно простого строкового представления и вы хотите получить, например, только индекс или только город, необходимо использовать механизмы парсинга БСП.

Разберем, как превратить внутреннюю строку хранения в удобную структуру:

  1. Сначала получаем значение из поля ЗначенияПолей через запрос или программно.
  2. Используем функцию УправлениеКонтактнойИнформацией.ДетализацияАдреса(ЗначениеПолей).

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

Способ 5: Получение данных через менеджер контактной информации

Для создания максимально универсального кода, который будет работать даже после масштабных обновлений конфигурации, мы рекомендуем использовать метод СоздатьМенеджерКонтактнойИнформации. Этот программный объект сам определяет, в каких метаданных (табличных частях или регистрах) на данный момент хранятся данные.

Рассмотрим пример получения данных:


Менеджер = УправлениеКонтактнойИнформацией.СоздатьМенеджерКонтактнойИнформации(ОрганизацияСсылка);
ДанныеКИ = Менеджер.Данные();
// Теперь в ДанныеКИ содержится коллекция всех доступных контактов объекта

Советы по оптимизации и стабильности кода

Проанализируем несколько критически важных моментов, которые часто упускают при разработке в УНФ:

Выбор конкретного способа зависит от вашей задачи. Для печатных форм идеален Способ 1, для простых разовых операций в коде — Способ 2, а для высокопроизводительных отчетов — Способ 3 с использованием регистров сведений.

← На главную