Существует несколько способов скопировать содержимое одной структуры в другую.
Самое простое решение, к которому прибегают начинающие программисты — это копирование всех свойств структуры с использованием цикла Для каждого
:
НоваяСтруктура = Новый Структура; Для каждого Элемент Из Структура Цикл НоваяСтруктура.Вставить(Элемент.Ключ, Элемент.Значение); КонецЦикла;
Но он годится только для простых структур, которые не содержат вложенных структур и коллекций. Попробуйте ради интереса самостоятельно написать код для копирования следующей структуры:
Структура = Новый Структура; Структура.Вставить("Код", 100); Структура.Вставить("Наименование", "Стул деревянный"); Структура.Вставить("Остатки", Новый Структура); Структура.Остатки.Вставить("Основной", 10); Структура.Остатки.Вставить("Дополнительный", 3);
Согласитесь, накладно каждый раз продумывать и писать код для копирования)
Более универсальным будет использование встроенных функций ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр(). К тому же, можно уложиться в одну строку:
НоваяСтруктура = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Структура));
Этот же способ можно использовать для копирования других коллекций (правда, в рамках одной информационной базы).
Есть решение гораздо проще и элегантнее — Копировать через преобразование в «Новый ФиксированнаяСтруктура()».
// Оригинал
Оригинал_Стр = Новый Структура;
Оригинал_Стр.Вставить( «Ключ1», «Значение1» );
Оригинал_Стр.Вставить( «Ключ2», «Значение2» );
Оригинал_Стр.Вставить( «Ключ3», «Значение3» );
……
// ЛайфХак
Оригинал_Стр = Новый ФиксированнаяСтруктура( Оригинал_Стр );
// Копирование
Копия_1 = Новый Структура( Оригинал_Стр );
Копия_2 = Новый Структура( Оригинал_Стр );
….
Как вариант — возможно! Элегантный!? — под вопросом!
Еще есть куда оптимизироваться)) Тот же конструктор
ФиксированнаяСтруктура(Ключи, Значения)