2

Как скопировать структуру в 1с 8?

Существует несколько способов скопировать содержимое одной структуры в другую.

Самое простое решение, к которому прибегают начинающие программисты — это копирование всех свойств структуры с использованием цикла Для каждого:

НоваяСтруктура = Новый Структура;

Для каждого Элемент Из Структура Цикл
	НоваяСтруктура.Вставить(Элемент.Ключ, Элемент.Значение);
КонецЦикла;

Но он годится только для простых структур, которые не содержат вложенных структур и коллекций. Попробуйте ради интереса самостоятельно написать код для копирования следующей структуры:

Структура = Новый Структура;
Структура.Вставить("Код", 100);
Структура.Вставить("Наименование", "Стул деревянный");
Структура.Вставить("Остатки", Новый Структура);
Структура.Остатки.Вставить("Основной", 10);
Структура.Остатки.Вставить("Дополнительный", 3);

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

Более универсальным будет использование встроенных функций ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр(). К тому же, можно уложиться в одну строку:

НоваяСтруктура = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Структура));

Этот же способ можно использовать для копирования других коллекций (правда, в рамках одной информационной базы).

Читайте также:

  1. Программная работа со структурой

Комментарии

  1. Есть решение гораздо проще и элегантнее — Копировать через преобразование в «Новый ФиксированнаяСтруктура()».

    // Оригинал
    Оригинал_Стр = Новый Структура;
    Оригинал_Стр.Вставить( «Ключ1», «Значение1» );
    Оригинал_Стр.Вставить( «Ключ2», «Значение2» );
    Оригинал_Стр.Вставить( «Ключ3», «Значение3» );
    ……
    // ЛайфХак
    Оригинал_Стр = Новый ФиксированнаяСтруктура( Оригинал_Стр );

    // Копирование
    Копия_1 = Новый Структура( Оригинал_Стр );
    Копия_2 = Новый Структура( Оригинал_Стр );
    ….

    • Как вариант — возможно! Элегантный!? — под вопросом!
      Еще есть куда оптимизироваться)) Тот же конструктор ФиксированнаяСтруктура(Ключи, Значения)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *