Имя: Пароль:
1C
1С v8
Повторный вызов процедуры на клиенте. Что за косяк
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
видимо, связано с редактированием строки
если во время редактирования строки, пока событие не отпущено, я динамически изменю текущую строку, то непонятный цикл рутин ядра платформы, приведёт к повторному вызову процедуры
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн