Метод построения нарастающих итогов в таблице и диаграмме в СКД 8.2

28.02.13

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

Одна из самых сложных проблем в СКД - создание ресурсов вида “нарастающие” итоги. Построение нарастающих итогов в диаграммах не решается типовыми средствами. Предлагается универсальное решение.

Одна из самых сложных проблем в СКД  -создание ресурсов вида “нарастающие” итоги.

1.Типичным решением этой проблемы  является левое соединение  таблицы с самой собой. В группировки включается период исходной таблицы по которому строится итог с накоплением. В условие соединения входит выражение вида  Исх.ПериодДень >= Соед.ПериодДень. Собственно итоговое поле в запросе вычисляется агрегатной функцией СУММА(Соед.Ресурс)  в присоединенной таблице по полю ресурса.

Этот подход хорош для специализиированных отчетов, в которых заранее известно, какое поле периода будет использовано в группировке.

В универсальных отчетах (например, по регистру накоплений с настройкой Авто в периоде виртуальной таблицы) ,  в которых заранее неизвестно,  группировку по какому периоду будет выполнять пользователь - этот подход становится малоприемлем. Кроме того – этот подход приводит к дополнительным накладным расходам на выполнение более сложного запроса.

2. Другим широко применяемым подходом является использование функции СКД “ВычислитьВыражение”   в вычислимых полях.

Например настраивается  вычислимое поле “КоличествоНарастающий” : ВычислитьВыражение(“Сумма(Количество)”, , , “Первая”, “Текущая”)

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

Максимум(КоличествоНарастающий)

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

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

Решении которое предлагаю ниже – отталкивается от второго подхода. Нарастающие итоги создаются созданием ресурса на основе вычисляемого поля с функцие СКД “ВыполнитьВыражение”. Единственное дополнительное условие которое вводится – ограничение на имя “накопительного” ресурса  – в нем должно быть в любом регистре подстрока “нараст”. Зачем это нужно – увидите далее.

Теперь надо чтобы при выборе такого ресурса в диагрумму значения считались с накоплением. Идея проста – накапливать значение для каждого  ресурса в момент когда выводится точка диаграммы и подменять значение в диаграмме на  “накопленное”.Для этого используется обработчик события “ПередВыводомЭлементРезультата” в модуле объекта отчета.

Процедура ПередВыводомЭлементРезультата(МакетКомпоновки, ПроцессорКомпоновки, ЭлементРезультата) Экспорт

Макеты = ЭлементРезультата.Макеты;

Для Каждого Мак из Макеты Цикл
Если ТипЗнч(Мак.Макет) = Тип(“МакетРесурсаДиаграммыОбластиКомпоновкиДанных”) Тогда

СтруктМакета = Новый Структура(“Макет,Поле,ИмяПараметраПоля,ИмяПараметраВыражения,ЗначениеРесурса”);
ФлДобавлятьМакет = Ложь;
Для Каждого Пар из Мак.Параметры   Цикл
Если ТипЗнч(Пар)  = Тип(“ПараметрОбластиРасшифровкаКомпоновкиДанных”) Тогда

Для Каждого Выр Из Пар.ВыраженияПолей Цикл
СтруктМакета.Поле = Выр.Поле;

НаимПоляНР =  Нрег(Выр.Поле);
Если СтрЧислоВхождений(НаимПоляНР,”нараст”) > 0 Тогда
ФлДобавлятьМакет = Истина;
КонецЕсли;
КонецЦикла;
СтруктМакета.ИмяПараметраПоля = Пар.Имя;
КонецЕсли;

Если ТипЗнч(Пар) = Тип(“ПараметрОбластиВыражениеКомпоновкиДанных”) Тогда
СтруктМакета.ИмяПараметраВыражения =Пар.Имя;
КонецЕсли;

КонецЦикла;
СтруктМакета.ЗначениеРесурса = 0;
СтруктМакета.Макет  =  Мак.Имя;
Если ФлДобавлятьМакет Тогда
МассивМакетов.Добавить(СтруктМакета);
КонецЕсли;
КонецЕсли;
КонецЦикла;

