|
v7: Непонятки с ОбработкаЯчейкиТаблицы | ☑ | ||
---|---|---|---|---|
0
Lexxxxx
25.01.12
✎
11:23
|
Есть код:
Функция РасшифровкаОбновить(Обновить) Расшифровка.Установить("Обновить", Обновить); Возврат Расшифровка; КонецФункции Процедура Сформировать() //... Таб.ИсходнаяТаблица(ИсхТаблица); // добавим список для расшифровки глФлагРасшифровки = 1; Расшифровка = СоздатьОбъект("СписокЗначений"); Расшифровка.Установить("Идент","НашСписок"); Расшифровка.Установить("Объект","РасчетныеЛистки"); Расшифровка.Установить("Форма", ИсхТаблица); Расшифровка.Установить("Фирма", Фирма); Расшифровка.Установить("Подразделение", Подразделение); Расшифровка.Установить("Расчетчик", Расчетчик); Расшифровка.Установить("Сотрудник", Сотрудник); Расшифровка.Установить("Дата1", НачПериода); Расшифровка.Установить("Дата2", ДатаПериода); Расшифровка.Установить("ВидПериода","Регистрации"); Расшифровка.Установить("ПоАлфавиту",рПоАлфавиту); ФКратко = ?(Константа.ФИОПолностью = Да,0,1); Таб.ВывестиСекцию("Настройка"); Расшифровка.Установить("Обновить", 0); //Далее вывод остальных секций отчета КонецПроцедуры В секции "Настройка" есть три ячейки, в расшифровке которых прописано РасшифровкаОбновить(N), где N - число от 1 до 3 в зависимости от конкретной ячейки. В глобальном модуле написано: Процедура ОбработкаЯчейкиТаблицы(Расшифровка, СтандартнаяОбработка, Таблица) Экспорт //... глОбновить = Число(Расшифровка.Получить("Обновить")); //... КонецПроцедуры При клике по ячейке глОбновить принимает значения N, указанные в вызове функции РасшифровкаОбновить в поле "Расшифровка" в свойствах ячеек. Если посмотреть отладчиком, то при при выводе секции "Настройка" происходит три вызова РасшифровкаОбновить с разными (соответственно прописанным в ячейках) значениями параметра. Следовательно происходит изменение значения с представлением "Обновить" в списке значений Расшифровка, который является общим для всех вызовов, а значит в конце это значение будет равно значению параметра при последнем вызове (у меня оказалось2), и потом еще оно же будет установлено в 0 строкой Расшифровка.Установить("Обновить", 0); после вывода секции "Настройка". Пр клике на ячейке в процедуре глобального модуля ОбработкаЯчейкиТаблицы значение глОбновить всегда равно N соответствующей ячейки. Почему так?! По моему скромному разумению все три ячейки содержат ссылки на один экземпляр списка, в котором значение с представлением "Обновить" было установлено в 0, а следовательно в ОбработкаЯчейкиТаблицы первым параметром мы получим этот список, и в нем "Обновить" должно быть равно 0, однако это не так! Почему? |
|||
1
Ёпрст
25.01.12
✎
11:43
|
(0) потому, что в каждой ячейке - свой список значений в поле Расшифровка.
Со своими значениями списка. Если че, он там как ЗначениеВСтрокуВнутр хранится всегда, т.е в расшифровке всегда строка, а не указатель на конкретный список значений. |
|||
2
1Сергей
25.01.12
✎
11:52
|
>>По моему скромному разумению все три ячейки содержат ссылки на один экземпляр списка
твоё скромное разумение неправильное. см (1) |
|||
3
Lexxxxx
25.01.12
✎
11:53
|
(1) Да вот очень похоже на то! Но ведь я прочитал когда-то следующее:
"По умолчанию параметры методов, процедур и функций передаются по ссылке, то есть изменение внутри процедуры или функции значения формального параметра ведет к изменению значения соответствующего фактического параметра. При передаче параметра по значению изменение значения формального параметра никак не влияет на фактический параметр вызова процедуры. Для указания того, что тот или иной параметр следует передавать по значению, следует в исходном тексте процедуры или функции перед именем параметра записать ключевое слово Знач (англоязычный синоним — Val)." и следую этому! Так значит в расшифровке ячейки система неявно создает копию значения (типа использует Знач) и потом его можно как угодно насиловать, но на значение, сохраненное в расшифровке, это не окажет никакого влияния?! |
|||
4
Lexxxxx
25.01.12
✎
11:55
|
(1)"Если че, он там как ЗначениеВСтрокуВнутр хранится всегда, т.е в расшифровке всегда строка, а не указатель на конкретный список значений."
Откуда и как Вы выяснили такую тонкость?! |
|||
5
1Сергей
25.01.12
✎
11:55
|
(3) причем тут процедуры и функции? Ты же про таблицу говоришь. А там при выводе всё запоминается
|
|||
6
Lexxxxx
25.01.12
✎
11:58
|
(5) Ну вот я и думал что при выводе запоминается ссылка на список.
|
|||
7
1Сергей
25.01.12
✎
11:58
|
(6) не ссылка, а строка
|
|||
8
Lexxxxx
25.01.12
✎
12:01
|
(7) Откуда это известно?! Вот и Ёпрст4 так говорит. Я не говорю что это не так. Я хочу узнать какое место инструкции я пропустил?
|
|||
9
1Сергей
25.01.12
✎
12:03
|
(8) стр 717 4-ый абзац
|
|||
10
Lexxxxx
25.01.12
✎
12:07
|
(1) (9) Спасибо.
|
|||
11
Ёпрст
25.01.12
✎
12:08
|
(4) :))
Сними с только просмотр таблицу и погляди на поле расшифровка в свойствах ячейки. |
|||
12
Ёпрст
25.01.12
✎
12:08
|
Если че, в мокселе всегда только текст в ячейках.. везде.
|
|||
13
Lexxxxx
25.01.12
✎
12:13
|
(11) Бггг! Прикольно! :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |