Из собственного пустого набора получаем настоящую модель ДанныеФормыСтруктураСКоллекцией и меняем только её учебные строки.
Где и как запускать
Полный модуль управляемой формы своей внешней обработки, ПриСозданииНаСервере.
Подготовка
Используйте отдельную свою конфигурацию УчебнаяКонфигурацияСинтаксиса. В Конфигураторе создайте независимый непериодический регистр сведений УчебныеСтроки. Не используйте существующий рабочий регистр.
Добавьте измерения Номер типа Число (10, 0) и Товар типа Строка (64). Добавьте ресурсы Количество типа Число (10, 0), Сумма типа Число (12, 2). Обновите только свою учебную конфигурацию базы.
Создайте собственную внешнюю обработку с пустой управляемой основной формой. Реквизит УчебныеЗаписи и таблицу вручную не добавляйте: их создаёт код.
Вставьте весь модуль выбранного урока. В свойствах формы назначьте событию ПриСозданииНаСервере одноимённую процедуру. Сохраните EPF и откройте её в своей учебной базе.
Набор создаётся пустым и заполняется только в памяти. В коде нет Прочитать, Записать, транзакций, привилегированного режима, запросов, файлов или сети. Таблица на форме только для просмотра.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Реквизиты = Новый Массив;
Реквизиты.Добавить(Новый РеквизитФормы("УчебныеЗаписи",
Новый ОписаниеТипов("РегистрСведенийНаборЗаписей.УчебныеСтроки")));
ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
Набор = РегистрыСведений.УчебныеСтроки.СоздатьНаборЗаписей();
Для Каждого ИсходнаяСтрока Из СтрРазделить("1|Книга|3|750;2|Ручка|1|50;3|Коробка|2|60", ";") Цикл
Поля = СтрРазделить(ИсходнаяСтрока, "|");
Запись = Набор.Добавить();
Запись.Номер = Число(Поля[0]);
Запись.Товар = Поля[1];
Запись.Количество = Число(Поля[2]);
Запись.Сумма = Число(Поля[3]);
КонецЦикла;
ЭтаФорма.ЗначениеВРеквизитФормы(Набор, "УчебныеЗаписи");
Записи = ЭтаФорма.УчебныеЗаписи;
Если ТипЗнч(Записи) <> Тип("ДанныеФормыСтруктураСКоллекцией") Тогда
ВызватьИсключение "Ожидалась модель набора записей, а не обычная таблица формы";
КонецЕсли;
Сообщить(Записи.Количество() = 3);
Сообщить(Записи.Итог("Сумма") = 860);
Добавленная = Записи.Добавить();
Добавленная.Номер = 4;
Добавленная.Товар = "Пакет";
Добавленная.Количество = 2;
Добавленная.Сумма = 40;
Вставленная = Записи.Вставить(1);
Вставленная.Номер = 5;
Вставленная.Товар = "Образец";
Вставленная.Количество = 1;
Вставленная.Сумма = 10;
Сообщить(Записи.Количество() = 5);
Сообщить(Записи.Индекс(Вставленная) = 1);
Сообщить(Записи.Получить(1) = Вставленная);
Сообщить(Записи.Итог("Сумма") = 910);
Записи.Сдвинуть(Записи.Индекс(Добавленная), -4);
Сообщить(Записи.Получить(0) = Добавленная);
Записи.Удалить(Записи.Индекс(Вставленная));
Сообщить(Записи.Количество() = 4);
Записи.Удалить(Добавленная);
Сообщить(Записи.Количество() = 3);
Сообщить(Записи.Итог("Сумма") = 860);
Сообщить(Записи.Получить(0).Товар = "Книга");
Таблица = ЭтаФорма.Элементы.Добавить("ТаблицаУчебныхЗаписей", Тип("ТаблицаФормы"));
Таблица.ПутьКДанным = "УчебныеЗаписи";
Таблица.Заголовок = "Только собственные строки в памяти — регистр не записывается";
Таблица.ТолькоПросмотр = Истина;
Таблица.АвтоВводНезаполненного = Ложь;
Таблица.АвтоВводНовойСтроки = Ложь;
Для Каждого ИмяКолонки Из СтрРазделить("Номер,Товар,Количество,Сумма", ",") Цикл
Поле = ЭтаФорма.Элементы.Добавить("УчебноеПоле" + ИмяКолонки, Тип("ПолеФормы"), Таблица);
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "УчебныеЗаписи." + ИмяКолонки;
Поле.Заголовок = ИмяКолонки;
КонецЦикла;
КонецПроцедурыРазбор по шагам
Создать новый набор собственной схемы, заполнить Книгу 750, Ручку 50 и Коробку 60. Передать его в реквизит формы; проверить именно тип модели набора.
Добавить Пакет в конец, вставить Образец по индексу 1. Количество становится 5, сумма 910.
Переместить Пакет с позиции 4 в начало. Сдвинуть принимает индекс и смещение, не ссылку на строку.
Удалить Образец по актуальному индексу, Пакет — по объекту строки. Это два варианта Удалить одной модели.
Показать исходные три строки. Ни один вызов не записывает набор в регистр базы.
Как проверить результат
Все булевы сообщения Истина. В итоге видны Книга/3/750, Ручка/1/50, Коробка/2/60.
Итог 910 относится к временным пяти строкам; итог 860 — к окончательным трём.
Ожидаемый результат
Полный жизненный цикл учебных строк на настоящей модели набора, а не на подставном входном объекте.
На что обратить внимание
Не путайте ДанныеФормыСтруктураСКоллекцией с ДанныеФормыКоллекция: первая моделирует набор записей.
Индекс меняется после вставки и сдвига. Перед удалением по индексу вычисляйте его заново.
ТолькоПросмотр ограничивает пользовательское редактирование элемента, но не серверное изменение модели. Это не запрет записи базы и не права доступа.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.