Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 2

21.04.20

Разработка - СКД

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

 

 

 

Работа с запросами в 1С СКД. Особенности работы запросов в СКД.  Часть 2

 

Обязательные поля

Рассмотрим такой пакетный запрос, в котором по каждому виду цен нам нужно вывести количество позиций номенклатуры, для которых этот вид цен задан:

 

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

 

 

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

 

1С СКД

 

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

 

1С СКД

 

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

 

Применение отборов

 

С помощью расширения языка запросов 1С для СКД можно управлять местом применения отборов. Также нужно знать, что в случае отсутствия элементов расширения языка запросов, система компоновки данных по умолчанию размещает отбор:

Рассматривать будем на таком исходном запросе.

1С СКД

 

В параметрах виртуальных таблиц при отборе по измерениям:

 

 

В секции «ГДЕ» при использовании отборов по ресурсам:

 

 

В секции «ИМЕЮЩИЕ» при отборе по полю запроса, вычисляемого с помощью агрегатной функции (в исходный запрос добавлена группировка по номенклатуре и контрагенту):

 

1С СКД

 

В документации на диске ИТС написано, что в случае левого соединения двух таблиц, отбор, накладываемый по измерению, отсутствующему в первой (левой) таблице применяется в секции «ГДЕ». Однако в релизе платформе 8.3.15 такое поведение не подтверждается:

 

 

При наличии опции «Автозаполнение» система компоновки данных всегда пытается добавить отбор в параметр виртуальной таблицы, если с помощью расширения языка запросов этот отбор не установлен:

Исходный запрос

1С СКД

1С СКД

 

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

Исходный запрос

1С СКД

1С СКД

При этом отбор в секции «ИМЕЮЩИЕ» автоматически не добавляется. И добавить его с помощью расширения языка запросов невозможно.

 

Временные таблицы

Если в запросе пакета используются временные таблицы и данные из этих таблицы не используются в конечном запросе, то такие временные таблицы из пакета исключаются. Причем независимо от опции «Автозаполнение».  Эту особенность СКД можно использовать для оптимизации текста запроса, который выполняет платформа 1С. Рассмотрим такой текс запроса:

1с СКД

 

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

 

1С СКД

 

 и посмотрим, что получилось после выполнения:

 

1С СКД

 

 

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

 

 

 

Чтобы получить нужный результат добавить параметр «ТолькоОстатки» в запрос:

 

1С СКД

 

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

 

1С СКД

 

Если параметр включен, то получаем:

 

 

Если параметр выключен, то просто запрос по заказам. Можно сделать то же самое несколько по-другому. Таблицу с остатками добавить через левое соединение как необязательную. И добавлять или не добавлять отбор по полю остатка:

 

 

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

 

 

В настройках это выглядит как:

 

 

Ну и результирующий запрос, в случае если отбор установлен:

 

1С СКД

 

Серия статей по СКД
Предыдущая статья .., Следующая статья ...
Автор курсов образовательного проекта Profession Store. Павел Шемякин

СКД запросы системы компоновки данных

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159416    872    399    

861

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    8684    implecs_team    6    

47

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

3 стартмани

05.02.2024    6995    56    obmailok    21    

79

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    3148    5    Yashazz    1    

34

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    10804    23    John_d    25    

124

СКД Программист Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    8016    PROSTO-1C    15    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 217 12.04.20 12:20 Сейчас в теме
Автор, я плюс поставил, но хорошо бы статью вычитать. Куча мелких логических нестыковок.
2. toypaul 63 13.04.20 08:21 Сейчас в теме
3. toypaul 63 13.04.20 13:12 Сейчас в теме
Хотелось бы понять за что минус :)
4. bulpi 217 13.04.20 14:50 Сейчас в теме
(3) Минус не мой. Хорошая статья.
(2) Например :
"В секции «ИМЕЮЩИЕ» при отборе по полю запроса, вычисляемого с помощью агрегатной функции (в исходный запрос добавлена группировка по номенклатуре и контрагенту):"
И ниже этого текста пример не тот, что надо, а сдублирован предыдущий рисунок.
Просто прочитайте статью не как автор, а как читатель. Сами увидите.
5. toypaul 63 13.04.20 15:46 Сейчас в теме
(4) Хм. Да. Видимо проблема разбивки большой статьи на части. Плюс публикация проходила не через мои руки. Закончится карантин - поправим.
6. logarifm 1122 13.04.20 20:26 Сейчас в теме
А на хрена здесь группировать вообще данные в запросе. Когда ресурса нет, да и Бог с ним даже если и был. Для этого СКД делает это настройками таблицы. Это дилетанские примеры ...
7. herfis 513 14.04.20 09:25 Сейчас в теме
Плюсанул. Полезный наглядный анализ работы автозаполнения.
8. herfis 513 14.04.20 09:32 Сейчас в теме
Кста, а что делает галка "Использовать группировки запроса если возможно"?
Просто неявно добавляет СГРУППИРОВАТЬ, если детальные записи в настройках не используются? Просто чтобы уменьшить набор данных для пост-обработки? ИТОГИ при этом же все равно прилампичивает?
9. toypaul 63 14.04.20 09:53 Сейчас в теме
10. herfis 513 14.04.20 10:06 Сейчас в теме
(9) Ага. Значит таки просто свертка детальных записей. Я правильно понял, что СКД вообще не использует оператор ИТОГИ ПО и выполняет подбитие итогов по группировкам "своими" способами?
11. toypaul 63 14.04.20 10:26 Сейчас в теме
Оставьте свое сообщение