Копирование структуры в 1С

В этой небольшой статье рассмотрим как можно получить копию созданной структуры.

Предположим имеем следующую структуру:

СозданнаяСтруктура = Новый Структура;
СозданнаяСтруктура.Вставить("Ключ1", "ЗначениеКлюча1");
СозданнаяСтруктура.Вставить("Ключ2", "ЗначениеКлюча2");

Для копирования структуры в 1С 8 нельзя просто взять и написать такое: КопияСтруктуры = СозданнаяСтруктура. Вместо копии структуры мы просто получаем еще одну переменную КопияСтруктуры, которая указывает на тот же самый набор данных что и переменная СозданнаяСтруктура.
В этом случае поможет следующий цикл:

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

7 ответов к «Копирование структуры в 1С»

  1. Функция КопияСтруктуры(СтруктураИсточник)
    СтруктураПриемник = Новый Структура;
    Для Каждого ЭлементСтруктуры Из СтруктураИсточник Цикл
    Если ТипЗнч(ЭлементСтруктуры.Значение) = Тип(“Структура”) Тогда
    СтруктураПриемник.Вставить(ЭлементСтруктуры.Ключ, КопияСтруктуры(ЭлементСтруктуры.Значение));
    Иначе
    СтруктураПриемник.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение);
    КонецЕсли;
    КонецЦикла;
    Возврат СтруктураПриемник;
    КонецФункции

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

  3. ИсходнаяСтруктура = Новый Структура(“ФИО”, “Иванов”);
    //так
    ФиксированнаяКопия = Новый Структура(ИсходнаяСтруктура);
    Копия = Новый Структура(ФиксированнаяКопия);
    //или так
    Копия = Новый Структура(Новый Структура(ИсходнаяСтруктура));

  4. Функция КопияСтруктуры(Знач Структура)
    Возврат Структура;
    КонецФункции

    1. Бог МОЙ. Ну конечно же это НЕ работает.
      Структура – это ссылка на структуру, а не сама структура.
      От того, что вы копируете ссылку в другую ячейку – и от этого она не становится ссылкой на другой объект! Если вы измените “новую” структуру, “старая” так же изменится.

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

Ваш адрес email не будет опубликован.