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

Обновлено: 06.07.2024

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

Система компоновки данных 1С 8.3 для начинающих: делаем отбор и сортировку на уровне СКД

Автор уроков и преподаватель школы: Владимир Милькин

Ставим цель

  • Создать новый отчёт "Урок5.erf".
  • Вывести в этом отчёте города (включая название города, мэра и численность).
  • Упорядочить города в списке по численности (по возрастанию)
  • Прямо на форме отчёта дать пользователю возможность делать отбор городов по минимальной численности.

Создаём новый отчёт в конфигураторе

Открываем базу "Гастроном" в конфигураторе.

Из главного меню конфигуратора выбираем пункт "Файл"->"Новый. ":

Вид документа: "Внешний отчет":

В качестве имени пишем "Урок5" и нажимаем кнопку "Открыть схему компоновки данных":

Соглашаемся с именем схемы компоновки данных по умолчанию:

В открывшейся схеме компоновки данных добавляем набор данных - запрос:

Составляем запрос

Запускаем конструктор запроса:

Из таблицы справочника "Города" выбираем поля: "Наименование", "Мэр" и "Численность":

Получился такой запрос:

Выводим отчёт в виде списка

Переходим на закладку "Настройки" и нажимаем волшебную палочку, чтобы вызывать конструктор настроек:

Тип отчёта выбираем "Список":

В отчёте будут отображаться следующие поля:

Сохраняем отчет и тут же проверяем в режиме пользователя:

Сортируем города по численности

Теперь давайте упорядочим записи отчёта по возрастанию численности.

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

Направление сортировки указываем "По возрастанию":

Сохраняем отчёт и проверяем в режиме пользователя:

Делаем отбор городов по численности

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

Переходим на вкладку "Настройки", выбираем пункт "Отчет", далее переходим на вкладку "Отбор" и перетаскиваем поле "Численность" из левой колонки в правую.

В качестве вида сравнения указываем "Больше или равно", а в качестве правого значения - 1000000:

Сохраняем отчет и проверяем в режиме пользователя:

Видим, что остались города с численностью больше миллиона и этот факт (отбора) явно отражён в заголовке отчета.

Выносим параметр отбора на форму отчета

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

Заходим на вкладку "Настройки", выделяем пункт "Отчет", внизу выбираем вкладку "Отбор", выделяем элемент отбора "Численность" и нажимаем справа внизу на зелёный плюсик:

В открывшемся окне ставим галку "Включать в пользовательские настройки":

Вновь сохраняем отчет и запускаем в режиме пользователя.

Видим, что появилось поле "Численность" меняя условие и значение которого мы управляем отбором городов в отчёте:

Эталонная обработка, после выполнения всех шагов этого урока

Войдите на сайт как ученик

Для учеников

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

На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .

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

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

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

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

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

Пример

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

Пример

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

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

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

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

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

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

Пример

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

Пример

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

Работа с иерархией в системе компоновки данных

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

Иерархические группировки

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

Создаем схему с набором данных - запрос. В качестве текста запроса используем следующий запрос:

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


Результатом отчета будет простой список номенклатуры:

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


Теперь результат отчета будет дополнен иерархическими записями - родительскими записями для выводимой в отчет номенклатуры:

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

Отбор "В группе"

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

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

Если в отчет из первой части статьи добавить отбор "Номенклатура В группе "Программное обеспечение", то результат отчета будет выглядеть так

Описание иерархических наборов данных

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

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

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

Для создания такого отчета:

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

Данный запрос выдаст нам документы с сотрудниками за них ответственных.

Для построения иерархии создадим набор данных "ИерархияСотрудников". Его запрос будет выглядеть так:

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

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

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


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


ВАЖНО!
При выводе иерархических записей система компоновки данных выводит в результат поля с теми же именами, какие были у полей, для которых достраивалась иерархия. Поэтому, в иерархическом наборе данных поле, с которым осуществляется связь основного набора должно называться так же, как и в основном наборе. Так, в приведенном выше примере, в иерархическом наборе данных связуемое поле должно иметь имя Сотрудник.

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

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


Набор данных для проверки иерархии

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

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

Для набора данных определим связь самого к себе. Выражение источник "ПроверкаИерархииСотрудника", приемник "РодительИерархииСотрудника". Параметр связи ПроверкаИерархииСотрудника, с возможностью использования списка.

Теперь следует указать данный набор как набор данных проверки иерархии поля Сотрудник набора данных Документы. Это делается на закладке "Наборы данных" в таблице полей набора данных.


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

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

Примеры

Приведенные в данной статье примеры можно найти в отчете "ДокументыПоОтветственным" в информационной базе "Примеры 8.1", расположенной на диске ИТС.

СКД Скрыть колонку в таблице
Есть отчет с запросом ВЫБРАТЬ НормыВыдачиСпецодеждыСпецодежда.Наименование, .

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

В отчете скд как зафиксировать 1 колонку, чтобы не повторялась при выводе по периодам?
Платформа 8.1, конфигурация самописная. В приложении сам отчет и в экселе зеленым я отметил те.

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

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

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

Добавлено через 3 минуты
хотя может и не работает, у меня поле не заполнено, завтра на работе проверю на нормальной базе.

Решение

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

Нет. При отсутствии галок эти поля (группировки) не используются при построении отчета, это все равно, что их удалить.

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

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

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

Можешь приложить отчет?

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

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

Добавлено через 1 минуту
как програмно скрыть колонку? это вообще возможно?

У меня сортируется. Приложи отчет как есть. Посмотрим что там. в каком формате? отправил заархивированный erf. или xml надо было

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

Добавлено через 12 часов 41 минуту
Как думаете, если я в запросе получаю ссылку. А в настройке СКД: поля вытаскиваю из этой ссылки - это очень плохо?
Просто по другому (если запросом сразу все получать), то в случае Иерархии - родительские строки остаются незаполнеными (за исключением поля Ссылка).


Запрос в отчете с СКД
У меня есть такой запрос: ВЫБРАТЬ МашинноеВремя.Дата КАК Дата, МашинноеВремя.Ссылка.


Расшифровка в отчете на скд
Необходимо сделать свою расшифровку. Для начала не могу добраться до значения ресурса. функция.

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

Гиперссылка в отчете СКД
Здравствуйте. В отчете СКД вывожу путь к файлу в виде строки. Можно ли вывести путь в виде.

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

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


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


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


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

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

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


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


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

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


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

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


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

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

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


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


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


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


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



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



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

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

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


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


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

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


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


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


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


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


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


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


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

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

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

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

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


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

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