Вывод нескольких диаграмм в одном отчете СКД с учетом введенных отборов

03.10.23

Разработка - Работа с интерфейсом

Рассказываю, как вывести несколько диаграмм в одном отчете СКД с учетом введенных пользователем отборов.

Задача выглядит так: у фирмы несколько складов, с каждого склада происходит отпуск товара покупателям. У каждого отпуска товара указан вид доставки (самовывоз, централизованная доставка, Ж/Д транспорт).

Требуется вывести отчет СКД в виде круговой диаграммы для каждого склада по количеству и видам доставок.

Если в отборах отчета указаны склады или способы доставки, то выводить круговые диаграммы с учетом отборов.

Если отборы не указаны, то выводить диаграммы для всех способов доставки из справочника СпособыДоставки.

Создаем Внешний отчет, создаем макет СКД. В макете СКД создаем набор данных запрос и пишем текст запроса. В запросе сгенерируем вот такую таблицу:

 

 

На вкладке Ресурсы в СКД добавим ресурс «КоличествоДоставок». Настроим вывод отчета в виде диаграммы, в качестве точек выберем СпособДоставки, в качестве серий Склады.

На вкладке Другие настройки выберем Тип диаграммы «Круговая», состав подписей «Серия+значсение+процент», размещение легенды «нет», расположение ресурсов в диаграмме «Авто».

Удаляем кнопку Сформировать с формы отчета и добавляем на форму новую кнопку, называем ее ДействиеСформировать, в свойствах кнопки из стандартной коллекции картинок ставим картинку «СформироватьОтчет». В свойстве «Отображение» устанавливаем «Надпись и картинка».

На Действие кнопки пишем код:

Процедура ДействияФормыДействиеСформировать(Кнопка)  
	
	ЭлементыФормы.Результат.Очистить();  
	Рез = Новый ТабличныйДокумент;
	текОтбор = КомпоновщикНастроек.Настройки.Отбор.Элементы;
	
	ЕстьОтбор = Ложь;
	Для Каждого ЭлементОтбора Из текОтбор Цикл 
		Если ЭлементОтбора.ЛевоеЗначение =  Новый ПолеКомпоновкиДанных("СпособДоставки") И ЭлементОтбора.Использование Тогда 
			ЕстьОтбор = истина;	
		КонецЕсли;  
	КонецЦикла;
  
	Если НЕ ЕстьОтбор Тогда	
		нЭлемент = текОтбор.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		нЭлемент.ЛевоеЗначение =  Новый ПолеКомпоновкиДанных("СпособДоставки");
		
		//берем все способы доставки из справочника и для каждого выводим круговую диаграмму

		Запрос = Новый запрос;
		Запрос.Текст = "ВЫБРАТЬ Ссылка 
			|ИЗ Справочник.СпособыДоставки ";
		Выборка = Запрос.Выполнить().Выбрать();
		
		Пока выборка.Следующий() Цикл
			нЭлемент.ПравоеЗначение = выборка.Ссылка;
			ОтчетОбъект.СкомпоноватьРезультат(Рез, ДанныеРасшифровки);  
			Рез.Рисунки[0].Ширина = ЭлементыФормы.Результат.ШиринаСтраницы;
			ЭлементыФормы.Результат.Вывести(Рез); 
			Рез.Очистить();   
		КонецЦикла;
		
		текОтбор.Очистить(); 
	Иначе  
		ОтчетОбъект.СкомпоноватьРезультат(Рез, ДанныеРасшифровки);  
		Рез.Рисунки[0].Ширина = ЭлементыФормы.Результат.ШиринаСтраницы;
		ЭлементыФормы.Результат.Вывести(Рез); 
	КонецЕсли;
	
КонецПроцедуры 

 

СКД статья доработка СКД диаграммы в СКД отборы программно компоновщик настоек

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    151392    833    397    

841

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    18406    26    6    

40

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    5147    kalyaka    6    

33

СКД Программист Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Улучшенный шаблон отчёта СКД, реализованный на обычных формах. Лаконичный и функциональный, весь необходимый минимум для управления отчётом вынесен на форму отчёта, что избавляет рядовых пользователей от необходимости лезть внутрь настроек отчёта. Форма сделана гибкой и позволяет легко себя адаптировать под Ваши потребности. Ряд элементов формы сделан сворачиваемыми и растягиваемыми.

2 стартмани

14.02.2022    8954    38    Eugen-S    5    

13

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    9821    1    2    

6

СКД Программист Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

В статье описана практическая методика использования системы компоновки данных (СКД) для реализации отборов на любых формах конфигурации.

28.12.2021    30522    quazare    12    

154
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Serg O. 291 03.10.23 17:09 Сейчас в теме
А где собственно "Результат" ? Картинок не хватает....

в цикле я так понял прямо на форму в "Результат" картинка добавляется
ЭлементыФормы.Результат.Вывести(Рез); 
2. оggghhhiiu 17 04.10.23 01:18 Сейчас в теме
(1) да, картинка добавляется в цикле.
user773200; Serg O.; +2 Ответить
5. RustIG 1727 04.10.23 13:34 Сейчас в теме
(2) на какой платформе разрабатывали?
выполнять в клиенте или на сервере? - у вас нет директив
9. оggghhhiiu 17 05.10.23 01:09 Сейчас в теме
(5) платформа 8.3 обычные формы.
user773200; +1 Ответить
3. RustIG 1727 04.10.23 11:00 Сейчас в теме
Риторический вопрос, коллеги: зачем сохранять в свои избранные?! - когда есть поиск по сайту - когда надо будет - найдем, решим вопрос...
Автору спасибо за работу и написание статьи!
Прикрепленные файлы:
4. Xershi 1545 04.10.23 11:01 Сейчас в теме
Обычно анализ ведут по 2 складам, просто скопировать схему и поставить в отбор 2 склад. У вас я так понимаю их больше. И решили, что кружков нужно много. Только анализировать больше 3 уже сложно. Но для презентации пойдет.
6. RustIG 1727 04.10.23 13:48 Сейчас в теме
(0)
Запрос = Новый запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка
|ИЗ Справочник.СпособыДоставки ";
Выборка = Запрос.Выполнить().Выбрать();

на клиенте объекта ЗАпрос нет

у вас на обычных формах внешний отчет?

пробую ваш код на управляемых формах - много ошибок выходит
8. оggghhhiiu 17 05.10.23 01:07 Сейчас в теме
(6)Да, на обычных формах. Чуть позже подправлю для управляемых.
user773200; +1 Ответить
7. RustIG 1727 04.10.23 14:07 Сейчас в теме
Код рабочий, но только для обычных форм. Проверено.
Прикрепленные файлы:
EvgeniyOlxovskiy; оggghhhiiu; +2 Ответить
10. echo77 1874 07.10.23 19:05 Сейчас в теме
(0) Может проще настройки изменить, добавив группировку по способу доставки?

Конечно, лайк за труды, но представленный код лучше размещать в обработчике события ПриКомпоновкеРезультата()
Прикрепленные файлы:
Схема.xml
user773200; +1 Ответить
11. Трактор 1252 12.02.24 18:18 Сейчас в теме
Код писать не обязательно. Вложенная СКД прекрасно выводит диаграмму с отбором по параметру.
Оставьте свое сообщение