Отбор во временной таблице

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. micha26 04.03.17 15:04 Сейчас в теме
Здравствуйте всем.
Вот такой запрос (НоменклатураПоследние это временная таблица)
		 
 |ВЫБРАТЬ
 |НоменклатураПоследние.Наименование КАК Наименование,
 |НоменклатураПоследние.Код КАК Код,
 |НоменклатураПоследние.Артикул КАК Артикул,
 |НазначенияСвойствОбъектов.Объект.Ссылка,   
 |НазначенияСвойствОбъектов.Свойство.Наименование КАК Контракт,
 |НазначенияСвойствОбъектов.ЗначениеСвойства КАК Значение
 |ИЗ
 |НоменклатураПоследние КАК НоменклатураПоследние
 |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НазначенияСвойствОбъектов КАК  НазначенияСвойствОбъектов
 |  ПО НоменклатураПоследние.Наименование = НазначенияСвойствОбъектов.Объект.Ссылка" ;
Показать

Как можно прикрутить дополнительный отбор по Значению например?
Заранее спасибо.
По теме из базы знаний
Найденные решения
6. Euroset1 11 05.03.17 13:07 Сейчас в теме
Если мне изменяет память, то напрямую временной таблице условия ставить не получается. Я имею ввиду ту, которую мы кладем через параметры. Нужно пакетом сделать: первый запрос выбирает из этой таблицы и помещает в виртуальную таблицу в самом запросе, а уже ее можно использовать полноценно. Помню мучился с этим, потом допёр опытным путем.
И да, еще типизация важна. Та таблица, которую мы кладем в запрос параметром, должна быть типизирована полностью. Т.е. у каждой колонки должен быть определен тип.

Чтобы было нагляднее, вот кусок рабочего кода на тему

	ЗапросПроектов = Новый запрос;
	ЗапросПроектов.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	ЗапросПроектов.УстановитьПараметр("ТаблицаПараметр", ТаблицаПараметр);
	
	ЗапросПроектов.Текст = 
	"ВЫБРАТЬ
	|	ВТ.ЗаказФилиала,
	|	ВТ.Номенклатура
	|ПОМЕСТИТЬ ТаблицаПараметр
	|ИЗ
	|	&ТаблицаПараметр КАК ВТ
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ИсходнаяТаблица.ЗаказФилиала,
	|	ИсходнаяТаблица.Номенклатура,
	|	ЗаказФилиалаТовары.Проект как Проект
	|ИЗ
	|	ТаблицаПараметр КАК ИсходнаяТаблица
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказФилиала.Товары КАК ЗаказФилиалаТовары
	|		ПО (ЗаказФилиалаТовары.Номенклатура = ИсходнаяТаблица.Номенклатура)
	|			И (ЗаказФилиалаТовары.Ссылка = ИсходнаяТаблица.ЗаказФилиала)";
	
	ТаблицаПроектов = ЗапросПроектов.Выполнить().Выгрузить();
Показать
9. japopov 68 06.03.17 10:23 Сейчас в теме
(1) Вам, кажется, надо привыкнуть работать с временными таблицами...
1) ВТ нельзя использовать "как хочется", первоначально она должна попасть в Ваш пакет запросов простейшим запросом, без отбора, сортировок и группировок. Потом можно из результата того запроса выбирать, группировать...
2) хорошая привычка: типизировать поля таблицы, получаемой как параметр. Потом здорово помогает переписывать запрос ПОСЛЕ того, как Вы его сделали и закрыли.
Например: отработает и такой вариант:
ВЫБРАТЬ
	Номенклатура.Ссылка КАК Ссылка,
	Номенклатура.Наименование КАК Наименование
ПОМЕСТИТЬ Номенклатура
ИЗ
	&Номенклатура КАК Номенклатура


Но лучше сделать так:
ВЫБРАТЬ
	ВЫРАЗИТЬ(Номенклатура.Ссылка КАК Справочник.Номенклатура) КАК Ссылка,
	ВЫРАЗИТЬ(Номенклатура.Наименование КАК СТРОКА(300)) КАК Наименование
ПОМЕСТИТЬ Номенклатура
ИЗ
	&Номенклатура КАК Номенклатура
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. alexx2510 39 05.03.17 00:22 Сейчас в теме
(1)
НоменклатураПоследние.Наименование = НазначенияСвойствОбъектов.Объект.Ссылка

Временная таблица тут непричем.
Строку со ссылкой просто не надо сравнивать )

Во временной таблице должно быть поле, содержащее ссылку на номенклатуру и вот по нему уже условие связи составлять.
что-то типа:
НоменклатураПоследние.Ссылка = НазначенияСвойствОбъектов.Объект


P.S.
"НазначенияСвойствОбъектов.Объект.Ссылка" .Ссылка здесь лишнее, т.к. в регистре и так ссылка лежит.
Достаточно просто НазначенияСвойствОбъектов.Объект
micha26; SP17081992; +2 Ответить
5. micha26 05.03.17 11:24 Сейчас в теме
(4)| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НазначенияСвойствОбъектов КАК НазначенияСвойствОбъектов
| ПО НоменклатураПоследние.Наименование = НазначенияСвойствОбъектов.Объект.Ссылка
Вот это кстати работает как надо...глюк наверное :-)
9. japopov 68 06.03.17 10:23 Сейчас в теме
(1) Вам, кажется, надо привыкнуть работать с временными таблицами...
1) ВТ нельзя использовать "как хочется", первоначально она должна попасть в Ваш пакет запросов простейшим запросом, без отбора, сортировок и группировок. Потом можно из результата того запроса выбирать, группировать...
2) хорошая привычка: типизировать поля таблицы, получаемой как параметр. Потом здорово помогает переписывать запрос ПОСЛЕ того, как Вы его сделали и закрыли.
Например: отработает и такой вариант:
ВЫБРАТЬ
	Номенклатура.Ссылка КАК Ссылка,
	Номенклатура.Наименование КАК Наименование
ПОМЕСТИТЬ Номенклатура
ИЗ
	&Номенклатура КАК Номенклатура


Но лучше сделать так:
ВЫБРАТЬ
	ВЫРАЗИТЬ(Номенклатура.Ссылка КАК Справочник.Номенклатура) КАК Ссылка,
	ВЫРАЗИТЬ(Номенклатура.Наименование КАК СТРОКА(300)) КАК Наименование
ПОМЕСТИТЬ Номенклатура
ИЗ
	&Номенклатура КАК Номенклатура
10. japopov 68 06.03.17 10:29 Сейчас в теме
(1) Кстати, ещё совет: смотрите, как делается в типовых (удобно и писать запрос легко):

В запросе
ГДЕ &ВсеЗначения ИЛИ НазначенияСвойствОбъектов.ЗначениеСвойства В (&СписокЗначений)


В коде, когда назначаете параметры:
Запрос.УстановитьПараметр("СписокЗначений",СписокЗначений);
Запрос.УстановитьПараметр("ВсеЗначения",СписокЗначений.Количество()=0);

Подразумевается, что переменная СписокЗначений типа Массив или СписокЗначений.
Тогда если СписокЗначений задана (не пустая), то фильтр будет. Если пустая - фильтра не будет.
micha26; alex-l19041; +2 Ответить
11. micha26 06.03.17 11:09 Сейчас в теме
(10) Благодарю за развернутое объяснение, да привыкнуть надо :-) - я как раз в первой таблице сделал отбор в запросе. То есть этого однозначно делать нельзя...
У меня два регистра сведений - в них одно общее поле (номенклатура)
1) Сначала я делаю обычный запрос без извращений помещаю то что получилось в ВТ.
2) После этого в результате делаю нужную мне фильтрацию (отбор)
3) Дальше второй запрос обращается в ВТ
4) Левым соединением с первым регистром выбираем конечные данные.
Все верно?
12. japopov 68 06.03.17 11:15 Сейчас в теме
(11) В принципе, да. Только для скорости не забудьте проиндексировать данные во временной таблице по тем полям, которые потом участвуют в соединении.
2. ImHunter 328 04.03.17 15:23 Сейчас в теме
Гм. А в чем проблема? Вроде как, обычное условие ГДЕ на НоменклатураПоследние.
SP17081992; +1 Ответить
3. micha26 05.03.17 00:13 Сейчас в теме
(2)Не - не хочет отбирать из временной таблицы почему-то.
 |ИЗ
 |НоменклатураПоследние КАК НоменклатураПоследние
 |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НазначенияСвойствОбъектов КАК  НазначенияСвойствОбъектов
 |  ПО НоменклатураПоследние.Наименование = НазначенияСвойствОбъектов.Объект.Ссылка
 | ГДЕ
6. Euroset1 11 05.03.17 13:07 Сейчас в теме
Если мне изменяет память, то напрямую временной таблице условия ставить не получается. Я имею ввиду ту, которую мы кладем через параметры. Нужно пакетом сделать: первый запрос выбирает из этой таблицы и помещает в виртуальную таблицу в самом запросе, а уже ее можно использовать полноценно. Помню мучился с этим, потом допёр опытным путем.
И да, еще типизация важна. Та таблица, которую мы кладем в запрос параметром, должна быть типизирована полностью. Т.е. у каждой колонки должен быть определен тип.

Чтобы было нагляднее, вот кусок рабочего кода на тему

	ЗапросПроектов = Новый запрос;
	ЗапросПроектов.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	ЗапросПроектов.УстановитьПараметр("ТаблицаПараметр", ТаблицаПараметр);
	
	ЗапросПроектов.Текст = 
	"ВЫБРАТЬ
	|	ВТ.ЗаказФилиала,
	|	ВТ.Номенклатура
	|ПОМЕСТИТЬ ТаблицаПараметр
	|ИЗ
	|	&ТаблицаПараметр КАК ВТ
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ИсходнаяТаблица.ЗаказФилиала,
	|	ИсходнаяТаблица.Номенклатура,
	|	ЗаказФилиалаТовары.Проект как Проект
	|ИЗ
	|	ТаблицаПараметр КАК ИсходнаяТаблица
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказФилиала.Товары КАК ЗаказФилиалаТовары
	|		ПО (ЗаказФилиалаТовары.Номенклатура = ИсходнаяТаблица.Номенклатура)
	|			И (ЗаказФилиалаТовары.Ссылка = ИсходнаяТаблица.ЗаказФилиала)";
	
	ТаблицаПроектов = ЗапросПроектов.Выполнить().Выгрузить();
Показать
7. micha26 06.03.17 09:39 Сейчас в теме
(6)
ТаблицаПараметр

Не знал - попробую таким способом, отпишусь по результату - спасибо.
8. micha26 06.03.17 09:49 Сейчас в теме
(6)
ТаблицаПараметр

То есть если я правильно понял - в "ТаблицаПараметр" - уже должны быть данные с первым отбором так сказать? (к примеру отбор заказа по поставщику)
13. micha26 13.03.17 08:47 Сейчас в теме
В принципе разобрался с ВТ, всем спасибо за помощь.
14. пользователь 13.03.17 09:09
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

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