1с скд группировка строк по признаку

Обучение программированию на 1С

Группировки, ресурсы и настройка отчётов СКД

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

Что такое ресурсы и группировки в СКД

При создании отчёта в СКД из набора данных извлекаются записи. Эти детальные записи, которые возвращает сам запрос, обычно представляют собой набор элементов, связанных между собой иерархическими связями. Поэтому, для удобочитаемости отчёта его данные можно сгруппировать. Группировка отчёта в СКД – это операция размещения данных по группам, однородных по какому-либо признаку.

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

Настройка ресурсов, группировка и сортировка данных

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

Итак, создаём периодический регистр сведений в СКД. Назовём его “Остановки по маршруту”. Добавляем сюда два измерения: Маршрут, Остановка и итоговый ресурс Расстояние. Зададим для них соответствующие типы данных: строковый и числовой. Все изменения сохраняем в новой конфигурации регистра сведений.

В появившемся конструкторе СКД находим команду «Добавить набор данных – запрос»:

Чтобы решить поставленную задачу и по результатам её решения построить отчёт, находим в конфигураторе таблицу “ОстановкиПоМаршруту”

Так как наш отчёт рассчитывает расстояние между двумя, выбранными пользователем, остановками, то на вкладке «Наборы данных» формируем запрос. Требуемый запрос будет предоставлять данные в виде таблицы по осям X и Y с использованием полного внешнего соединения таблицы регистра:

ОстановкиПоМаршрутуX.Маршрут КАК Маршрут,

ОстановкиПоМаршрутуX.Остановка КАК ОстановкаX,

ОстановкиПоМаршрутуY.Остановка КАК ОстановкаY,

ОстановкиПоМаршрутуX.Расстояние КАК РасстояниеX,

ОстановкиПоМаршрутуY.Расстояние КАК РасстояниеY,

КОГДА ОстановкиПоМаршрутуX.Расстояние – ОстановкиПоМаршрутуY.Расстояние >= 0

ТОГДА ОстановкиПоМаршрутуX.Расстояние – ОстановкиПоМаршрутуY.Расстояние

Источник

Группировка измерений в заголовках СКД

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

Давайте обратимся к практической задаче. У нас есть таблица с двумя числовыми показателями, которые заполнены по периодам в разрезе 2-х измерений: Вкус и Цвет.

Вот примерно так она выглядит:

Задача стоит тоже не сложная: оставить измерение «Вкус» в строках, а данные показателей по измерению «Цвет» вывести в столбцы, сгруппировав предварительно по месяцам.

Итак мы создаем отчет на СКД с указанными данными и выводим его в виде таблицы с двухуровневой группировкой по колонкам (период по месяцам и цвета внутри каждого месяца)

И здесь нас ждет первое разочарование. Если выводить так, как мы привыкли по строкам, значение периода в группировке верхнего уровня будет упорно предшествовать группировке по цветам, но никак не поднимется наверх. Поэтому мы уберем вывод значений периода из старшей группировки и дополнительно на вкладке «Другие настройки» для этой группировки установим настройку «Расположение группировок» на «Нет». А в поля группировки «Цвет» добавим для вывода интересующий нас период.

Вот примерно что из это выйдет:

Как видим, почти получилось, но вот определитель периода теперь повторяется в каждом столбце, а не объединяется как шапка группировки цветов.

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

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

1. Порядковый номер текущего значения измерения в группировке.

2. Количество значений измерений в текущей группировке.

Таким образом, мы сможем узнать в каких полях начинается и заканчивается группировка по старшему измерению и можем настроить вывод значения старшего измерения только в первой ячейке, параллельно убрав разделительные линии из ячеек внутри группировки. А заодно (чтобы два раза не вставать) отформатируем первый день месяца в ММММ ГГГГ.

Получим в итоге то, что в нашей главной превьюшке (и демо отчете) называется «Пример 1»

Как видим получилось не сильно красиво, но по крайней мере видно как называется, где начинается и где заканчивается группировка по месяцам. Но обычно хочется, чтобы общее название было в центре. Для такого фокуса нам потребуется еще одно вычисляемое поле:

