В конфигурации ERP присутствует объект Универсальный отчет. Он позволяет построить в пользовательском режиме отчет с помощью настройки СКД. Однако на текущий момент нет возможности использовать в нём такой набор данных, как объект. При редактировании схемы можно создать набор данных объект, но требуется место в базе, которое позволит хранить в себе таблицы значений или алгоритмы их создания для последующего помещения в СКД в процедуру при компоновке. Изменение модуля Универсального отчета в расширении приведено ниже:
&Вместо("ПриКомпоновкеРезультата")
Процедура РУО_ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
Отчеты.УниверсальныйОтчет.ВывестиКоличествоПодчиненныхЗаписей(Настройки, СхемаКомпоновкиДанных, СтандартнаяОбработка);
ЗаменитьЗначенияПараметровНаПредставления(Настройки, Настройки.ДополнительныеСвойства.ДоступныеЗначения);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ВнешниеДанные = Новый Структура;
РУО_ПолучитьОбъектныеДанные(ВнешниеДанные, МакетКомпоновки.НаборыДанных);
Если ВнешниеДанные.Количество() > 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
Если СтандартнаяОбработка Тогда
Возврат;
КонецЕсли;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеДанные, ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Процедура "РУО_ПолучитьОбъектныеДанные" определяет, есть ли в схеме универсального отчета наборы данных - объекты, и заполняет их данными.
Процедура РУО_ПолучитьОбъектныеДанные(ДанныеВВидеСтруктуры, НаборыДанных)
Для Каждого НаборДанных Из НаборыДанных Цикл
Если ТипЗнч(НаборДанных) = Тип("НаборДанныхОбъединениеМакетаКомпоновкиДанных") Тогда
РУО_ПолучитьОбъектныеДанные(ДанныеВВидеСтруктуры, НаборДанных.Элементы);
ИначеЕсли ТипЗнч(НаборДанных) = Тип("НаборДанныхОбъектМакетаКомпоновкиДанных") Тогда
ДанныеВВидеСтруктуры.Вставить(НаборДанных.ИмяОбъекта,
РегистрыСведений.РУО_АлгоритмыПолученияДанных.Данные(НаборДанных.Имя,НаборДанных.ИмяОбъекта));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Если встречается набор данных Объединение, то обрабатываются и вложенные наборы данных. Процедура обращается к модулю менеджера регистра сведений РУО_АлгоритмыПолученияДанных для получения сформированной таблицы значений с данными для отчета.
Функция "Данные" в модуле менеджера регистра сведений находит запись по именам набора и объекта, обрабатывает алгоритм создания данных или извлекает уже готовую таблицу значений, а далее возвращает данные обратно в модуль универсального отчета.
Функция Данные(ИмяНабора,ИмяОбъекта) Экспорт
Перем Данные;
ЗаписьАлгоритмаПолученияДанных = РегистрыСведений.РУО_АлгоритмыПолученияДанных.Получить(Новый Структура("ИмяНабора,ИмяОбъекта",ИмяНабора, ИмяОбъекта));
ГотоваяТаблица = ЗаписьАлгоритмаПолученияДанных.ГотоваяТаблица;
Алгоритм = ЗаписьАлгоритмаПолученияДанных.Алгоритм;
Если ГотоваяТаблица Тогда
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Алгоритм);
Попытка
Данные = СериализаторXDTO.ПрочитатьJSON(Чтение);
Исключение
ТекстКомментария = ОписаниеОшибки();
ЗаписьЖурналаРегистрации("Для набора " + ИмяНабора + " и объекта " + ИмяОбъекта + " выявлена проблема", УровеньЖурналаРегистрации.Ошибка,,,ТекстКомментария);
КонецПопытки;
Чтение.Закрыть();
Иначе
Выполнить(Алгоритм);
КонецЕсли;
Возврат Данные;
КонецФункции
Регистр сведений состоит из измерений ИмяНабора, ИмяОбъекта и ресурсов ГотоваяТаблица (признак того, что данные формируются программно или записаны в json-формате) и Алгоритм.
В форме списка регистра есть возможность загрузить данные из таблицы Excel или создать программно таблицу значений на форме, заполнить её интерактивно и поместить в отдельную запись в регистре.
Пример загрузки из файла Excel:
Пример интерактивного формирования таблицы значений:
Сформированные таблицы помещаются в записи регистра сведений в формате JSON. При этом флаг "Готовая таблица" проставляется автоматически.
При создании новой записи в РС в поле Алгоритм можно прописать программный код для формирования таблицы значений, в этом случае флаг "Готовая таблица" не устанавливается.
После того, как данные помещены в регистр сведений, на первой закладке "Список записей" можно выгрузить заготовку схемы СКД в файл, предварительно указав путь и нажав кнопку "Получить схему СКД по строке".
Полученная схема может быть загружена в Универсальный отчет и использована при составлении отчета, основанного на данных, хранящихся в регистре сведений.
Расширение тестировалось на платформе 1С 8.3.23.1865.
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.12.208