1C:Документооборот ПРОФ, КОРП, ДГУ
25.02.2016
Справочник Корреспонденты содержит в себе основные и вспомогательные реквизиты, а также таблицы контактной информации и дополнительных реквизитов. Весьма важным реквизитом корреспондента является Вид корреспондента, который может принимать такие значения как "Юридическое лицо", "Физическое лицо", "Индивидуальный предприниматель" и "Юридическое лицо за пределами РФ". В зависимости от вида, у корреспондента меняются определенные реквизиты, контактная информация и контактные лица.
Таблица справочника Контактная информация хранит в себе всю контактную информацию по корреспонденту в виде ссылки на свойство (это значение отдельного справочника "Вид контактной информации") и значения этого свойства. Таким образом, всю контактную информацию о корреспонденте можно получить из данной таблицы.
Сами виды контактной информации задаются в справочнике Виды контактной информации в разделе Нормативно-справочная информация. В нем есть предопределенные элементы, такие как Email, "Телефон", "Почтовый адрес" и пр. Но пользователи могут добавлять и свои элементы. При этом важным реквизитом вида контактной информации является "Тип", который может принимать один из шести значений: "Адрес", "Телефон", "Адрес электронной почты", "Веб-страница", "Факс" и "Другое". В зависимости от этого типа, программа понимает, как обрабатывать поле данного типа в карточке корреспондента. Например, для типа "Адрес" автоматически подключается адресный классификатор, а для "Телефона" специальная форма ввода телефонов.
Виды контактной информации справочника Корреспонденты:
У справочника Корреспонденты есть подчиненный справочник Контактные лица, который содержит контактные данные контактных лиц корреспондента, например, мобильный телефон директора или электронную почту менеджера. Контактная информация контактных лиц также содержится в одноименной таблице справочника.
Рассмотрим примеры получения контактной информации по корреспонденту.
Копировать в буфер обменаЗапрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтактнаяИнформация.Ссылка КАК Коррепсондент, | КонтактнаяИнформация.Вид КАК Вид, | КонтактнаяИнформация.Тип КАК Тип, | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, | КонтактнаяИнформация.Представление КАК Представление |ИЗ | Справочник.Корреспонденты.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Ссылка = &Корреспондент"; Запрос.Параметры.Вставить("Корреспондент", ИскомыйКорреспондент); Выборка = Запрос.Выполнить().Выбрать();
Данный запрос вернет таблицу всей контактной информации искомого корреспондента.
Данный код вернет таблицу всей контактной информации искомого корреспондента и всех его контактных лиц:
Копировать в буфер обменаЗапрос.Текст = "ВЫБРАТЬ | КонтактнаяИнформация.Ссылка КАК Коррепсондент, | """" КАК КонтактноеЛицо, | КонтактнаяИнформация.Вид КАК Вид, | КонтактнаяИнформация.Тип КАК Тип, | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, | КонтактнаяИнформация.Представление КАК Представление |ИЗ | Справочник.Корреспонденты.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Ссылка = &Корреспондент | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | КонтактнаяИнформация.Ссылка.Владелец, | КонтактнаяИнформация.Ссылка, | КонтактнаяИнформация.Вид, | КонтактнаяИнформация.Тип, | КонтактнаяИнформация.ЗначенияПолей, | КонтактнаяИнформация.Представление |ИЗ | Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Ссылка.Владелец = &Корреспондент"; Запрос.Параметры.Вставить("Корреспондент", ИскомыйКорреспондент); Выборка = Запрос.Выполнить().Выбрать();
Помимо запросов, описанных выше, для работы с контактной информацией в программе можно воспользоваться и стандартными процедурами и функциями. Все такие процедуры расположены в общих модулях УправлениеКонтактнойИнформациейКлиентСервер, УправлениеКонтактнойИнформацией, УправлениеКонтактнойИнформациейКлиент.
Например, рассмотрим следующую функцию:
Копировать в буфер обменаФункция ПолучитьКонтактнуюИнформация(Корреспондент) КонтактнаяИнформация = Новый Структура; Емайл = "";Телефон = ""; Если ТипЗнч(Корреспондент) = Тип("СправочникСсылка.Корреспонденты") Тогда Емайл = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(Корреспондент, Справочники.ВидыКонтактнойИнформации.EmailКорреспондента); Телефон = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(Корреспондент, Справочники.ВидыКонтактнойИнформации.ТелефонКорреспондента); КонецЕсли; Если ЗначениеЗаполнено(Телефон) Тогда КонтактнаяИнформация.Вставить("Телефон", СтрШаблон( НСтр("ru = 'Телефон: %1'"), Телефон)); Иначе КонтактнаяИнформация.Вставить("Телефон", Телефон); КонецЕсли; КонтактнаяИнформация.Вставить("Емайл", Емайл); Возврат КонтактнаяИнформация; КонецФункции
Функция получает значение "Телефона" и "Email адреса" корреспондента. При этом основана она на общей функции УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта (Ссылка, ВидКонтактнойИнформации), с помощью которой можно получить любой тип контактной информации по любому объекту, содержащем контактную информацию.
Также полезной может быть функция КонтактнаяИнформацияОбъектов (МассивОбъектов, ТипыКИ = Неопределено, ВидыКИ = Неопределено) — предназначена для получения контактной информации для нескольких объектов.
УправлениеКонтактнойИнформациейКлиентСервер. СформироватьПредставлениеАдреса(СтруктураАдреса, Представление, НаименованиеВида = Неопределено) — формирует представление контактной информации с видом для формы ввода адреса.
Контактную информацию также можно выводить в отчеты СКД. Например, в типовой конфигурации есть отчет "Договоры", в котором есть вариант "Договоры с истекающим сроком действия". В нем выводится контактная информация контакта корреспондента, указанного в документе. Посмотрим "листинг скд запроса":
Копировать в буфер обменаВЫБРАТЬ РАЗРЕШЕННЫЕ ВнутреннийДокументКорреспонденты.Ссылка, ВнутреннийДокументКорреспонденты.Корреспондент, ВнутреннийДокументКорреспонденты.КонтактноеЛицо, ВнутреннийДокументКорреспонденты.ПодписалОтКорреспондента, КонтактныеЛицаТелефон.Представление КАК ТелефонКонтактногоЛица, КонтактныеЛицаEmail.Представление КАК EmailКонтактногоЛица ИЗ Справочник.ВнутренниеДокументы.Корреспонденты КАК ВнутреннийДокументКорреспонденты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаТелефон ПО (КонтактныеЛицаТелефон.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтактногоЛица)) И (КонтактныеЛицаТелефон.Ссылка = ВнутреннийДокументКорреспонденты.КонтактноеЛицо) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаEmail ПО (КонтактныеЛицаEmail.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.EmailКонтактногоЛица)) И (КонтактныеЛицаEmail.Ссылка = ВнутреннийДокументКорреспонденты.КонтактноеЛицо)
Как видно из запроса, с помощью левого соединения с таблицей Контактной информации справочника Контактные лица мы получаем "Телефон" и "Email адрес" контакта. Применяя подобный метод, мы можем получать и любую другую контактную информацию, как контактных лиц, так и самого корреспондента. Например, можно в отчет вывести юридический адрес корреспондента:
Копировать в буфер обменаЛЕВОЕ СОЕДИНЕНИЕ Справочник.Корреспонденты.КонтактнаяИнформация КАК КорреспондентыАдрес ПО (КорреспондентыАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации. ЮридическийАдресКорреспондента)) И (КонтактныеЛицаEmail.Ссылка = ВнутреннийДокументКорреспонденты.Корреспондент)
Комбинируя приведенные выше методы можно найти широкое применение контактной информации объектов системы. Например, контактную информацию можно выводить в отчеты или использовать для автозаполнения шаблонов файлов. Также можно добавлять ее в превью документов, либо выводить в динамические списки объектов.