1с запрос временная таблица как параметр

Использование временных таблиц

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. В общем случае, временные таблицы рекомендуется использовать для повышения производительности и стабильности выполнения запросов. Их можно использовать для других целей (например, для улучшения архитектуры кода), но при этом, нужно понимать, что это может в некоторых случаях приводить к снижению производительности.

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

2.1. Не следует создавать временные таблицы с очень большим объемом данных (сотни тысяч записей). Иначе это приведет к существенному снижению производительности при записи и исчерпанию свободного места на диске. Если алгоритму требуется работать с большим объемом данных, то он должен выполнять обработку этих данных порциями.

2.2. Следует максимально ограничивать количество данных, выбираемых во временную таблицу. Не следует помещать во временную таблицу больше данных, чем требуется последующим запросам.

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

2.4. Не следует создавать и удалять временные таблицы в цикле, если можно создать одну временную таблицу до выполнения цикла.

2.5. Не следует копировать одну временную таблицу в другую только ради того, чтобы переименовать первую таблицу во вторую. Вместо этого, следует передавать имя таблицы.

3. Временные таблицы следует всегда индексировать, когда это даст прирост производительности.

3.1. Индекс следует строить если:

3.2. Маленькие временные таблицы индексировать не нужно (менее 1000 записей).

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

Источник

Временные таблицы в запросах 1С 8.3

Временная таблица

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

Создается временная таблица с помощью ключевого слова ПОМЕСТИТЬ:

В данном примере выборка из справочника Бренды будет помещена во временную таблицу ВТБренды, а уже потом данные будут выбраны из временной таблицы.

При создании новой временной таблицы она не сохраняется в базе данных. В файловой базе временные таблицы хранятся в оперативной памяти, в MS SQL Server в специальной служебной базе TempDB.

Читайте также:  Uv disharge designed with что это такое

Также временные таблицы можно использовать для оптимизации работы СУБД. Если вместо временной таблицы использовать вложенный запрос, то оптимизатор не будет знать сколько строк в этой таблице и не сможет оптимизировать план запроса. В случае использования временной таблицы количество строк будет известно, что позволит лучше оптимизировать план запроса.

Но у временных таблиц есть и свои минусы:

Менеджер временных таблиц

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

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

Источник

Профессия — 1С

рубрики: Конструктор запросов | Дата: 4 августа, 2017

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

Как поместить результат запроса во временную таблицу

Создадим с помощью конструктора вот такой простейший запрос:

Соответственно текст запроса будет выглядеть следующим образом:

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

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

Как прочитать временную таблицу из другого запроса

Очень часто при проектировании запросов большого объема возникает необходимость передавать временные таблицы из одного запроса в другой с использованием объекта МенеджерВременныхТаблиц. То есть вот такая ситуация:

Чтобы выбрать данные из временной таблицы, необходимо на закладке Таблицы и поля нажать на кнопку Создать описание временной таблицы и в открывшейся форме заполнить наименование таблицы и ее поля:

Как создать временную таблицу из параметра запроса

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

В этом случае нам надо сначала создать описание временной таблицы. А затем прописать ее имя на закладке Дополнительно.

То есть получается комбинация двух предудущих методов. Причем знак амперсанта можно также проставить в поле с именем таблицы:

Источник

Временные таблицы запроса

Решил опубликовать эту маленькую статью для самых начинающих программистов 1С. Особенно для тех, кто часто сталкивается с отладкой запросов, а именно временных таблиц этих запросов. Сложность решений продуктов 1С сейчас заключается в том, что код нас уводит далеко вглубь общих модулей, перебрасывая из одного в другой и формируя в них временные таблицы запроса. Назад мы получаем кучу временных таблиц запроса, которые очень неудобно просматривать в отладчике. Для этого я и предлагаю свое ненавязчивое решение в виде расширения.

Читайте также:  ростелеком личный кабинет вход по номеру телефона без пароля и логина воронежская область

Для примера я взял конфигурацию ERP 1C. Допустим мне надо при открытии формы сотрудника и получении его кадровых данных и их анализа что-то изменить. Для этого, мне надо увидеть какие временные таблицы использует запрос, что в этих таблицах. Поехали.

Подключаю расширение, надеюсь, как это делать, не стоит рассказывать.

Для примера я нашел модуль, где формируется запрос с кадровыми данными сотрудника, вот он:

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

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

Так как мы люди ленивые, то я в своем расширении это упростил и теперь достаточно в окне выражений набрать следующее:

КС_МенеджерВременныхТаблиц.ПолучитьСписокТаблиц(Запрос.МенеджерВременныхТаблиц)

Вот как это выглядит:

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

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

Запрос.МенеджерВременныхТаблиц.Таблицы[2].ПолучитьДанные().Выгрузить()

Неудобство в том, что надо всегда понимать какой индекс к какой таблице относится.

Читайте также:  на ногах полопались сосуды что это

Для лентяев, в своем расширении достаточно написать эту команду

КС_МенеджерВременныхТаблиц.ПолучитьДанныеТаблицы(Запрос.МенеджерВременныхТаблиц, 2)

Или, чего нет у 1С, вместо индекса таблицы можем передать имя таблицы

КС_МенеджерВременныхТаблиц.ПолучитьДанныеТаблицы(Запрос.МенеджерВременныхТаблиц, «ВТКадровыеДанныеСотрудников»)

Получим то же самое, но зная имя таблицы не надо искать его индекс

Подведем итог. Расширение использует две функции ПолучитьСписокТаблиц и ПолучитьДанныеТаблицы. Функции можно запускать в любом месте и получать данные временных таблиц. Это на треть сокращает время, чем при поиске стандартным методом.

Прилагаю скрин самих функций, надеюсь Вам не составит труда это быстро сделать. Сам общий модуль Серверный

Проверено на платформе 8.3.18.1289.

Всем спасибо, надеюсь, начинающим это поможет!

Источник

Временные таблицы 1С

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

Временные таблицы в 1С

Временные таблицы — это объекты СУБД, никаких временных таблиц на сервере 1С нет, не путайте пожалуйста, их с таблицами значений.

Временные таблицы хранятся в объекте типа МенеджерВременныхТаблиц. Когда этот объект уничтожается, уничтожаются и временные таблицы.

Физически временные таблицы по умолчанию создаются в оперативной памяти, а именно в буферном кэше.

Конечно, есть исключения. Например, если таблица слишком большая, то сервер может принять решение сбросить ее на диск. Также возможна ситуация, когда сервер по каким-либо причинам решил отдать память под другие данные, тогда таблица тоже будет записана на диск.

Почему таблица создается именно в памяти? Тут все очевидно, дело в производительности, думаю не стоит объяснять, что чтение из оперативной памяти гораздо быстрее чтения с диска, даже если этот диск SSD.
Чтобы создать временную таблицу, используется ключевое слово «ПОМЕСТИТЬ», например:

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

Готовую таблицу значений из памяти можно выгружать в менеджер временных таблиц запроса. Единственное условие — колонки таблицы значений должны быть типизированными, т.е. иметь тип. Вот пример, демонстрирующий это:

Вместо перечисления списка полей можно использовать «ВЫБРАТЬ *».

Если есть ТЗ, в каждой колонке которой значения всего одного типа, для типизации колонок, можно воспользоваться функцией:

Остались вопросы? Спрашивайте в комментариях.

Источник

Образовательный портал