Проверяем отличие данных от пустой схемы колонок, затем загрузку таблицы и массива количеств.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую базу, имя корневой конфигурации УчебныеОстатки85. Не добавляйте эти объекты в УТ/КА2/УНФ/БП. Режим управления блокировкой данных конфигурации — Управляемый.
Документы → Добавить: УчебноеДвижение85. Номер: Строка длиной 40, автонумерация выключена. Модули объекта и менеджера оставьте пустыми; не добавляйте обработчики, подписки и обязательные пользовательские реквизиты.
Регистры накопления → Добавить: УчебныеОстатки85. Вид регистра Остатки. Единственное измерение КодТовара: Строка 50, индексировать, проверка заполнения Показывать ошибку. Единственный ресурс Количество: Число 12,3, неотрицательное. Дополнительных реквизитов нет.
В списке регистраторов выберите только собственный документ УчебноеДвижение85. Оставьте модули регистра пустыми, использование итогов включённым. Планы обмена, разделители, историю данных и фоновые задания для урока не создавайте.
Обновите конфигурацию базы данных. Создайте серверный общий модуль УчебныеЗадачи и команду собственной обработки. Фрагмент вставьте внутрь ВыполнитьПример() Экспорт; запускайте задачи по отдельности.
Первые задачи работают с незаписанными наборами. Только задачи с пометкой «в собственной транзакции» временно записывают два собственных документа и движения, затем обязательно отменяют транзакцию. В рабочей базе этот код не запускайте.
Если Метаданные.Документы.Количество() <> 1
Или Метаданные.РегистрыНакопления.Количество() <> 1
Или Метаданные.Документы.Найти("УчебноеДвижение85") = Неопределено Тогда
ВызватьИсключение "Разрешены только собственный учебный документ и регистр";
КонецЕсли;
Описание = Метаданные.РегистрыНакопления.Найти("УчебныеОстатки85");
Если Описание = Неопределено Тогда
ВызватьИсключение "Сначала создайте собственный учебный регистр";
КонецЕсли;
Если Описание.ВидРегистра <> Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки
Или Описание.Измерения.Количество() <> 1
Или Описание.Ресурсы.Количество() <> 1
Или Описание.Реквизиты.Количество() <> 0
Или Описание.Измерения.Найти("КодТовара") = Неопределено
Или Описание.Ресурсы.Найти("Количество") = Неопределено Тогда
ВызватьИсключение "Нужен регистр остатков с КодТовара и Количество";
КонецЕсли;
Менеджер = РегистрыНакопления.УчебныеОстатки85;
Код = "TRAIN-" + Строка(Новый УникальныйИдентификатор);
СсылкаНаНесохраненный = Документы.УчебноеДвижение85.ПолучитьСсылку(Новый УникальныйИдентификатор);
Набор = Менеджер.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(СсылкаНаНесохраненный);
Приход = Набор.ДобавитьПриход();
Приход.Период = Дата(2026, 9, 15, 10, 0, 0);
Приход.Регистратор = СсылкаНаНесохраненный;
Приход.Активность = Истина;
Приход.КодТовара = Код;
Приход.Количество = 3;
Расход = Набор.ДобавитьРасход();
Расход.Период = Дата(2026, 9, 15, 11, 0, 0);
Расход.Регистратор = СсылкаНаНесохраненный;
Расход.Активность = Истина;
Расход.КодТовара = Код;
Расход.Количество = 1;
Таблица = Набор.Выгрузить();
Схема = Набор.ВыгрузитьКолонки("КодТовара,Количество");
Сообщить(Таблица.Количество() = 2);
Сообщить(Схема.Количество() = 0);
Сообщить(Схема.Колонки.Количество() = 2);
Таблица.Получить(0).Количество = 10;
Таблица.Получить(1).Количество = 4;
Приемник = Менеджер.СоздатьНаборЗаписей();
Приемник.Отбор.Регистратор.Установить(СсылкаНаНесохраненный);
Приемник.Загрузить(Таблица);
Сообщить(Приемник.Итог("Количество") = 14);
ОстатокВПамяти = 0;
Для Каждого Движение Из Приемник Цикл
Если Не Движение.Активность Тогда
Продолжить;
КонецЕсли;
Если Движение.ВидДвижения = ВидДвиженияНакопления.Приход Тогда
ОстатокВПамяти = ОстатокВПамяти + Движение.Количество;
Иначе
ОстатокВПамяти = ОстатокВПамяти - Движение.Количество;
КонецЕсли;
КонецЦикла;
Сообщить(ОстатокВПамяти = 6);
Сообщить(Набор.Итог("Количество") = 4);
НовыеКоличества = Новый Массив;
НовыеКоличества.Добавить(8);
НовыеКоличества.Добавить(3);
Приемник.ЗагрузитьКолонку(НовыеКоличества, "Количество");
ПроверкаКолонки = Приемник.ВыгрузитьКолонку("Количество");
Сообщить(ПроверкаКолонки.Получить(0) = 8);
Сообщить(ПроверкаКолонки.Получить(1) = 3);
ОстатокВПамяти = 0;
Для Каждого Движение Из Приемник Цикл
Если Не Движение.Активность Тогда
Продолжить;
КонецЕсли;
Если Движение.ВидДвижения = ВидДвиженияНакопления.Приход Тогда
ОстатокВПамяти = ОстатокВПамяти + Движение.Количество;
Иначе
ОстатокВПамяти = ОстатокВПамяти - Движение.Количество;
КонецЕсли;
КонецЦикла;
Сообщить(ОстатокВПамяти = 5);Разбор по шагам
Выгрузить копирует свои строки со всеми колонками. ВыгрузитьКолонки создаёт только схему выбранных двух колонок, без строк.
Таблица содержит направление и остальные стандартные поля. Меняем только количества 10 и 4 и загружаем в новый набор.
Загрузить заменяет строки приёмника, но не сохраняет их в регистр. Исходный набор остаётся 3/1.
Массив 8/3 загружается по текущему порядку строк, а не по коду товара. Выгружаем колонку назад для контроля.
Суммы 14 и 11 не являются остатками. Расчёт направления даёт сначала 6, затем 5.
Как проверить результат
Девять сравнений Истина; остаток приёмника после массива равен 5.
Исходный набор имеет количества 3/1, а пустая схема — две колонки и ноль строк.
Ожидаемый результат
Данные проходят через независимую таблицу и колонку массива; источник не изменён и запись в базу не выполнялась.
На что обратить внимание
Загрузить удаляет прежние строки приёмника в памяти. Здесь приёмник новый и собственный.
После сортировки или удаления строк массив может попасть не тем движениям. Для импорта сопоставляйте бизнес-ключи явно.
Стандартный НомерСтроки из выгрузки не становится редактируемым только от наличия колонки в таблице.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.