Читайте также:  Рак матки у собаки признаки

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

Если теперь мы настроим условное форматирование так, чтобы выводился текст не в первой для группировки ячейки, а именно в колонке с нужным номером, то получим, то что на превьюшке я назвал «Пример 2»

Уже лучше, но все равно кривовато. Однако, наши возможности улучшить вид решения еще не исчерпаны. Давайте центровать заголовки периодов в ячейке вывода, если она действительно центральная (нечетное количество колонок в группировке) или выравнивать по правому краю, если колонка заголовка ближайшая к центру слева. Для такого фокуса нужно еще одно вычисляемое поле:

4. Необходимость центрировать текст в ячейке с заголовком.

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

Как рассчитать нужные поля, надеюсь понятно из рисунка:

Демо отчет тестировался и работает на платформе 8.3.9.2309

Источник

Группировка в 1С СКД

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

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

Определение группировок производится на закладке «Настройка» схемы компоновки данных в верхнем правом окне.

Рисунок 1

Детальные записи

Начнем с простого. Если нам нужно вывести все строки набора в отчет, добавляем группировку «Детальные записи». Добавление новой группировки производится через правую клавишу мыши (ПКМ) на уровне отчета или через клавишу «Ins». Чтобы добавить группировку «Детальные записи», в открывшемся диалоге мы не указываем поле.

Далее в области «Настройки текущей группировки» (см. рисунок 1) мы можем на закладке «Выбранные поля» просто перенести все доступные поля в список выбранных. При этом мы указали настройки (список полей) для всего отчета. В нашем случае весь отчет это одна группировка, поэтому нет разницы — задаем мы настройки для всего отчета или для группировки.

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

Такой вариант отчет бывает полезным для отладки, чтобы понять какие данные содержатся в наборе.

Группировка по полю

Дальше у нас может возникнуть задача — добавить итоговые записи в отчет по какому-то полю. В этом случае при добавлении новой группировки мы должны указать это поле. Например, в нашем случае мы можем добавить группировку по контрагенту.

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

Все потому что в группировку, определяющую итоговую запись попадают только значения полей, из которых состоит эта группировка и ресурсы. Ресурсы мы не определили, поэтому они не попали в отчет. Давайте определим два ресурса

Теперь в наш отчет попали ресурсы, но не попали прочие поля. Об этом поговорим позже.

Группировка иерархическая

В 1С СКД есть возможность добавления итоговой записи для иерархических объектов – справочников, планов видов характеристик. В этом случае кроме итоговой записи по конечному элементу в отчет добавляется итоговая запись по всем родителям, содержащим этот элемент.

Например, сделаем вариант отчета с группировкой по номенклатуре, включая итоги по группам (папкам).

Если выбрать вариант «Иерархия» добавляются итоги по родителям и элементам, если «Только иерархия», то итоги только по родителям. Выберем вариант «Иерархия» и посмотрим, что получится:

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

Группировка по нескольким полям

Группировку можно сделать не по одному полю, а по нескольким. Например, в случае нашего отчета сделаем группировку по периоду и включим для этого в группировку два поля – начало периода и конец периода. Добавим группировку, указав поле начало периода (или не указывая ничего), затем кликнем по группировке, в открывшемся списке определим следующие поля:

По смыслу такая группировка аналогична конструкции «СГРУППИРОВАТЬ ПО НачалоПериода, КонецПериода» в языке запросов.

Получим вот такой отчет

Подчиненные группировки

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

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

Добавим в предыдущий вариант отчета группировку детальных записей:

И добавим сразу себестоимость в ресурсы. Получится такой отчет:

Действие настроек родительской группировки на подчиненные

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

Читайте также:  100 процентные признаки беременности на ранних сроках

Для подчиненных группировок мы можем определить свои настройки. Например, определим для детальных записей в последнем варианте свой список полей. Допустим в детальных записях нам нужно к общим полям добавить код номенклатуры:

