Публикации

БСП
Разработки

Найдено результатов: 120


МетаданныеТабличнойЧасти

ОбщийМодуль.ВерсионированиеОбъектов
Автор: 1С
Функция МетаданныеТабличнойЧасти(МетаданныеОбъекта, ИмяТабличнойЧасти) Экспорт
	Результат = МетаданныеОбъекта.ТабличныеЧасти.Найти(ИмяТабличнойЧасти);
	Если Результат = Неопределено Тогда
		Попытка
			Результат = МетаданныеОбъекта.СтандартныеТабличныеЧасти[ИмяТабличнойЧасти];
		Исключение
			Результат = Неопределено;
		КонецПопытки;
	КонецЕсли;
	Возврат Результат;
КонецФункции

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

Расчет суммы в строке табличной части

buketoff 30 5
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
	РассчитатьСумму();
КонецПроцедуры

&НаКлиенте
Процедура РассчитатьСумму()
	Стр = Элементы.Товары.ТекущиеДанные;
	Стр.Сумма = Стр.Цена * Стр.Количество;
КонецПроцедуры


ТабличныеЧастиОбъекта

Возвращает массив табличных частей объекта.
ОбщийМодуль.ОбменДаннымиСобытия
Автор: 1С
// Возвращает массив табличных частей объекта.
//
Функция ТабличныеЧастиОбъекта(ОбъектМетаданных) Экспорт
	
	Результат = Новый Массив;
	
	Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл
		
		Результат.Добавить(ТабличнаяЧасть.Имя);
		
	КонецЦикла;
	
	Возврат Результат;
КонецФункции

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

Пересчет сумм в табличной части документа

НА СЕРВЕРЕ:

СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(ДокЗаказ);	
СтруктураДействий = Новый Структура;	
СтруктураДействий.Вставить("ПересчитатьСумму", "КоличествоУпаковок");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь));
ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(ДокЗаказ.Товары, СтруктураДействий, Неопределено);


НА КЛИЕНТЕ:

СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);	
			СтруктураДействий = Новый Структура;	
			СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
			СтруктураДействий.Вставить("ПересчитатьСумму");
			СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
			СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
			СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
			СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
			СтруктураДействий.Вставить("ЗаполнитьПризнакВариантОформленияПродажи", Новый Структура("Номенклатура", "ВариантОформленияПродажи"));
			СтруктураДействий.Вставить("ЗаполнитьСодержание", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь));
			СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
			СтруктураДействий.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
			СтруктураДействий.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
			ПараметрыДействия = ОбеспечениеКлиентСервер.ПараметрыДействияПроверитьЗаполнитьОбеспечение(ВариантыОбеспечения, Объект.ЖелаемаяДатаОтгрузки);
			СтруктураДействий.Вставить("ПроверитьЗаполнитьОбеспечениеВДокументеПродажи", ПараметрыДействия);
			СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения",
					Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина));
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
		ЭтаФорма.ИмяФормы, "Товары"));



СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", ТекущаСтрока.Склад, ПараметрыУказанияСерий));
				ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаСтрока, СтруктураДействий, Неопределено);

пересчет реквизита табличной части обычной формы

пересчет реквизита табличной части обычной формы
Процедура Пересчет()
	СтрокаТабличнойЧасти = ЭлементыФормы.Товар.ТекущиеДанные;
	Рекв = ЭлементыФормы.Товар.ТекущаяКолонка.Данные;
	Если Рекв = "Номенклатура" Тогда
		ЦенаТ = ПолучитьЦену(СтрокаТабличнойЧасти.Номенклатура);
		СтрокаТабличнойЧасти.Цена = ЦенаТ;
		СтрокаТабличнойЧасти.Количество = 1;
		СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество;
	ИначеЕсли Рекв = "Количество" Тогда	
		СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество;
	ИначеЕсли Рекв = "Цена" Тогда
		СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество;
	ИначеЕсли Рекв = "Сумма" Тогда	
		СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Сумма/?(СтрокаТабличнойЧасти.Количество=0,1,СтрокаТабличнойЧасти.Количество);
	КонецЕсли;	
КонецПроцедуры

МетаданныеРеквизитаТабличнойЧасти

ОбщийМодуль.ВерсионированиеОбъектов
Автор: 1С
Функция МетаданныеРеквизитаТабличнойЧасти(МетаданныеТабличнойЧасти, ИмяРеквизита) Экспорт
	Результат = Неопределено;
	Если ТипЗнч(МетаданныеТабличнойЧасти) = Тип("ОписаниеСтандартнойТабличнойЧасти") Тогда
		Попытка
			Результат = МетаданныеТабличнойЧасти.СтандартныеРеквизиты[ИмяРеквизита];
		Исключение
			Результат = Неопределено;
		КонецПопытки;
	Иначе
		Результат = МетаданныеТабличнойЧасти.Реквизиты.Найти(ИмяРеквизита);
	КонецЕсли;
	Возврат Результат;
КонецФункции

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

ЗаполнитьТабличнуюЧастьОбъектаНачальнымиДанными

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

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

ПолучитьНаборыЗначенийДоступаТабличнойЧасти

Возвращает новые наборы для заполнения табличной части.
ОбщийМодуль.УправлениеДоступомСлужебный
Автор: 1С
// Возвращает новые наборы для заполнения табличной части.
Функция ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект) Экспорт
	
	ТипЗначенияОбъект = ТипЗнч(Объект);
	
	Если Объект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда
		ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Неверные параметры.
			           |У объекта типа ""%1""
			           |не найдена табличная часть ""Наборы значений доступа"".'"),
			ТипЗначенияОбъект);
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;
	
	Таблица = УправлениеДоступом.ТаблицаНаборыЗначенийДоступа();
	
	Если НЕ УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда
		Возврат Таблица;
	КонецЕсли;
	
	УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(Объект, Таблица);
	
	УправлениеДоступом.ДобавитьНаборыЗначенийДоступа(
		Таблица, УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(), Ложь, Истина);
	
	Возврат Таблица;
	
КонецФункции

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

ИнициализироватьСвойстваТабличныхЧастей

Заполняет колонку со свойствами табличных частей пустой таблицей значений с определенными колонками.
ОбщийМодуль.ОбменДаннымиXDTOСервер
Автор: 1С
// Заполняет колонку со свойствами табличных частей пустой таблицей значений с определенными колонками.
// Используется в текущем модуле, а также в модуле менеджера обмена при заполнении таблицы правил конвертации объектов.
//
// Параметры:
//  ПравилоКонвертации - СтрокаТаблицыЗначений - правило конвертации объектов.
//  ИмяКолонки - Строка - имя заполняемой колонки таблицы правил конвертации.
Процедура ИнициализироватьСвойстваТабличныхЧастей(ПравилоКонвертации, ИмяКолонки = "СвойстваТабличныхЧастей") Экспорт
	СвойстваТабличныхЧастей = Новый ТаблицаЗначений;
	СвойстваТабличныхЧастей.Колонки.Добавить("ТЧКонфигурации",          Новый ОписаниеТипов("Строка"));
	СвойстваТабличныхЧастей.Колонки.Добавить("ТЧФормата",               Новый ОписаниеТипов("Строка"));
	СвойстваТабличныхЧастей.Колонки.Добавить("Свойства",                Новый ОписаниеТипов("ТаблицаЗначений"));
	СвойстваТабличныхЧастей.Колонки.Добавить("ИспользуетсяАлгоритмКонвертации", Новый ОписаниеТипов("Булево"));
	
	ПравилоКонвертации[ИмяКолонки] = СвойстваТабличныхЧастей;
КонецПроцедуры

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

Раскраска строки табличной части документа (обычные формы) по условию

Процедура выбДокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	Если (ДанныеСтроки.п="-")или(данныеСтроки.у = "+") тогда
		ОформлениеСтроки.ЦветФона = Новый Цвет(204,255,204);
	конецЕсли;
КонецПроцедуры

ТабличныеЧастиПланаОбмена

Для внутреннего использования.
ОбщийМодуль.ОбменДаннымиПовтИсп
Автор: 1С
// Для внутреннего использования.
//
Функция ТабличныеЧастиПланаОбмена(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента = "", Знач ИдентификаторНастройки = "") Экспорт
	
	ТаблицыОбщие             = Новый Массив;
	ТаблицыЭтойБазы          = Новый Массив;
	ВсеТаблицыЭтойБазы       = Новый Массив;
	
	ОбщиеДанныеУзлов = ОбменДаннымиСервер.ОбщиеДанныеУзлов(ИмяПланаОбмена, ВерсияКорреспондента, ИдентификаторНастройки);
	
	ТабличныеЧасти = ОбменДаннымиСобытия.ТабличныеЧастиОбъекта(Метаданные.ПланыОбмена[ИмяПланаОбмена]);
	
	Если Не ПустаяСтрока(ОбщиеДанныеУзлов) Тогда
		
		Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
			
			Если СтрНайти(ОбщиеДанныеУзлов, ТабличнаяЧасть) <> 0 Тогда
				
				ТаблицыОбщие.Добавить(ТабличнаяЧасть);
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	
	НастройкиЭтойБазы = ОбменДаннымиСервер.НастройкаОтборовНаУзле(ИмяПланаОбмена, ВерсияКорреспондента, ИдентификаторНастройки);
	
	НастройкиЭтойБазы = ОбменДаннымиСобытия.КлючиСтруктурыВСтроку(НастройкиЭтойБазы);
	
	Если ПустаяСтрока(ОбщиеДанныеУзлов) Тогда
		
		Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
			
			ВсеТаблицыЭтойБазы.Добавить(ТабличнаяЧасть);
			
			Если СтрНайти(НастройкиЭтойБазы, ТабличнаяЧасть) <> 0 Тогда
				
				ТаблицыЭтойБазы.Добавить(ТабличнаяЧасть);
				
			КонецЕсли;
			
		КонецЦикла;
		
	Иначе
		
		Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
			
			ВсеТаблицыЭтойБазы.Добавить(ТабличнаяЧасть);
			
			Если СтрНайти(НастройкиЭтойБазы, ТабличнаяЧасть) <> 0 Тогда
				
				Если СтрНайти(ОбщиеДанныеУзлов, ТабличнаяЧасть) = 0 Тогда
					
					ТаблицыЭтойБазы.Добавить(ТабличнаяЧасть);
					
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	
	Результат = Новый Структура;
	Результат.Вставить("ТаблицыОбщие",             ТаблицыОбщие);
	Результат.Вставить("ТаблицыЭтойБазы",          ТаблицыЭтойБазы);
	Результат.Вставить("ВсеТаблицыЭтойБазы",       ВсеТаблицыЭтойБазы);
	
	Возврат Результат;
	
КонецФункции

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

ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы

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

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

ПоказатьФормуЗагрузки

Открывает форму загрузки данных для заполнения табличной части.
ОбщийМодуль.ЗагрузкаДанныхИзФайлаКлиент
Автор: 1С
// Открывает форму загрузки данных для заполнения табличной части.
//
// Параметры: 
//   ПараметрыЗагрузки   - Структура           - см. ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных.
//   ОповещениеОЗагрузке - ОписаниеОповещения  - оповещение, которое будет вызвано для добавления загруженных данных в
//                                               табличную часть.
//
Процедура ПоказатьФормуЗагрузки(ПараметрыЗагрузки, ОповещениеОЗагрузке) Экспорт
	
	ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма", ПараметрыЗагрузки, 
		ОповещениеОЗагрузке.Модуль, , , , ОповещениеОЗагрузке);
		
КонецПроцедуры

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

ПутьКТабличнойЧасти

Формирует путь к заданной строке НомерСтроки и колонке ИмяРеквизита
ОбщийМодуль.ОбщегоНазначенияКлиентСервер
Автор: 1С
// Формирует путь к заданной строке НомерСтроки и колонке ИмяРеквизита 
// табличной части ИмяТабличнойЧасти для выдачи сообщений в форме.
// Для совместного использования с процедурой СообщитьПользователю
// (для передачи в параметры Поле или ПутьКДанным). 
//
// Параметры:
//  ИмяТабличнойЧасти - Строка - имя табличной части.
//  НомерСтроки - Число - номер строки табличной части.
//  ИмяРеквизита - Строка - имя реквизита.
//
// Возвращаемое значение:
//  Строка - путь к ячейке таблицы.
//
Функция ПутьКТабличнойЧасти(
		Знач ИмяТабличнойЧасти,
		Знач НомерСтроки, 
		Знач ИмяРеквизита) Экспорт
	
	Возврат ИмяТабличнойЧасти + "[" + Формат(НомерСтроки - 1, "ЧН=0; ЧГ=0") + "]." + ИмяРеквизита;
	
КонецФункции

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

ЗаполнитьКонтактыДляВстречи

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

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

ПолучитьУчастниковПоТаблице

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

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

ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей

Обработчик подписок ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей* на событие ПередЗаписью
ОбщийМодуль.УправлениеДоступом
Автор: 1С
// Обработчик подписок ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей* на событие ПередЗаписью
// вызывает заполнение значений доступа табличной части объекта НаборыЗначенийДоступа,
// когда для ограничения доступа к самому объекту используется шаблон #ПоНаборамЗначений.
//  Возможен случай использования подсистемы Управление доступом, когда
// указанной подписки не существует, если для указанной цели наборы не применяются.
//
// Параметры:
//  Источник        - СправочникОбъект,
//                    ДокументОбъект,
//                    ПланВидовХарактеристикОбъект,
//                    ПланСчетовОбъект,
//                    ПланВидовРасчетаОбъект,
//                    БизнесПроцессОбъект,
//                    ЗадачаОбъект,
//                    ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью.
//
//  Отказ           - Булево - параметр, передаваемый в подписку на событие ПередЗаписью.
//
//  РежимЗаписи     - Булево - параметр, передаваемый в подписку на событие ПередЗаписью,
//                    когда тип параметра Источник - ДокументОбъект.
//
//  РежимПроведения - Булево - параметр, передаваемый в подписку на событие ПередЗаписью,
//                    когда тип параметра Источник - ДокументОбъект.
//
Процедура ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей(Источник, Отказ = Неопределено, РежимЗаписи = Неопределено, РежимПроведения = Неопределено) Экспорт
	
	// Проверка ОбменДанными.Загрузка пропускается только в тех случаях,
	// когда дополнительно установлено свойство ЗаписатьНаборыЗначенийДоступа.
	// В этом случае при записи ведущего объекта для корректной работы его RLS выполняется программная
	// запись подчиненного объекта для обновления служебной табличной части НаборыЗначенийДоступа.
	Если Источник.ОбменДанными.Загрузка
	   И НЕ Источник.ДополнительныеСвойства.Свойство("ЗаписатьНаборыЗначенийДоступа") Тогда
		Возврат;
	КонецЕсли;
	
	Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда
		Возврат;
	КонецЕсли;
	
	Если НЕ (  ПривилегированныйРежим()
	         И Источник.ДополнительныеСвойства.Свойство(
	             "НаборыЗначенийДоступаТабличнойЧастиЗаполнены")) Тогда
		
		Таблица = УправлениеДоступомСлужебный.ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Источник);
		УправлениеДоступомСлужебный.ПодготовитьНаборыЗначенийДоступаКЗаписи(Неопределено, Таблица, Ложь);
		Источник.НаборыЗначенийДоступа.Загрузить(Таблица);
	КонецЕсли;
	
КонецПроцедуры

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

СформироватьОписаниеКолонок

Возвращает описание колонок табличной части или таблицы значений.
ОбщийМодуль.ЗагрузкаДанныхИзФайла
Автор: 1С
// Возвращает описание колонок табличной части или таблицы значений.
//
// Параметры:
//  Таблица - Строка, ТаблицаЗначений - таблица с колонками. Для получения списка колонок табличной части
//            необходимо указать его полное имя строкой, как в метаданных, например "Документы.СчетНаОплату.ТабличныеЧасти.Товары".
//  Колонки - Строка - Список извлекаемых колонок, разделенный запятыми. Например: "Номер, Товар, Количество".
// 
// Возвращаемое значение:
//  Массив - Структура с описание колонок для макета. См. ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета.
//
Функция СформироватьОписаниеКолонок(Таблица, Колонки = Неопределено) Экспорт
	
	ИзвлекатьНеВсеКолонки = Ложь;
	Если Колонки <> Неопределено Тогда
		СписокКолонокДляИзвлечения = СтрРазделить(Колонки, ",", Ложь);
		ИзвлекатьНеВсеКолонки = Истина;
	КонецЕсли;
	
	СписокКолонок = Новый Массив;
	Если ТипЗнч(Таблица) = Тип("ДанныеФормыКоллекция") Тогда
		КопияТаблицы = Таблица;
		ВнутренняяТаблица = КопияТаблицы.Выгрузить();
		ВнутренняяТаблица.Колонки.Удалить("ИсходныйНомерСтроки");
		ВнутренняяТаблица.Колонки.Удалить("НомерСтроки");
	Иначе
		ВнутренняяТаблица= Таблица;
	КонецЕсли;
	
	Если ТипЗнч(ВнутренняяТаблица) = Тип("ТаблицаЗначений") Тогда
		Для каждого Колонка Из ВнутренняяТаблица.Колонки Цикл
			Если ИзвлекатьНеВсеКолонки И СписокКолонокДляИзвлечения.Найти(Колонка.Имя) = Неопределено Тогда
				Продолжить;
			КонецЕсли;
			НоваяКолонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета(Колонка.Имя, Колонка.ТипЗначения, Колонка.Заголовок, Колонка.Ширина);
			СписокКолонок.Добавить(НоваяКолонка);
		КонецЦикла;
	ИначеЕсли ТипЗнч(ВнутренняяТаблица) = Тип("Строка") Тогда
		Объект = Метаданные.НайтиПоПолномуИмени(ВнутренняяТаблица);
		Для каждого Колонка Из Объект.Реквизиты Цикл
			Если ИзвлекатьНеВсеКолонки И СписокКолонокДляИзвлечения.Найти(Колонка.Имя) = Неопределено Тогда
				Продолжить;
			КонецЕсли;
			НоваяКолонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета(Колонка.Имя, Колонка.Тип, Колонка.Представление());
			НоваяКолонка.Подсказка = Колонка.Подсказка;
			НоваяКолонка.Ширина = 30;
			СписокКолонок.Добавить(НоваяКолонка);
		КонецЦикла;
	КонецЕсли;
	Возврат СписокКолонок;
КонецФункции

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

ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей

Обработчик подписок ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей* на событие ПередЗаписью
ОбщийМодуль.ВзаимодействияСобытия
Автор: 1С
// Обработчик подписок ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей* на событие ПередЗаписью
// вызывает заполнение значений доступа табличной части объекта НаборыЗначенийДоступа,
// когда для ограничения доступа к самому объекту используется шаблон #ПоНаборамЗначений.
//  Возможен случай использования подсистемы Управление доступом, когда
// указанной подписки не существует, если для указанной цели наборы не применяются.
//
// Параметры:
//  Источник        - СправочникОбъект,
//                    ДокументОбъект,
//                    ПланВидовХарактеристикОбъект,
//                    ПланСчетовОбъект,
//                    ПланВидовРасчетаОбъект,
//                    БизнесПроцессОбъект,
//                    ЗадачаОбъект,
//                    ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью.
//
//  Отказ           - Булево - параметр, передаваемый в подписку на событие ПередЗаписью.
//
//  РежимЗаписи     - Булево - параметр, передаваемый в подписку на событие ПередЗаписью,
//                    когда тип параметра Источник - ДокументОбъект.
//
//  РежимПроведения - Булево - параметр, передаваемый в подписку на событие ПередЗаписью,
//                    когда тип параметра Источник - ДокументОбъект.
//
Процедура ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей(Источник, Отказ = Неопределено, РежимЗаписи = Неопределено, РежимПроведения = Неопределено) Экспорт
	
	// ОбменДанными.Загрузка проверяется внутри вызова.
	
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
		МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
		МодульУправлениеДоступом.ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей(Источник, Отказ, РежимЗаписи, РежимПроведения);
	КонецЕсли;
	
КонецПроцедуры

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

СформироватьСписокПолучателейРассылки

