Нарезка графика ломтями

09.04.22

Разработка - СКД

Как в СКД простыми средствами улучшить отображение графика, которому слишком тесно на шкале. Проверено в версии 8.3.13.1644.

Странно, что никто до сих пор об этом не написал, а может, я просто плохо искал. Как бы то ни было, решил поделиться простым способом сделать график более наглядным.
Началось с того, что есть у меня табличка с данными за несколько лет. И вот захотелось приделать к этой табличке отчет в виде графиков по месяцам. Сказано – сделано.

 

 

Вид, честно говоря, не очень. Как-то тесновато графику в рамках, отведенных платформой.
Не скажу, что я большой мастер рисования графиков в 1С. Как раз наоборот. И наверняка внешний вид можно улучшить, если залезть в код и сделать все самому. Но что-то не хочется мне туда лезть.
Ладно, что тут можно сделать из простого? А добавлю-ка я группировку диаграмм по годам:

 

 

И, соответственно, строчку в запрос:

    ГОД(ВТОтчет.Месяц) КАК Год

Здесь Месяц – это дата начала месяца, так что все нормально.

 

 

В целом гораздо лучше. Но не совсем. Если бы нынешний год близился к завершению, было бы нормально. Однако ж, он только начался, так что самая свежая часть графика получилась какой-то куцей. В январе вообще не на что было бы смотреть.

 

 

И тут пришла в голову идея – почему бы не нарезать график не по календарным годам, а просто по периодам в год, но только отсчитывать их назад от текущего момента?
Сейчас на дворе апрель – вот пусть и режет на куски с мая по апрель.
Пришлось еще сильнее удлинить запрос. Только не спрашивайте, зачем столько временных таблиц. Причина скрыта за многоточием.

…
	ГОД(ВТОтчет.Месяц) КАК Год
ПОМЕСТИТЬ ВТсГодом
ИЗ
	ВТОтчет КАК ВТОтчет
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТсГодом.Месяц,
	ВТсГодом.Приход,
	ВТсГодом.Расход,
	ВТсГодом.Год,
	ВЫБОР
		КОГДА МЕСЯЦ(ВТсГодом.Месяц) > ВЗМесяц.ПоследнийМесяц
			ТОГДА ВТсГодом.Год + 1
		ИНАЧЕ ВТсГодом.Год
	КОНЕЦ КАК Период
ИЗ
	ВТсГодом КАК ВТсГодом,
	(ВЫБРАТЬ
		МЕСЯЦ(МАКСИМУМ(ВТсГодом.Месяц)) КАК ПоследнийМесяц
	ИЗ
		ВТсГодом КАК ВТсГодом) КАК ВЗМесяц

Напоминаю, Месяц – дата начала месяца. А вот ПоследнийМесяц – это номер месяца в году. И Период – это номер года, в котором заканчивается соответствующий период длиной в год.
Соответственно, делаю группировку по периоду:

 

 

Результат просто восхитительный:

 

 

Однако ж есть еще одно соображение: всякому графику – свое время. Надо бы сделать переключатель на три позиции, да и выбирать подходящую нарезку на ходу.
Как сделать переключатель, все и так знают. А вот что с ним дальше делать – над этим пришлось задуматься. Программно перестраивать дерево отчета – не-не-не, чур меня. Сами как-нибудь, если очень хочется. Посмотрю-ка лучше, что еще можно применить из арсенала СКД.
И в итоге сообразил сделать вот такой хитрый финт ушами:

 

 

Примечательно, что здесь все три диаграммы – на самом деле одно и то же. Они ведь принадлежат одному и тому же варианту отчета. А значит, все, что прописано в закладках под структурой, относится ко всем трем сразу.
Теперь остается лишь в процедуре ПриКомпоновкеРезультата() программно переставлять галочки в начале основных ветвей:

…
    НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
    
    // Выбор ветви структуры отчета
    
    Если ГруппировкаДиаграмм = Перечисления.ГруппировкаДиаграмм.ГруппироватьПоГодам Тогда
    
        НастройкиКомпоновки.Структура[0].Использование = Ложь;
        НастройкиКомпоновки.Структура[1].Использование = Истина;
        НастройкиКомпоновки.Структура[2].Использование = Ложь;
    
    ИначеЕсли ГруппировкаДиаграмм = Перечисления.ГруппировкаДиаграмм.ГруппироватьПоПериодам Тогда
    
        НастройкиКомпоновки.Структура[0].Использование = Ложь;
        НастройкиКомпоновки.Структура[1].Использование = Ложь;
        НастройкиКомпоновки.Структура[2].Использование = Истина;
    
    Иначе
    
        НастройкиКомпоновки.Структура[0].Использование = Истина;
        НастройкиКомпоновки.Структура[1].Использование = Ложь;
        НастройкиКомпоновки.Структура[2].Использование = Ложь;
    
    КонецЕсли;
    
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
        НастройкиКомпоновки,ДанныеРасшифровки);
…

Вот и все. Комментарии приветствуются.

См. также

SALE! %

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

12000 10000 руб.

02.09.2020    93242    474    380    

531

Разрыв страницы в СКД. Легко!

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

Когда отчет надо разделить по страницам, это всегда проблема для разработчика. Поскольку в СКД нет стандартных вариантов, как это сделать. Нашел (на свой взгляд) самое простое и оптимальное решение.

01.09.2023    2544    KVIKS    14    

76

Гибкие отборы через СКД на управляемых формах. Демо-обработка

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

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

2 стартмани

07.06.2023    4193    24    quazare    7    

45

Вывод элементов иерархии верхнего уровня на СКД

СКД Платформа 1С v8.3 Абонемент ($m)

Как получить родителя первого уровня иерархического справочника с помощью СКД.

1 стартмани

06.06.2023    3325    echo77    6    

71

Обработка результатов запроса произвольными вычисляемыми полями. Обзор некоторых новых функций СКД

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

В данной статье вспомним, как обрабатывать результаты запроса в вычисляемых полях СКД, а также сделаем небольшой обзор на новые функции СКД платформы 8.3.20.

07.02.2023    4708    quazare    7    

38

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

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

Методика разработки отчета на СКД с возможностью свёртки части группировок по заданному программно условию. - свертка по значению поля (неотрицательные - сворачиваются); - свертка подчиненных в иерархии с произвольным количеством уровней.

1 стартмани

16.01.2023    2801    schthaxe    3    

30
Оставьте свое сообщение