|
Расшифровка Табличного документа | ☑ | ||
---|---|---|---|---|
0
elephantor
20.08.15
✎
16:55
|
Делал расшифровку и заметил интересную вещь, которую не могу увы объяснять, но любопытство загорелось. Есть цикл который заполняет параметры области и заполняет структуру расшифровки(смотри ниже) и все работает хорошо, нужной области присваивается нужная расшифровка. НО! Если поставить "СтруктураРасшифровки = Новый Структура;" вне цикла, перед "Пока ВыборкаТоваров.Следующий() Цикл" то всем ячейкам ТабДок присваиваются расшифровка самой последней ячейки, которая выводится (ТабДок.Присоединить(ОблСтрокаКолонкаКритерия);). Кто знает почему, объясните пожалуйста, а то отладчик ответа увы не дал...
ПС: надеюсь нормально объяснил суть вопроса. Пока ВыборкаТоваров.Следующий() Цикл . . . ТабДок.Вывести(ОблСтрокаТовар); ВыборкаКатегория = ВыборкаТоваров.Выбрать(); Пока ВыборкаКатегория.Следующий() Цикл . . . //Расшифровка СтруктураРасшифровки = Новый Структура; СтруктураРасшифровки.Вставить("Товар",ВыборкаКатегория.Товар); СтруктураРасшифровки.Вставить("Критерий",ВыборкаКатегория.Критерий); СтруктураРасшифровки.Вставить("Значение",ВыборкаКатегория.Значение); ОблСтрокаКолонкаКритерия.Параметры.КритерийРасшифровка = СтруктураРасшифровки; ТабДок.Присоединить(ОблСтрокаКолонкаКритерия); КонецЦикла; КонецЦикла; |
|||
1
Ёпрст
20.08.15
✎
16:58
|
пихается поссылке
|
|||
2
elephantor
20.08.15
✎
16:59
|
(1) не понял...( можно подробней, если не сложно)
|
|||
3
Ёпрст
20.08.15
✎
17:05
|
(2)
//Расшифровка СтруктураРасшифровки = Новый Структура; Пока ВыборкаКатегория.Следующий() Цикл СтруктураРасшифровки.Вставить("Товар",ВыборкаКатегория.Товар); СтруктураРасшифровки.Вставить("Критерий",ВыборкаКатегория.Критерий); СтруктураРасшифровки.Вставить("Значение",ВыборкаКатегория.Значение); ОблСтрокаКолонкаКритерия.Параметры.КритерийРасшифровка = СтруктураРасшифровки; ТабДок.Присоединить(ОблСтрокаКолонкаКритерия); КонецЦикла; в этом случае у вас везде одинаковая расшифровка ? Если да, то скорее всего в расшифровке указана ссылка на сам "объект структура"..она у вас будет одинаковая для всех ячеек, т.к объект один и тот же. Если б запихали создание в цикл - всегда "разный". Хотя, в клюшках, такой код бы прокатывал. |
|||
4
elephantor
20.08.15
✎
17:30
|
(3) А еще такой вопрос, а можно как то сделать что бы расшифровка работала правильно и создание структуры можно было вынести за цикл?
|
|||
5
RomanYS
20.08.15
✎
17:39
|
||||
6
Михаил Козлов
20.08.15
✎
18:48
|
Может быть нелишним будет такой пример.
Есть, скажем массив М1. В коде так: М2 = М1; М2[0] = "1234567890"; В результате изменится и М1[0], т.к. в М2 = М1 присваивается ссылка, а не значение. |
|||
7
elephantor
21.08.15
✎
09:12
|
(6) То есть, когда мы присваиваем переменной массив или структуру, то мы записываем в эту переменную не сами данные массива, структуры, а только ссылку на нее? Правильно я понимаю?
|
|||
8
ДенисЧ
21.08.15
✎
09:13
|
(7) да
|
|||
9
elephantor
21.08.15
✎
09:22
|
(8) хорошо, а где хранятся данные этой структуры? всмысле если сделать такую запись:
СтруктураРасшифровки = Новый Структура; СтруктураРасшифровки.Вставить("Товар",ВыборкаКатегория.Товар); СтруктураРасшифровки.Вставить("Критерий",ВыборкаКатегория.Критерий); СтруктураРасшифровки.Вставить("Значение",ВыборкаКатегория.Значение); К1 = СтруктураРасшифровки; СтруктураРасшифровки = Новый Структура; СтруктураРасшифровки.Вставить("Товар",1); СтруктураРасшифровки.Вставить("Критерий",2); СтруктураРасшифровки.Вставить("Значение",3); К2 = СтруктураРасшифровки; То в К1 у меня будут хранится имя Товара, Критерия и Значений, а в К2 будут хранится 1 2 3, значит строчка СтруктураРасшифровки = Новый Структура; создает новую структуру с именем СтруктураРасшифровки, при этом не удаляя данные если структура с таким же именем уже существует. |
|||
10
hhhh
21.08.15
✎
09:26
|
(9) вот это смотрите
ОблСтрокаКолонкаКритерия.Параметры.КритерийРасшифровка = СтруктураРасшифровки; что в параметрах? А какое имя, К1 и К2 никого не интересует. |
|||
11
elephantor
21.08.15
✎
09:37
|
(10) Вопрос с расшифровкой пока отошел на второй план, мне интересно что происходит при написании такого кода, что происходит с данными в СтруктураРасшифровки, после повторного написания СтруктураРасшифровки = Новый Структура;?
СтруктураРасшифровки = Новый Структура; СтруктураРасшифровки.Вставить("Товар",ВыборкаКатегория.Товар); СтруктураРасшифровки.Вставить("Критерий",ВыборкаКатегория.Критерий); СтруктураРасшифровки.Вставить("Значение",ВыборкаКатегория.Значение); К1 = СтруктураРасшифровки; СтруктураРасшифровки = Новый Структура; СтруктураРасшифровки.Вставить("Товар",1); СтруктураРасшифровки.Вставить("Критерий",2); СтруктураРасшифровки.Вставить("Значение",3); К2 = СтруктураРасшифровки; |
|||
12
Михаил Козлов
21.08.15
✎
10:38
|
(11) После СтруктураРасшифровки = Новый Структура; данных нет.
После: СтруктураРасшифровки.Вставить("Товар",1); СтруктураРасшифровки.Вставить("Критерий",2); СтруктураРасшифровки.Вставить("Значение",3); будет 3 значения: "Товар" = 1, "Критерий" = 2 и "Значение" = 3 |
|||
13
elephantor
21.08.15
✎
10:50
|
(11) Это понятно, не понятно другое, если в переменной К1 хранится ссылка на СтруктураРасшифровки с данными "Товар" = ИнмяТовара, "Критерий" = ИмяКритерия и "Значение" = ИмяЗначения и в К2 тоже хранится ссылка на СтруктураРасшифровки с данными "Товар" = 1, "Критерий" = 2 и "Значение" = 3, то значит написав второй раз "СтруктураРасшифровки = Новый Структура" не удалит значения К1 и не перезапишет их, значит они должны где то храниться, где они хранятся?
Надеюсь правильно описал вопрос. |
|||
14
Михаил Козлов
21.08.15
✎
10:56
|
(13) В К1 и К2 и хранятся 2 структуры.
По поводу, как это будет в табличном документе, см.(10) и в (0) у Вас верный код. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |