Пакетные запросы для чайников

07.02.12

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

Когда мой запрос стал таким сложным, что превысил пределы моего понимания, я решил использовать пакетные запросы. Но столкнулся с фактом, что ничего о них не знаю. Оказалось, все очень просто. Через 5 минут вы будете уметь пользоваться пакетными запросами. Начинайте читать.

Когда мой запрос стал таким сложным, что превысил пределы моего понимания, я решил использовать пакетные запросы.

Но столкнулся с фактом, что ничего о них не знаю. Оказалось, все очень просто. Через 5 минут вы будете уметь пользоваться пакетными запросами. Начинайте читать.

Как оказалось все очень просто. Нужно просто написать несколько запросов, разделенных точкой с запятой. Результат вернется в последнем запросе.

Пакетные запросы появились только в версии 8.1.11.67.4.

Вот текст запроса:

ВЫБРАТЬ Т1.Зн ПОМЕСТИТЬ ВТБуквы ИЗ (ВЫБРАТЬ "А" КАК Зн ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Б") КАК Т1;
ВЫБРАТЬ Т1.Зн ПОМЕСТИТЬ ВТЦифры ИЗ (ВЫБРАТЬ "1" КАК Зн ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "2") КАК Т1;
ВЫБРАТЬ ТБ.Зн, ТЦ.Зн, ТБ.Зн+ТЦ.Зн ИЗ ВТБуквы КАК ТБ, ВТЦифры КАК ТЦ

Пакетные запросы поддерживаются в любой обычной консоли запросов.

На рисунке представлен образец выполнения запроса:

А теперь немного из опыта. Зачем нужны пакетные запросы.

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

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

Можно конечно, обойтись без пакетного запроса, последовательно выполняя несколько запросов и манипулируя вложенными таблицами. Но с пакетными запросами удобнее. Просто пишешь запрос, и не думаешь о размещении временных таблиц. Все происходит само.

Кроме того, если используется система компоновки данных (СКД), она грамотно отбирает нужные поля и минимизирует весь пакет запросов.

Если у запросов был метод Запрос.Выполнить() то теперь появился метод Запрос.ВыполнитьПакет(), который возвращает все таблицы из пакета, в виде массива.

Анонс пакетных запросов на сайте 1с находится здесь: http://v8.1c.ru/overview/release_8_1_11/#Functional

История из жизни

Объясню, что меня подвигло на пакетные запросы.

Значит, представьте есть документ, у него табличная часть. В колонке «Ошибка» признак, есть ли ошибка при заполнении документа. В колонке «ТекстОшибки» может быть одно или несколько предложений с текстами ошибок. Виды ошибок, содержащиеся в предложениях известны заранее.

Так вот, мы заносим список всех ошибок в таблицу КодыОшибок – там содержится код ошибки и подстрока поиска.

Далее соединяем табличную часть с кодами ошибок.

Получаем для каждой строки одну, две или больше ошибок. Т.к. в одной строке может быть несколько ошибок.

Но ошибка может быть и не распознана, т.е. флаг «Ошибка» стоит, а текст ошибки не выдал нам код ошибки.

Делаем левое соединение, там где код ошибки есть NULL, даем код ошибки «Прочие ошибки» .

Но проблема была в том, что кодов ошибок было около 200, поэтому левое соединение работало очень долго. Пришлось заменить его на внутреннее соединение, которое летало. Но при этом терялись строки, для которых ошибка была не найдена. Я так и не смог понять, как вытащить эти строки в результат.

Запрос писался для системы компоновки, т.е. никаких таблиц значений или временных таблиц применять нельзя в принципе. Тут и пригодились пакетные запросы.

Я просто еще раз соединил все строки с ошибками со всеми строками, для которых были найдены ошибки, и добавил все-таки вид ошибки «Прочие ошибки».

См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    122144    670    389    

714

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5746    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

Запрос 1С copilot

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

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6284    31    mkalimulin    25    

50

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1742    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

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

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5388    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16184    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4670 07.02.12 16:02 Сейчас в теме
(0) Статью двухлетней или трёхлетней давности от Чистова не читал? Там намного подробней расписано.
2. fixin 4252 07.02.12 16:25 Сейчас в теме
(1) чукча не читатель, чучка писатель...
vakham; DoctorRoot; nata.afanasieva@gmail.com; sergio199; charushkin; anig99; serg_gres; +7 Ответить
48. CratosX 112 28.10.16 19:12 Сейчас в теме
(1) Поручик, (2) - У Чистова-то может и написано было, но ссылки из (12) Godman уже недоступна. Так что иногда полезно копипастить или переизлагать инфу на разных ресурсах.
3. sa1m0nn 28 08.02.12 07:22 Сейчас в теме
Автор попутал б-жий дар с яичницей. Описано так, как будто пакетные запросы - что-то недосягаемое и нереально крутое... Это обыденность, простой механизм наряду с прочими механизмами платформы.
4. psa247 17 08.02.12 07:25 Сейчас в теме
написано же - для "чайников"
5. anig99 2843 08.02.12 08:08 Сейчас в теме
Если уж пейсатель (и оператор кстати тоже, гыгы), то тогда лучше для чайников сделать 2 изменения.
1. В заглавие добавить что-то типа "как написать свой первый пакетный запрос"
2. Найти статью Чистова и дать на неё ссылку.
charushkin; fishca; +2 Ответить
6. maldinitaly 08.02.12 08:25 Сейчас в теме
Согласен с (5) лучше найти ссылку на статью Чистова
10. fixin 4252 08.02.12 10:52 Сейчас в теме
(6)(5) у чистово сложнее и искать надо, а тут под рукой, на ИС.
(4) вот именно, быстрый старт, так сказать.
(8) о чем и речь. Пусть выскажутся чайники.
(9) статья для чайников, а не для дураков.
simuljakr; vakham; IrinaKostroma; Serg3141; +4 1 Ответить
21. Модератор раздела 09.02.12 09:36 Сейчас в теме
(10)
статья для чайников, а не для дураков.

полегче.
будешь высказываться в подобном стиле, отдохнешь от комментариев месяц.
7. yuraskas 176 08.02.12 08:46 Сейчас в теме
Ну прямо все заладили с Чистовым, ну так дайте ссылку на эту статью, я например не читал.
tema018; vakham; +2 Ответить
8. sound 535 08.02.12 09:17 Сейчас в теме
Набросились такие на человека, по моему для чайников в самый раз :)
9. fomix 33 08.02.12 10:02 Сейчас в теме
Неееее для чайников не потянет - мудрено написано... Картинок мало... И запрос не из ЗУПа (на 10 листов формата А4)... Переписать!
11. Godman 70 08.02.12 12:51 Сейчас в теме
Скажу так: шел мимо, знал что есть пакетные запросы, но никогда не пользовал, как-то не было нужды. А тут подробно написано как, что и когда, и самое главное пример из жизни для чего. Теперь приблизительно понятно для чего это может пригодиться. Автору спасибо.
А ссылку на Чистова дайте уж пожалуйста. И вообще странный народ, какой смысл писать фразу про Чистова, если вы не даёте ссылку? Если знаете нечто по существу, так дайте развернутый ответ.
Ларисочка; +1 Ответить
12. Godman 70 08.02.12 12:52 Сейчас в теме
13. catena 110 08.02.12 14:12 Сейчас в теме
Чтение действительно облегчает, но, я так поняла, выигрыша в оптимизации нет?
14. fixin 4252 08.02.12 18:03 Сейчас в теме
(13) почему это нет? Простые запросы можно быстрее выполнить, чем один сложный... Редко когда нужно оптимизировать... ;-)
(12) у Чистова тоже не густо.
17. Поручик 4670 09.02.12 02:09 Сейчас в теме
(14) Как раз у Чистова изложено понятно, что это такое и для чего нужно.
(13) В некоторых случаях выигрыш есть, Чистов об этих случаях и рассказывает.
18. catena 110 09.02.12 06:22 Сейчас в теме
(17)В ссылке из (12) выигрыш только в НЕ создании лишнего объекта запрос и менеджера ВТ.

Еще есть обтекаемая фраза "естественно что система при каждом вложенном запросе заново обращается к базе данных для получения данных." - а при использовании вместо вложенного запроса пакетный не обращается? Т.е. запросы выполняется последовательно и все соединения потом отрабатываются с готовыми выборками?

Является ли 1с-ное "поместить... ;" в данном случае аналогом скульного with ... as?
19. fixin 4252 09.02.12 07:19 Сейчас в теме
(17) ну пусть Чистов изложит свое видение на Инфостарте. Я изложил свое.
15. YuliaYVS 27 08.02.12 18:48 Сейчас в теме
Немного в защиту автора: из общения с некотороми человеками, скажем так, возникает проблема,что читать что-то официальное, специально написанное, они не хотят. Вы за них прочитайте и выберете для них главное (с их точки зрения) и не важно, что это это уже написано, и скорее всего проще, доступнее.
Будем надеяться, что у автора не пропадет желание что-то ещё писать и делать.
При составлении инструкции всем угодить нельзя, очень редко бывает, чтобы угодить хотябы половине...
Дон Кихот; nlvhome; Innuil; fixin; +4 Ответить
16. fixin 4252 08.02.12 22:21 Сейчас в теме
(15) официальные инструкции слишком официальны! ;-)
IrinaKostroma; +1 Ответить
20. Ленкина 09.02.12 07:24 Сейчас в теме
По-моему не писала еще пакетные запросы, делаю вложенные, иногда получаются достаточно сложные для чтения и правки, особенно, если приходится к ним возвращаться спустя какое-то время. Так что в таких случаях пакетные наверное удобны... Теперь, если понадобится сложный запрос, попробую сделать пакетный. Так что спасибо автору, что напомнил про такую возможность))
22. fixin 4252 09.02.12 10:42 Сейчас в теме
Лунс, не нервничай, я имел ввиду "Защиту от дурака". Вполне литературный термин...
Можно поправить на глупцов.
23. i132 122 09.02.12 10:54 Сейчас в теме
по моему у Чистова понятней ( http://www.nashe1c.ru/materials-view.jsp?id=47#oultine_7 )

Стоит добавить: пакетные запросы удобны если надо делать запрос к таблице значений или еще не записанному документу

Запрос.Текст =
"Выбрать ТабЧастьТовары.Номенклатура,ТабЧастьТовары.Количество
|Поместить ТабЧасть из &ТабЧать как ТабЧастьТовары;
|Выбрать * из ТабЧасть";
Запрос.УстановитьПараметр("ТабЧать",Док.Товары);
(тоже боян)
24. fixin 4252 09.02.12 11:15 Сейчас в теме
(23) сколько людей - столько мнений!
25. lukoyanovas 13.02.12 07:05 Сейчас в теме
"Запрос писался для системы компоновки, т.е. никаких таблиц значений или временных таблиц применять нельзя в принципе"
Это почему?
26. Поручик 4670 13.02.12 08:45 Сейчас в теме
Я тоже вброшу
(0) >>>> Запрос писался для системы компоновки, т.е. никаких таблиц значений или временных таблиц применять нельзя в принципе
Прямо так и нельзя в принципе? В принципе таблицу значений в СКД передать можно. http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=571359
28. VladKir 13.02.12 09:49 Сейчас в теме
(26) Поручик, если вам это необходимо, то может быть нужно подумать о том, чтобы поменять логику построения?

Пакетные запросы позволили мне сэкономить почти на порядок времени при выполнении огромного запроса с кучей вложенных подзапросов всего лишь грамотным их разнесением. Также можно обращаться в разных пакетах к однажды выполненному запросу, а не выполнять его многократно.

Ну и если данное руководство кому-то поможет, то почему нет? Вдруг кто-то да научится, почитает статью Чистова и начнёт правильно писать, чтобы потом другому человеку не переписывать данный кусок при принятии конфигурации на поддержку?
29. fixin 4252 13.02.12 10:31 Сейчас в теме
(26) когда писал, еще не знал. таблицу значений в СКД передать можно, но менеджера временных таблиц в СКД нет.
30. Поручик 4670 13.02.12 10:36 Сейчас в теме
(29) Впечатление такое, что тебя в погребе держали года три, и вот внезапно мятежный дух восстал из ада.
31. fixin 4252 13.02.12 15:39 Сейчас в теме
(30) неа. просто копипащу со своего сайта... Тут обратная связь имеется, прикольно. Да и рейтинг растет как на доржжах.
27. parvoos 13.02.12 09:22 Сейчас в теме
32. Requiem 36 14.02.12 07:38 Сейчас в теме
Лучше переименовать статью во "Временные таблицы для чайников", потому что пакетные запросы это немного другое. Суть пакетных запросов в том, что можно сделать несколько запросов, не обязательно помещенных во временную таблицу, можно их получить как Запрос.ВыполнитьПакет().
33. fixin 4252 14.02.12 07:59 Сейчас в теме
(32) Буквоедством страдаете? Могли бы сказать без буквоедства, что пакетные запросы не всегда используют временные таблицы, а в данной статье упор в основном сделан на них. ;-)
34. dimk@a 21.03.12 16:12 Сейчас в теме
Ув. fixin, высказываюсь как чайник. Объяснение зачем - понятно, так действительно проще для восприятия. Но пример запроса вгоняет в полнейший ступор. В частности, вот это:
ВЫБРАТЬ Т1.Зн ПОМЕСТИТЬ ВТБуквы ИЗ (ВЫБРАТЬ "А" КАК Зн ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Б") КАК Т1;

вместо <список источников> два объединенных запроса опять же без источников. Может это чисто абстрактный пример, но мой мозг разорван в клочья и не воспринимает дальнейшую информацию. Если бы вы привели полностью весь код запроса - было бы понятнее для чайника ,имхо.
И еще два вопроса по существу, ответа на которые, кстати в желтых книгах тоже нет:
1. при использовании пакетных запросов реально можно не создавать менеджер временных таблиц?
2. если юзать пакетный запрос без временных таблиц, то как обращаться к результатам предыдущего запроса?
35. fixin 4252 21.03.12 21:14 Сейчас в теме
вложенный запрос просто выдает таблицу из одной колонки Зн в которой в первой строке А, во второй строке Б.
1. Да, можно не создавать менеджера, если вам не надо потом получать данные из промежуточных временных таблиц, а достаточно результата
2. А смысл? Результаты промежуточных запросов никуда не сохраняются и к ним доступ не получить. Так что временные таблицы!
36. dimk@a 21.03.12 22:36 Сейчас в теме
(35)
[QUOTE=fixin]вложенный запрос просто выдает таблицу из одной колонки Зн в которой в первой строке А, во второй строке Б. [/IS-QUOTE] нигде не встречал ранее, запомню.
по вопросу 2 - я имел ввиду следующий запрос в пакете. или о чем вы здесь говорите (33):
пакетные запросы не всегда используют временные таблицы
37. fixin 4252 22.03.12 08:12 Сейчас в теме
(36) перефразируй вопрос, не понял
38. dimk@a 22.03.12 08:31 Сейчас в теме
для передачи результатов между запросами внутри пакета всегда используются временные таблицы? или можно без них.
они как я понял могут тормозить работу запроса.
39. fixin 4252 22.03.12 11:10 Сейчас в теме
(38) без них не получится. ;-) но ВТ можно использовать без создания менедежера временных таблиц, да хоть в СКД
40. fixin 4252 13.04.12 17:58 Сейчас в теме
Кстати, статья Чистова в тему: http://pro1c.org.ua/index.php?showtopic=3052
И заметки самому себе:
 ВЫБРАТЬ 1 КАК П Поместить Т;
 ВЫБРАТЬ Т.П Поместить Т1 ИЗ Т; 
 УНИЧТОЖИТЬ Т;
