Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
Здравствуйте всем.
Вот такой запрос (НоменклатураПоследние это временная таблица)
Как можно прикрутить дополнительный отбор по Значению например?
Заранее спасибо.
Вот такой запрос (НоменклатураПоследние это временная таблица)
|ВЫБРАТЬ
|НоменклатураПоследние.Наименование КАК Наименование,
|НоменклатураПоследние.Код КАК Код,
|НоменклатураПоследние.Артикул КАК Артикул,
|НазначенияСвойствОбъектов.Объект.Ссылка,
|НазначенияСвойствОбъектов.Свойство.Наименование КАК Контракт,
|НазначенияСвойствОбъектов.ЗначениеСвойства КАК Значение
|ИЗ
|НоменклатураПоследние КАК НоменклатураПоследние
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НазначенияСвойствОбъектов КАК НазначенияСвойствОбъектов
| ПО НоменклатураПоследние.Наименование = НазначенияСвойствОбъектов.Объект.Ссылка" ;
ПоказатьКак можно прикрутить дополнительный отбор по Значению например?
Заранее спасибо.
По теме из базы знаний
- Временные таблицы, отбор по нескольким составным ключам в запросе.
- Тонкости СКД: Особенности отбора при использовании временных таблиц
- О важности псевдонимов полей во временных таблицах и отборах на СКД для производительности
- Эти занимательные временные таблицы
- Временные таблицы и SELECT FASTTRUNCATE
Найденные решения
Если мне изменяет память, то напрямую временной таблице условия ставить не получается. Я имею ввиду ту, которую мы кладем через параметры. Нужно пакетом сделать: первый запрос выбирает из этой таблицы и помещает в виртуальную таблицу в самом запросе, а уже ее можно использовать полноценно. Помню мучился с этим, потом допёр опытным путем.
И да, еще типизация важна. Та таблица, которую мы кладем в запрос параметром, должна быть типизирована полностью. Т.е. у каждой колонки должен быть определен тип.
Чтобы было нагляднее, вот кусок рабочего кода на тему
И да, еще типизация важна. Та таблица, которую мы кладем в запрос параметром, должна быть типизирована полностью. Т.е. у каждой колонки должен быть определен тип.
Чтобы было нагляднее, вот кусок рабочего кода на тему
ЗапросПроектов = Новый запрос;
ЗапросПроектов.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗапросПроектов.УстановитьПараметр("ТаблицаПараметр", ТаблицаПараметр);
ЗапросПроектов.Текст =
"ВЫБРАТЬ
| ВТ.ЗаказФилиала,
| ВТ.Номенклатура
|ПОМЕСТИТЬ ТаблицаПараметр
|ИЗ
| &ТаблицаПараметр КАК ВТ
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ИсходнаяТаблица.ЗаказФилиала,
| ИсходнаяТаблица.Номенклатура,
| ЗаказФилиалаТовары.Проект как Проект
|ИЗ
| ТаблицаПараметр КАК ИсходнаяТаблица
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказФилиала.Товары КАК ЗаказФилиалаТовары
| ПО (ЗаказФилиалаТовары.Номенклатура = ИсходнаяТаблица.Номенклатура)
| И (ЗаказФилиалаТовары.Ссылка = ИсходнаяТаблица.ЗаказФилиала)";
ТаблицаПроектов = ЗапросПроектов.Выполнить().Выгрузить();
Показать
(1) Вам, кажется, надо привыкнуть работать с временными таблицами...
1) ВТ нельзя использовать "как хочется", первоначально она должна попасть в Ваш пакет запросов простейшим запросом, без отбора, сортировок и группировок. Потом можно из результата того запроса выбирать, группировать...
2) хорошая привычка: типизировать поля таблицы, получаемой как параметр. Потом здорово помогает переписывать запрос ПОСЛЕ того, как Вы его сделали и закрыли.
Например: отработает и такой вариант:
Но лучше сделать так:
1) ВТ нельзя использовать "как хочется", первоначально она должна попасть в Ваш пакет запросов простейшим запросом, без отбора, сортировок и группировок. Потом можно из результата того запроса выбирать, группировать...
2) хорошая привычка: типизировать поля таблицы, получаемой как параметр. Потом здорово помогает переписывать запрос ПОСЛЕ того, как Вы его сделали и закрыли.
Например: отработает и такой вариант:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка,
Номенклатура.Наименование КАК Наименование
ПОМЕСТИТЬ Номенклатура
ИЗ
&Номенклатура КАК Номенклатура
Но лучше сделать так:
ВЫБРАТЬ
ВЫРАЗИТЬ(Номенклатура.Ссылка КАК Справочник.Номенклатура) КАК Ссылка,
ВЫРАЗИТЬ(Номенклатура.Наименование КАК СТРОКА(300)) КАК Наименование
ПОМЕСТИТЬ Номенклатура
ИЗ
&Номенклатура КАК Номенклатура
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Временная таблица тут непричем.
Строку со ссылкой просто не надо сравнивать )
Во временной таблице должно быть поле, содержащее ссылку на номенклатуру и вот по нему уже условие связи составлять.
что-то типа:
НоменклатураПоследние.Ссылка = НазначенияСвойствОбъектов.Объект
P.S.
"НазначенияСвойствОбъектов.Объект.Ссылка" .Ссылка здесь лишнее, т.к. в регистре и так ссылка лежит.
Достаточно просто НазначенияСвойствОбъектов.Объект
НоменклатураПоследние.Наименование = НазначенияСвойствОбъектов.Объект.Ссылка
Временная таблица тут непричем.
Строку со ссылкой просто не надо сравнивать )
Во временной таблице должно быть поле, содержащее ссылку на номенклатуру и вот по нему уже условие связи составлять.
что-то типа:
НоменклатураПоследние.Ссылка = НазначенияСвойствОбъектов.Объект
P.S.
"НазначенияСвойствОбъектов.Объект.Ссылка" .Ссылка здесь лишнее, т.к. в регистре и так ссылка лежит.
Достаточно просто НазначенияСвойствОбъектов.Объект
(1) Вам, кажется, надо привыкнуть работать с временными таблицами...
1) ВТ нельзя использовать "как хочется", первоначально она должна попасть в Ваш пакет запросов простейшим запросом, без отбора, сортировок и группировок. Потом можно из результата того запроса выбирать, группировать...
2) хорошая привычка: типизировать поля таблицы, получаемой как параметр. Потом здорово помогает переписывать запрос ПОСЛЕ того, как Вы его сделали и закрыли.
Например: отработает и такой вариант:
Но лучше сделать так:
1) ВТ нельзя использовать "как хочется", первоначально она должна попасть в Ваш пакет запросов простейшим запросом, без отбора, сортировок и группировок. Потом можно из результата того запроса выбирать, группировать...
2) хорошая привычка: типизировать поля таблицы, получаемой как параметр. Потом здорово помогает переписывать запрос ПОСЛЕ того, как Вы его сделали и закрыли.
Например: отработает и такой вариант:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка,
Номенклатура.Наименование КАК Наименование
ПОМЕСТИТЬ Номенклатура
ИЗ
&Номенклатура КАК Номенклатура
Но лучше сделать так:
ВЫБРАТЬ
ВЫРАЗИТЬ(Номенклатура.Ссылка КАК Справочник.Номенклатура) КАК Ссылка,
ВЫРАЗИТЬ(Номенклатура.Наименование КАК СТРОКА(300)) КАК Наименование
ПОМЕСТИТЬ Номенклатура
ИЗ
&Номенклатура КАК Номенклатура
(1) Кстати, ещё совет: смотрите, как делается в типовых (удобно и писать запрос легко):
В запросе
В коде, когда назначаете параметры:
Подразумевается, что переменная СписокЗначений типа Массив или СписокЗначений.
Тогда если СписокЗначений задана (не пустая), то фильтр будет. Если пустая - фильтра не будет.
В запросе
ГДЕ &ВсеЗначения ИЛИ НазначенияСвойствОбъектов.ЗначениеСвойства В (&СписокЗначений)
В коде, когда назначаете параметры:
Запрос.УстановитьПараметр("СписокЗначений",СписокЗначений);
Запрос.УстановитьПараметр("ВсеЗначения",СписокЗначений.Количество()=0);
Подразумевается, что переменная СписокЗначений типа Массив или СписокЗначений.
Тогда если СписокЗначений задана (не пустая), то фильтр будет. Если пустая - фильтра не будет.
(10) Благодарю за развернутое объяснение, да привыкнуть надо :-) - я как раз в первой таблице сделал отбор в запросе. То есть этого однозначно делать нельзя...
У меня два регистра сведений - в них одно общее поле (номенклатура)
1) Сначала я делаю обычный запрос без извращений помещаю то что получилось в ВТ.
2) После этого в результате делаю нужную мне фильтрацию (отбор)
3) Дальше второй запрос обращается в ВТ
4) Левым соединением с первым регистром выбираем конечные данные.
Все верно?
У меня два регистра сведений - в них одно общее поле (номенклатура)
1) Сначала я делаю обычный запрос без извращений помещаю то что получилось в ВТ.
2) После этого в результате делаю нужную мне фильтрацию (отбор)
3) Дальше второй запрос обращается в ВТ
4) Левым соединением с первым регистром выбираем конечные данные.
Все верно?
(2)Не - не хочет отбирать из временной таблицы почему-то.
|ИЗ
|НоменклатураПоследние КАК НоменклатураПоследние
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НазначенияСвойствОбъектов КАК НазначенияСвойствОбъектов
| ПО НоменклатураПоследние.Наименование = НазначенияСвойствОбъектов.Объект.Ссылка
| ГДЕ
Если мне изменяет память, то напрямую временной таблице условия ставить не получается. Я имею ввиду ту, которую мы кладем через параметры. Нужно пакетом сделать: первый запрос выбирает из этой таблицы и помещает в виртуальную таблицу в самом запросе, а уже ее можно использовать полноценно. Помню мучился с этим, потом допёр опытным путем.
И да, еще типизация важна. Та таблица, которую мы кладем в запрос параметром, должна быть типизирована полностью. Т.е. у каждой колонки должен быть определен тип.
Чтобы было нагляднее, вот кусок рабочего кода на тему
И да, еще типизация важна. Та таблица, которую мы кладем в запрос параметром, должна быть типизирована полностью. Т.е. у каждой колонки должен быть определен тип.
Чтобы было нагляднее, вот кусок рабочего кода на тему
ЗапросПроектов = Новый запрос;
ЗапросПроектов.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗапросПроектов.УстановитьПараметр("ТаблицаПараметр", ТаблицаПараметр);
ЗапросПроектов.Текст =
"ВЫБРАТЬ
| ВТ.ЗаказФилиала,
| ВТ.Номенклатура
|ПОМЕСТИТЬ ТаблицаПараметр
|ИЗ
| &ТаблицаПараметр КАК ВТ
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ИсходнаяТаблица.ЗаказФилиала,
| ИсходнаяТаблица.Номенклатура,
| ЗаказФилиалаТовары.Проект как Проект
|ИЗ
| ТаблицаПараметр КАК ИсходнаяТаблица
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказФилиала.Товары КАК ЗаказФилиалаТовары
| ПО (ЗаказФилиалаТовары.Номенклатура = ИсходнаяТаблица.Номенклатура)
| И (ЗаказФилиалаТовары.Ссылка = ИсходнаяТаблица.ЗаказФилиала)";
ТаблицаПроектов = ЗапросПроектов.Выполнить().Выгрузить();
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот