Расширение языка запросов СКД. Поля во временной таблице

1. Torin57 38 07.02.21 15:47 Сейчас в теме
При выключенном флажке "Автозаполнение" в СКД можно задать поля выводимые в отчет с помощью расширений языка запросов. Если у нас в запросе СКД есть временная таблица и основной запрос, то поля задаются на закладке "Компоновка данных" основного запроса. И это работает.
Имеет ли смысл задавать поля на закладке "Компоновка данных" временной таблицы? Мои эксперименты показывают что это ни на что не влияет. Но все-таки, зачем-то разработчики такую возможность предоставили. Это на что-то влияет?
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. victorree 25 08.02.21 11:17 Сейчас в теме
Может запрос так написан что разницы не видно. Рекомендую воспользоваться обработкой "КонсольСистемыКомпановкиДанных". В ней наглядно можно посмотреть как будет выглядеть итоговый запрос к системе. Если я правильно помню, то СКД изменяет запрос автоматически убирая те поля которые не будут выведены в отчет из запроса, ориентируясь на конечный перечень полей. Возможно это работает и при отключении Автозаполнения.
PS обработка работает только в толстом клиенте
3. Torin57 38 08.02.21 22:50 Сейчас в теме
Я пользуюсь консолью из инструментов разработчика Сергея Старых.
Вот сам запрос СКД:
 ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто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 в фигурных скобках временной таблицы или нет, в результатирующий запрос это поле не попадает. Оптимизатор его выкидывает.
Поля которые можно использовать при настройке СКД определяются в фигурных скобках основного запроса. Опять мимо сада. Так что не знаю.
4. 1cmailru 5 12.02.21 04:27 Сейчас в теме
Попробую ответить картинками.
Прикрепленные файлы:
7. spacecraft 12.02.21 10:40 Сейчас в теме
(4) осталось объяснить, какое это имеет отношение к вопросу: "Имеет ли смысл задавать поля на закладке "Компоновка данных" временной таблицы?"
5. 1cmailru 5 12.02.21 04:31 Сейчас в теме
И еще парочку :)
В общем и целом параметр указанный в параметрах виртуальной таблицы на вкладке компоновка данных используется если задан, если не задан, то не выдается ошибка в момент компоновки, в то же время если не задан параметр указанный в параметрах виртуальной таблицы на первой закладке - ошибка выдается.
Прикрепленные файлы:
6. Torin57 38 12.02.21 10:22 Сейчас в теме
Если все вышесказанное применить ко временной таблице. Это будет работать?
8. Jimbo 13 15.02.21 09:56 Сейчас в теме
Поля в выбрать смысла не имеют во временной таблице, если далее не используются. Имеют смысл поля на закладке Условия - тогда отборы применятся ко временной таблице, а это важно.
9. Torin57 38 15.02.21 13:14 Сейчас в теме
(8)
Поля в выбрать смысла не имеют во временной таблице, если далее не используются.

Мы говорим про выбрать в фигурных скобках во временной таблице?
10. Jimbo 13 15.02.21 13:15 Сейчас в теме
Да, выбрать имеет смысл только в самом последнем запросе
11. Torin57 38 15.02.21 13:32 Сейчас в теме
(10) Это где-то описано в документации 1С, или это только "жизненный опыт" тех кто пользуется СКД?
12. vasgius 19.02.21 12:45 Сейчас в теме
Когда вы описываете поля на вкладке "Компоновка данных" вы облегчает работу компоновщику, например при наложение отборов. Допустим у вас во временной таблице есть поле "Контрагент", но которое в финальном запросе имеет имя "Поставщик".
Если вы не опищете, что это поле временной таблицы связано с полем компоновки, то если пользователь наложит отбор по поставщику, то компоновщик применит этот отбор только в финальном запросе, при этом запрос во временной таблице будет выполняться без фильтров.

Ещё возможна обратная ситуация, когда компоновщик накладывает отбор во временной таблице в ущерб логике запроса
13. SlavaKron 19.02.21 15:25 Сейчас в теме
(12)
когда компоновщик накладывает отбор во временной таблице в ущерб логике запроса
Картинки для наглядности.
Прикрепленные файлы:
15. Torin57 38 19.02.21 19:19 Сейчас в теме
(13) Да, согласен. Спасает снятие флажка "Автозаполнение". И далее я могу все испортить, указав во временной таблице
{ГДЕ
(0) КАК Поле1}
Тогда у меня начнет накладываться отбор где не надо во временной таблице и запрос поломается.
Но меня интересует на что повлияет указание вот этого во временной таблице {ВЫБРАТЬ
Поле1}

Должна же быть какая-то разница, иначе зачем разработчики платформы позволяют там манипулировать? Как-то это не по одинэсовски. Обычно 1С запрещает вредные либо бесполезные действия.
16. spacecraft 19.02.21 19:54 Сейчас в теме
(15) мне кажется просто не стали переделывать конструктор. Ехать не мешает.
Они и для общей формы с флагами "Клиент" и "Сервер" позволяют включать "Вызов сервера".
Так что бывает.
17. spacecraft 19.02.21 20:00 Сейчас в теме
(15) да, еще такой момент.
Вот предположим они убирают для временной таблицы этот функционал (возможность указать).
Теперь возможна будет ситуация:
1. Создали запрос. Указали эту выборку.
2. Указали что запрос теперь - временная таблица. Выборка очистилась.
3. Вернули запрос (убрали выделение временной таблицы). Выборка то очищена.
Вот тут проблем можно поиметь больше, чем если она просто есть.
18. EVKash 16 19.02.21 20:05 Сейчас в теме
(15)
Но меня интересует на что повлияет указание вот этого во временной таблице {ВЫБРАТЬ
Поле1}

На попадание этого поля в допустимые отборы.
А если укажете Поле1.*, то и на все его реквизиты.
19. spacecraft 19.02.21 20:09 Сейчас в теме
(18) попробуйте указать это только во временной таблице и поискать в отборах.
14. Torin57 38 19.02.21 19:03 Сейчас в теме
(12)Если указать поле компоновки во временной таблице на закладке "Условия", то, действительно, отбор будет накладываться во временной таблице в том числе. Иначе не накладывается Это так. Если же указывать либо не указывать описание поля на закладке "Поля", то ничего не меняется. Я вот этого не понимаю. Это тоже влияет на наложение отборов?
Прикрепленные файлы:
20. EVKash 16 19.02.21 20:09 Сейчас в теме
21. spacecraft 19.02.21 20:10 Сейчас в теме
(20) нет. Вангую, эти же поля есть и в конечном запросе. Вы выберите поля, которые в конечном запросе нет.
22. EVKash 16 19.02.21 20:32 Сейчас в теме
(21) да... погорячился. перепутал с условием {ГДЕ ...}
прошу простить и понять)
Хотя понять теперь еще больше хочется...
23. EVKash 16 19.02.21 21:23 Сейчас в теме
еще 2 раза перечитал тему. пришло осознание. про ВТ - понятно, что бесполезно.
полезные знания. всем спасибо!
остался вопрос: зачем в некоторых типовых отчетах используют {ВЫБРАТЬ...} при автозаполнении?
Оставьте свое сообщение

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