Работа с запросами в 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. Павел Шемякин

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

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

13000 руб.

02.09.2020    119914    656    389    

701

Генератор схемы компоновки данных (СКД), написание кода схемы программно

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

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

3 стартмани

05.02.2024    3889    24    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

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

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

1 стартмани

31.01.2024    1964    2    Yashazz    0    

29

СКД на JavaScript в 1С

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

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

2 стартмани

11.12.2023    8027    20    John_d    25    

122

Использование менеджера временных таблиц в СКД

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

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

05.12.2023    4528    PROSTO-1C    13    

61

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    5708    15    kalyaka    5    

85

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

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

18.09.2023    6329    accounting_cons    5    

29

Разрыв страницы в СКД. Легко!

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

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

01.09.2023    4407    KVIKS    15    

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