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

Обновлено: 06.07.2024

Добрый день!<br> <br>Есть отчет в СКД. <br>На форме отчета есть настройка параметров отчета, в частности есть "крыж" выводить детальные записи.<br>Нужно программно проверить - настройена ли группировка по детальным записям и если нет, то добавить ее.<br> <br><span>Не могу понять - как определить, что текущая группировка и есть - Детальные записи?</span><br> <br>Может у кого-то есть кусок подобного кода?<br>Или ссылки какие?<br> <br>Спасибо!

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

Пользователь, конечно, может - если умеет. <br> <br>Хочется настройку всех необходимых параметров вынести на форму - как рекомендует это делать "культура создания отчетов с использованием СКД" (Хрусталева).

Не проще ли сделать настройку "Детальная"?

возможно это сделать проще.<br> <br>но ведь хочется понять логику 1С и разобраться в этом механизме!

>Не могу понять - как определить, что текущая группировка и есть - Детальные записи?<br>Посмотри отладчиком, чем отличается группировка "детальные записи" от нормальной группировки. И поставь условие на это отличие.<br>Мне кажется разница в том, что у детальной записи нет полей группировки. Значит что-то типа этого:<br>ТекГруппировка.ПоляГруппировки.Элементы.Количество() = 0.

Так Вы хотите по установленному параметру программо создавать/изменять настройку отчета или без программного вмешательства задействовать готовую настроку при установленном параметре?

"да именно так и есть. таким образом работает. <br>но чо-то мне подсказывает, что должен быть еще какой-то признак/поле, который бы определял это дело. <br> <br>ведь чтобы добавить группировку с детальными записями я делаю так:<br> <br>ЭлементГруппировки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));<br> <br>правильно. <br> <br>так вот мне кажется, что есть какая-то возможность используя Тип("АвтоВыбранноеПолеКомпоновкиДанных") можно определить что это за группировка. <br> <br>так?"

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

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


Новый элемент в список отбора можно добавить несколькими способами – двойной клик по доступному полю, перетаскивание, клавиша в меню:


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


По умолчанию если элементы отбора не включены ни в какую группу и объединяются с помощью оператора «И».

Вид сравнения в элементе отбора зависит от типа поля (левого значения):

Операции доступные для числа:


Операции доступные для строки:


Для строки добавлены операции – «содержит», «начинается с», «соответствует шаблону» и те же операции с оператором «Не» (Не содержит и т.д.).

Операции доступные для ссылки:


Далее разберем типовые ситуации при использовании отбора

Самый простой вариант использование отбора – добавить фиксированный отбор, который будет действовать всегда (если конечно пользователь не изменит его в варианте отчета):


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

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

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


Допустим нам нужно исключить из отчета все строки, в которых итоговое количество по номенклатуре меньше 15. В запросе мы такое условие применить не можем. Установим для этого отбора для группировки «Номенклатура»:


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


Отборы на группировках часто используются в отчетах вида «Ведомость по остаткам»:


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



Чтобы убрать отбор, выделенный на рисунке на закладке «Другие настройки» для этой же группировки отключим вывод отбора:



Обычно мы редко используем фиксированные отборы. Чаще нам нужны отборы, которые может изменять пользователь. Можно, чтобы пользователь изменял отборы через функционал 1С СКД «Изменить вариант», но это не совсем верный путь – вариант отчета это скорее постоянный «скелет», который настраивается один раз и потом используется многократно. Отборы же это что-то часто изменяемое, поэтому правильнее редактировать их через механизм пользовательских настроек.

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

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


Перейдем теперь в режим предприятия.


Наш отбор доступен для редактирования на форме. За доступность прямо в форме отчета отвечает «Режим редактирования». Значение «Быстрый доступ» означает, что отбор доступен прямо на форме отчета. Если значение равно «Обычный», отбор доступен через кнопку «Настройки». Как видно на рисунке пользователь может выбирать вариант сравнения, управлять действием (включен / отключен) отбора.

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


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


Если вам в отборе нужно изменить представления поля, по которому делается отбор, то для этого есть еще одно представление:


Получается вот так:


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


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


Как известно, в 1С СКД используется не только в отчетах, но и в формах, содержащих динамические списки. У динамического списка есть несколько свойств, которые относятся к СКД. Среди этих свойств имеется свойство «Отбор» с типом «ОтборКомпоновкиДанных». Чтобы установить отбор в динамическом списке есть два способа. Первый способ – передать отборы через параметр формы с одноименным названием – «Отбор». Этот параметр является структурой, в которой ключ ссылается на поле, для которого устанавливается отбор. Значение же содержит данные, с которыми производится сравнение. Можно также передать в качестве правого значения – массив, фиксированный массив, список значений. В этом случае вид сравнения равняется «ВСписке», для одиночного элемента вид сравнения устанавливается как «Равно». Этот способ ограничен в возможностях – с его помощью нельзя накладывать сложные условия с операторами «И» и «ИЛИ», нельзя использовать виды сравнения кроме двух указанных.


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

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

