Как скопировать структуру в 1с
Перейти к содержимому

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

  • автор:

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

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

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

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

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

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

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

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

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

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

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

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

например у ТЗ есть метод копировать, выгрузить
как скопировать структуру в 1с 8.1
Есть структура
АД = Новая Структура(. )

Как получить её копию, не преберая её?

почему попадает в ветку для 7ки, вроде на 8 отправлял.

стр1 = НОвый Структура;
стр1.Вставить(«Я»,»Умный»);
стр1.Вставить(«Хотя»,»Не очень»);

стр2 = стр1;
Сообщить(ТипЗнч(стр2));

(2) это не копирование структуры — это копирвоание ссылки на структуру — источник многих проблем.

(3) Уверен? Честно говоря, я то что написал в (2) не проверял отладчиком. Поэтому и написал попробуй. Но вообще-то мне кажется что скопируется вся структура

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

Для Каждого цСвойство Из СтруктСтарый Цикл

СтруктНовый.Вставить( цСвойство.Ключ , цСвойство.Значение );

ЗначениеВСтроку(ЗначениеИзСтроки)
(6) +5
ЗначениеВСтрокуВнутр()

попробуй так
Буфер = ЗначениеВСтрокуВнутр(ТвояСтруктура);
НоваяСтруктура = ЗначениеИзСтрокиВнутр(Буфер);

Копия=ВерниКопию(Стр);
Функция ВерниКопию(Источник)
Возврат Источник;
КонецФункции
(6) Это хня по-моему хреново работает в 8-ке
А че (2) не сработает.

(8) если это не будет вынесено в отдельный метод с именем СкопироватьСтруктуру — 80% 1Сников не смогут понять глубинного смысла этих операторов

(12) терли уже много раз на мисте про эту фичу.

Тока что попробовал
стр1 = НОвый Структура;
стр1.Вставить(«Я»,»Умный»);
стр1.Вставить(«Хотя»,»Не очень»);

стр2 = стр1;
Для Каждого Свойство Из стр2 Цикл

В окне сообщений
Я,Умный
Хотя,Не очень

о а я думал что все уже отмечают тяпницу, а структра не копируется проверял отладчиком если использовать =.

(10) + 5
Функция ВерниКопию(Знач Источник)
Возврат Источник;
КонецФункции
Может так не ссылка будет
Мля, тупанул. Действительно лажа 🙂

«Умный программист пишет тупым кодом гениальные вещи а не наоборот. «(с) http://bash.org.ru/quote/394359

(17) Тоже не катит.
а ЗначениеВСтрокуВнутр тоже не прокатывает
(21) Прокатывает

(23) о, исчо один Нижегородец. Вынеси в отдельный метод (5) и не страдай фигней, это не та тема, где нужно проявлять талант в программировании.

Процедура КнопкаВыполнитьНажатие(Кнопка)
стр1 = НОвый Структура;
стр1.Вставить(«Я»,»Умный»);
стр1.Вставить(«Хотя»,»Не очень»);

стр2 = ЗначениеИзСтрокиВнутр(Буфер);
стр3 = стр1;
стр4 = ВерниКопию(стр1);

стр1.Вставить(«Хотя»,»даже очень»);
стр1.Вставить(«так»,»себе»);

Для Каждого Свойство Из стр2 Цикл
Сообщить(Свойство.Ключ+»,»+СВойство.Значение);
КонецЦикла;

Сообщить(«копирование ссылки»);
Для Каждого Свойство Из стр3 Цикл
Сообщить(Свойство.Ключ+»,»+СВойство.Значение);
КонецЦикла;

Сообщить(«верни копию»);
Для Каждого Свойство Из стр4 Цикл
Сообщить(Свойство.Ключ+»,»+СВойство.Значение);
КонецЦикла;

Функция ВерниКопию(Знач Источник)
Возврат Источник;
КонецФункции

Я,Умный
Хотя,Не очень
копирование ссылки
Я,Умный
Хотя,даже очень
так,себе
верни копию
Я,Умный
Хотя,даже очень
так,себе

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

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

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

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

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

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

Похожие записи

  • Обращение к элементам с помощью JQuery
  • Всплывающие подсказки
  • Многостраничный Excel из 1С
  • Работа с cookies на jQuery

Опубликовано Алексей

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

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

DrLightman :
а Массив, Соответствие и остальные коллекции значений?
Егоров Михаил :
НовСтруктура2=ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(НовСтруктура1));
Михаил, данную функцию не рекомендуется использовать. Она нужна для совместимости с 7.7
DrLightman :

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

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

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

Скопировать структуру в конфигурации системы 1С: Предприятие

В данной статье будет рассмотрен относительно несложный вопрос, с которым могут столкнуться разработчики 1С в своей повседневной работе.
Сразу необходимо напомнить, что структура является особым типом данных в 1С, представляющим собой коллекцию пар «ключ» и «значение». В этом она крайне схожа с другим типом данных 1С — соответствием. Однако в структуре поле ключ всегда имеет строковый тип данных, а его название отвечает требованиям наименования переменных строки 1С. Поле же «значение» в структуре имеет любой тип данных.
Структура чаще всего применяется для значения процесса хранения информации, каждому из которых соответствует собственное имя, кроме того, многие типы встроенных функций и методы объектов 1С принимают в качестве одного или нескольких параметров именно структуру.
Для создания структуры в платформе системы 1С: Предприятие 8.3 и 8.2 используется 2 способа. Первый – создание пустой структуры и вставка в нее необходимого количества пар ключ-значение.
ДанныеСотрудника = Новый Структура;
ДанныеСотрудника.Вставить(«Фамилия», «Соколов»);
ДанныеСотрудника.Вставить(«Имя», «Дмитрий»);

Второй способ – создание информационной структуры сразу с необходимым количеством пар.
Дата = Новый Структура(«День, Месяц ,Год», 14, 03, 2022);

2. Способы копирования структуры в конфигурации системы 1С: Предприятие

После создания структуры одним из вышеуказанных способов может возникнуть необходимость создания ее копии. Необходимо сразу же отметить, что для копирования структуры в программе 1С: Предприятие 8 будет ошибкой использовать код:

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

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

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

Для Каждого Элемент Из КопируемаяСтруктура Цикл

Есть еще одним встречающимся способом копирования структуры является применение функций ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр. Функция ЗначениеВСтрокуВнутр() возвращает строковое системное представление объекта переданного значения. Для обратного преобразования значения применяется функция ЗначениеИзСтрокиВнутр(). Пример кода приводится ниже.
НоваяСтруктура = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(КопируемаяСтруктура));
Однако синтакс-помощник не рекомендует использовать данный способ. В описании данных функций говорится о том, что они используются для сохранения функциональной совместимости с программой 1С:Предприятие 7.7, а использовать для других целей их не рекомендуется.
Таким образом, оптимальным решением задачи скопировать структуру является организация цикла по элементам копируемой структуры и их последовательная вставка во вновь созданную.
Специалист компании «Кодерлайн»
Инна Изотова

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

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