Каталог решений - Получение контактной информации из отбора

Получение контактной информации из отбора

Получение контактной информации из отбора

В наличии

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

Категория:

Описание

Понадобилось тут при создании рассылки отчетов получить электронные адреса из включенного пользователем отбора. Набросал универсальную функцию для конфигураций, основанных на БСП. Листинг функции с комментариями прилагаю.

Все действия выполняются на сервере. Версия БСП при тестировании 3.1.5. Ваша конфигурация должна включать в себя стандартную подсистему "Контактная информация" ("СтандартныеПодсистемы.КонтактнаяИнформация").

На вход подается коллекция элементов отбора КД (обязательно), тип и вид КИ (если необходимо получить только определенные виды контактной информации) и дата (для объектов, хранящих историю КИ).

На выходе получаем таблицу значений с полями Вид, Дата, Значение, ЗначенияПолей, ИдентификаторСтрокиТабличнойЧасти, НомерСтроки, Объект, Представление, Тип (повторяет структуру типовой функции БСП). Если на входе не было объектов, способных хранить КИ, возвращается Неопределено.

 

Пример вызова

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

 

 

 


// Возвращает таблицу, содержащую контактную информацию нескольких объектов. 
//
// Параметры:
//  Отбор					 - КоллекцияЭлементовОтбораКомпоновкиДанных	 - элементы отбора
//  ТипКонтактнойИнформации	 - Массив, ПеречислениеСсылка.ТипыКонтактнойИнформации	 - Если указаны, то будет получена
//								контактная информация только этих типов.
//  ВидКонтактнойИнформации	 - Массив, СправочникСсылка.ВидыКонтактнойИнформации	 - Если указаны, то будет возвращена
//								контактная информация только этих видов контактной информации.
//  Дата                     - Дата   - необязательный, дата с которой действует запись контактной информации,
//                              используется при хранении истории изменения контактной информации.
//                              Если владелец хранит историю изменений, то при несоответствии параметра
//                              дате будет вызвано исключение.
// 
// Возвращаемое значение:
//  ТаблицаЗначений, Неопределено - возвращает Неопределено, если контакты не могут иметь КИ
//
Функция КонтактнаяИнформацияОбъектовИзОтбора(Отбор, ТипКонтактнойИнформации = Неопределено, ВидКонтактнойИнформации = Неопределено, Дата = '00010101') Экспорт
	
	// Подготовим массив с типами объектов, поддерживающих работу с КИ
	ТипыОбъектов = Новый Массив;
	Для Каждого Объект Из УправлениеКонтактнойИнформациейСлужебный.ОбъектыСодержащиеКонтактнуюИнформацию() Цикл
		ТипыОбъектов.Добавить(ТипЗнч(Объект));
	КонецЦикла;
	
	Если Не ЗначениеЗаполнено(Дата) Тогда
		Дата = ТекущаяДатаСеанса();
	КонецЕсли;
	
	// Соберем ссылки из отбора
	Контакты = Новый Массив;
	ПолучитьКонтактыИзОтбораСлужебный(Отбор, Контакты, ТипыОбъектов);
	
	// При наличии ссылок можем получить КИ
	Если Контакты.Количество() > 0 Тогда
		Возврат УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(Контакты, ТипКонтактнойИнформации, ВидКонтактнойИнформации, Дата);
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

Функция ПолучитьКонтактыИзОтбораСлужебный(Отбор, Контакты = Неопределено, ТипыОбъектов = Неопределено)
	
	Для Каждого Элемент Из Отбор Цикл
		
		Если Не Элемент.Использование Тогда
			// Отключённые отборы пропускаем
			
		ИначеЕсли ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
			// Преобразуем значение отбора в массив и добавляем к контактам, если у объекта может быть КИ
			Объекты = ?(ТипЗнч(Элемент.ПравоеЗначение) = Тип("СписокЗначений"), Элемент.ПравоеЗначение.ВыгрузитьЗначения(), ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Элемент.ПравоеЗначение));
			Для Каждого Объект Из Объекты Цикл
				Если ТипыОбъектов.Найти(ТипЗнч(Объект)) <> Неопределено Тогда
					Контакты.Добавить(Объект);
				КонецЕсли;
			КонецЦикла;
			
		ИначеЕсли ТипЗнч(Элемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
			// рекурсивно обходим группу
			ПолучитьКонтактыИзОтбораСлужебный(Элемент.Элементы, Контакты, ТипыОбъектов);
			
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат Контакты;
	
КонецФункции

 

 

На тему БСП и смежные темы см. также публикации:

Сохранение настроек в базах на БСП без доработки конфигурации

СКД. Использование Менеджера временных таблиц в системе компоновки

Печать непроведённых документов

has been added to your cart:
Оформление заказа