Ошибка 1С: Ошибка при вызове метода контекста (Выгрузить) — Решение
- Аварийное завершение при выполнении
РезультатЗапроса.Выгрузить()илиТабличнаяЧасть.Выгрузить(). - Текст сбоя:
{Модуль(Строка)}: Ошибка при вызове метода контекста (Выгрузить): Недостаточно памяти / Неверный тип группировки. - Сбой при конвертации иерархических выборок в Таблицу или Дерево значений.
1. Причины возникновения сбоев метода Выгрузить()
Метод Выгрузить() выполняет аллокацию и трансформацию данных из внутренних структур платформы в пользовательские коллекции. Ошибка возникает в следующих случаях:
- Исчерпание оперативной памяти (Out Of Memory): Попытка выгрузить многомиллионный результат запроса в одну
ТаблицуЗначенийна 32-битном рабочем процессе сервера 1С (rphost); - Конфликт типов выгрузки: Вызов
Выгрузить(ТипОбходаЗапроса.ПоГруппировкам)в объект, не поддерживающий иерархию (например, попытка записать дерево в плоскую таблицу); - Попытка выгрузки табличной части с указанием массива колонок, имена которых не существуют в метаданных объекта.
2. Безопасные паттерны выгрузки данных
Паттерн 1: Защита от OOM через порционную обработку выборки
Если запрос возвращает большой массив данных, откажитесь от Выгрузить() в пользу поточной выборки:
// ВМЕСТО ОПАСНОГО:
// Таблица = Запрос.Выполнить().Выгрузить(); // Может уронить рабочий процесс rphost по памяти!
// ИСПОЛЬЗУЙТЕ ВЫБОРКУ:
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Поточная обработка каждой строки без переполнения RAM
ОбработатьЗапись(Выборка.Ссылка);
КонецЦикла;Паттерн 2: Выгрузка колонок Табличной Части с проверкой состава
// Безопасная выгрузка конкретных колонок:
КолонкиДляВыгрузки = "Номенклатура, Количество, Сумма";
ТаблицаТоваров = ЭтотОбъект.Товары.Выгрузить(, КолонкиДляВыгрузки);Паттерн 3: Корректная выгрузка дерева значений из запроса с итогами
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Номенклатура.Родитель КАК Группа,
| Номенклатура.Ссылка КАК Элемент
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ИТОГИ ПО
| Группа");
Результат = Запрос.Выполнить();
// Для получения дерева значений необходимо передавать правильный тип обхода:
ДеревоЗначений = Результат.Выгрузить(ТипОбходаЗапроса.ПоГруппировкам); Частые вопросы (FAQ)
В чем разница между выгрузкой в ТаблицуЗначений и ДеревоЗначений?
ТаблицаЗначений представляет собой плоский двумерный массив строк. ДеревоЗначений поддерживает неограниченную иерархическую вложенность строк (коллекция Строки у каждой строки) и требует запросов с секцией ИТОГИ.
Можно ли вызвать метод Выгрузить() на клиенте в тонком клиенте?
Объект 'ТаблицаЗначений' недоступен в контексте тонкого клиента. Метод Выгрузить() для табличных частей и результатов запросов может выполняться строго на сервере (&НаСервере).
Как выгрузить только строки, удовлетворяющие условию, без запроса?
Используйте метод НайтиСтроки(СтруктураОтбора) на табличной части, либо выгрузите строки методом Скопировать(СтруктураОтбора).
Почему выгрузка ТаблицыЗначений на клиенте вызывает ошибку?
Тип данных 'ТаблицаЗначений' является чисто серверным типом и не может передаваться на тонкий клиент без предварительной сериализации в Массив Структур или ДанныеФормыКоллекция.