КУ! или Нарезка графика продолжается

23.04.22

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

Продолжение публикации https://infostart.ru/public/1639182/. Как справиться с неудачным отображением концов графика. Проверено в версии 8.3.13.1644.

Не дает мне покоя задача, успешно решенная в прошлый раз. Кратко напомню, о чем речь.

Есть некая табличка с данными за несколько лет. Сделал по этим данным отчет в СКД в виде графиков по месяцам.
 


Посмотрел на результат – что-то тесновато на шкале. Надо бы поделить по годам.

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

Тогда решил поделить графики не по календарным годам, а по периодам в год, отсчитывая их назад от текущего момента.

Отличное решение.

 


Вот тут радостно хлопаем в ладоши.

А потом пролистываем отчет до конца.

 


Э-э-э… Надо бы еще подумать над оформлением. Конечно, все зависит от объема данных, но у меня такая картинка будет постоянно, потому что в табличке данные не просто за несколько лет, а еще за 2 месяца впридачу. Не спрашивайте, почему. Так надо.

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

Чтобы долго не рассуждать, сразу выложу решение. Как и в прошлый раз, это дополнение к основному запросу отчета.

А короткий участок в самом начале графика отныне будет именоваться КУ.

 

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	МИНИМУМ(ВТОтчет.Месяц) КАК НачалоДата,
	МАКСИМУМ(ВТОтчет.Месяц) КАК КонецДата
ПОМЕСТИТЬ ВТМинМакс
ИЗ
	ВТОтчет КАК ВТОтчет
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	МЕСЯЦ(ВТМинМакс.НачалоДата) КАК НачалоМесяц,
	МЕСЯЦ(ВТМинМакс.КонецДата) КАК КонецМесяц,
	ГОД(ВТМинМакс.НачалоДата) КАК НачалоГод,
	ГОД(ВТМинМакс.КонецДата) КАК КонецГод
ПОМЕСТИТЬ ВТГраницы
ИЗ
	ВТМинМакс КАК ВТМинМакс
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТГраницы.КонецМесяц - ВТГраницы.НачалоМесяц + 1 + 
	ВЫБОР
		КОГДА ВТГраницы.КонецМесяц < ВТГраницы.НачалоМесяц
			ТОГДА 12
		ИНАЧЕ 0
	КОНЕЦ КАК КУМесяцы
ПОМЕСТИТЬ ВТРазмеры
ИЗ
	ВТГраницы КАК ВТГраницы
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(ВТМинМакс.НачалоДата, МЕСЯЦ, 12) <= ВТМинМакс.КонецДата
		И ВТРазмеры.КУМесяцы < 3 КАК ФлагМожноИНужно,
	ДОБАВИТЬКДАТЕ(ВТМинМакс.НачалоДата, МЕСЯЦ, ВТРазмеры.КУМесяцы) КАК КУГраница
ПОМЕСТИТЬ ВТКритерии
ИЗ
	ВТМинМакс КАК ВТМинМакс,
	ВТРазмеры КАК ВТРазмеры
;

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

 

Временных таблиц стало еще больше, но лучше так, чем сойти с ума от формул. А теперь комментарии.

ВТРазмеры.КУМесяцы – это количество месяцев в том самом КУ, то есть количество точек на шкале. Если оно меньше 3 (к примеру), присоединение имеет смысл. Это условие «нужно».

А еще есть условие «можно». Ведь если график целиком укладывается в КУ, его и присоединять-то некуда. В данном случае исходим из того, что происходит группировка по периодам продолжительностью в год с отсчетом от конца графика. Значит, если КУ – не единственный фрагмент, то должен быть еще хотя бы один полный период.

Вот и получается условие: если крайние даты отстоят друг от друга не менее чем на год (условие «можно»), а в КУ меньше 3 точек (условие «нужно»), присоединение состоится.

Технически присоединение КУ – это увеличение номера года, означающего период, для всех месяцев, составляющих КУ. Именно это и происходит во втором выражении ВЫБОР в последнем запросе пакета.

Кстати, ВТКритерии.КУГраница – это дата начала месяца, с которого начинается период, следующий за КУ. Напоминаю, что в данных для отчета месяцы обозначены датой их начала.

А ВТГраницы.НачалоМесяц и ВТГраницы.КонецМесяц – это номера месяцев в году. Тут важно не путать интервалы между датами и точки на шкале.

 

 

Между прочим, проблема КУ существует и при группировке по годам. Никто ведь не обещал, что график не начнется с декабря.

Более того, если брать произвольные данные, а не отмеренные строго по годам, то на обоих концах графика чаще всего будут неполные годы. Вообще-то, именно ради устранения КУ в конце графика и была придумана группировка по периодам. Однако может потребоваться график с группировкой по годам, но без таких вот картинок в январе:

 


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

Ниже вариант запроса для группировки по годам. Показаны только отличия, которые начинаются с таблицы ВТРазмеры.

 

…
ВЫБРАТЬ
	12 - ВТГраницы.НачалоМесяц + 1 КАК НачалоКУМесяцы,
	ВТГраницы.КонецМесяц КАК КонецКУМесяцы
ПОМЕСТИТЬ ВТРазмеры
ИЗ
	ВТГраницы КАК ВТГраницы
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТГраницы.КонецГод > ВТГраницы.НачалоГод
		И ВТРазмеры.НачалоКУМесяцы < 3 КАК НачалоФлаг,
	ВТГраницы.КонецГод > ВТГраницы.НачалоГод
		И ВТРазмеры.КонецКУМесяцы < 2 КАК КонецФлаг,
	ДОБАВИТЬКДАТЕ(ВТМинМакс.НачалоДата, МЕСЯЦ, ВТРазмеры.НачалоКУМесяцы) КАК НачалоКУГраница,
	НАЧАЛОПЕРИОДА(ВТМинМакс.КонецДата, ГОД) КАК КонецКУГраница
ПОМЕСТИТЬ ВТКритерииПред
ИЗ
	ВТМинМакс КАК ВТМинМакс,
	ВТГраницы КАК ВТГраницы,
	ВТРазмеры КАК ВТРазмеры
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТКритерииПред.НачалоФлаг,
	ВЫБОР
		КОГДА ВТКритерииПред.НачалоФлаг
				И ВТКритерииПред.КонецФлаг
				И ВТГраницы.КонецГод - ВТГраницы.НачалоГод = 1
			ТОГДА ЛОЖЬ
		ИНАЧЕ ВТКритерииПред.КонецФлаг
	КОНЕЦ КАК КонецФлаг,
	ВТКритерииПред.НачалоКУГраница,
	ВТКритерииПред.КонецКУГраница
ПОМЕСТИТЬ ВТКритерии
ИЗ
	ВТГраницы КАК ВТГраницы,
	ВТКритерииПред КАК ВТКритерииПред
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТсГодом.Месяц,
	ВТсГодом.Приход,
	ВТсГодом.Расход,
	ВТсГодом.Год + 
	ВЫБОР
		КОГДА ВТКритерии.НачалоФлаг
				И ВТсГодом.Месяц < ВТКритерии.НачалоКУГраница
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ – 
	ВЫБОР
		КОГДА ВТКритерии.КонецФлаг
				И ВТсГодом.Месяц >= ВТКритерии.КонецКУГраница
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК Год,
	ВТсГодом.Год КАК Период
ИЗ
	ВТсГодом КАК ВТсГодом,
	ВТКритерии КАК ВТКритерии

 

Кстати, именно ради этого варианта в таблице ВТГраницы вычисляются поля НачалоГод и КонецГод. При группировке по периодам они не нужны. Но тут особо нечего оптимизировать, так что все поля оставлены для единообразия.

Ну, и «+1» в самом начале этого фрагмента оставлено для наглядности. Оно напоминает, что речь идет о количестве точек на шкале, а не об интервалах между датами.

Вот, собственно, и все.

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    258693    1428    421    

1165

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    6825    354    shapa_pro    27    

69

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    19759    ovetgana    112    

114

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

01.07.2025    11399    krasnoshchekovpavel    7    

68

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    10931    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    16786    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

24.12.2024    14477    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    11412    AlexeyPROSTO_1C    1    

32
Для отправки сообщения требуется регистрация/авторизация