Расширение языка запросов СКД. Поля во временной таблице
При выключенном флажке "Автозаполнение" в СКД можно задать поля выводимые в отчет с помощью расширений языка запросов. Если у нас в запросе СКД есть временная таблица и основной запрос, то поля задаются на закладке "Компоновка данных" основного запроса. И это работает.
Имеет ли смысл задавать поля на закладке "Компоновка данных" временной таблицы? Мои эксперименты показывают что это ни на что не влияет. Но все-таки, зачем-то разработчики такую возможность предоставили. Это на что-то влияет?
Имеет ли смысл задавать поля на закладке "Компоновка данных" временной таблицы? Мои эксперименты показывают что это ни на что не влияет. Но все-таки, зачем-то разработчики такую возможность предоставили. Это на что-то влияет?
Прикрепленные файлы:

По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Может запрос так написан что разницы не видно. Рекомендую воспользоваться обработкой "КонсольСистемыКомпановкиДанных". В ней наглядно можно посмотреть как будет выглядеть итоговый запрос к системе. Если я правильно помню, то СКД изменяет запрос автоматически убирая те поля которые не будут выведены в отчет из запроса, ориентируясь на конечный перечень полей. Возможно это работает и при отключении Автозаполнения.
PS обработка работает только в толстом клиенте
PS обработка работает только в толстом клиенте
Я пользуюсь консолью из инструментов разработчика Сергея Старых.
Вот сам запрос СКД:
Я попробовал добавить во временную таблицу неиспользуемое поле Субконто3. Независимо от того есть поле Субконто3 в фигурных скобках временной таблицы или нет, в результатирующий запрос это поле не попадает. Оптимизатор его выкидывает.
Поля которые можно использовать при настройке СКД определяются в фигурных скобках основного запроса. Опять мимо сада. Так что не знаю.
Вот сам запрос СКД:
ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
ХозрасчетныйОстатки.Субконто2 КАК Склад,
ХозрасчетныйОстатки.КоличествоОстатокДт КАК Количество,
ХозрасчетныйОстатки.СуммаОстатокДт КАК Стоимость,
ВЫБОР
КОГДА ХозрасчетныйОстатки.КоличествоОстатокДт = 0
ТОГДА 0
ИНАЧЕ ХозрасчетныйОстатки.СуммаОстатокДт / ХозрасчетныйОстатки.КоличествоОстатокДт
КОНЕЦ КАК Цена,
ХозрасчетныйОстатки.Субконто3 КАК Субконто3
ПОМЕСТИТЬ ВТ_СтоимостьПоБухучету
{ВЫБРАТЬ
Номенклатура.*,
Склад.*,
Количество,
Стоимость,
Цена,
Субконто3.*}
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки({(ДОБАВИТЬКДАТЕ(&_НаДату, СЕКУНДА, 1)) КАК Поле2}, Счет = &Счет41, , ) КАК ХозрасчетныйОстатки
{ГДЕ
ХозрасчетныйОстатки.Субконто1.* КАК Номенклатура,
ХозрасчетныйОстатки.Субконто2.* КАК Склад}
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_СтоимостьПоБухучету.Номенклатура КАК Номенклатура,
ВТ_СтоимостьПоБухучету.Склад КАК Склад,
ТоварыОрганизацийОстатки.НомерГТД КАК НомерГТД,
ВЫБОР
КОГДА ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры ЕСТЬ NULL
ТОГДА ВТ_СтоимостьПоБухучету.Количество
ИНАЧЕ ТоварыОрганизацийОстатки.КоличествоОстаток
КОНЕЦ КАК Количество,
ВЫБОР
КОГДА ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры ЕСТЬ NULL
ТОГДА ВТ_СтоимостьПоБухучету.Стоимость
ИНАЧЕ ВЫРАЗИТЬ(ТоварыОрганизацийОстатки.КоличествоОстаток * ВТ_СтоимостьПоБухучету.Цена КАК ЧИСЛО(15, 2))
КОНЕЦ КАК Стоимость,
0 КАК КоличествоПоБухучету,
0 КАК СтоимостьПоБухучету
{ВЫБРАТЬ
Номенклатура.*,
Склад.*,
НомерГТД.*,
Количество,
Стоимость,
КоличествоПоБухучету,
СтоимостьПоБухучету}
ИЗ
ВТ_СтоимостьПоБухучету КАК ВТ_СтоимостьПоБухучету
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Остатки({(ДОБАВИТЬКДАТЕ(&_НаДату, СЕКУНДА, 1)) КАК Поле2}, ) КАК ТоварыОрганизацийОстатки
ПО ВТ_СтоимостьПоБухучету.Номенклатура = ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры.Номенклатура
И ВТ_СтоимостьПоБухучету.Склад = ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры.МестоХранения
{ГДЕ
ВТ_СтоимостьПоБухучету.Номенклатура.*,
ВТ_СтоимостьПоБухучету.Склад.*,
ТоварыОрганизацийОстатки.НомерГТД.*,
(ВЫБОР
КОГДА ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры ЕСТЬ NULL
ТОГДА ВТ_СтоимостьПоБухучету.Количество
ИНАЧЕ ТоварыОрганизацийОстатки.КоличествоОстаток
КОНЕЦ) КАК Количество,
(ВЫБОР
КОГДА ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры ЕСТЬ NULL
ТОГДА ВТ_СтоимостьПоБухучету.Стоимость
ИНАЧЕ ВЫРАЗИТЬ(ТоварыОрганизацийОстатки.КоличествоОстаток * ВТ_СтоимостьПоБухучету.Цена КАК ЧИСЛО(15, 2))
КОНЕЦ) КАК Стоимость}
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВТ_СтоимостьПоБухучету.Номенклатура,
ВТ_СтоимостьПоБухучету.Склад,
NULL,
0,
0,
ВТ_СтоимостьПоБухучету.Количество,
ВТ_СтоимостьПоБухучету.Стоимость
ИЗ
ВТ_СтоимостьПоБухучету КАК ВТ_СтоимостьПоБухучету
{ГДЕ
ВТ_СтоимостьПоБухучету.Номенклатура.*,
ВТ_СтоимостьПоБухучету.Склад.*,
ВТ_СтоимостьПоБухучету.Количество КАК КоличествоПоБухучету,
ВТ_СтоимостьПоБухучету.Стоимость КАК СтоимостьПоБухучету}
ПоказатьЯ попробовал добавить во временную таблицу неиспользуемое поле Субконто3. Независимо от того есть поле Субконто3 в фигурных скобках временной таблицы или нет, в результатирующий запрос это поле не попадает. Оптимизатор его выкидывает.
Поля которые можно использовать при настройке СКД определяются в фигурных скобках основного запроса. Опять мимо сада. Так что не знаю.
И еще парочку :)
В общем и целом параметр указанный в параметрах виртуальной таблицы на вкладке компоновка данных используется если задан, если не задан, то не выдается ошибка в момент компоновки, в то же время если не задан параметр указанный в параметрах виртуальной таблицы на первой закладке - ошибка выдается.
В общем и целом параметр указанный в параметрах виртуальной таблицы на вкладке компоновка данных используется если задан, если не задан, то не выдается ошибка в момент компоновки, в то же время если не задан параметр указанный в параметрах виртуальной таблицы на первой закладке - ошибка выдается.
Прикрепленные файлы:


Когда вы описываете поля на вкладке "Компоновка данных" вы облегчает работу компоновщику, например при наложение отборов. Допустим у вас во временной таблице есть поле "Контрагент", но которое в финальном запросе имеет имя "Поставщик".
Если вы не опищете, что это поле временной таблицы связано с полем компоновки, то если пользователь наложит отбор по поставщику, то компоновщик применит этот отбор только в финальном запросе, при этом запрос во временной таблице будет выполняться без фильтров.
Ещё возможна обратная ситуация, когда компоновщик накладывает отбор во временной таблице в ущерб логике запроса
Если вы не опищете, что это поле временной таблицы связано с полем компоновки, то если пользователь наложит отбор по поставщику, то компоновщик применит этот отбор только в финальном запросе, при этом запрос во временной таблице будет выполняться без фильтров.
Ещё возможна обратная ситуация, когда компоновщик накладывает отбор во временной таблице в ущерб логике запроса
(13) Да, согласен. Спасает снятие флажка "Автозаполнение". И далее я могу все испортить, указав во временной таблице
{ГДЕ
(0) КАК Поле1}
Тогда у меня начнет накладываться отбор где не надо во временной таблице и запрос поломается.
Но меня интересует на что повлияет указание вот этого во временной таблице {ВЫБРАТЬ
Поле1}
Должна же быть какая-то разница, иначе зачем разработчики платформы позволяют там манипулировать? Как-то это не по одинэсовски. Обычно 1С запрещает вредные либо бесполезные действия.
{ГДЕ
(0) КАК Поле1}
Тогда у меня начнет накладываться отбор где не надо во временной таблице и запрос поломается.
Но меня интересует на что повлияет указание вот этого во временной таблице {ВЫБРАТЬ
Поле1}
Должна же быть какая-то разница, иначе зачем разработчики платформы позволяют там манипулировать? Как-то это не по одинэсовски. Обычно 1С запрещает вредные либо бесполезные действия.
(15) да, еще такой момент.
Вот предположим они убирают для временной таблицы этот функционал (возможность указать).
Теперь возможна будет ситуация:
1. Создали запрос. Указали эту выборку.
2. Указали что запрос теперь - временная таблица. Выборка очистилась.
3. Вернули запрос (убрали выделение временной таблицы). Выборка то очищена.
Вот тут проблем можно поиметь больше, чем если она просто есть.
Вот предположим они убирают для временной таблицы этот функционал (возможность указать).
Теперь возможна будет ситуация:
1. Создали запрос. Указали эту выборку.
2. Указали что запрос теперь - временная таблица. Выборка очистилась.
3. Вернули запрос (убрали выделение временной таблицы). Выборка то очищена.
Вот тут проблем можно поиметь больше, чем если она просто есть.
(12)Если указать поле компоновки во временной таблице на закладке "Условия", то, действительно, отбор будет накладываться во временной таблице в том числе. Иначе не накладывается Это так. Если же указывать либо не указывать описание поля на закладке "Поля", то ничего не меняется. Я вот этого не понимаю. Это тоже влияет на наложение отборов?
Прикрепленные файлы:

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот