Временные таблицы, отбор по нескольким составным ключам в запросе.

19.05.10

Разработка - Запросы

Иногда возникает потребность отбора в запросе по составному ключу – типа партия, серия, номенклатура – при одном значении ключа проблем нет, а вот когда значений ключа несколько возникает проблема

Иногда возникает потребность отбора по составному ключу - типа партия, серия, номенклатура - при одном значении ключа проблем нет, просто в запросе ставим условие партия =... и серия =... и номенклатура=..., а вот когда значений ключа несколько возникает проблема. Например имеется таблица значений с набором таких ключей. Один из вариантов динамически сгенерировать запрос через «или» - но и запрос может вырасти до огромных размеров и параметров немеряно... некрасиво. Для решения задачи можно воспользоваться Временными таблицами, вдобавок там источниками данных может быть таблица значений. Ниже пример: нужно найти в каких документах фигурировали партии из таблицы значений позднее определенной даты(на практике смотрим фигурировали ли партии в документах позднее текущего...)

Упс - таблица значений с полями: Номенклатура, ДокументОприходования, Серия

МенеджерВТ   =Новый МенеджерВременныхТаблиц;
               
Запрос =Новый Запрос;

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

                              
Запрос.УстановитьПараметр("ТаблЗнач",Упс);
                              
Запрос.УстановитьПараметр("ДатаНач", Дата);
                              
тз            =Запрос.Выполнить().Выгрузить();
МенеджерВТ   =Неопределено;

1.Создаем менеджер временных таблиц
2.Создаем новый запрос (здесь пакет запросов)
3.Первым запросом помещаем во временную таблицу таблицу значений
4.Вторым запросом делаем выборку из регистра установив условия связи.
5.На выходе получаем результат запроса.

Подробно о временных таблицах можно почитать в дополнении к описанию в каталоге Readme или AddDoc программы

 

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    160457    887    399    

866

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    10123    sergey279    18    

64

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    5340    XilDen    36    

81

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    8050    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2435    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    8887    implecs_team    6    

47

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3424    andrey_sag    10    

36
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. e.kogan 1895 29.04.10 17:04 Сейчас в теме
Вообще-то составной ключ возможен и в виде "(ДокументОприходования,Серия,Номенклатура) В (Выбрать ДокументОприходования, Серия, Номенклатура ИЗ ВТ))". Причём сразу в параметрах виртуальной таблицы.

Что это, Бэрримор? Статья? Нет. Овсянка, сэр.

Скучно. Очевидно. Плохо оформлено.
2. DoctorRoza 30.04.10 12:10 Сейчас в теме
ИМХО .. использование вложенного запроса не так наглядно, как применение временных таблиц и пакетного запроса. Конечно, что лучше .. покажет опытный эксперимент на быстродействие того или иного вида запроса!
P.s. Приведенный пример хорош и нагляден для начинающих программистов, поэтому, за то, что можно поучиться и .. чайникам .. плюсану! ;)
3. Ivon 676 05.05.10 09:56 Сейчас в теме
(2). Запрос с вложенными запросами выполняется быстрее, чем запрос с временными таблицами. Это факт. На 2-х временных таблицах не заметно, а когда результат содержит 1000 строк по 20 колонок и используется 15 временных таблиц - заметно очень сильно.
4. Ivon 676 05.05.10 09:57 Сейчас в теме
Автору:
Правильно будет
МенеджерВТ.Закрыть();

И еще, в данном примере менеджер временных таблиц абсолютно не нужен. Для проверки можешь закомментировать строки, с ним связанные и увидишь, что все отработает. МВТ нужен для передачи временных таблиц между разными запросами. Хорошо использовать МВТ для организации расшифровок в отчетах, чтобы не выбирать данные повторно.
Smert-nik; A_kryl; artmicro; Spitfire; +4 Ответить
5. A_kryl 162 18.05.10 13:57 Сейчас в теме
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=539689#539689
если комуто интересно - мнение 1С по использованию вложенных запросов и временных таблиц
Оставьте свое сообщение