Для этого мы в поле «Настройки» выбираем группировку «Детальные записи». В выбранных полях оставляем «Авто» — это значит, что мы наследуем в группировке поля из родительских группировок. И добавляем поле код. Получаем (в других настройках нужно указать расположение реквизитов – «Отдельно»):

Мы можем переопределить полностью родительские поля и задать свой список полей:

Таблица

До сих пор мы рассматривали с вами «одномерные» отчеты, когда информация из набора разворачивалась в одном направлении – вертикальном. В 1С СКД имеется возможность выводить информацию в двух направлениях одновременно – в вертикальном и горизонтальном в виде таблицы. Для этого используется элемент структуры «Таблица»:

При добавлении таблицы в настройки у нее доступны два измерения, в которые можно добавлять группировки – «Строки» для вертикального разворота, «Колонки» — для горизонтального разворота:

Используя набор данных с простым запросом:

Построим отчет, в котором в строках разместим группировку по контрагенту и номенклатуре, а в колонках по году и месяцу:

В отчете у нас определены ресурсы, которые мы добавили в настройки для отчета в выбранные поля:

Получили вот такой отчет:

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

Собственные итоги

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

Рассмотрим на практическом примере. Пусть у нас есть такой (немного странный отчет):

За каждый месяц мы выводим количество поступивших и проданных товаров. В общем итоге по горизонтали (и только в нем) нам нужно вывести процентное отношение расхода к приходу. Первой колонкой нужно вывести остаток по номенклатуре. В общем итоге за период нужно вывести максимальный приход и максимальный расход.

Итак, первоначальная настройка отчета у нас совсем простая:

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

Начнем с добавления процента в общем итоге. Для этого отключим вывод общего итога по горизонтали на закладке «Другие настройки»:

Далее нам нужно добавить группировку в колонки, в которой мы разместим наши итоги. Это может быть или группировка детальных записей или группировка по вычисляемому полю. Первое чуть проще, но итоговый результат нас не совсем устроит – нет заголовка у итога (это можно доработать с помощью макета), выберем второй вариант. Для этого добавим вычисляемое поле для общего итога «Итого», добавим вычисляемое поле «Процент» для расчета процента:

Добавим ресурс для общего итога с такой формулой:

Добавим колонку в настройки, добавим наши поля в выбранные ТОЛЬКО для группировки «Итого»:

Получим отчет в нужном виде:

Теперь добавим колонку остатка после колонки номенклатура. Для этого добавим второй набор данных (остатки), свяжем его с основным набором:

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

Получим вот такую форму отчета:

И последняя задача – поменять общий вертикальный итог. Для нашей задачи такое требование можно выполнить несколько проще — без добавления группировки с собственным итогом, потому что в нашем случае не меняется макет общего итога, а меняются только значения ресурсов. Если нужно поменять макет ресурсов (состав ресурсов), то у нас есть ролик, в котором можно посмотреть, как делаются собственные итоги в строках.

Мы же решим эту часть задачи по другому, с помощью опции «Рассчитывать по» на закладке «Ресурсы»:

Процент для общего итога по строкам в общем итоге по горизонтали считать не будем. Получаем вот такой отчет:

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

Вывод группировок в пользовательские настройки

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

Для этого в СКД есть возможность добавить настройку группировок в пользовательские настройки:

Для отчета в целом

Для таблицы есть возможность управлять группировками строк и колонок:

Для выбранной группировки можно управлять вложенными (подчиненными) группировками:

В режиме предприятия это выглядит примерно так:

Группировки добавляются к заданным в варианте отчета. Можно не устанавливать никакие группировки в варианте отчета и тогда пользователь может полностью управлять структурой отчета. Надо конечно заметить, что в этом режиме нельзя добавить таблицу или диаграмму – только обычную группировку. Причем нельзя добавить составную группировку. При добавлении группировки как показано на рисунке устанавливается дополнительно две родительских группировки, а не одна составная:

Читайте также:  Классификация упражнений по признаку структуры движений

