База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Почему возникает ошибка «Таблица не найдена ВТ_Врем» в 1С? › Ответ в теме: Почему возникает ошибка «Таблица не найдена ВТ_Врем» в 1С?
Ошибка «Таблица не найдена ВТ_Врем» означает, что в контексте выполнения запроса СКД или обычного запроса 1С нет временной таблицы с именем ВТ_Врем.
Причина: вы пытаетесь использовать временную таблицу, которую создали в запросе с ПОМЕСТИТЬ, но не передали её в СКД или не объявили в менеджере временных таблиц.
Как правильно работать с временными таблицами в запросах и СКД:
1. Если вы используете обычный запрос (не СКД), то запрос с ПОМЕСТИТЬ создаёт временную таблицу только внутри этого запроса. Чтобы использовать её во втором запросе, нужно либо объединить запросы в один, либо использовать менеджер временных таблиц.
2. Если вы используете СКД (систему компоновки данных), то для использования временных таблиц нужно:
— Создать объект МенеджерВременныхТаблиц
— Заполнить его нужными временными таблицами (например, из таблиц значений)
— Передать этот менеджер в ПроцессорКомпоновкиДанных при инициализации
3. В вашем случае, если &ТЗ — это параметр типа ТаблицаЗначений, то сначала нужно создать временную таблицу ВТ_Врем в менеджере временных таблиц, а потом в запросе СКД обращаться к ней.
Пример кода в модуле отчёта (процедура ПриКомпоновкеРезультата):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; // Создаём менеджер временных таблиц МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; // Заполняем временную таблицу из параметра &ТЗ ЗапросВТ = Новый Запрос; ЗапросВТ.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; ЗапросВТ.Текст = "ВЫБРАТЬ | ТЗ.Спецификация, | ТЗ.Номенклатура, | ТЗ.ЕдиницаИзмерения, | ТЗ.Количество, | ТЗ.МаркаСтали, | ТЗ.НомерГОСТа, | ТЗ.Характеристика, | ТЗ.СтатьяКалькуляции, | ТЗ.ПрименениеМатериалаРедактирование |ПОМЕСТИТЬ ВТ_Врем |ИЗ | &ТЗ КАК ТЗ"; ЗапросВТ.УстановитьПараметр("ТЗ", ПараметрТЗ); // ПараметрТЗ - таблица значений с данными ЗапросВТ.Выполнить(); // Инициализируем компоновщик с менеджером временных таблиц ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина, , МенеджерВременныхТаблиц); // Далее выполняете запросы СКД, где можно использовать ВТ_Врем // ... КонецПроцедуры |
4. В запросе СКД используйте таблицу ВТ_Врем как обычную таблицу:
|ВЫБРАТЬ
| ВТ_Врем.Спецификация,
| ВТ_Врем.Номенклатура,
| СпрНоменклатура.нсиКодНСИ КАК КодЕСНСИ,
| …
|ИЗ
| ВТ_Врем КАК ВТ_Врем
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО ВТ_Врем.Номенклатура = СпрНоменклатура.Ссылка
—
Если не используете СКД, а обычный запрос, то нельзя разделять запросы с ПОМЕСТИТЬ и потом использовать временную таблицу во втором запросе — это разные контексты.
—
Рекомендую посмотреть подробный пример и объяснение здесь:
https://helpf.pro/faq/view/905.html
https://infostart.ru/1c/articles/1229680/
—
Если нужна помощь с конкретным кодом — приложите код процедуры, где формируете запрос и инициализируете СКД.