- Как вывести отборы для скд
- Ставим цель
- Создаём новый отчёт в конфигураторе
- Составляем запрос
- Выводим отчёт в виде списка
- Сортируем города по численности
- Делаем отбор городов по численности
- Выносим параметр отбора на форму отчета
- Отбор в обычной форме на основе СКД в 1С
- Отбор на форму (документа, справочника, обработки) с помощью СКД
- Специальные предложения
- См. также
- Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо
- Использование отборов в СКД
- Синтаксические элементы расширения языка запросов системы компоновки данных
- Нехитрый пример
- Подведение итогов
Как вывести отборы для скд
Войдите как ученик, чтобы получить доступ к материалам школы
Система компоновки данных 1С 8.3 для начинающих: делаем отбор и сортировку на уровне СКД
Автор уроков и преподаватель школы: Владимир Милькин
Ставим цель
- Создать новый отчёт «Урок5.erf». Вывести в этом отчёте города (включая название города, мэра и численность). Упорядочить города в списке по численности (по возрастанию) Прямо на форме отчёта дать пользователю возможность делать отбор городов по минимальной численности.
Создаём новый отчёт в конфигураторе
Открываем базу «Гастроном» в конфигураторе.
Из главного меню конфигуратора выбираем пункт «Файл»->»Новый. «:
Вид документа: «Внешний отчет»:
В качестве имени пишем «Урок5» и нажимаем кнопку «Открыть схему компоновки данных»:
Соглашаемся с именем схемы компоновки данных по умолчанию:
В открывшейся схеме компоновки данных добавляем набор данных — запрос:
Составляем запрос
Запускаем конструктор запроса:
Из таблицы справочника «Города» выбираем поля: «Наименование», «Мэр» и «Численность»:
Получился такой запрос:
Выводим отчёт в виде списка
Переходим на закладку «Настройки» и нажимаем волшебную палочку, чтобы вызывать конструктор настроек:
Тип отчёта выбираем «Список»:
В отчёте будут отображаться следующие поля:
Сохраняем отчет и тут же проверяем в режиме пользователя:
Сортируем города по численности
Теперь давайте упорядочим записи отчёта по возрастанию численности.
Для этого переходим на вкладку «Настройки», выбираем пункт «Отчет», ниже выбираем вкладку «Сортировка» и перетаскиваем поле численность из первой колонки во вторую.
Направление сортировки указываем «По возрастанию»:
Сохраняем отчёт и проверяем в режиме пользователя:
Делаем отбор городов по численности
Теперь давайте сделаем так, чтобы в отчёте выводились только города с численностью от 1 миллиона человек (включительно). Такая возможность называется отбор.
Переходим на вкладку «Настройки», выбираем пункт «Отчет», далее переходим на вкладку «Отбор» и перетаскиваем поле «Численность» из левой колонки в правую.
В качестве вида сравнения указываем «Больше или равно», а в качестве правого значения — 1000000:
Сохраняем отчет и проверяем в режиме пользователя:
Видим, что остались города с численностью больше миллиона и этот факт (отбора) явно отражён в заголовке отчета.
Выносим параметр отбора на форму отчета
Осталось сделать так, чтобы пользователь мог сам настраивать пороговое значение отбора. Другими словами, чтобы вместо миллиона он мог поставить свою цифру.
Заходим на вкладку «Настройки», выделяем пункт «Отчет», внизу выбираем вкладку «Отбор», выделяем элемент отбора «Численность» и нажимаем справа внизу на зелёный плюсик:
В открывшемся окне ставим галку «Включать в пользовательские настройки»:
Вновь сохраняем отчет и запускаем в режиме пользователя.
Видим, что появилось поле «Численность» меняя условие и значение которого мы управляем отбором городов в отчёте:
Отлично!
Войдите на сайт как ученик
Авторизуйтесь, чтобы получить доступ ко всем материалам школы
Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.
На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .
Войдите как ученик, чтобы получить доступ к материалам школы
Источник
Отбор в обычной форме на основе СКД в 1С
Нередко программистам для написания обработок приходилось использовать запросы для получения данных и последующей их обработке. Данные в свою очередь, получались из запроса. Ну а запрос без отбора или фильтра это редкость. Поговорим об отборах в таких запросах, на примере запроса:
Для того, чтобы организовать отбор по контрагенту для пользователя в обычной форме, программисту приходилось размещать три элемента на форме, что выглядело примерно так:
Сколько трудов стоит описать программисту разные виды сравнения (равно, не равно, в списке, в группе…) и исходя из этих видов сравнения дорабатывать свой конечный запрос получения данных.
Рассмотрим, как это можно сделать при помощи СКД. Создадим в нашей обработке Макет с типом Схема компоновки данных и заполним его нашим запросом:
На вкладке Настройки добавим новую группировку без детализации и, в нашем примере, поле Контрагент, так как в итоге мы получим все в таблицу значений:
И на вкладке Отбор добавим в отбор Контрагента:
Далее в самой обработке создадим реквизит Компоновщик типа КомпоновщикНастроекКомпоновкиДанных:
Теперь займемся оформлением формы. Выведем на форму самой обработки Отбор, с которым будет работать пользователь. На форму выведем элемент типа Табличное поле и дадим ему имя Отбор с типом данных Компоновщик.Настройки.Отбор:
Далее ниже выведем эелемент Табличное поле с именем Результат и типом ТаблицаЗначений и кнопку Выполнить, по которой и будем выводить таблицу с контрагентами:
Теперь создадим обработчики событий формы ПриОткрытии и обработчик нажатия кнопки Выполнить, код представлен ниже:
Обработка готова, запустив ее, можно при запуске сразу увидеть в нашем Отборе появившегося Контрагента, у которого можно выбирать любой тип сравнения, а также и добавлять дополнительные строки отбора по реквизитам справочника Контрагенты:
На этом все, надеюсь, данная статья поможет Вам улучшить гибкость отборов в Ваших обработках.
Источник
Отбор на форму (документа, справочника, обработки) с помощью СКД
Добавим на форму реквизит с типом КомпоновщикНастроекКомпоновкиДанных
Найдем отбор и перенесем его на форму
Чтобы отбор отображался компактно на форме у группы, в которой находится отбор, поставим поведение «Всплывающая»
Добавим в процедуру ПриСозданииНаСервере следующий код:
Создадим на форме команду «Загрузить» и добавим код:
Далее добавляем макет с типом «Схема компоновки данных». В набор данных добавим простенький запрос
В поля перенесем все данные, которые хотим видеть в результате
в отбор добавим отборы по умолчанию
В предприятии устанавливаем отбор, также можно добавить новые отборы через точку. Нажимаем кнопку загрузить.
Платформа 1С:Предприятие 8.3 (8.3.18.1289).
Управление торговлей, редакция 11 (11.4.7.128).
Специальные предложения
(6)Добавить возможность хранения вариантов отбора и можно быстро выявлять, например, ошибки в таб. частях документа. Например есть заказ покупателя с 1000 строк. Визуально выявить какие — то ошибки тяжело, да и жмякать каждый раз по кнопкам с целью сделать сложный отбор — вещь крайне нудная и трудоемкая.
Чисто гипотетически хочу быстро увидеть строки по определенному виду номенклатуры с ценой, ниже определенной границы при условии, что недостаточного количества по строке для её использования. Прикрутить сюда программную инициализацию механизма для масштабирования на другие объекты и вот уже можно полноценно применять.)
(6)Делал подобный механизм для отбора сотрудников. Этот отбор сотрудников использовался как фильтр. Т.е. только сотрудники из этого фильтра могли использовать тот или иной функционал внешней компоненты.
Фильтры автоматически обновляемые, и регулярно выгружаемые.
Сумбурно, но надеюсь понятна идея
Обновление 09.02.21 10:10
См. также
Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо
В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.
Источник
Использование отборов в СКД
Расширение языка запросов для системы компоновки данных
Расширение языка запросов для системы компоновки данных осуществляется при помощи специальных синтаксических инструкций, заключаемых в фигурные скобки и помещаемых непосредственно в текст запроса.
Синтаксические элементы расширения языка запросов системы компоновки данных
ВЫБРАТЬ
В этом предложении описываются поля, которые пользователь сможет выбирать для вывода. После данного ключевого слова через запятую перечисляются псевдонимы полей из основного списка выборки запроса, которые будут доступными для настройки.
После псевдонима поля может находиться комбинация символов «.*», что обозначает возможность использования дочерних полей от данного поля.
Например, запись Номенклатура.* обозначает возможность использования дочерних полей поля «Номенклатура» (например, поля «Номенклатура.Код»). Элемент ВЫБРАТЬ может присутствовать только в первом запросе объединения.
Описываются поля, на которые пользователь сможет накладывать отбор. В данном предложении используются поля таблиц. Использование псевдонимов полей списка выборки недопустимо. Каждая часть объединения может содержать собственный элемент ГДЕ.
Нехитрый пример
Необходимо получить продажи за период + вывести всю номенклатуру, независимо от того были ли продажи или нет. То есть, необходимо выбрать данные из таблицы оборотов регистра Продажи, данные из справочника номенклатура. Опустим вопрос зачем нам нужна вся номенклатура.
Для решения задачи можно составить запрос соединяющий левым соединением номенклатуру и таблицу оборотов Продажи, в результате, для номенклатуры, которая не продавалась в выбранном периоде мы получим значения полей Контрагент, Договор, Количество, Сумма = Null. Такой запрос:
Контрагент | Договор | Номенклатура | Количество | Сумма |
null | null | _Тест1 | null | null |
ООО «Рога и копыта» | Договор1 | Тапочки | 10 | 1200 |
ОАО «Газпром» | Клевый договор | Сапоги | 5 | 13000 |
null | null | Галоши | null | null |
null | null | Сланцы | null | null |
— в данном примере не было продаж номенклатуры: «Галоши» и «Сланцы»
И все бы ничего, если мы сгруппируем выборку по контрагенту то вся не продаваемая номенклатура попадет в отдельную группировку, где Контрагент = Null, но клиент хочет иметь в отчете произвольный отбор по полю контрагент(естественно имеется ввиду контрагент из регистра Продажи). Как быть? Ведь по сути нам нужно фильтровать только таблицу Продажи. Если мы используем автозаполнение в конструкторе СКД, то в доступные поля отбора попадет поле Контрагент, все вроде бы хорошо, но при исполнении отчета с отбором по контрагенту мы потеряем все записи из соединения с номенклатурой. Например, установим отбор: Контрагент = ООО «Рога и копыта». Результат будет выглядеть так:
Контрагент | Договор | Номенклатура | Количество | Сумма |
ООО «Рога и копыта» | Договор1 | Тапочки | 10 | 1200 |
— совсем не то что нам нужно, правда?
Для решения задачи можно конечно добавить параметр в запрос, например в параметры виртуальной таблицы ПродажиОбороты, но при этом теряется гибкость настройки вида сравнения.
Решение есть: для этого в конструкторе запросов на вкладке Компоновка данных => Таблицы добавим поле-условие в условия виртуальной таблицы ПродажиОбороты и сменим ему псевдоним на КонтрагентОтбор
Для того чтобы не путать пользователя с полями отбора, отключим поле-условие Контрагент и сменим заголовок для поля КонтрагентОтбор
В результате выполнения данной схемы с включенным отбором по полю контрагент результирующий запрос примет вид:
И соответственно результат:
Контрагент | Договор | Номенклатура | Количество | Сумма |
null | null | _Тест1 | null | null |
ООО «Рога и копыта» | Договор1 | Тапочки | 10 | 1200 |
null | null | Сапоги | null | null |
null | null | Галоши | null | null |
null | null | Сланцы | null | null |
_Тест1 — это группа в справочнике Номенклатура, в которой все лежит
К публикации прикреплена схема XML-схема отчета, использовавшегося в публикации. Схему создавал в Комплексной автоматизации, но думаю, все будет прекрасно работать и в УПП и в УТ 10
Подведение итогов
Данный пример показывает каким образом создать свои настройки отборов в СКД и отключить автосоздаваемые, если вы конструируете схему с включенным флагом Автозаполнение.
Если же вы имеете достаточно опыта, чтобы создавать схемы без использования Автозаполнения — то данный совет не имеет смысла.
Источник