|
ЗаполнитьЗначенияСвойств и Структупа | ☑ | ||
---|---|---|---|---|
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) "ля структур" же
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |