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

19.05.10

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

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

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

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

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

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

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

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

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

 

См. также

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

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

15500 руб.

02.09.2020    195603    1085    405    

1006

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

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

1 стартмани

16.05.2025    3249    73    zup_dev    14    

57

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

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

2 стартмани

05.03.2025    2839    10    XilDen    12    

23

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

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

2 стартмани

06.02.2025    2756    22    XilDen    26    

36

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

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

03.12.2024    6805    artemusII    11    

24

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

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

18.10.2024    14789    sergey279    18    

68

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

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

11.10.2024    9443    XilDen    38    

101

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

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

20.08.2024    3892    PROSTO-1C    0    

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