Как программно получить контактную информацию по объекту в 1С:Бухгалтерия?

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

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

Разберем основные типовые функции общих модулей, которые позволяют быстро и корректно получить контактную информацию как по одному владельцу, так и по списку объектов сразу.

Способ 1. Получение контактной информации одного объекта

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


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

Проанализируем параметры этой функции:

  1. Объект — ссылка на владельца контактной информации (справочник контрагентов, организаций, партнеров и т. д.).
  2. ВидКИ — ссылка на элемент справочника ВидыКонтактнойИнформации. Если параметр не указан, функция вернет данные по всем видам КИ данного объекта.
  3. ТипКИ — значение системного перечисления ТипыКонтактнойИнформации (например, адрес, телефон, адрес электронной почты).
  4. Дата — дата, на которую запрашиваются сведения (актуально для конфигураций с поддержкой версионирования или истории КИ).
  5. ТолькоПредставление — булево значение. Если передать Истина и указать конкретный ВидКИ, функция вернет готовую строку (представление адреса или номера телефона). Если передать Ложь (или опустить вид КИ), метод возвратит полноценную таблицу значений со всеми строками КИ по объекту.

Способ 2. Пакетное получение данных для списка объектов

Когда требуется обработать массив ссылок (например, при формировании отчета или заполнении табличной части документа), вызывать функцию одиночного чтения в цикле крайне не рекомендуется. Это создает избыточную нагрузку на СУБД из-за множества одиночных запросов. В конфигурации «Бухгалтерия предприятия» предусмотрены специализированные процедуры пакетной выборки.

Рассмотрим вызов функции из модуля УправлениеКонтактнойИнформациейБП:


// Формируем массив контрагентов для выборки
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(КонтрагентСсылка1);
МассивОбъектов.Добавить(КонтрагентСсылка2);

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

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


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

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

В результате мы получаем соответствие, в котором ключом выступает ссылка на объект-владелец, а значением — структура с полями контактной информации либо таблица с данными.

Способ 3. Разбор структурированной контактной информации (XML и JSON)

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

Разберем, как преобразовать эти данные в удобный для чтения вид с помощью клиент-серверных методов:


// Если контактная информация хранится в формате XML:
СтруктураАдреса = УправлениеКонтактнойИнформациейКлиентСервер.КонтактнаяИнформацияИзXML(СтрокаXML);

// Если контактная информация хранится в формате JSON:
СтруктураАдреса = УправлениеКонтактнойИнформациейКлиентСервер.КонтактнаяИнформацияИзJSON(СтрокаJSON);

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

Особенности архитектуры и частые ошибки

При работе с подсистемой контактной информации важно помнить о следующих правилах:

  1. Не обращайтесь напрямую к табличным частям: В старых версиях 1С:Бухгалтерии контактные данные дублировались в табличной части справочников. В актуальных релизах редакции 3.0 основным источником правды является независимый регистр сведений КонтактнаяИнформация.
  2. Запросы для высоконагруженных алгоритмов: Если вы разрабатываете сложный отчет на СКД, оптимальнее соединять таблицу объектов напрямую с регистром сведений КонтактнаяИнформация по измерениям Объект и Вид, не прибегая к вызовам общих модулей.
  3. Запись контактной информации: Никогда не создавайте записи напрямую набором записей регистра сведений в обход методов БСП. При прямой записи не будут сформированы структуры представления, не заполнятся идентификаторы ФИАС/ГАР и нарушится целостность формата. Для внесения изменений всегда используйте метод УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(...).
← На главную