|
Повторный вызов процедуры на клиенте. Что за косяк | ☑ | ||
---|---|---|---|---|
0
jsmith
09.04.12
✎
11:57
|
В общем, есть клиентская процедура формы
&НаКлиенте Процедура РеквизитТабЧастиПриИзменении(Элемент) РутинаНаСервере(Элементы.СписокКурсыЦен.ТекущаяСтрока); КонецПроцедуры |
|||
1
jsmith
09.04.12
✎
11:58
|
после отработки процедуры РутинаНаСервере происходит повторный вызов процедуры и вываливается соообщение, что индекс массива находится за гранью разумного
|
|||
2
Ахиллес
09.04.12
✎
12:00
|
РутинаНаСервере дёргает за РеквизитТабЧасти, он изменяется и срабатывает обработчик.
|
|||
3
jsmith
09.04.12
✎
12:00
|
стек вызовов при первом погружении в рутину на сервере
1 РутинаНаСервере 0 РеквизитТабЧастиПриИзменении стек вызовов после 2 РутинаНаСервере 1 РеквизитТабЧастиПриИзменении 0 РеквизитТабЧастиПриИзменении |
|||
4
jsmith
09.04.12
✎
12:02
|
(2) я тоже было сначала так подумал, но в коде нигде дёрганья нет, если, конечно, я не туплю
плюс меня смущает состояние стека: РеквизитТабЧастиПриИзменении вызывает сам себя |
|||
5
jsmith
09.04.12
✎
12:03
|
+(4) хотя понятно в принципе почему
блеять, где же я его дёргаю |
|||
6
jsmith
09.04.12
✎
12:10
|
хотя, нет
состояние стека всё-таки подозрительное я же не могу из сервера вызвать клиентское событие |
|||
7
jsmith
09.04.12
✎
12:10
|
или могу?
|
|||
8
jsmith
09.04.12
✎
12:20
|
короче
// НомерСтроки = Элементы.СписокКурсыЦен.ТекущаяСтрока (Число) Процедура РутинаНаСервере(НомерСтроки) Для НомерСтроки = 0 10 Цикл КонецЦикла; КонецПроцедуры |
|||
9
jsmith
09.04.12
✎
12:20
|
Если НомерСтроки поменять на другое название, то косяк отмирает
|
|||
10
jsmith
09.04.12
✎
12:21
|
с фига ли изменение в теле процедуры формального параметра типа Число влияет на повторный вызов клиентско
|
|||
11
jsmith
09.04.12
✎
12:21
|
й процедуры
|
|||
12
jsmith
09.04.12
✎
12:22
|
я даже могу тупо написать номер строки = 1 и у меня будет повторный вызов
|
|||
13
mikecool
09.04.12
✎
12:22
|
(12) а НомерСТроки разве не реквизит?
|
|||
14
Ненавижу 1С
гуру
09.04.12
✎
12:23
|
меняется НомерСтроки? а если Процедура РутинаНаСервере(Знач НомерСтроки)
|
|||
15
jsmith
09.04.12
✎
12:24
|
(13) В контексте процедуры других номеров строк нет
|
|||
16
jsmith
09.04.12
✎
12:24
|
поменял НомерСтроки на Икс, тот же косяк
|
|||
17
jsmith
09.04.12
✎
12:25
|
(14) Использование Знач убивает косяк
|
|||
18
jsmith
09.04.12
✎
12:26
|
хорошо. число передаётся по ссылке, я изменяю текущее значение переменной в памяти, в которой хранится текущая строка таблицы формы...
хм.. |
|||
19
Ненавижу 1С
гуру
09.04.12
✎
12:26
|
(17) отсюда вывод - надо осторожней с этим делом (передачей по ссылке), особенно в УФ
|
|||
20
Ненавижу 1С
гуру
09.04.12
✎
12:27
|
(18) у 1С методологический прокол с передачей аргументов по ссылке, смириться только
|
|||
21
jsmith
09.04.12
✎
12:28
|
всё равно непонятно, если я даже программно изменил число в памяти программы, почему у меня происходит вызов события, соотнесённого с реквизитом таблицы формы
|
|||
22
jsmith
09.04.12
✎
12:28
|
видимо, какой-то баг, либо непонятный мне цикл рутин
|
|||
23
Ненавижу 1С
гуру
09.04.12
✎
12:29
|
(21) видимо теперь это стало привязано
теперь это УФ тонкий клиент? |
|||
24
Ненавижу 1С
гуру
09.04.12
✎
12:29
|
хотя странно, в таком случае могло ведь уйти в бесконечную рекурсию
|
|||
25
jsmith
09.04.12
✎
12:31
|
чисто программное изменение Элементы.ИмяТаблицыФормы.ТекущаяСтрока = 1 не приводит к вызову клиентской процедуры
|
|||
26
jsmith
09.04.12
✎
12:34
|
видимо, связано с редактированием строки
если во время редактирования строки, пока событие не отпущено, я динамически изменю текущую строку, то непонятный цикл рутин ядра платформы, приведёт к повторному вызову процедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |