Skip to content

Instantly share code, notes, and snippets.

@ShadobaAI
Created November 12, 2021 12:05
Show Gist options
  • Select an option

  • Save ShadobaAI/b0fc3e25c0c5aca8d122cc611fb3a060 to your computer and use it in GitHub Desktop.

Select an option

Save ShadobaAI/b0fc3e25c0c5aca8d122cc611fb3a060 to your computer and use it in GitHub Desktop.
#1С #СКД
ТабличныйДокумент = Новый ТабличныйДокумент;
ТЗ = Новый ТаблицаЗначений;
ВыгрузитьЖурналРегистрации(ТЗ);
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных1";
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанныхОбъектСхемыКомпоновкиДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанныхОбъектСхемыКомпоновкиДанных.Имя = "НаборДанных1";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИмяОбъекта = "ЖурналРегистрации";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИсточникДанных = "ИсточникДанных1";
Группировка = СхемаКомпоновкиДанных.ВариантыНастроек[0].Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Группировка.Использование = Истина;
Группировка.Имя = "ЖурналРегистрации";
КолонкиГруппировок = Новый Массив;
Для Каждого Элемент Из ТЗ.Колонки Цикл
КолонкиГруппировок.Добавить(Элемент.Имя);
ДобавитьПолеСКД(НаборДанныхОбъектСхемыКомпоновкиДанных, Группировка, Элемент.Имя, Строка(Поля.Получить(Элемент.Имя)));
Если Элемент.Имя = "Уровень" Тогда
НовоеПоле = СхемаКомпоновкиДанных.ВычисляемыеПоля.Добавить();
НовоеПоле.ПутьКДанным = "ИндексУровень";
НовоеПоле.Заголовок = "ИндексУровень";
НовоеПоле.ТипЗначения = Новый ОписаниеТипов("Булево");
НовоеПоле.Выражение = "ИндексУровеньЖР(Уровень)";
Цвета = Новый Массив;
Цвета.Добавить(WebЦвета.Синий);
Цвета.Добавить(WebЦвета.Черный);
Цвета.Добавить(WebЦвета.Золотистый);
Цвета.Добавить(WebЦвета.Красный);
Для Индекс = 0 По Цвета.ВГраница() Цикл
УсловноеОформление = Группировка.УсловноеОформление.Элементы.Добавить();
УсловноеОформление.Использование = Истина;
ОтборОформления = УсловноеОформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИндексУровень");
ОтборОформления.Использование = Истина;
ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборОформления.ПравоеЗначение = Индекс;
УсловноеОформление.Оформление.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЦветТекста"), Цвета[Индекс]);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если КолонкиГруппировок.Количество() Тогда
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(0, 0, ДопустимыйЗнак.Неотрицательный)));
ТЗ.ЗаполнитьЗначения(1, "Количество");
ТЗ.Свернуть(СтрСоединить(КолонкиГруппировок, ","), "Количество");
ТЗ.Сортировать("Уровень");
ДобавитьПолеСКД(НаборДанныхОбъектСхемыКомпоновкиДанных, Группировка, "Количество");
КонецЕсли;
СхемаКомпоновкиДанных.ВариантыНастроек[0].Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("Заголовок", "Журнал регистрации");
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
НастройкиКомпоновщика = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновщика, , , Тип("ГенераторМакетаКомпоновкиДанных"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, Новый Структура("ЖурналРегистрации", ТЗ),, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);
//ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ПроцессорВывода.НачатьВывод();
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Пока Истина Цикл
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Если Не ЭлементРезультата = Неопределено Тогда
Прервать;
КонецЕсли;
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
Процедура ДобавитьПолеСКД(НаборДанныхОбъектСхемыКомпоновкиДанных, Группировка, Поле, Заголовок = "")
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип(
"ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = Поле;
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = ?(НРег(Поле) = "конец", "КонецЖР", Поле);
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = ?(ПустаяСтрока(Заголовок), Поле, Заголовок);
ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным);
КонецПроцедуры
Функция ИндексУровеньЖР(Уровень) Экспорт
Если Уровень = УровеньЖурналаРегистрации.Информация Тогда
Возврат 0;
ИначеЕсли Уровень = УровеньЖурналаРегистрации.Примечание Тогда
Возврат 1;
ИначеЕсли Уровень = УровеньЖурналаРегистрации.Предупреждение Тогда
Возврат 2;
ИначеЕсли Уровень = УровеньЖурналаРегистрации.Ошибка Тогда
Возврат 3;
Иначе
Возврат -1;
КонецЕсли;
КонецФункции
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment