При разработке отчетов в системе компоновки данных (СКД) часто возникает задача вывода контактной информации, такой как юридический адрес, телефон или электронная почта. В современных типовых конфигурациях 1С, основанных на библиотеке стандартных подсистем (БСП), структура хранения этих данных изменилась: регистр сведений КонтактнаяИнформация был упразднен, а данные перенесены непосредственно в табличные части справочников.
Для того чтобы вытащить юридический адрес контрагента, необходимо обратиться к табличной части КонтактнаяИнформация, которая есть в справочнике Контрагенты. Важно понимать, что данные там хранятся построчно, где каждая строка соответствует определенному виду контакта (например, «Юридический адрес», «Телефон», «Email»).
Чтобы отфильтровать нужный нам адрес, мы должны использовать условие по полю Вид. Это поле ссылается на справочник ВидыКонтактнойИнформации. Чтобы запрос работал корректно в СКД, мы будем использовать параметры.
Рассмотрим пошагово, как правильно организовать получение адреса:
КонтактнаяИнформация.
ВЫБРАТЬ
Контрагенты.Наименование,
КонтактнаяИнформация.Представление КАК ЮрАдрес
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ
Справочник.Контрагенты.КонтактнаяИнформация КАК КонтактнаяИнформация
ПО
Контрагенты.Ссылка = КонтактнаяИнформация.Ссылка
И КонтактнаяИнформация.Вид = &ВидКонтакта
Многие разработчики сталкиваются с тем, что параметры виртуальных таблиц или параметры запроса не сразу становятся доступными для настройки. Чтобы параметр &ВидКонтакта появился на закладке «Параметры» в настройках СКД:
1. Убедитесь, что вы явно прописали &ВидКонтакта в тексте запроса.
2. Перейдите на вкладку «Параметры» в конструкторе СКД. Система автоматически подхватит параметр из запроса.
3. В колонке «Выражение» для данного параметра установите значение:
ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.ЮрАдресКонтрагента")
Этот метод позволяет жестко привязать тип данных к нужному предопределенному элементу, что гарантирует правильный отбор адреса.
Часто требуется вывести приоритетный контактный адрес или e-mail, выбирая его либо из карточки контрагента, либо из контактного лица. Если обычная функция ЕСТЬNULL не подходит (например, если поле заполнено пустой строкой, а не значением NULL), используйте конструкцию ВЫБОР.
Рассмотрим пример объединения e-mail контрагента и его контактного лица:
ВЫБОР
КОГДА ЕСТЬNULL(Контрагенты.Email, "") <> ""
ТОГДА Контрагенты.Email
ИНАЧЕ ЕСТЬNULL(Контрагенты.КонтактноеЛицо.Email, "")
КОНЕЦ КАК ОсновнойEmail
Данная конструкция проверяет, является ли e-mail контрагента непустым. Если он заполнен, система выводит его. Если же поле пустое, выполняется проверка второго источника (контактного лица), и выводится его адрес электронной почты. Это позволяет избежать появления пустых строк и обеспечить полноту данных в отчете.
Помните, что поле ЗначенияПолей в табличной части КонтактнаяИнформация хранит данные в формате XML. Если вам нужно извлечь отдельные части адреса (например, только город или почтовый индекс), используйте вычисляемые поля в СКД.
В выражении вычисляемого поля вы можете вызывать экспортные функции общих модулей, например УправлениеКонтактнойИнформациейКлиентСервер.СведенияОбАдресе. Это позволит разобрать XML-строку и получить структурированные данные без усложнения основного запроса к базе данных.
Таким образом, работа с контактной информацией в современных версиях 1С сводится к правильной фильтрации табличных частей и умелому использованию параметров и условных выражений в СКД.