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

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

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

Ещё возможна обратная ситуация, когда компоновщик накладывает отбор во временной таблице в ущерб логике запроса
SlavaKron; +1 Ответить
13. SlavaKron 19.02.21 15:25 Сейчас в теме
(12)
когда компоновщик накладывает отбор во временной таблице в ущерб логике запроса
Картинки для наглядности.
Прикрепленные файлы:
15. Torin57 7 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 14 19.02.21 20:05 Сейчас в теме
(15)
Но меня интересует на что повлияет указание вот этого во временной таблице {ВЫБРАТЬ
Поле1}

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

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