Публикации

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

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


Запуск отчета из документа, передача ссылки в параметр отчета

//Создаем команду в документе, в команде прописываем.. СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить(ИМЯКОМАНДЫ, Объект.Ссылка); ОткрытьФорму(Отчет.НАИМЕНОВАНИЕОТЧЕТА.Форма.ФормаОтчета, СтруктураПараметров, Объект.Ссылка); //В моду...

ВидОбработкиОтчет

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

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

ПриПодключенииОтчета

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// 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С
////////////////////////////////////////////////////////////////////////////////
// Для отчета по внедрению.

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

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

СформироватьОтчет

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

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

Установить параметр отчета СКД

Процедура для удобной установки значения параметра отчета на СКД
Процедура УстановитьПараметр(Имя, Значение)
	
    Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый   ПараметрКомпоновкиДанных(Имя));
	Если Параметр <> Неопределено Тогда
		Параметр.Значение = Значение;
		Параметр.Использование = ЗначениеЗаполнено(Значение);
	КонецЕсли;


КонецПроцедуры

НастроитьВариантыОтчетов

Задает настройки размещения вариантов отчетов в панели отчетов.
ОбщийМодуль.ВариантыОтчетовПереопределяемый
Автор: 1С
// Задает настройки размещения вариантов отчетов в панели отчетов.
// Изменяя настройки отчета, можно изменить настройки всех его вариантов.
// Однако, если явно получить настройки варианта отчета, то они станут самостоятельными,
// т.е. более не будут наследовать изменения настроек от отчета.
//   
// Начальная настройка размещения отчетов по подсистемам зачитывается из метаданных,
// ее дублирование в коде не требуется.
//   
// Функциональные опции предопределенного варианта отчета объединяются с функциональными опциями этого отчета по правилам:
// (ФО1_Отчета ИЛИ ФО2_Отчета) И (ФО3_Варианта ИЛИ ФО4_Варианта).
// Для пользовательских вариантов отчета действуют только функциональные опции отчета
// - они отключаются только с отключением всего отчета.
//
// Параметры:
//   Настройки - Коллекция - настройки отчетов и вариантов отчетов конфигурации.
//                           Для их изменения предназначены следующие вспомогательные процедуры и функции:
//                           ВариантыОтчетов.ОписаниеОтчета, 
//                           ВариантыОтчетов.ОписаниеВарианта, 
//                           ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов, 
//                           ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера.
//
// Пример:
//
//  // Добавление варианта отчета в подсистему.
//	НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "<ИмяВарианта>");
//	НастройкиВарианта.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы);
//
//  // Отключение варианта отчета.
//	НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "<ИмяВарианта>");
//	НастройкиВарианта.Включен = Ложь;
//
//  // Отключение всех вариантов отчета, кроме одного.
//	НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета);
//	НастройкиОтчета.Включен = Ложь;
//	НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>");
//	НастройкиВарианта.Включен = Истина;
//
//  // Заполнение настроек для поиска - наименования полей, параметров и отборов:
//	НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчетаБезСхемы, "");
//	НастройкиВарианта.НастройкиДляПоиска.НаименованияПолей =
//		НСтр("ru = 'Контрагент
//		|Договор
//		|Ответственный
//		|Скидка
//		|Дата'");
//	НастройкиВарианта.НастройкиДляПоиска.НаименованияПараметровИОтборов =
//		НСтр("ru = 'Период
//		|Ответственный
//		|Контрагент
//		|Договор'");
//
//  // Переключение режима вывода в панелях отчетов:
//  // Группировка вариантов отчета по этому отчету:
//	ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.ИмяОтчета, Истина);
//  // Без группировки по отчету:
//	Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета);
//	ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Отчет, Ложь);
//
Процедура НастроитьВариантыОтчетов(Настройки) Экспорт
	
	// _Демо начало примера
	ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты._ДемоДинамикаИзмененийФайлов);
	ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты._ДемоФайлыВспомогательный);
	ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты._ДемоОборотноСальдоваяВедомость);
	ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты._ДемоСтатусыЗаказовПокупателей);
	ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ЗависимостиПодсистем);
	ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.СтатистикаВыполненияОбработчиковОбновления);
	ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.БыстрыеНастройкиОтчетов);
	ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ПроверкаВнедренияБСП);
	// Мастер-копия дополнительных отчетов хранится в составе конфигурации для проверки средствами АПК.
	// Они не должны выводиться в интерфейс конфигурации.
	ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты._ДемоОтчетПоСчетамНаОплатуГлобальный).Включен = Ложь;
	ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты._ДемоОтчетПоСчетамНаОплатуКонтекстный).Включен = Ложь;
	// _Демо конец примера
	
КонецПроцедуры

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

ПриПодключенииДопОтчета

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// 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С
// Удаляет переданный вариант отчета из хранилища вариантов отчетов.
//
// Места использования:
//   ПользователиСлужебный.ПриУдаленииПользовательскихВариантовОтчета().
//
Процедура УдалитьПользовательскийВариантОтчета(СведенияОВариантеОтчета, ПользовательИнформационнойБазы, СтандартнаяОбработка) Экспорт
	
	Если СведенияОВариантеОтчета.СтандартнаяОбработка Тогда
		Возврат;
	КонецЕсли;
	
	СтандартнаяОбработка = Ложь;
	УдалитьВариантОтчета(СведенияОВариантеОтчета.КлючОбъекта, СведенияОВариантеОтчета.КлючВарианта, ПользовательИнформационнойБазы);
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// 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С
// Определяет подключен-ли отчет к общей форме отчета.
Функция ОтчетПодключенКОсновнойФорме(ОтчетМетаданные, ПоУмолчаниюВсеПодключены = Неопределено) Экспорт
	ФормаМетаданные = ОтчетМетаданные.ОсновнаяФорма;
	Если ФормаМетаданные = Неопределено Тогда
		Если ПоУмолчаниюВсеПодключены = Неопределено Тогда
			ПоУмолчаниюВсеПодключены = ПоУмолчаниюВсеПодключеныКОсновнойФорме();
		КонецЕсли;
		ОтчетПодключен = ПоУмолчаниюВсеПодключены;
	Иначе
		ОтчетПодключен = (ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаОтчета);
	КонецЕсли;
	Возврат ОтчетПодключен;
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// 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С
// Исключаемые отчеты используются в качестве исключающего фильтра при выборе отчетов.
Функция ИсключаемыеОтчеты() Экспорт
	МассивМетаданных = Новый Массив;
	РассылкаОтчетовПереопределяемый.ОпределитьИсключаемыеОтчеты(МассивМетаданных);
	
	Результат = Новый Массив;
	Для Каждого ОтчетМетаданные Из МассивМетаданных Цикл
		Результат.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные));
	КонецЦикла;
	
	ИсключаемыеОтчеты = Новый ФиксированныйМассив(Результат);
	
	Возврат ИсключаемыеОтчеты;
КонецФункции

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// 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
///////////////////////////////////////////////////////////////////////////////////////////////////////