41. ytpyfqrf 5 05.05.12 21:13 Сейчас в теме
мне помогло!!!
Закинул в консоль, просмотрел вложенные запросы, временные таблицы, попробовал свой маленький пример сделать и получилось.
Большое спасибо автору, не пожалел времени и потрудился для меня и таких как я, учтите, что ему это уже не нужно было!
42. nikolaygorbunov 1 19.12.12 11:43 Сейчас в теме
Запрос писался для системы компоновки, т.е. никаких таблиц значений или временных таблиц применять нельзя в принципе.


Почему нельзя, можно, советую Хрусталеву почитать.
43. nikolaygorbunov 1 19.12.12 11:45 Сейчас в теме
+(42) Статья кстати толковая, спасибо.
44. GetNight 46 23.03.15 14:35 Сейчас в теме
Бывает, что не хватает самой малости, чтобы понять какую-нибудь в принципе простую вещь.
После чего ты никак не можешь понять, почему ты не понимал этого раньше.

Спасибо тем, кто еще помнит, что мешало разобраться с темой, и тратят свое личное время на то, чтобы помочь другим преодолеть этот шаг.

В то же время господа-профессионалы любят стебаться над чужими статьями, сами при этом ничего не пишут, или пишут на таком марсианском языке, что новичкам и чайникам проще искать решение в другом месте, чем выпрашивать совет мелкими крошками, как милостыню.

От меня лично - большое спасибо, вроде не чайник, но ранее не пересекался с темой, натолкнула на новые мысли.
45. grey_yes 12 08.06.15 16:16 Сейчас в теме
(44) getnight, просто поддержу Ваши мысли....

хотя кмк автору следовало бы более подробнее расписать для "чайников" смысл запроса...
читателю сначала надо врубиться в суть примера, и только потом понять "простоту" пакетного запроса
46. fixin 4252 08.06.15 16:48 Сейчас в теме
(45) я гений 1С, не всегда могу разжевать для посредственностей, но стараюсь. ;-)
47. anig99 2843 08.06.15 17:06 Сейчас в теме
(46) Фиксин как всегда жжот (:
49. 2tvad 70 09.07.19 13:52 Сейчас в теме
Для стандартной УТ, Бух и т.д. можно посмотреть в отладчике содержимое временной таблицы в пакетном запросе вот так:

ОбщегоНазначенияУТ.ПоказатьВременнуюТаблицу(<Запрос>, <Наименование вн. таблицы>)
Оставьте свое сообщение