Программная работа с группировками

При создании отчета на СКД имеется возможность создать отчет полностью программно. При этом можно таким образом создать как схему компоновки, так и заполнить настройки компоновщика настроек. В обоих случаях мы работаем с объектом «НастройкиКомпоновкиДанных».

Пример программного создания группировки

// Добавим новую группировку в структуру отчета.

// Укажем, по каким полям нужно группировать.

ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(«Номенклатура»);

// Укажем тип иерархии.

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

Источник

СКД: Использование макетов для вывода «сложных» группировок, ресурсов и итогов.

Здесь оранжевой строкой выделен сам заказ покупателя, белые строки – резервы товаров под заказ из имеющихся в наличии, серые – товар заказанный у других поставщиков.
Т.е. из 10000кг:
— 1500 было у нас на складах,
— 8000 мы заказали у других поставщиков,
— 60 потеряно в процессе усушки.
Итого недогруз составляет 560кг.

Итак, поехали! Мы сформировали необходимые нам наборы данных (тексты запросов опускаем за ненадобностью):

Названия полей говорят сами за себя, остановлюсь лишь на поле «Порядок». Оно определяет тип строки и используется для сортировки, в условном оформлении и при расчете некоторых итогов, это поле может принимать следующие значения:
1 – сам заказ покупателя (оранжевая строка);
2 – зарезервированные/отгруженные товары (белые строки);
3 – товары заказанные у поставщика (серые строки).

В наборе данных «ПараметрыУсушки» получаются значения параметра «Усушка» (в данном случае, в разрезе складов, но не принципиально).
В наборе данных «Курс», соответственно, курсы валют.
Теперь нам необходимо все это красиво вывести в нашу печатную форму.

1. Для начала небольшой лайфхак с выравниванием. В печатной форме две группировки: по договорам/сериям и по складам, состав колонок незначительно отличается, при этом важно, чтобы колонки с одинаковыми показателями выводились друг под другом. Бонусом, подвалом идет строка с курсом.

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

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


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

Задача выравнивания решена. Переходим к более интересным вопросам.

при этом для параметра «Цена» зададим следующее выражение:

Т.е. когда валюта документа USD – выводится обычная цена, в противном случае выводится строка согласно заданному шаблону. Выделение ячейки фоном зеленого цвета выполняется обычным условным оформлением, на этом подробно останавливаться не будем и перейдем к следующему «кейсу».

3. В итогах необходимо вывести, количество отгружено/зарезервировано, показатель усушки и остаток с учетом усушки. В зависимости от значения остатка (положительное/отрицательное) необходимо менять текст названия итога (Перегруз/недогруз):

Покажем, как это сделать на примере группировки «Склады». Создадим макет группировки, тип макета – Общий итог заголовок:

Помните при описании наборов данных я отдельно выделил поле «Порядок»? Это поле используется при расчете следующих ресурсов:
Ресурс «Количество» – показывает, сколько мы не допоставляем товара:

Ресурс «Усушка» – это тоже обычный ресурс, рассчитанный общим итогом, без учета строки заказа:

Аналогично рассчитан и ресурс КоличествоПоставлено:

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

Последний параметр этого макета – «Груз» используется для обозначения «Перегруз»/ «Недогруз» и тоже рассчитывается непосредственно в макете следующим образом:

(Привет тем, кто искал как заменить слово «Итого» в итогах :))

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

P.S. И в качестве бонуса: как добавить подобную печатную форму к заказу? Очень просто.
Добавляем отчет в конфигурацию:

Создаем у отчета команду «Анализ заказа»:

у команды указываем Тип параметра команды – ДокументСсылка.ЗаказПокупателя (или любые другие нужные нам объекты метаданных), выбираем группу Панель навигации формы.

В обработчике команды прописываем соответствующий вызов формы отчета с параметрами:

Теперь при открытии управляемой формы заказа покупателя в нем будет доступна команда «Анализ заказа» при клике на которую автоматически сформируется отчет с отбором по данному заказу:

Источник