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

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

Работа с временными таблицами (ВТ) — это неотъемлемая часть разработки сложных отчетов и обработок в системе 1С:Предприятие. Часто возникают ситуации, когда структура запроса уже создана, но в процессе доработки требуется добавить новое поле или изменить существующее именно во временной таблице. В интерфейсе конструктора запросов, особенно в «Обычных формах», это может вызвать затруднения у начинающих разработчиков. Рассмотрим подробно, как правильно редактировать временные таблицы и изменять их состав.

Понимание структуры пакетного запроса

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

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

Шаг 1: Переход к запросу-создателю через пакет запросов

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

  1. В верхней части окна конструктора запросов найдем закладку «Пакет запросов». Если вы работаете в режиме одного запроса, эта вкладка может быть не видна, но для временных таблиц она обязательна.
  2. Перед нами откроется список всех запросов, входящих в пакет. Каждая строка — это отдельный этап получения данных.
  3. Внимательно изучим колонку «Имя временной таблицы». Нам необходимо выбрать ту строку, в которой указано имя таблицы, которую мы хотим отредактировать.
  4. Дважды щелкнем по этой строке или нажмем кнопку редактирования (в некоторых версиях интерфейса это кнопка с иконкой карандаша).

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

Шаг 2: Добавление нового реквизита во временную таблицу

Рассмотрим процесс добавления нового поля. Находясь в нужном сегменте пакета (который создает ВТ), перейдем на закладку «Поля». Здесь мы можем:

После внесения изменений, если мы вернемся к основному (финальному) запросу пакета через ту же вкладку «Пакет запросов», мы увидим, что в нашей временной таблице появилось новое доступное поле.

Шаг 3: Настройка параметров временной таблицы на закладке «Дополнительно»

Выясним причину, по которой запрос вообще считается «создающим временную таблицу». Это определяется настройками на закладке «Дополнительно». Разберем по шагам, что там должно быть указано:

  1. Перейдите на вкладку «Дополнительно» внутри того запроса пакета, который формирует данные.
  2. Найдите переключатель «Тип запроса». Для создания ВТ должен быть выбран пункт «Создание временной таблицы».
  3. В поле ниже должно быть вписано имя таблицы (например, ВТ_ОстаткиТоваров).
  4. Здесь же можно настроить индексирование. Если вы планируете в дальнейшем соединять эту временную таблицу с другими по какому-то полю (например, Номенклатура), крайне рекомендуется отметить это поле в списке индексируемых полей. Это существенно ускорит выполнение запроса.

Работа с внешними временными таблицами (Менеджер ВТ)

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

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

В конструкторе запросов (обычно через контекстное меню или специальную кнопку на панели инструментов) выберите пункт «Описание временных таблиц». Здесь вы можете вручную добавить таблицу, задать ей имя и перечислить имена и типы всех ее полей. После этого конструктор позволит выбирать эти поля, как если бы это была реальная таблица базы данных. Важно: это описание служит только для удобства работы в конструкторе и не меняет структуру реальной таблицы в памяти сервера.

Ограничения и типизация данных

При добавлении полей во временную таблицу помните о некоторых ограничениях системы 1С. Посмотрим на наиболее частые ошибки:

ВЫРАЗИТЬ(Таблица.Комментарий КАК СТРОКА(200))

Это позволит системе четко определить размер поля в памяти и успешно создать временную таблицу.

Использование «Схемы запроса» для сложных случаев

Если визуальный конструктор по каким-то причинам не позволяет реализовать вашу задумку (например, при динамическом формировании запроса в коде), программисты используют объект СхемаЗапроса. Проанализируем пример кода, который программно добавляет колонку во временную таблицу:


Схема = Новый СхемаЗапроса;
Схема.УстановитьТекстЗапроса(ТекстЗапроса);

// Получаем первый запрос пакета (допустим, он создает ВТ)
ЗапросВыбора = Схема.ПакетЗапросов[0]; 
НоваяКолонка = ЗапросВыбора.ВыбираемыеПоля.Добавить("Источник.НовыйРеквизит");
НоваяКолонка.Псевдоним = "НовыйРеквизит";

ТекстЗапроса = Схема.ПолучитьТекстЗапроса();

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

Заключение

Мы рассмотрели основной механизм редактирования временных таблиц в конструкторе запросов 1С. Главный секрет успеха заключается в правильной навигации по пакету запросов. Помните, что для изменения состава колонок ВТ нужно редактировать именно тот запрос, где эта таблица создается, а не тот, где она используется. Не забывайте про индексирование важных полей и использование функции ВЫРАЗИТЬ для строковых данных, чтобы избежать ошибок выполнения.

← На главную