Отбор в отчете в 1с

Обновлено: 04.07.2024

Сначала получаем форму.

Если отчет хранится в базе тогда выполняем на клиенте код:

Далее получаем настройки:

Через серверный вызов получаем настройки и если нужно заполняем параметры Компоновщика в отдельной процедуре.

Загружаем измененные настройки в компоновщик

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

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

Код выполняется на сервере.

Получение локального макета

Получение макета произвольного отчета

Получение макета во внешней обработке

Получение макета из внешней обработки или отчета

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

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

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

И когда будем формировать

Далее программно заполняем параметры Компоновщика. Об этом подробно в разделе 4 .

Объявляем создаем необходимые объекты:

Создаем макет компоновки с помощью компоновщика макета:

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

Инициализируем процессор компоновки данных

Создаем процессор вывода:

Для вывода в таблицу значений используется другой процессор вывода:

Запускаем процесс вывода:

Теперь мы можем проводить нужные операции с полученными данными.

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

При программном формировании СКД как в пункте 2 у нас есть огромное количество возможностей по управлению отчетом. Опишем самые часто используемые из них.

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

Переменная Настройки содержит в себе всю палитру настроек которая доступна в редакторе СКД в разделе “Настройки”. Наиболее часто из них программно редактируются отборы, параметры и структура, в случае когда отчет с табличной структурой надо вывести в таблицу значений. Рассмотрим их подробнее.

Параметры

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

Добавление параметра делается следующим образом

Отбор

У отборов нет специальных функций по установке значений. Поэтому нужно перебирать коллекцию циклом.

Структура

Для адаптации отчета к выводу в таблицу значений нужно очистить структуру группировок отчета и создать поле группировки “Детальные записи”.

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

Приведенные примеры кода были протестированы на платформе 1С:Предприятие 8.3 (8.3.13.1690).

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

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

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

Ставим цель

Целью этого урока будет:

  • Написать отчёт, который выводит список продуктов (справочник Еда), их калорийность и вкус.
  • Сделать группировку продуктов по их цвету.
  • Познакомиться с возможностью подведения итогов (ресурсы) и вычисляемыми полями.

Создаём новый отчёт

Как и на предыдущих уроках открываем базу "Гастроном" в конфигураторе и создаём новый отчёт через меню "Файл"->"Новый. ":

Вид документа - внешний отчёт:

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

Оставляем имя схемы по умолчанию и нажимаем кнопку "Готово":

Добавляем запрос через конструктор

На закладке "Набор данных" нажимаем зелёный плюсик и выбираем пункт "Добавить набор данных - запрос":

Вместо того, чтобы писать текст запроса вручную, вновь запускаем конструктор запроса:

На вкладке "Таблицы" перетягиваем таблицу "Еда" из первой колонки во вторую:

Выбираем из таблицы "Еда" поля, которые будем запрашивать. Для этого перетаскиваем поля "Наименование", "Вкус", "Цвет" и "Калорийность" из второй колонки в третью:

Получилось вот так:

Нажимаем кнопку "ОК" - текст запроса сформировался автоматически:

Формируем настройки представления отчёта

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

Выбираем вид отчета "Список. " и нажимаем кнопку "Далее":

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

Перетаскиваем из левой колонки в правую поле "Цвет" - по нему будет происходить группировка строк в отчёте. Нажимаем "ОК":

А вот и результат работы конструктора. Иерархия нашего отчёта:

  • отчёт в целом
  • группировка "Цвет"
  • детальные записи - строки с названиями еды

Сохраним отчёт (кнопка дискета) и не закрывая конфигуратора тут же откроем его в режиме пользователя. Получилось вот так:

Меняем порядок колонок

Но давайте поменяем порядок колонок (стрелки вверх-вниз), чтобы он был таким как на рисунке ниже:

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

Отлично, так гораздо лучше.

Подводим итог (сумму) по калорийности

Было бы неплохо выводить итог калорийности продуктов по группам. Чтобы видеть сумму калорийности всех продуктов, скажем, белого или жёлтого цвета. Или узнать общую калорийность вообще всех продуктов в базе.

