Состав пар нового контейнера независим, но вложенную структуру товара нужно копировать отдельно, если требуется независимость её полей.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Выполняйте в серверном общем модуле учебной базы. Все коллекции и вложенные значения создаются кодом; метаданные, файлы и интернет не нужны.
Индексы массивов начинаются с 0. Ключ соответствия — отдельное значение и не обязательно совпадает с индексом/порядком обхода.
Товар = Новый Структура("Название,Количество", "Книга", 3);
Источник = Новый Соответствие;
Источник.Вставить("A-01", Товар);
Фиксированный = Новый ФиксированноеСоответствие(Источник);
Рабочий = Новый Соответствие(Фиксированный);
Рабочий.Вставить("B-02", Новый Структура("Название,Количество", "Ручка", 1));
Сообщить(Рабочий.Количество() = 2);
Сообщить(Фиксированный.Количество() = 1);
Сообщить(Фиксированный.Получить("B-02") = Неопределено);
РабочийТовар = Рабочий.Получить("A-01");
РабочийТовар.Количество = 5;
Сообщить(Товар.Количество = 5);
Сообщить(Фиксированный.Получить("A-01").Количество = 5);
Независимый = Новый Структура("Название,Количество", РабочийТовар.Название, РабочийТовар.Количество);
Рабочий.Вставить("A-01", Независимый);
Независимый.Количество = 9;
Сообщить(Рабочий.Получить("A-01").Количество = 9);
Сообщить(Товар.Количество = 5);
Рабочий.Удалить("A-01");
Сообщить(Рабочий.Количество() = 1);
Сообщить(Фиксированный.Получить("A-01").Количество = 5);
Сообщить(Источник.Количество() = 1);Разбор по шагам
Фиксируем собственное соответствие с одним товаром, затем создаём новое изменяемое соответствие из него.
Добавление B-02 меняет только состав пар рабочего контейнера. В фиксированном остаётся одна пара A-01.
Первое изменение количества показывает общую вложенную структуру: обе коллекции указывают на этот объект.
Для независимости двух скалярных полей создаём новую структуру и заменяем пару A-01 рабочего соответствия. Изменение 9 теперь не затрагивает исходные 5.
Удаляем A-01 только из рабочего соответствия. Фиксированный источник и первоначальное соответствие сохраняют свою пару.
Как проверить результат
Все десять логических сообщений дают Истина.
После первого изменения общий товар содержит 5. После отдельного копирования полей рабочий товар содержит 9, исходный — 5.
В конце рабочий контейнер содержит только B-02; фиксированный и исходный — только A-01 с количеством 5.
Ожидаемый результат
Разобрана независимость контейнера и явное копирование вложенных данных товара.
На что обратить внимание
Копирование двух скалярных полей не является универсальным глубоким клонированием произвольного графа объектов.
Удалить ключ из рабочего соответствия не удаляет товар из информационной базы.
Не пытайтесь изменять состав пар ФиксированноеСоответствие; для этого и создаётся новый Соответствие.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.