Если ( ЭлементРезультата.Макет <> “”)  И  ( ЭлементРезультата.ТипЭлемента = ТипЭлементаРезультатаКомпоновкиДанных.НачалоИКонец ) Тогда
Для Каждого СМ из МассивМакетов Цикл
Если СМ.Макет =  ЭлементРезультата.Макет  Тогда
ПарВыражения = Неопределено;
Для Каждого Пар из  ЭлементРезультата.ЗначенияПараметров Цикл
Если Пар.Имя = СМ.ИмяПараметраВыражения Тогда
ПарВыражения = Пар;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПарВыражения <> Неопределено Тогда
СМ.ЗначениеРесурса =  СМ.ЗначениеРесурса + ?( ПарВыражения.Значение = null,0,ПарВыражения.Значение);
ПарВЫражения.Значение = СМ.ЗначениеРесурса;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;

КонецПроцедуры

В  обработчике “ПередВыводомОтчета”  создаем массив макетов.

Процедура ПередВыводомОтчета(МакетКомпоновки, ПроцессорКомпоновки) Экспорт
МассивМакетов = Новый Массив;

КонецПроцедуры

Переменная МассивМакетов должна быть переменной модуля.

Обратите внимание- по названию ресурса программа сама теперь знает надо ли в диаграмме выводить нарастающий итог.

Вот и все.

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

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

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

См. также

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

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

16500 руб.

02.09.2020    260171    1447    421    

1169

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

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

29.01.2026    7051    367    shapa_pro    27    

69

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

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

29.10.2025    20294    ovetgana    112    

115

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

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

01.07.2025    11663    krasnoshchekovpavel    7    

68

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

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

10.04.2025    11232    Neti    0    

41

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

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

27.02.2025    16928    ovetgana    50    

93

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

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

24.12.2024    14673    Akcium    17    

46

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

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

20.08.2024    11654    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Famza 85 28.02.13 16:12 Сейчас в теме
(0) Может оформить стоит?
dj_serega; +1 Ответить
2. expert.1c8 01.03.13 20:24 Сейчас в теме
(1) Да, код лучше бы разукрасить, а решение интересное
3. MarSeN 987 04.03.13 23:56 Сейчас в теме
(0) вариант 3 - использовать 2 скд. В первой вычисляете наарастающие итоги ч/з вычислитьВыражение, программно ее выполнять в ТЗ, а пртом как источник данных ее пихать во вторую СКД которая будет проcто выводить данные в диаграмму
4. SkorikA 83 05.03.13 05:53 Сейчас в теме
Вариант 4. - Использование самой компоновки данных - ВычислитьВыражение("Сумма(Значение)", "МояГруппировка" , , "Первая", "Текущая"). Можно использовать начиная с версии платформы 8.2.14.
rif-nrr; Gisborn; JohnyDeath; ixijixi; SashaV; frkbvfnjh; kkv90; proonec; deminded; Chif13; shootnik; kyafnsum; y22-k; +13 Ответить
11. frkbvfnjh 820 05.06.20 15:17 Сейчас в теме
(4) Спасибо мне помогло, но в выражении ресурса я вообще не указывал агрегатную функцию, тогда все получилось как надо
5. bulpi 218 06.03.13 17:14 Сейчас в теме
Вариант 5 - послать на фиг СКД, и сделать обычный отчет. Религия не позволяет ? Какая пользователю разница, СКД внутри, или нет? Это же надо так жутко извращаться для выполнения простых вещей.
7. safronoff2006 48 15.03.13 13:31 Сейчас в теме
(5) bulpi,


Если отчет должен гибко настравиться, послать СКД не просто.
8. safronoff2006 48 15.03.13 13:43 Сейчас в теме
(5) bulpi,

Еще одна причина делать на СКД - ненавижу рисовать макеты для отчетов.

За последние пол-года не сделал ни одного отчета без СКД.
Пользователи воспринимают отчеты на СКД как выполненные более профессионально.
Широко использую программное управление компоновкой и внешние источники данных.
Постоянно пользуюсь "шаблоном универсального отчета СКД" от 1С.
6. ivanov660 4972 09.03.13 16:37 Сейчас в теме
К стати, мне приходилось использовать и другой вариант - функции общего модуля и модуля менеджера отчета, когда стояла задача вычисления среднеквадратического отклонения. К тому же в данном варианте можно решать более сложные задачи.
А так можно использовать источник данных - объектную модель.
9. Гость 23.08.13 05:27
Отличное работающее решение. Еще бы такое же для таблицы СКД.
10. progr-2008 119 27.06.16 09:43 Сейчас в теме
Для СуммаДок не Максимум(КоличествоНарастающий), а Сумма(СуммаДок)
Для отправки сообщения требуется регистрация/авторизация