Для этого существует механизм вычисления ресурсов.

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

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

Сохраняем и формируем отчёт:

У нас появились итоги по каждой из групп и по отчёту в целом.

Подводим итог (среднее) по калорийности

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

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

Чтобы завести такое "виртуальное" поле воспользуемся механизмом вычисляемых полей.

Переходим на закладку "Вычисляемые поля" и нажимаем зелёный плюсик:

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

Мы добавили новое поле ("СредняяКалорийность"), но в отчёте оно само по себе не появится - нужно или вновь вызывать конструктор настроек ("волшебная палочка") или добавить это поле вручную.

Поступим вторым способом. Для этого переходим на закладку "Настройки", выбираем "Отчет" (ведь мы хотим добавить поле в целом к отчёту), выбираем внизу закладку "Выбранные поля" и перетаскиваем поле "СредняяКалорийность" из левой колонки в правую:

Получилось вот так:

Сохраняем и формируем отчет:

Поле появилось и мы видим, что его значениями являются значения поля "Калорийность". Отлично!

Но мы помним, что конечная цель - посчитать среднюю калорийность по группам и в целом по отчёту.

Для этого вновь воспользуемся уже знакомым нам механизмом ресурсов (подведение итогов). Переходим на закладку "Ресурсы" и перетаскиваем поле "СредняяКалорийность" из левой колонки в правую:

При этом в колонке "Выражение" выбираем "Среднее(СредняяКалорийность)":

Сохраняем и формируем отчёт:

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

Знаете почему они появились (значения не по группам)? Потому что, когда мы добавляли поле "СредняяКалорийность" в настройки отчёта, на втором шаге мы выделили весь отчёт в целом и это новое поле попало в элемент "Детальные записи".

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

Элемент "Авто" - это не одно поле. Это несколько полей, которые попадают сюда автоматически на основании вышестоящих настроек.

Чтобы увидеть, что это за поля - нажмём на элемент "Авто" правой кнопкой и выберем пункт "Развернуть":

Элемент "Авто" раскрылся в следующие поля:

А вот и наше поле "СредняяКалорийность", которое попало сюда из пункта "Отчет", когда мы его туда перетаскивали. Просто снимем галку рядом с этим полем, чтобы убрать его вывода:

Сохраним и сформируем отчёт:

То, что надо! Значения "СредняяКалорийность" остались только в группах (цвет) и в итоге по отчёту в целом.

Подводим итог (количество) по вкусам

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

Ну, например, для белого цвета, это значение будет равно 2 (всего два вкуса "Кислый" и "Сладкий"), а для жёлтого 3 ("Сладкий", "Солёный" и "Кислый").

Переходим на закладку "Ресурсы" и перетаскиваем поле "Вкус" из левой колонки в правую:

В качестве выражения выбираем "Количество(Различные Вкус)":

Сохраняем и формируем отчёт:

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

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

Для учеников

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

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

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

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


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


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


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

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

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


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


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

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


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

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


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

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

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


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


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


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


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



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



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

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

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


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


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

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


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


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


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


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


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


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


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

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

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

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

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


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

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

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

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

Если вы не читали введение к этому модулю - пожалуйста, прочтите его: ссылка.

Готовим рабочее место

Для выполнения уроков вам понадобится 1С 8.3 (не ниже 8.3.13.1644) .

Если у вас уже есть установленная 1С версии 8.3 - используйте её. Если нет - скачайте и установите учебную версию, которую фирма 1С выпускает специально для образовательных целей: ссылка на инструкцию по скачиванию и установке 1С.

На вашем рабочем столе должен появиться вот такой ярлык:

Для всех уроков из этого цикла мы будем использовать подготовленную мной базу данных "Гастроном". Она полностью совпадает с базой, которую мы использовали в четвёртом и пятом модулях школы при изучении запросов. Поэтому я рассчитываю, что вы знакомы с её справочниками и документами.

