Массив.На основании фиксированного массива

Конструкторы

Создаваемый массив заполняется значениями из исходного фиксированного массива. К элементам исходного массива применяется рекурсивное преобразование, т.е. элементы фиксированного массива, в свою очередь являющиеся фиксированными массивами, будут помещены в массив с преобразованием к типу Массив.

Синтаксис

Новый Массив(<Массив>)
Полное описание, параметры и ограничения

Массив.На основании фиксированного массива

Массив (Array)

На основании фиксированного массива

Доступен, начиная с версии 8.3.2.

Синтаксис:
Новый Массив(<Массив>)
Параметры:

<Массив> (необязательный)
Тип: ФиксированныйМассив.
Фиксированный массив.
Описание:

Создаваемый массив заполняется значениями из исходного фиксированного массива. К элементам исходного массива применяется рекурсивное преобразование, т.е. элементы фиксированного массива, в свою очередь являющиеся фиксированными массивами, будут помещены в массив с преобразованием к типу Массив.

Использование в версии:

Доступен, начиная с версии 8.3.2.

Методическая информация

Практические примеры

Разморозить вложенный массив и увидеть границу копирования структуры

Конструктор Массив из ФиксированныйМассив рекурсивно преобразует вложенные фиксированные массивы. Это не обещание глубоко клонировать произвольные структуры внутри коллекции.

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

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

Подготовка

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

  2. Индексы массивов начинаются с 0. Ключ соответствия — отдельное значение и не обязательно совпадает с индексом/порядком обхода.

СтрокаПлана = Новый Массив;
СтрокаПлана.Добавить(10);
СтрокаПлана.Добавить(12);
ФиксированнаяСтрока = Новый ФиксированныйМассив(СтрокаПлана);
ОбщиеДанные = Новый Структура("Товар,Количество", "Книга", 3);
Источник = Новый Массив;
Источник.Добавить(ФиксированнаяСтрока);
Источник.Добавить(ОбщиеДанные);
Фиксированный = Новый ФиксированныйМассив(Источник);
Рабочий = Новый Массив(Фиксированный);
Сообщить(ТипЗнч(Фиксированный[0]) = Тип("ФиксированныйМассив"));
Сообщить(ТипЗнч(Рабочий[0]) = Тип("Массив"));
Рабочий[0][0] = 99;
Сообщить(Рабочий[0][0] = 99);
Сообщить(Фиксированный[0][0] = 10);
Сообщить(СтрокаПлана[0] = 10);
Рабочий[1].Количество = 5;
Сообщить(ОбщиеДанные.Количество = 5);
Сообщить(Фиксированный[1].Количество = 5);
Рабочий.Добавить("Только рабочий контейнер");
Сообщить(Рабочий.Количество() = 3);
Сообщить(Фиксированный.Количество() = 2);
Сообщить(Источник.Количество() = 2);

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

  1. Вложенную строку заранее превращаем в ФиксированныйМассив. Отдельно создаём изменяемую структуру товара и помещаем оба значения во внешний фиксированный массив.

  2. Новый Массив(Фиксированный) создаёт изменяемый внешний контейнер. Вложенный фиксированный массив становится отдельным обычным массивом по документированному рекурсивному преобразованию.

  3. Меняем число вложенного рабочего массива на 99: фиксированный источник сохраняет 10.

  4. Меняем количество в структуре: это тот же вложенный изменяемый объект, поэтому изменение видно через исходную структуру и фиксированный контейнер.

  5. Добавление нового элемента меняет размер только рабочего внешнего массива.

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

  1. Все десять логических сообщений дают Истина.

  2. Числовая строка источника остаётся 10,12, рабочая становится 99,12.

  3. Количество структуры становится 5 в обоих представлениях; размеры рабочих/исходных контейнеров 3 и 2.

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

Разобрано специальное рекурсивное преобразование массивов без ложного обещания полной неизменяемости всех объектов.

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

  1. Фиксированный контейнер не делает произвольный вложенный изменяемый объект неизменяемым.

  2. Для полностью независимого товара создайте новую структуру и явно скопируйте нужные поля; не заменяйте это обещанием «глубокой копии всего».

  3. Не присваивайте Фиксированный[0][0]=99: вложенная строка в источнике намеренно фиксированная.

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

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

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

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

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