СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

30.10.20

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

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

Предыдущие статьи можно посмотреть по ссылкам ниже:

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

{……}

И так, для чего же необходимы расширения языка запросов?

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

Понимание, и грамотное использование расширений языка запросов позволяет более гибко управлять формированием итогового запроса макета компоновки:

Общая схема расширений языка запросов

Оглавление

  1. Автоматическое заполнение полей компоновки данных
  2. Расширение языка запроса для СКД
  1. Использование дополнительных данных, секция ХАРАКТЕРИСТИКИ

 

Автоматическое заполнение полей компоновки данных

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

Автоматическое заполнение полей копоновки

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

Также, при установленном флаге, в список полей компоновки попадают все измерения виртуальных таблиц, используемых в запросе. Если измерения не указаны в секции ВЫБРАТЬ в запросе набора данных, они будут доступны только для отбора данных в отчете. Их использование во всех остальных разделах настроек компоновки будет отключено:

Ограничение использования полей

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

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

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

Еще несколько моментов при использовании флага «Автозаполнение»:

  1. Если в запросе источника данных используется виртуальная таблица, и в настройках компоновки добавлен отбор по какому-либо измерению, в итоговом запросе макета, СКД будет накладывать отбор на параметры виртуальных таблиц, если это возможно. Если кроме виртуальных таблиц, в запросе присутствуют и другие таблицы (не виртуальные), в итоговом запросе будет добавлен дополнительный отбор в секции ГДЕ всего запроса. То-есть будет присутствовать два отбора.
  2. Если в наборе данных используется пакет запросов, СКД будет пытаться наложить отбор на все запросы пакета, если это возможно.

Есть еще один флаг, который может влиять на итоговый запрос макета компоновки «Использовать группировки запроса если возможно». Если флаг установлен, СКД будет пытаться использовать агрегатные функции на уровне запроса к базе данных.

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

 

Расширение языка запроса для СКД

Начнем с того, где именно можно использовать секции с расширениями?

Расширения языка запросов можно использовать в секциях: ВЫБРАТЬ, ГДЕ, ХАРАКТЕРИСТИКИ, и в параметрах виртуальных таблиц.

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

Конструкции, добавленные в расширение в итоговом тексте запроса находятся в фигурных скобках «{…}». Для работы с расширениями в конструкторе запроса существует специальная закладка – «Компоновка данных»:

Закладка "Компановка данных"

Рассмотрим более подробно использование каждой секции.

 

Секция ВЫБРАТЬ­

Настройка выполняется на закладке «Поля» в окне редактирования расширений:

Секция ВЫБРАТЬ расширений языка запросов

Выбранные на этой закладке поля попадут в список полей компоновки, если отключена галка «Автозаполнение». Можно указать, нужно ли включать вложенные реквизиты полей – флаг «Использовать реквизиты». Можно изменить псевдонимы полей, если это необходимо.

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

Использование псевдонимов для полей в расширении

Если в запросе используется объединение нескольких таблиц, расширение секции ВЫБРАТЬ необходимо задавать только для первой таблицы.

 

Секция ГДЕ

Настройка выполняется на закладке «Условия» в окне редактирования расширений:

Секция ГДЕ в расширении языка запросов

Указываются поля, на которые пользователь сможет накладывать отбор, если отключен флаг «Автозаполнение». Вне зависимости от использования псевдонимов полей в основном запросе, в расширении отборов указываются имена самих полей. Можно задать псевдонимы для выбранных полей отборов. Можно указать использование вложенных реквизитов.

Если в запросе источника данных используется объединение нескольких таблиц или пакет запросов, расширение секции ГДЕ можно указать для каждой таблицы объединения или пакета отдельно.

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

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

ТоварныеЗапасыОстатки.Товар = &Товар

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

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

 

Параметры виртуальных таблиц

В расширении языка запросов можно указать параметры для виртуальных таблиц запроса. Данные указываются на закладке «Таблицы», непосредственно для каждой виртуальной таблицы:

Параметры виртуальных таблиц в расширении языка запросов

Можно указать следующие параметры: 

  • Период, НачалоПериода, КонецПериода – задается отбор по периоду для виртуальных таблиц.

Если флаг «Автозаполнение» включен, данные параметры будут заполнены автоматически неявно. То-есть, в тексте запроса их нет, но фактически они будут присутствовать. Можно явно указать в качестве этих параметров произвольные имена:

РегистрНакопления.ТоварныеЗапасы.Обороты({(&ДатаНачала)}, {(&ДатаОкончания)}, , ) КАК ТоварныеЗапасыОбороты

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

Если флаг «Автозаполнение» отключен, параметры не будут заполнены неявно. Если требуется отбор по периоду, необходимо их указывать явно.

  • Периодичность – можно указать параметр, с помощью которого можно будет задавать периодичность в настройках компоновки. Для параметра будет создан список выбора периода.
  • Метод дополнения – можно указать параметр, для задания в настройках компоновки метода дополнения: «Движения», «Движения и границы периода».
  • Условие – используется для выбора полей, по которым можно будет указывать отбор в настройках компоновки (аналогично секции ГДЕ). Отличие в том, что указанные пользователем отборы, в итоговом запросе макета компоновки будут наложены в параметрах виртуальных таблиц, а не в секции ГДЕ на уровне всего запроса.

 

 

Выделение в расширение отдельных таблиц запроса

Есть возможность выделить в расширение (заключить в фигурные скобки) целиком таблицу запроса источника данных. Выполняются эти действия также на закладке «Таблицы». Для выделения таблицы необходимо убрать флаг «Обязательная» и указать параметр «Номер группы»:

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

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

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

 

Использование дополнительных данных, секция ХАРАКТЕРИСТИКИ

Что такое дополнительные реквизиты и сведенья, думаю, знают все. Этот механизм активно используется еще с конфигураций прошлого поколения.

Так вот, значения этих дополнительных реквизитов или сведений можно АВТОМАТИЗИРОВАНО включать в схему компоновки данных. Вы конечно можете сделать это в ручную, добавив нужное количество соединений в запрос источника данных:

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСвойства КАК ДопСвойства1  
   ПО (ДопСвойства.Номенклатура = Номенклатура.Ссылка    
    И ДопСвойства.ВидСвойства = &Свойство1)  
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСвойства КАК ДопСвойства2  
   ПО (ДопСвойства1.Номенклатура = Номенклатура.Ссылка    
    И ДопСвойства1.ВидСвойства = &Свойство2) 

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

Номенклатура.ДопРеквизит

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

Так вот, для автоматизации использования дополнительных данных (дополнительных реквизитов, сведений и прочей информации) существует специальная закладка конструктора запросов «Характеристики»:

Использование дополнительных данных в запросе

На этой закладке в таблице указывается вся необходимая информация о структуре хранения дополнительных данных. Рассмотрим поля этой таблицы подробнее:

  • Тип – вид объектов метаданных, для которых необходимо выводить характеристики (то-есть, через точку от которого они будут доступны),
  • Источник видов – способ получения видов дополнительных данных (характеристик): отдельная таблица или произвольный запрос (запрос можно использовать, если требуется наложить на таблицу дополнительные отборы),
  • Источник значений – способ получения значений дополнительных данных (характеристик): отдельная таблица или произвольный запрос.

 

Группа полей с описанием видов дополнительных данных (Виды характеристик)

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

 

Группа полей с описанием значений дополнительных данных (Значения характеристик)

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

В случае, если значение поля «Значение характеристик (поле значения)» не указано, тип значения дополнительного реквизита считается «булево». Реквизит будет принимать значение «Истина» в том случае, если в значениях характеристик будет хотя бы одна строка для указанного объекта и вида дополнительных данных. Таким образом настроен вывод в отчеты категорий объектов в конфигурациях: УТ 10.3, УПП.

После заполнения структуры хранения дополнительных данных, система добавит в нижнюю часть запроса секцию ХАРАКТЕРИСТИКИ, следующего вида:

{ХАРАКТЕРИСТИКИ            
  ТИП(ПланВидовХарактеристик.ВидыХарактеристик)            
  ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.ВидыХарактеристик            
  ПОЛЕКЛЮЧА Ссылка            
  ПОЛЕИМЕНИ Наименование            
  ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения            
  ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.Характеристики            
  ПОЛЕОБЪЕКТА Объект            
  ПОЛЕВИДА ВидХарактеристики            
  ПОЛЕЗНАЧЕНИЯ Значение }

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

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

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

Настройка использования дополнительных данных для объекта

В этом случае, в запрос не нужно будет включать секцию «Характеристики», дополнительные данные будут доступны по умолчанию (также только в режиме 1С Предприятие).

В механизме настроек характеристик для объектов источники видов и значений – это всегда таблицы. Так что нельзя указать запрос с произвольным отборам необходимых видов. Однако, отбор значений все-таки можно указать, заполнив поля: «Поле отборов видов» и «Значение отборов видов»:

Отбор видов характеристик для объектов

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

В следующих статьях рассмотрены следующие темы:

Для ознакомления с предыдущими статьями можно перейти по ссылкам:

Спасибо а внимание.

  

расширения языка запросов для СКД использование характеристик в запросах

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159349    872    399    

861

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

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

15.05.2024    8680    implecs_team    6    

47

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

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

3 стартмани

05.02.2024    6989    56    obmailok    21    

79

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

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

1 стартмани

31.01.2024    3145    5    Yashazz    1    

34

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

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

2 стартмани

11.12.2023    10799    23    John_d    25    

124

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

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

05.12.2023    8010    PROSTO-1C    15    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 17.07.19 07:53
(0) спасибо за полезный материал!
ikalmykia; fatman78; jaroslav.h; ids79; jif; +5 Ответить
6. ids79 8535 17.07.19 21:12 Сейчас в теме
2. lmnlmn 69 17.07.19 10:18 Сейчас в теме
Отличные материалы!
7. ids79 8535 17.07.19 21:13 Сейчас в теме
3. пользователь 17.07.19 11:53
Сообщение было скрыто модератором.
...
4. AllexSoft 17.07.19 12:32 Сейчас в теме
Параметры..
Условие – используется для выбора полей, по которым можно будет указывать отбор в настройках компоновки (аналогично секции ГДЕ). Отличие в том, что указанные пользователем отборы, в итоговом запросе макета компоновки будут наложены в параметрах виртуальных таблиц, а не в секции ГДЕ на уровне всего запроса.

Тут есть один забавный нюанс, а именно если у вас указано больше чем 1 отбора на этой вкладке, то СКД их объединит в одну группу условий, то есть ввод сразу всех параметров станет обязательным.
Например
РегистрСведений.CR_СтатусыОбъектовАренды.СрезПоследних(, {(Контрагент = &Контрагент
			    И Договор = &Договор)})

При попытке задать только один параметр выдаст не задано значение для параметра..
Прикрепленные файлы:
5. dhurricane 17.07.19 20:53 Сейчас в теме
(4) В Вашем примере, полагаю, это запланированное поведение от разработчика. Либо решение "по незнанию". :) Для того, чтобы параметры не зависели друг от друга, необходимо их разделять запятыми:
РегистрСведений.CR_СтатусыОбъектовАренды.СрезПоследних(, {(Контрагент = &Контрагент), (Договор = &Договор)})

Однако и такое решение оставляет желать лучшего, т.к. в этом случае пользователь может указать для отбора лишь одно значение параметра. Но не может, например, ввести список исключаемых контрагентов, либо отобрать по некоторому реквизиту контрагента так, чтобы это условие попало именно в параметры виртуальной таблицы. Поэтому для параметров виртуальных таблиц используется несколько иной синтаксис:
РегистрСведений.CR_СтатусыОбъектовАренды.СрезПоследних(, {(Контрагент).* КАК Контрагент, (Договор).* КАК Договор})
В таком случае пользователь сможет настраивать любой отбор по данным полям, и этот отбор в том же самом виде попадет в параметры виртуальной таблицы.

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

Ну и прошу прощения, если я проявил излишнюю прыть, описав то, что Вы и без меня хорошо знали. :)
user1218207; ikalmykia; Yashazz; user847517; Pavl0; kalyaka; jaroslav.h; MaZaHacKa_13; SirStefan; AllexSoft; jif; Поручик; +12 Ответить
9. ids79 8535 17.07.19 21:39 Сейчас в теме
(5) Спасибо за дополнение
11. triviumfan 97 18.07.19 09:07 Сейчас в теме
(5)
справедливо в первую очередь при снятом флаже Автозаполнение