Если вы её удалили - скачайте заново по следующей ссылке, распакуйте и подключите в список баз.

Наконец, рабочее место настроено и сейчас мы вместе создадим наш первый отчёт при помощи системы компоновки данных. Он будет очень простым, чтобы продемонстрировать общие возможности системы компоновки данных (сокращенно СКД).

Ставим цель

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

  • Имя
  • Пол
  • Любимый цвет клиента.

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

Чтобы сформировать такой отчет в 1С пользователю нужно будет запустить базу в режиме пользователя, открыть этот файл и нажать кнопку "Сформировать".

Создаём отчёт

Запускаем конфигуратор для базы "Гастроном":

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

Выбираем "Внешний отчет":

Создаём схему компоновки данных внутри отчёта

Открылось окно создания внешнего отчёта. В качестве имени вводим: "Урок1", а затем жмём кнопку "Открыть схему компоновки данных":

Запустился конструктор создания схемы. Соглашаемся с именем по умолчанию "ОсновнаяСхемаКомпоновкиДанных" и жмём кнопку "Готово":

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

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

Сейчас мы находимся на закладке "Наборы данных". На ней и останемся.

Пишем запрос через конструктор

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

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

Нажимаем на зелёный плюсик и в раскрывшемся списке выбираем пункт "Добавить набор данных - запрос":

Добавился набор данных с именем "НаборДанных1", но мы видим, что поле "Запрос" в нижней части окна пока пустое:

Наша задача написать в это поле текст запроса. Вы ещё не забыли как это делается?

В этом запросе мы выбрали три поля ("Наименование", "Пол" и "ЛюбимыйЦвет") из таблицы "Справочник.Клиенты".

Но не торопитесь писать этот текст в поле "Запрос" вручную.

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

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

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

Получилось вот так:

Далее раскроем таблицу "Клиенты" во втором столбце по знаку "Плюс", чтобы увидеть все её поля и перетащим поле "Наименование" из второго столбца в третий, чтобы указать, что из этой таблицы нам нужно запрашивать поле "Наименование":

Получилось вот так:

Поступим точно так же с полями "Пол" и "ЛюбимыйЦвет". Результат будет таким:

Нажмём кнопку "ОК", чтобы выйти из конструктора запроса и увидим, что текст запроса автоматически добавился в поле "Запрос".

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

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

Настраиваем представление данных

Осталось как-то визуализировать эти данные для пользователя в виде печатной формы. И вот тут СКД может творить чудеса!

Чтобы сотворить такое чудо перейдём на вкладку "Настройки" и нажмём кнопку конструктора настроек (волшебная палочка):

В открывшемся окне укажем тип отчёта "Список" и нажмём "Далее":

В следующем окне выберем (путём перетаскивания) поля, которые нужно будет отобразить в списке (перетащим все из доступных нам: "ЛюбимыйЦвет", "Наименование" и "Пол"):

Получим вот такой результат и нажмём кнопку "ОК":

Конструктор настроек закрылся и появился пункт "Детальные записи":

Отчёт готов, давайте же его проверим. Для этого вначале сохраним отчет в виде внешнего файла.

Сохраняем отчёт в виде файла

Откроем пункт главного меню "Файл"->"Сохранить":

Я сохраню его на рабочий стол под именем "Урок1":

Проверяем отчёт в режиме пользователя

Наконец, закроем конфигуратор и зайдём в нашу базу в режиме пользователя:

Имя пользователя "Администратор", пароля нет:

Через меню выберем пункт "Файл"->"Открыть. ":

И укажем файл отчёта (я сохранял его на рабочий стол под именем "Урок1.erf":

Открылась форма отчёта, нажмём кнопку "Сформировать":

Готово! Вот она наша печатная форма со списком клиентов, их любимым цветом и полом:

Печатную форму можно легко распечатать. Для этого достаточно выбрать в меню пункт "Файл"->"Печать. ":

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

То ли ещё будет, наберитесь терпения

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

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

Для учеников

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

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

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