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