На днях делал несколько однотипных отчетов на СКД. Общий принцип: формируются все варианты отчета, указанные в настройках схемы и каждый вариант выводится на отдельной вкладке.
Потом возникла мысль попробовать объединить все схемы в один отчет, чтобы не плодить лишних объектов в конфигурации. При этом количество вариантов в этих схемах заранее неизвестно. Ok, challenge accepted.
В тестовой конфигурации создаю для отчета две схемы компоновки, "Склад" и "Заявки".
Запросы наборов данных приводить не буду, для каждой схемы в настройках добавляю несколько вариантов отчетов.
Теперь переходим к созданию формы. Практически все реквизиты формы будут создаваться при выборе необходимого макета отчета.
Смотрим, что получилось.
Выгрузка базы (8.2) прилагается.
Потом возникла мысль попробовать объединить все схемы в один отчет, чтобы не плодить лишних объектов в конфигурации. При этом количество вариантов в этих схемах заранее неизвестно. Ok, challenge accepted.
В тестовой конфигурации создаю для отчета две схемы компоновки, "Склад" и "Заявки".
Запросы наборов данных приводить не буду, для каждой схемы в настройках добавляю несколько вариантов отчетов.
Теперь переходим к созданию формы. Практически все реквизиты формы будут создаваться при выборе необходимого макета отчета.
&НаСервере Процедура СоздатьПереченьОтчетов() Для Каждого Макет Из РеквизитФормыВЗначение("Отчет").Метаданные().Макеты Цикл Элементы.МакетОтчета.СписокВыбора.Добавить(Макет.Имя, Макет.Синоним); КонецЦикла; КонецПроцедуры // СоздатьПереченьОтчетов() &НаСервере Процедура ОбработатьВыборМакета() Макет = РеквизитФормыВЗначение("Отчет").ПолучитьМакет(МакетОтчета); мУдалить = ?(ПустаяСтрока(РеквизитыКУдалению), Новый Массив, ПолучитьИзВременногоХранилища(РеквизитыКУдалению)); мДобавить = Новый Массив; кУдалению = Новый Массив; Для Каждого Вариант Из Макет.ВариантыНастроек Цикл ИмяРеквизита = "ТабДок_" + Вариант.Имя; тРеквизит = Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("ТабличныйДокумент")); мДобавить.Добавить(тРеквизит); кУдалению.Добавить(ИмяРеквизита); КонецЦикла; ИзменитьРеквизиты(мДобавить, мУдалить); Пока Элементы.СтраницыОтчета.ПодчиненныеЭлементы.Количество() Цикл Элементы.Удалить(Элементы.СтраницыОтчета.ПодчиненныеЭлементы[0]); КонецЦикла; Для Каждого Вариант Из Макет.ВариантыНастроек Цикл Страница = Элементы.Добавить("Страница_" + Вариант.Имя, Тип("ГруппаФормы"), Элементы.СтраницыОтчета); Страница.Вид = ВидГруппыФормы.Страница; Страница.Заголовок = Вариант.Представление; ИмяРеквизита = "ТабДок_" + Вариант.Имя; ТабДок = Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), Страница); ТабДок.Вид = ВидПоляФормы.ПолеТабличногоДокумента; ТабДок.ПутьКДанным = ИмяРеквизита; ТабДок.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; ЭтаФорма[ИмяРеквизита].Очистить(); КонецЦикла; РеквизитыКУдалению = ПоместитьВоВременноеХранилище(кУдалению, УникальныйИдентификатор); КонецПроцедуры // ОбработатьВыборМакета() &НаСервере Процедура СформироватьОтчеты() Схема = РеквизитФормыВЗначение("Отчет").ПолучитьМакет(МакетОтчета); Для Каждого Вариант Из Схема.ВариантыНастроек Цикл Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Вариант.Настройки); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Макет = КомпоновщикМакета.Выполнить(Схема, Отчет.КомпоновщикНастроек.ПолучитьНастройки()); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(Макет); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ЭтаФорма["ТабДок_" + Вариант.Имя]); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецЦикла; КонецПроцедуры // СформироватьОтчеты() &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) СоздатьПереченьОтчетов(); КонецПроцедуры &НаКлиенте Процедура МакетОтчетаПриИзменении(Элемент) ОбработатьВыборМакета(); КонецПроцедуры &НаКлиенте Процедура Сформировать(Команда) СформироватьОтчеты(); КонецПроцедуры
Смотрим, что получилось.
Выгрузка базы (8.2) прилагается.
Здравствуйте. Не подскажете, возможно ли такое на СКД: Группировки строк - номенклатура, группировки колонок - месяц, ресурс - цена поступления. Но если цен было несколько в месяце, то сформировать несколько колонок для каждой цены, причем не нужно выводить цену на ее дату, а сделать просто 3 колонки с одним периодом.
ОтветитьУдалитьСделал в выражении ресурса "Массив(цена)". В принципе получилось правильно, но пользователям неудобно обрабатывать данные в экселе. Просят разделить на разные колонки.
Привет.
УдалитьМожет вам лучше сделать дополнительную группировку строк по цене?
Подскажите как найти динамический отчёт в конфигураторе, чтобы его изменить?
ОтветитьУдалитьМожете скачать выгрузку базы, ссылка в конце статьи. Там отчет так и называется - "Динамический отчет"
Удалить