Вы хотите сказать, что с включенным поведение отличается?
13. dhurricane 18.07.19 09:39 Сейчас в теме
(11) Немного отличается, да. Например, я указал, что при использовании параметров не получится указать список исключений контрагенту, либо договору так, чтобы это условие попало в параметры виртуальной таблицы. Только строгое равенство одному значению. Это справедливо, если снят флаг автозаполнения и нет дополнительных инструкций для СКД.
Но при включенном автозаполнении произвольный отбор по данным полям установить можно. И если в отборе на уровне отчета дополнительно установить фильтр по одному из полей на неравенство, то такое условие все равно попадет в параметры виртуальной таблицы. Хоть мы его явное об этом и не просили.
16. ids79 8535 18.07.19 10:46 Сейчас в теме
(13)Да правильно.
Как раз об этом я пишу в статье:
"Еще несколько моментов при использовании флага «Автозаполнение»:
....
Если в запросе источника данных используется виртуальная таблица, и в настройках компоновки добавлен отбор по какому-либо измерению, в итоговом запросе макета, СКД будет накладывать отбор на параметры виртуальных таблиц"
15. AllexSoft 18.07.19 10:23 Сейчас в теме
(5) я кстати не знал что так можно, в то время когда я учился либо такого не было, либо на курсах в УЦ1 по СКД не показывали.. спасибо в общем, век живи век учись. Автору в статье неплохо бы дополнить этим моментом, уверен что многие не знают
17. ids79 8535 18.07.19 10:47 Сейчас в теме
(15)Вы правы, стоит указать об этом в статье. Добавлю, когда будет время
26. Yashazz 4790 12.11.19 00:08 Сейчас в теме
(15) а такого и не было изначально. Для меня тоже стало открытием.
8. ids79 8535 17.07.19 21:38 Сейчас в теме
(4)Спасибо за дополнение.
Я имел в виду не параметры, а отбор:
{(Контрагент).* КАК Контрагент, (Договор).* КАК Договор},
о чем пишет Денис.
Вы правы, параметры тоже можно размещать здесь и в секции "ГДЕ".
И, если они объединены логическим оператором, то их использовать возможно только совместно.
В секции "ГДЕ", такие параметры будут находиться в одной строке:
Прикрепленные файлы:
10. triviumfan 97 18.07.19 09:06 Сейчас в теме
Множество ссылок на "справедливо для отключенного флага 'Автозаполнение'", - но ведь он почти всегда включен и поведение с ним такое же.
Да кто этот флаг вообще отключает?! Может вы просто "не умеете его готовить"?(с)
14. dhurricane 18.07.19 09:46 Сейчас в теме
(10)
Да кто этот флаг вообще отключает?! Может вы просто "не умеете его готовить"?(с)

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

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

Бывает отключаю для большого пакетного запроса, когда мне хочется лучше контролировать влияние пользовательских отборов на отбор данных в различных запросах пакета, а также на расстановку параметров виртуальных таблиц.
20. triviumfan 97 18.07.19 10:58 Сейчас в теме
(14)
В самом простом случае я его порой отключаю при выборке данных из регистра бухгалтерии, чтобы не было среди доступных полей таких как "Субконто1" и "Субконто2", а были мои, например "Контрагент" и "Договор".

Можно подробней? А то можно подумать...

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

Мне пока фигурных скобок хватает и ограничения поля в параметрах набора данных.
23. dhurricane 19.07.19 09:37 Сейчас в теме
(20) Реальных примеров, к сожалению, привести не могу, т.к. действительно редко использую отключение автозаполнения. Поэтому приведу небольшой синтетический пример для ERP 2.4. Запрос следующий:
ВЫБРАТЬ
	ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
	ХозрасчетныйОстатки.Субконто2 КАК Склад,
	ХозрасчетныйОстатки.КоличествоОстаток КАК КоличествоБУ,
	0 КАК КоличествоОУ
ПОМЕСТИТЬ СверкаБУиОУ
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Остатки(, Счет В ИЕРАРХИИ (&СчетУчета), &ВидыСубконто, {(Субконто1).* КАК Номенклатура, (Субконто2).* КАК Склад}) КАК ХозрасчетныйОстатки

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ТоварыНаСкладахОстатки.Номенклатура,
	ТоварыНаСкладахОстатки.Склад,
	0,
	ТоварыНаСкладахОстатки.ВНаличииОстаток
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СверкаБУиОУ.Номенклатура КАК Номенклатура,
	СверкаБУиОУ.Склад КАК Склад,
	СУММА(СверкаБУиОУ.КоличествоБУ) КАК КоличествоБУ,
	СУММА(СверкаБУиОУ.КоличествоОУ) КАК КоличествоОУ,
	СУММА(СверкаБУиОУ.КоличествоБУ - СверкаБУиОУ.КоличествоОУ) КАК Отклонение
ИЗ
	СверкаБУиОУ КАК СверкаБУиОУ
{ГДЕ
	СУММА(СверкаБУиОУ.КоличествоБУ) КАК КоличествоБУ,
	СУММА(СверкаБУиОУ.КоличествоОУ) КАК КоличествоОУ,
	СУММА(СверкаБУиОУ.КоличествоБУ - СверкаБУиОУ.КоличествоОУ) КАК Отклонение}

СГРУППИРОВАТЬ ПО
	СверкаБУиОУ.Склад,
	СверкаБУиОУ.Номенклатура
