Имя: Пароль:
1C
1С v8
ЗаполнитьЗначенияСвойств и Структупа
0 plnz
 
17.05.20
15:07
Есть код:

КомандыПечатиСчетаНаОплату = КомандыПечати.НайтиСтроки(Новый Структура("МенеджерПечати", "Обработка.ПечатьСчетовНаОплату"));    
Для каждого КомандаПечати Из КомандыПечатиСчетаНаОплату Цикл        
    НоваяКоманда = КомандыПечати.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяКоманда, КомандаПечати);
    НоваяКоманда.Представление = НоваяКоманда.Представление + " на фирменном бланке";
    НоваяКоманда.ДополнительныеПараметры.Вставить("НаФирменномБланке", Истина);        
КонецЦикла;

Вопрос вот в чем. Вот эта часть кода
НоваяКоманда.ДополнительныеПараметры.Вставить("НаФирменномБланке", Истина);        
должна добавлять значение в структуру только в создаваемую вновь строку таб знач. НоваяКоманда. Она же добавляется и в строку КомандаПечати - в исходную строку. Это нормальное поведение? Или я что-то упустил?
1 Aleksey
 
17.05.20
15:09
не понял вопрос
НоваяКоманда - это и есть строка из КомандыПечати.
Естественно меняя НоваяКоманда меняется и содержимое КомандаПечати.

Или в чем подвох?
2 plnz
 
17.05.20
15:12
Да, она создается копирование найденной.
То есть мне нужно пробежаться по текущим командам, найти все счета на оплату и добавить по ним новые команды печати, но уже с дополнительным параметром НаФирменномБланке = Истина.
Так вот я их нахожу, добавляю новую команду, заполняю значениями найденной, и в новую команду хочу добавить дополнительный параметр в структуру. А Он добавляется и в новую и в исходную(существующую)
3 plnz
 
17.05.20
15:13
пардон.... опечатался в (1)
4 plnz
 
17.05.20
15:15
хотя нет... все правильно
То есть добавляя значение для НоваяКоманда, оно же добавляется и в КамандаПечати
5 plnz
 
17.05.20
15:41
Оказывается это нормальное поведение ля структур. Их нельзя просто копировать... Сделал так.

ЗаполнитьЗначенияСвойств(НоваяКоманда, КомандаПечати,,"ДополнительныеПараметры");
НоваяКоманда.Представление = НоваяКоманда.Представление + " на фирменном бланке";

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

НоваяКоманда.ДополнительныеПараметры.Вставить("НаФирменномБланке", Истина);
6 Cthulhu
 
17.05.20
16:00
КопияИсходнойСтруктуры = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(ИсходнаяСтруктура));
7 novichok79
 
17.05.20
16:14
имхо, правильнее будет создавать на основе фикс. струрктуры, полученной из исходной, т. к. ЗначениеИзСтрокиВнутр оставили для совместимости с 7.7
8 lodger
 
17.05.20
16:21
(5) человек поевших щщи на языках Си сразу понял бы, что дело в указателях. и что некоторые приравнивания, заполнения и "передачи" параметров просто копируют указатель, а не значение.
9 mistеr
 
17.05.20
17:28
(8) Да, в данном случае нужна deep copy. Где-то в общих модулях есть функция, которая это делает.
10 palsergeich
 
17.05.20
18:51
(9) ОбщегоНазначений.СкопироватьРекуривно
Вроде так
11 Antonsis
 
17.05.20
19:46
Даже не знаю, что сказать... с такой проблемой в первый раз сталкиваюсь. Ждем эксперта)
12 hhhh
 
17.05.20
20:02
прям книга перлов отдыхает: рекуривно, структупа.
13 acht
 
17.05.20
20:07
(12) "ля структур" же
Основная теорема систематики: Новые системы плодят новые проблемы.