Имя: Пароль:
1C
1С v8
Расшифровка Табличного документа
,
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
(4) нельзя
вчера была тема с похожей проблемой
Соответствие с ключом структура
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) у Вас верный код.