Показать

При включенном автозаполнении на закладке наборов данных мы увидим множество полей, которые доступны для отбора. Все они - измерения используемых виртуальных таблиц: Организация, Субконто3, Характеристика, Серия и т.д. При этом действительно давать возможность пользователю устанавливать отбор по этим полям ни в коем случае нельзя, т.к. это приведет к искажению данных отчета: по Счету мы уже и так отобрали, в регистре оперативного учета нет Организации, а отбор по Субконто3 и вовсе приведет к ошибке формирования отчета. Приходится отключать доступность всех лишних полей для отбора, однако они так и остаются "висеть" на закладке наборов данных. При том лишних может быть действительно очень много, в случае, если запрос содержит множество разнообразных виртуальных таблиц - абсолютно все их измерения попадут в поля набора данных.

Пусть проблема с лишними полями отбора решена, но что если пользователю потребуется установить отбор по ресурсам? Скажем, вывести все строки отчета, где количество БУ отрицательно, либо КоличествоОУ выше некоего порога. Да, мы добавили подсказку для СКД, как нужно устанавливать отбор по полям количества в последний запрос пакета, однако это совсем не помагает: СКД все равно добавит условия по полю количества в первый запрос пакета, при том в каждый элемент объединения. В результате такой отбор опять таки исказит результат. И решить эту проблему простой установкой флажков не получится.
24. triviumfan 97 19.07.19 11:03 Сейчас в теме
(23) Может задать разные превдонимы полей?
25. dhurricane 19.07.19 21:24 Сейчас в теме
(24) Да, можно дать другие псевдонимы, это поможет. Также, например, как помогает в параметрах виртуальных таблиц регистров, где не нужен отбор за период, указание инструкции {&ПустаяДата}. Можно также в приведенном примере попробовать уйти от использования виртуальной таблицы, заменив ее на вложенный запрос. В целом всегда можно применить тот или иной прием, дабы "отвлечь" СКД от некоторых оптимизаций при составлении запроса.

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

Из Ваших комментариев я сделал вывод, что если есть хоть какой-либо способ изменить запрос и настроить поля так, чтобы сохранить работоспособность отчета, и при этом не снимать флаг "Автозаполнение", то всегда следует сохранять автозаполнение. Так к чему же такая однозначность? За что Вы так не любите этот флаг, или вернее его отсутствие?
18. ids79 8535 18.07.19 10:52 Сейчас в теме
(10)Согласен с Денисом.
Отключать Автозаполнение нужно только в том случае, если Вы ХОРОШО, знаете как это работает, для более гибкой настройки.
Иначе можно получить очень неожиданный результат.
21. triviumfan 97 18.07.19 11:01 Сейчас в теме
(18) Отключить автозаполнение, программное выполнение...
Тогда уже можно вернуться к "построителю отчета" :)
user832106; +1 Ответить
12. DoctorRoza 18.07.19 09:20 Сейчас в теме
19. ids79 8535 18.07.19 10:53 Сейчас в теме
22. sam441 225 18.07.19 15:16 Сейчас в теме
Если флаг установлен, поля компоновки данных заполняются автоматически для всех полей, указанных на верхнем уровне запроса
может все-таки на нижнем т.е. последнем?
27. Yashazz 4790 12.11.19 00:09 Сейчас в теме
Отличная статья, спасибо. Чётко, полезно, грамотно, дельно.
CSiER; ids79; +2 Ответить
28. ids79 8535 12.11.19 10:06 Сейчас в теме
29. Yashazz 4790 17.04.22 08:45 Сейчас в теме
(28) Правда, есть маленькое уточнение: всё это как было, так и остаётся совершенно неприменимым для СКД динамических списков.
30. echo77 1906 20.07.22 08:54 Сейчас в теме
(0) Спасибо, за хорошо оформленную статью.
Небольшое дополнение про особенности секции выбрать https://youtu.be/Fp3CBJvOlfE
31. ids79 8535 20.07.22 19:06 Сейчас в теме
(30)Спасибо, хорошее дополнение.
32. user1731854 03.03.23 10:46 Сейчас в теме
Мда. Вроде занятно, но так и не понял, а зачем вообще нужен весь этот баян - расширения СКД?
33. rubisvv 21.09.23 11:31 Сейчас в теме
Не понятно зачем эти расширения? Почему нельзя сразу написать запрос нормально? Что означает фраза "СКД использует расширения для настройки полей компоновки и формирования запроса итогового макета компоновки."?
Оставьте свое сообщение