Например, вызов основного метода для установки отбора выглядит так:

Данная функция производит поиск существующего элемента отбора, изменяет его если нашла, а если не нашла, то добавляет с помощью такой процедуры:

В форме содержащей динамический список также как в отчете на СКД, возможно настроить пользовательский отбор. Как это можно сделать показано на рисунке:


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

Упорядочивание в системе компоновки данных

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

Упорядочивание группировок

Каждая группировка, выводимая в отчет, имеет собственное упорядочивание. Это относится как к простым группировкам, так и к группировкам таблиц и диаграмм.
По умолчанию, группировка содержит только поле автоупорядочивания, которое при исполнении отчета разворачивается следующим образом: из глобального упорядочивания, ресурсы будут добавлены безусловно, а из полей не ресурсов, - в порядок будут добавлены поля, являющиеся реквизитами полей группировок и сами поля группировки (для детальных записей будут занесены все поля). Поля группировки, которые не были указаны в глобальном упорядочивании, попадут в конец порядка. Если поле уже включено в порядок, повторно оно не добавляется.

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

Пример

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

Пример

В отчете есть группировка по полю - Номенклатура и в глобальном упорядочивании указано поле Номенклатура.Код
В таком случае упорядочивание группировки будет осуществляться по полю Номенклатура.Код , после чего по полю Номенклатура .

Упорядочивание полей

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

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

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

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

Пример

В отчете следует номенклатуру упорядочивать по полю Артикул .
Для решения такой задачи следует в выражение упорядочивания поля Номенклатура добавить выражение " Номенклатура.Артикул ".

Пример

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

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

Задача действительно очень актуальная, участники Мастер-группы по СКД задают много вопросов на эту тему :)

Также традиционно много вопросов возникает при программной работе с пользовательскими настройками отчетов:

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

Общая длительность всех видеоуроков – 1 час 5 минут.

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

00:37 – В каком обработчике можно расположить код для создания настроек компоновки
01:00 – Где в Синтакс-помощнике можно “подсмотреть” свойства, которые потребуются при написании кода
01:58 – Как настроить группировки отчета
02:28 – Какое свойство позволяет создавать вложенные группировки
03:11 – Как включить/выключить отдельные элементы настроек.

00:22 – Как создать структуру отчета
02:00 – Как указать поля, по которым выполняется группировка
04:10 – Как настроить выбранные поля
06:30 – Как создать автополе.

00:22 – Как создать подчиненную группировку
02:05 – Почему в отчете группировки могут выводиться несколько раз
02:40 – Как проверить наличие группировок в структуре отчета.

00:18 – Где в Синтакс-помощнике найти типы данных, необходимые для создания отборов
00:55 – Какие свойства объекта типа ЭлементОтбораКомпоновкиДанных нужно использовать для создания отбора
01:20 – Как создать отбор при помощи программного кода.

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

00:25 – Где в Синтакс-помощнике найти типы данных, необходимые для работы с условным оформлением
00:33 – Какие свойства объекта типа ЭлементУсловногоОформленияКомпоновкиДанных нужно использовать
02:08 – Как добавить условное оформление при помощи программного кода
02:31 – Как задать перечень полей, к которым будет применяться условное оформление
03:34 – Как отобрать оформляемые данные
04:15 – Как при помощи программного кода описать применяемое оформление.

01:01 – Как программно установить значение параметра
02:00 – Почему значения параметров, выводимые на форму отчета, не совпадают со значениями в самом отчете
04:25 – Что делает метод ПолучитьНастройки
05:10 – Как нужно работать с пользовательскими настройками
06:17 – Для чего нужно свойство ИдентификаторПользовательскойНастройки
07:10 – Где в типовой конфигурации УТ 11 можно найти пример работы с пользовательскими настройками.

00:58 – Почему отличаются значения параметра в настройках компоновщика и в пользовательских настройках
01:23 – Как связываются между собой настройки компоновщика и пользовательские настройки
03:06 – Как работает метод ПолучитьНастройки и значение какого типа он возвращает

00:34 – Чем отличается отбор в настройках компоновщика и отбор в пользовательских настройках
02:34 – Как используется свойство ИдентификаторПользовательскойНастройки
03:08 – Какой алгоритм должен использоваться для установки значения отбора в пользовательских настройках
03:42 – Как реализовать процедуру для установки значения отбора в пользовательских настройках.

Хотите научиться грамотно создавать отчеты на СКД и дорабатывать отчеты в типовых конфигурациях?

Чтобы подробнее изучить возможности системы компоновки данных и уверенно применять механизм на практике, рекомендуем пройти курс Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД)

Читайте также: