Сохранить выбранный элемент при сортировке и изменить только копию списка

Учебные задачи

Идентификатор элемента отличается от его позиции. Временный способ доставки удаляется; исходный список остаётся из трёх способов.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Тело серверной процедуры учебной обработки. Все три способа создаются самим примером в памяти.

  2. Не подставляйте рабочий СписокЗначений вместо самостоятельно созданного Способы.

Способы = Новый СписокЗначений;
Способы.Добавить("pickup", "Самовывоз");
Способы.Добавить("courier", "Курьер");
Способы.Добавить("post", "Почта");
Самовывоз = Способы.НайтиПоЗначению("pickup");
Идентификатор = Самовывоз.ПолучитьИдентификатор();
Способы.СортироватьПоПредставлению(НаправлениеСортировки.Возр);
Сообщить(Способы.НайтиПоИдентификатору(Идентификатор) = Самовывоз);
Сообщить(Способы.Получить(0).Представление = "Курьер");
Способы.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
Сообщить(Способы.Получить(0).Значение = "post");
Копия = Способы.Скопировать();
Проба = Копия.Вставить(1, "temp", "Пробный способ");
Сообщить(Копия.Индекс(Проба) = 1);
Копия.Сдвинуть(Проба, 1);
Сообщить(Копия.Индекс(Проба) = 2);
Копия.Удалить(Проба);
Копия.ЗаполнитьПометки(Ложь);
Копия.НайтиПоЗначению("pickup").Пометка = Истина;
Сообщить(Не Способы.НайтиПоЗначению("pickup").Пометка);
Сообщить(Копия.НайтиПоЗначению("pickup").Пометка);
Копия.Очистить();
Сообщить(Копия.Количество() = 0);
Сообщить(Способы.Количество() = 3);

Разбор по шагам

  1. Находим Самовывоз по устойчивому коду и сохраняем идентификатор самого элемента.

  2. Сортировка по подписи ставит Курьер первым. По коду убыванию — post. Поиск по идентификатору не зависит от этих позиций.

  3. Скопировать создаёт отдельный список. Временный элемент вставляем и переставляем только в копии.

  4. Пометки принадлежат элементам. Изменение пометки копии не должно менять пометку исходного списка.

  5. Очищаем только копию. Исходные три способа остаются доступными.

Как проверить результат

  1. Все девять булевых проверок Истина.

  2. Оригинал содержит три способа без пометки Самовывоза, копия в конце пустая.

Ожидаемый результат

Показаны сортировка, устойчивый идентификатор, позиции и независимая копия списка.

На что обратить внимание

  1. Идентификатор используется в пределах соответствующего списка; это не UUID значения и не переносимый ключ между копиями.

  2. Копирование коллекции не означает глубокое копирование произвольных ссылочных объектов в Значение; в этом уроке значения — строки.

  3. После очистки нельзя обращаться к удалённым элементам копии.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.