Формирует список получателей из табличной части "Получатели" рассылки.
ОбщийМодуль.РассылкаОтчетов
Автор: 1С
// Формирует список получателей из табличной части "Получатели" рассылки.
//
// Параметры:
//   Рассылка - СправочникСсылка.РассылкиОтчетов, Структура - Элемент справочника, для которого необходимо сформировать
//              список получателей.
//
// Возвращаемое значение: 
//   Структура - Результат получения списка получателей рассылки.
//       * Получатели - Соответствие - Получатели. См. ВыполнитьРассылку(), описание к "ПараметрыДоставки.Получатели".
//       * Ошибки - Строка - Ошибки, которые возникли в процессе.
//
Функция СформироватьСписокПолучателейРассылки(ПараметрыЖурнала, Рассылка) Экспорт
	
	ВидКИ = Рассылка.ВидПочтовогоАдресаПолучателей;
	
	Если Рассылка.Личная Тогда
		
		РеквизитыТЧ = Метаданные.Справочники.РассылкиОтчетов.ТабличныеЧасти.Получатели.Реквизиты;
		
		ТипПолучателей = ТипЗнч(Рассылка.Автор);
		ТаблицаПолучателей = Новый ТаблицаЗначений;
		Для Каждого Реквизит Из РеквизитыТЧ Цикл
			ТаблицаПолучателей.Колонки.Добавить(Реквизит.Имя, Реквизит.Тип);
		КонецЦикла;
		ТаблицаПолучателей.Добавить().Получатель = Рассылка.Автор;
		
	Иначе
		
		ТипПолучателей = Рассылка.ТипПолучателейРассылки.КлючОбъектаМетаданных.Получить();
		ТаблицаПолучателей = Рассылка.Получатели.Выгрузить();
		
	КонецЕсли;
	
	СписокПолучателей = Новый Соответствие;
	
	Запрос = Новый Запрос;
	Если ТипПолучателей = Тип("СправочникСсылка.Пользователи") Тогда
	
		ТекстЗапроса =
		"ВЫБРАТЬ
		|	ТаблицаПолучателей.Получатель,
		|	ТаблицаПолучателей.Исключен
		|ПОМЕСТИТЬ втТаблицаПолучателей
		|ИЗ
		|	&ТаблицаПолучателей КАК ТаблицаПолучателей
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
		|	МАКСИМУМ(РассылкиОтчетовПолучатели.Исключен) КАК Исключен,
		|	СоставыГруппПользователей.Пользователь
		|ПОМЕСТИТЬ втПолучатели
		|ИЗ
		|	втТаблицаПолучателей КАК РассылкиОтчетовПолучатели
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
		|		ПО РассылкиОтчетовПолучатели.Получатель = СоставыГруппПользователей.ГруппаПользователей
		|			И (СоставыГруппПользователей.ГруппаПользователей.ПометкаУдаления = ЛОЖЬ)
		|ГДЕ
		|	СоставыГруппПользователей.Пользователь ССЫЛКА Справочник.Пользователи
		|	И СоставыГруппПользователей.Пользователь.ПометкаУдаления = ЛОЖЬ
		|	И СоставыГруппПользователей.Пользователь.Недействителен = ЛОЖЬ
		|	И СоставыГруппПользователей.Пользователь.Служебный = ЛОЖЬ
		|
		|СГРУППИРОВАТЬ ПО
		|	СоставыГруппПользователей.Пользователь
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
		|	втПолучатели.Пользователь КАК Получатель,
		|	тчКонтактнаяИнформация.Представление КАК EMail
		|ИЗ
		|	втПолучатели КАК втПолучатели
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК тчКонтактнаяИнформация
		|		ПО втПолучатели.Пользователь = тчКонтактнаяИнформация.Ссылка
		|ГДЕ
		|	втПолучатели.Исключен = ЛОЖЬ
		|	И тчКонтактнаяИнформация.Вид = &ВидКИ";
		
	Иначе
		
		ТекстЗапроса =
		"ВЫБРАТЬ
		|	ТаблицаПолучателей.Получатель,
		|	ТаблицаПолучателей.Исключен
		|ПОМЕСТИТЬ втТаблицаПолучателей
		|ИЗ
		|	&ТаблицаПолучателей КАК ТаблицаПолучателей
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
		|	СпрПолучателей.Ссылка КАК Получатель,
		|	тчКонтактнаяИнформация.Представление КАК EMail
		|ИЗ
		|	Справочник.Пользователи КАК СпрПолучателей
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК тчКонтактнаяИнформация
		|		ПО (тчКонтактнаяИнформация.Ссылка = СпрПолучателей.Ссылка)
		|			И (тчКонтактнаяИнформация.Вид = &ВидКИ)
		|ГДЕ
		|	СпрПолучателей.Ссылка В ИЕРАРХИИ
		|			(ВЫБРАТЬ
		|				Получатели.Получатель
		|			ИЗ
		|				втТаблицаПолучателей КАК Получатели
		|			ГДЕ
		|				Получатели.Исключен = ЛОЖЬ)
		|	И (НЕ СпрПолучателей.Ссылка В ИЕРАРХИИ
		|				(ВЫБРАТЬ
		|					ИсключенияПолучателей.Получатель
		|				ИЗ
		|					втТаблицаПолучателей КАК ИсключенияПолучателей
		|				ГДЕ
		|					ИсключенияПолучателей.Исключен = ИСТИНА))
		|	И СпрПолучателей.ПометкаУдаления = ЛОЖЬ
		|	И &ЭтоНеГруппа";
		
		УстановитьПривилегированныйРежим(Истина);
		ПолучателиМД = Метаданные.НайтиПоТипу(ТипПолучателей);
		УстановитьПривилегированныйРежим(Ложь);
		
		Если Не ПолучателиМД.Иерархический Тогда
			// Не иерархический
			ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "В ИЕРАРХИИ", "В");
			ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ЭтоНеГруппа", "");
		ИначеЕсли ПолучателиМД.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияЭлементов Тогда
			// Иерархия элементов
			ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ЭтоНеГруппа", "");
		Иначе
			// Иерархия групп
			ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ЭтоНеГруппа", "И СпрПолучателей.ЭтоГруппа = ЛОЖЬ");
		КонецЕсли;
		
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.Пользователи", ПолучателиМД.ПолноеИмя());
		
	КонецЕсли;
	
	Запрос.УстановитьПараметр("ТаблицаПолучателей", ТаблицаПолучателей);
	Если ЗначениеЗаполнено(ВидКИ) Тогда
		Запрос.УстановитьПараметр("ВидКИ", ВидКИ);
	Иначе
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".Вид = &ВидКИ", ".Тип = &ТипКИ");
		Запрос.УстановитьПараметр("ТипКИ", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
	КонецЕсли;
	Запрос.Текст = ТекстЗапроса;
	
	ТекстСообщенияОбОшибкеДляЖурналаРегистрации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		НСтр("ru = 'При формировании списка получателей ""%1"" возникла ошибка:'"), Строка(ТипПолучателей));
	
	// Механизм расширения
	Попытка
		СтандартнаяОбработка = Истина;
		РассылкаОтчетовПереопределяемый.ПередФормированиемСпискаПолучателейРассылки(Рассылка, Запрос, СтандартнаяОбработка, СписокПолучателей);
		Если СтандартнаяОбработка <> Истина Тогда
			Возврат СписокПолучателей;
		КонецЕсли;
	Исключение
		ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщенияОбОшибкеДляЖурналаРегистрации, ИнформацияОбОшибке());
		Возврат СписокПолучателей;
	КонецПопытки;
	
	// Стандартная обработка
	Попытка
		ТЗИтог = Запрос.Выполнить().Выгрузить();
	Исключение
		ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщенияОбОшибкеДляЖурналаРегистрации, ИнформацияОбОшибке());
		Возврат СписокПолучателей;
	КонецПопытки;
	
	Для Каждого СтрИтог Из ТЗИтог Цикл
		Если Не ЗначениеЗаполнено(СтрИтог.EMail) Тогда
			Продолжить;
		КонецЕсли;
		
		ТекущийАдрес = СписокПолучателей.Получить(СтрИтог.Получатель);
		Если ТекущийАдрес = Неопределено Тогда
			ТекущийАдрес = "";
		Иначе
			ТекущийАдрес = ТекущийАдрес +"; ";
		КонецЕсли;
		ТекущийАдрес = ТекущийАдрес + СтрИтог.EMail;
		СписокПолучателей.Вставить(СтрИтог.Получатель, ТекущийАдрес);
	КонецЦикла;
	
	Если СписокПолучателей.Количество() = 0 Тогда
		ТекстОшибок = НСтр("ru = 'Не удалось сформировать список получателей %1 рассылки %2 по одной из возможных причин:
		| - У получателей не заполнен почтовый адрес %3;
		| - Не заполнен список получателей;
		| - Выбраны пустые группы получателей;
		| - Получатели помечены на удаление;
		| - Исключены все получатели (исключение имеет наивысший приоритет; участники исключенных групп также исключаются из списка);
		| - Недостаточно прав доступа к справочнику;
		| - Рекомендуется проверить корректность настройки учетной записи электронной почты, от имени которой выполняется рассылка.'");
		
		ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка,
			СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибок, "'"+ Строка(ТипПолучателей) +"'",
			"'"+ Строка(ПараметрыЖурнала.Данные) +"'", "'"+ Строка(ВидКИ) +"'"), "");
	КонецЕсли;
	
	Возврат СписокПолучателей;
КонецФункции

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