При разработке печатных форм, отчетов, обработок и механизмов интеграции в конфигурации «Бухгалтерия предприятия» регулярно возникает задача программного извлечения контактной информации (адресов, телефонов, электронной почты) контрагентов, организаций или физических лиц. В современных версиях конфигураций на базе Библиотеки стандартных подсистем (БСП) контактные данные хранятся не в табличных частях справочников, а в специализированном регистре сведений, поэтому прямое обращение к реквизитам объекта не даст нужного результата.
Разберем основные типовые функции общих модулей, которые позволяют быстро и корректно получить контактную информацию как по одному владельцу, так и по списку объектов сразу.
Если перед нами стоит задача получить данные по одной конкретной ссылке (например, юридический адрес выбранного контрагента), воспользуемся функцией общего модуля УправлениеКонтактнойИнформацией. Рассмотрим сигнатуру метода КонтактнаяИнформацияОбъекта:
// Получение строкового представления конкретного вида КИ
ВидКИ = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
АдресКонтрагента = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(
СсылкаНаКонтрагента,
ВидКИ,
,
,
Истина
);
Проанализируем параметры этой функции:
ВидыКонтактнойИнформации. Если параметр не указан, функция вернет данные по всем видам КИ данного объекта.ТипыКонтактнойИнформации (например, адрес, телефон, адрес электронной почты).Истина и указать конкретный ВидКИ, функция вернет готовую строку (представление адреса или номера телефона). Если передать Ложь (или опустить вид КИ), метод возвратит полноценную таблицу значений со всеми строками КИ по объекту.Когда требуется обработать массив ссылок (например, при формировании отчета или заполнении табличной части документа), вызывать функцию одиночного чтения в цикле крайне не рекомендуется. Это создает избыточную нагрузку на СУБД из-за множества одиночных запросов. В конфигурации «Бухгалтерия предприятия» предусмотрены специализированные процедуры пакетной выборки.
Рассмотрим вызов функции из модуля УправлениеКонтактнойИнформациейБП:
// Формируем массив контрагентов для выборки
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(КонтрагентСсылка1);
МассивОбъектов.Добавить(КонтрагентСсылка2);
// Получаем таблицу контактной информации на текущую дату
ТаблицаКИ = УправлениеКонтактнойИнформациейБП.КонтактнаяИнформацияОбъектовНаДату(
МассивОбъектов,
Перечисления.ТипыКонтактнойИнформации.Адрес
);
Также в составе БСП доступен универсальный метод КонтактнаяИнформацияОбъектов общего модуля УправлениеКонтактнойИнформацией. Посмотрим на пример его использования:
МассивВидов = Новый Массив;
МассивВидов.Добавить(Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента);
МассивВидов.Добавить(Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента);
РезультатКИ = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(
МассивОбъектов,
МассивВидов,
ТекущаяДатаСеанса(),
Истина
);
В результате мы получаем соответствие, в котором ключом выступает ссылка на объект-владелец, а значением — структура с полями контактной информации либо таблица с данными.
Нередко требуется получить не просто общую строку адреса, а выделить конкретные составляющие: индекс, регион, город или номер квартиры. В базе данных контактная информация сохраняется как в виде готового представления, так и в виде сериализованной структуры (XML или JSON) в реквизите ЗначенияПолей регистра сведений КонтактнаяИнформация.
Разберем, как преобразовать эти данные в удобный для чтения вид с помощью клиент-серверных методов:
// Если контактная информация хранится в формате XML:
СтруктураАдреса = УправлениеКонтактнойИнформациейКлиентСервер.КонтактнаяИнформацияИзXML(СтрокаXML);
// Если контактная информация хранится в формате JSON:
СтруктураАдреса = УправлениеКонтактнойИнформациейКлиентСервер.КонтактнаяИнформацияИзJSON(СтрокаJSON);
// Получение развернутого описания контакта по объекту и виду:
Описание = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеКонтакта(
СсылкаНаКонтрагента,
Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента
);
При работе с подсистемой контактной информации важно помнить о следующих правилах:
КонтактнаяИнформация.КонтактнаяИнформация по измерениям Объект и Вид, не прибегая к вызовам общих модулей.УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(...).