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

19.05.10

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

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

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

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

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

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

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

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

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

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

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

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    213128    1165    413    

1049

Инструментарий разработчика Запросы Программист 1С v8.3 Сложные периодические расчеты Запросы 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.

1 стартмани

16.05.2025    5135    87    zup_dev    20    

68

Инструментарий разработчика Запросы Программист 1С v8.3 Управляемые формы Запросы 1С:ERP Управление предприятием 2 Абонемент ($m)

В данной публикации рассказывается о решении, которое позволяет находить сразу все ошибки в тексте запроса за раз, а не только самую первую.

2 стартмани

05.03.2025    3777    15    XilDen    12    

25

Обновление 1С Запросы Программист 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

3 стартмани

06.02.2025    3469    26    XilDen    26    

37

Запросы Программист 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

В статье приведена удобная возможность отладки исполняемого запроса динамического списка.

03.12.2024    8241    artemusII    11    

24

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

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

18.10.2024    16682    sergey279    18    

69

Запросы Программист 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

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

11.10.2024    11353    XilDen    38    

102

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

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    5315    PROSTO-1C    0    

28
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. e.kogan 1903 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С по использованию вложенных запросов и временных таблиц
Для отправки сообщения требуется регистрация/авторизация