| 
    
        
     
     | 
    
  | 
Расшифровка Табличного документа | ☑ | ||
|---|---|---|---|---|
| 
    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) у Вас верный код.  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |