1C:Документооборот ПРОФ, КОРП, ДГУ
25.02.2016

Контактная информация корреспондентов

Как устроен справочник корреспонденты и его контактная информация

Справочник Корреспонденты содержит в себе основные и вспомогательные реквизиты, а также таблицы контактной информации и дополнительных реквизитов. Весьма важным реквизитом корреспондента является Вид корреспондента, который может принимать такие значения как "Юридическое лицо", "Физическое лицо", "Индивидуальный предприниматель" и "Юридическое лицо за пределами РФ". В зависимости от вида, у корреспондента меняются определенные реквизиты, контактная информация и контактные лица.

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

Сами виды контактной информации задаются в справочнике Виды контактной информации в разделе Нормативно-справочная информация. В нем есть предопределенные элементы, такие как Email, "Телефон", "Почтовый адрес" и пр. Но пользователи могут добавлять и свои элементы. При этом важным реквизитом вида контактной информации является "Тип", который может принимать один из шести значений: "Адрес", "Телефон", "Адрес электронной почты", "Веб-страница", "Факс" и "Другое". В зависимости от этого типа, программа понимает, как обрабатывать поле данного типа в карточке корреспондента. Например, для типа "Адрес" автоматически подключается адресный классификатор, а для "Телефона" специальная форма ввода телефонов.

Виды контактной информации справочника Корреспонденты:

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

Получение контактной информации корреспондента

Рассмотрим примеры получения контактной информации по корреспонденту.

Копировать в буфер обмена
Запрос = Новый Запрос;
	Запрос.Текст =
		"ВЫБРАТЬ
		|	КонтактнаяИнформация.Ссылка КАК Коррепсондент,
		|	КонтактнаяИнформация.Вид КАК Вид,
		|	КонтактнаяИнформация.Тип КАК Тип,
		|	КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей,
		|	КонтактнаяИнформация.Представление КАК Представление
		|ИЗ
		|	Справочник.Корреспонденты.КонтактнаяИнформация КАК КонтактнаяИнформация
		|ГДЕ
		|	КонтактнаяИнформация.Ссылка = &Корреспондент";
	Запрос.Параметры.Вставить("Корреспондент", ИскомыйКорреспондент);
	Выборка = Запрос.Выполнить().Выбрать();

Данный запрос вернет таблицу всей контактной информации искомого корреспондента.

Получение контактной информации по корреспонденту и всем его контактным лицам

Данный код вернет таблицу всей контактной информации искомого корреспондента и всех его контактных лиц:

Копировать в буфер обмена
Запрос.Текст =
		"ВЫБРАТЬ
		|	КонтактнаяИнформация.Ссылка КАК Коррепсондент,
		|	"""" КАК КонтактноеЛицо,
		|	КонтактнаяИнформация.Вид КАК Вид,
		|	КонтактнаяИнформация.Тип КАК Тип,
		|	КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей,
		|	КонтактнаяИнформация.Представление КАК Представление
		|ИЗ
		|	Справочник.Корреспонденты.КонтактнаяИнформация КАК КонтактнаяИнформация
		|ГДЕ
		|	КонтактнаяИнформация.Ссылка = &Корреспондент
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	КонтактнаяИнформация.Ссылка.Владелец,
		|	КонтактнаяИнформация.Ссылка,
		|	КонтактнаяИнформация.Вид,
		|	КонтактнаяИнформация.Тип,
		|	КонтактнаяИнформация.ЗначенияПолей,
		|	КонтактнаяИнформация.Представление
		|ИЗ
		|	Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактнаяИнформация
		|ГДЕ
		|	КонтактнаяИнформация.Ссылка.Владелец = &Корреспондент";	Запрос.Параметры.Вставить("Корреспондент", ИскомыйКорреспондент);
	Выборка = Запрос.Выполнить().Выбрать();

Получение контактной информации с помощью стандартных процедур

Помимо запросов, описанных выше, для работы с контактной информацией в программе можно воспользоваться и стандартными процедурами и функциями. Все такие процедуры расположены в общих модулях УправлениеКонтактнойИнформациейКлиентСервер, УправлениеКонтактнойИнформацией, УправлениеКонтактнойИнформациейКлиент.

Например, рассмотрим следующую функцию:

Копировать в буфер обмена
Функция ПолучитьКонтактнуюИнформация(Корреспондент)
	
	КонтактнаяИнформация = Новый Структура;
	Емайл = "";Телефон = "";
	
	Если ТипЗнч(Корреспондент) = Тип("СправочникСсылка.Корреспонденты") Тогда
		Емайл = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(Корреспондент, 
			Справочники.ВидыКонтактнойИнформации.EmailКорреспондента);
		Телефон = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(Корреспондент, 
			Справочники.ВидыКонтактнойИнформации.ТелефонКорреспондента);
	КонецЕсли; 
	
	Если ЗначениеЗаполнено(Телефон) Тогда 
		КонтактнаяИнформация.Вставить("Телефон", СтрШаблон(
			НСтр("ru = 'Телефон: %1'"), Телефон));	
	Иначе
		КонтактнаяИнформация.Вставить("Телефон", Телефон);
	КонецЕсли;
	
	КонтактнаяИнформация.Вставить("Емайл", Емайл);
	
	Возврат КонтактнаяИнформация;
	
КонецФункции

Функция получает значение "Телефона" и "Email адреса" корреспондента. При этом основана она на общей функции УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта (Ссылка, ВидКонтактнойИнформации), с помощью которой можно получить любой тип контактной информации по любому объекту, содержащем контактную информацию.

Также полезной может быть функция КонтактнаяИнформацияОбъектов (МассивОбъектов, ТипыКИ = Неопределено, ВидыКИ = Неопределено) — предназначена для получения контактной информации для нескольких объектов.

УправлениеКонтактнойИнформациейКлиентСервер. СформироватьПредставлениеАдреса(СтруктураАдреса, Представление, НаименованиеВида = Неопределено) — формирует представление контактной информации с видом для формы ввода адреса.

Вывод контактной информации в отчет

Контактную информацию также можно выводить в отчеты СКД. Например, в типовой конфигурации есть отчет "Договоры", в котором есть вариант "Договоры с истекающим сроком действия". В нем выводится контактная информация контакта корреспондента, указанного в документе. Посмотрим "листинг скд запроса":

Копировать в буфер обмена
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ВнутреннийДокументКорреспонденты.Ссылка,
	ВнутреннийДокументКорреспонденты.Корреспондент,
	ВнутреннийДокументКорреспонденты.КонтактноеЛицо,
	ВнутреннийДокументКорреспонденты.ПодписалОтКорреспондента,
	КонтактныеЛицаТелефон.Представление КАК ТелефонКонтактногоЛица,
	КонтактныеЛицаEmail.Представление КАК EmailКонтактногоЛица
ИЗ
	Справочник.ВнутренниеДокументы.Корреспонденты КАК ВнутреннийДокументКорреспонденты

        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаТелефон
		ПО (КонтактныеЛицаТелефон.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтактногоЛица))
			И (КонтактныеЛицаТелефон.Ссылка = ВнутреннийДокументКорреспонденты.КонтактноеЛицо)
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаEmail
		ПО (КонтактныеЛицаEmail.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.EmailКонтактногоЛица))
			И (КонтактныеЛицаEmail.Ссылка = ВнутреннийДокументКорреспонденты.КонтактноеЛицо)

Как видно из запроса, с помощью левого соединения с таблицей Контактной информации справочника Контактные лица мы получаем "Телефон" и "Email адрес" контакта. Применяя подобный метод, мы можем получать и любую другую контактную информацию, как контактных лиц, так и самого корреспондента. Например, можно в отчет вывести юридический адрес корреспондента:

Копировать в буфер обмена
	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Корреспонденты.КонтактнаяИнформация КАК КорреспондентыАдрес
		ПО (КорреспондентыАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации. ЮридическийАдресКорреспондента))
			И (КонтактныеЛицаEmail.Ссылка = ВнутреннийДокументКорреспонденты.Корреспондент)

Комбинируя приведенные выше методы можно найти широкое применение контактной информации объектов системы. Например, контактную информацию можно выводить в отчеты или использовать для автозаполнения шаблонов файлов. Также можно добавлять ее в превью документов, либо выводить в динамические списки объектов.