Как исправить ошибку «Таблица не найдена» в обработке проведения 1С?

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

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

Причина возникновения ошибки

В представленном коде основная проблема заключается в избыточности: создается несколько объектов Запрос, каждый из которых пытается работать с МенеджерВременныхТаблиц, но при этом нарушается целостность передачи данных. Ошибка «Таблица не найдена» появляется потому, что во втором запросе (Запрос2) происходит обращение к таблице, которая была создана в первом запросе (Запрос), но из-за путаницы в именах объектов и переменных платформа не видит результат выполнения.

Шаг 1: Оптимизация работы с объектом Запрос

Первое правило эффективного проведения — не плодите сущности без необходимости. Вам не нужно создавать Запрос2 и Запрос3. Достаточно создать один объект Запрос, один раз присвоить ему МенеджерВременныхТаблиц и последовательно изменять его свойство Текст, либо использовать пакетный запрос.

Рассмотрим, как правильно организовать код:


// Создаем менеджер временных таблиц один раз на всю процедуру
МенеджерВТ = Новый МенеджерВременныхТаблиц;

// Используем один объект Запрос
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

// Первый запрос: создаем временную таблицу
Запрос.Текст = 
"ВЫБРАТЬ ...
 ПОМЕСТИТЬ НоменклатураДокумента
 ИЗ ...";
Запрос.Выполнить();

// Второй запрос: обращаемся к уже созданной временной таблице
Запрос.Текст = 
"ВЫБРАТЬ ...
 ИЗ НоменклатураДокумента КАК НоменклатураДокумента
 ...";
Результат = Запрос.Выполнить();

Шаг 2: Устранение лишних обращений

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

  1. Убедитесь, что имя временной таблицы в ПОМЕСТИТЬ в точности совпадает с именем в блоке ИЗ следующих запросов.
  2. Проверьте, не удалили ли вы случайно логику заполнения таблицы до того, как пытаетесь ее считать.
  3. Если таблица НоменклатураДокумента не заполнилась из-за ошибки в ГДЕ или ЛЕВОЕ СОЕДИНЕНИЕ, последующие запросы к ней закономерно выдадут ошибку отсутствия таблицы.

Шаг 3: Использование пакетных запросов

Наилучшим способом работы в процедуре ОбработкаПроведения является использование пакетного запроса. Это позволяет передать платформе весь сценарий работы с данными за один раз. Разделителем запросов в пакете является символ ;.

Преимущества этого подхода:

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


Запрос.Текст = 
"ВЫБРАТЬ ... ПОМЕСТИТЬ ВТ_Данные ...;
 ВЫБРАТЬ ... ИЗ ВТ_Данные КАК ВТ ...;
 ВЫБРАТЬ ... ИЗ ВТ_Данные КАК ВТ ...";

Полезные советы для отладки

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

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

← На главную