ПолучитьАдресаЭлектроннойПочтыДляМассиваКонтактов (БСП)

Автор: 1С
ОбщийМодуль.Взаимодействия
БСП

Получить адреса электронной почты для массива контактов. Получает адреса электронной почты для массива контактов.

// Получает адреса электронной почты для массива контактов.
//
// Параметры:
//  МассивКонтактов - Массив - массив ссылок на контакты.
//  Группа - Строка - имя группы в письме для которой ищутся адреса, например "Получатели", "Получатели копий".
//
// Возвращаемое значение:
//   ТаблицаЗначений   - таблица содержащая контакты и адреса их электронной почты.
//
Функция ПолучитьАдресаЭлектроннойПочтыДляМассиваКонтактов(МассивКонтактов,Группа = "") Экспорт
	
	Если МассивКонтактов.Количество() = 0 Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов();
	
	ТекстЗапроса = "
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	ТаблицаКонтактнаяИнформация.АдресЭП КАК Адрес,
	|	ТаблицаКонтакт.Ссылка КАК Контакт
	|ПОМЕСТИТЬ КонтактыАдреса
	|ИЗ
	|	Справочник.Пользователи КАК ТаблицаКонтакт
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация
	|		ПО (ТаблицаКонтактнаяИнформация.Ссылка = ТаблицаКонтакт.Ссылка)
	|			И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты))
	|ГДЕ
	|	ТаблицаКонтакт.Ссылка В (&МассивКонтактов)
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ТаблицаКонтактнаяИнформация.АдресЭП КАК Адрес,
	|	ТаблицаКонтакт.Ссылка КАК Контакт
	|ИЗ
	|	Справочник.Пользователи КАК ТаблицаКонтакт
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация
	|		ПО (ТаблицаКонтактнаяИнформация.Ссылка = ТаблицаКонтакт.Ссылка)
	|			И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты))
	|ГДЕ
	|	 ИСТИНА В
	|		(ВЫБРАТЬ
	|			ИСТИНА
	|		ИЗ
	|			РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
	|		ГДЕ
	|			СоставыГруппПользователей.Пользователь = ТаблицаКонтакт.Ссылка
	|			И СоставыГруппПользователей.ГруппаПользователей В (&МассивКонтактов))";
	
	Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл
		
		Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда
			Продолжить;
		Иначе
			
			ТекстЗапроса = ТекстЗапроса + "
			|ОБЪЕДИНИТЬ ВСЕ
			|
			|ВЫБРАТЬ
			|	ТаблицаКонтактнаяИнформация.АдресЭП,
			|	ТаблицаКонтакт.Ссылка
			|ИЗ
			|	Справочник." + ЭлементМассиваОписания.Имя + " КАК ТаблицаКонтакт
			|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация
			|		ПО (ТаблицаКонтактнаяИнформация.Ссылка = ТаблицаКонтакт.Ссылка)
			|			И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты))
			|ГДЕ
			|	ТаблицаКонтакт.Ссылка В(&МассивКонтактов) " + ?(ЭлементМассиваОписания.Иерархический," И НЕ ТаблицаКонтакт.ЭтоГруппа","");
			
		КонецЕсли;
		
	КонецЦикла;
	
	ТекстЗапроса = ТекстЗапроса + "
	|;
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	КонтактыАдреса.Контакт,
	|	ПРЕДСТАВЛЕНИЕ(КонтактыАдреса.Контакт) КАК Представление,
	|	&Группа
	|ИЗ
	|	КонтактыАдреса КАК КонтактыАдреса
	|УПОРЯДОЧИТЬ ПО
	|	Контакт
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	КонтактыАдреса.Контакт КАК Контакт,
	|	КонтактыАдреса.Адрес КАК Адрес
	|ИЗ
	|	КонтактыАдреса КАК КонтактыАдреса
	|УПОРЯДОЧИТЬ ПО
	|	Контакт
	|ИТОГИ
	|ПО
	|	Контакт
	|";
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("МассивКонтактов",МассивКонтактов);
	Запрос.УстановитьПараметр("Группа",Группа);
	Результат = Запрос.ВыполнитьПакет();
	
	ТаблицаРезультат = Результат[1].Выгрузить();
	
	МассивТипов = Новый Массив;
	МассивТипов.Добавить(Тип("Строка"));
	
	ТаблицаРезультат.Колонки.Добавить("Адрес", Новый ОписаниеТипов(МассивТипов, , Новый КвалификаторыСтроки(100)));
	ТаблицаРезультат.Колонки.Добавить("СписокАдресов",Новый ОписаниеТипов(МассивТипов));
	ВыборкаКонтакты = Результат[2].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	Для каждого СтрокаТаблицы Из ТаблицаРезультат Цикл
		ВыборкаКонтакты.Следующий();
		ВыборкаАдреса = ВыборкаКонтакты.Выбрать();
		Пока ВыборкаАдреса.Следующий() Цикл
			Если ПустаяСтрока(СтрокаТаблицы.Адрес) Тогда
				СтрокаТаблицы.Адрес = ВыборкаАдреса.Адрес;
			КонецЕсли;
			СтрокаТаблицы.СписокАдресов = СтрокаТаблицы.СписокАдресов + ?(ПустаяСтрока(СтрокаТаблицы.СписокАдресов), "", ";") + ВыборкаАдреса.Адрес;
		КонецЦикла;
	КонецЦикла;
	
	Возврат ТаблицаРезультат;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ПолучитьАдресаЭлектроннойПочтыКонтакта (БСП)

НаименованиеИАдресаЭлектроннойПочтыКонтакта (БСП)

ВсеКонтактыПоНачалуНаименованияСАдресамиЭлектроннойПочты (БСП)

ОбновитьАдресЭлектроннойПочты (БСП)

ОпределитьАдресЭлектроннойПочтыПользователя (БСП)

АдресаЭлектроннойПочтыИзСтроки (БСП)

ПолучитьКодПроверкиЭлектроннойПочты (БСП)

СоздатьЗапросНаСменуПочты (БСП)

ДоменАдресаКонтактнойИнформации (БСП)

1С Менеджер конфигураций