Имя: Пароль:
1C
1С v8
Офигеть - Серверная процедура вызвала клиентскую (в модуле формы)
0 alexei366
 
29.11.13
15:56
Написал код на форме: есть таблица и форматированный документ.
Идея такова на: при активации строки таблицы устанавливается новый текст форматированного дока.
Сделал событие при активации, считываю в нем нужные данные клиента, отправляю все это через Серверную процедуру на сервер, а там устанавливаю текст через УстановитьHTML().
Проверяю код: и тут бац "Переполнение стека", я такое ваще 1 раз увидел.
Перезапустил и начал смотреть через отладчик. Оказывается метод на сервере УстановитьHTML() вызывает клиентскую процедуру ПриАктивацииСтроки - вот он б_л_я цикл.
Я ток одного не пойму какого ..... серверная процедура вызывает клиентскую на форме, эт чо багафича чтоли.
1 GROOVY
 
29.11.13
15:57
Так просто событие настало после того как серверная процедура была вызвана.
2 George Wheels
 
29.11.13
16:06
(0) F9 в ПриАктивацииСтроки и посмотри стек вызовов. УстановитьHTML() там быть не должно.
3 toypaul
 
гуру
29.11.13
16:20
может просто даныне формы обновились после "отправляю все это через Серверную процедуру на сервер"
4 Bober
 
29.11.13
16:23
(0) после установить html срабатывают события обновлений у всех ЭУ формы.
5 alexei366
 
29.11.13
16:23
(1) ага
6 alexei366
 
29.11.13
16:25
(4) ну и какого фига, процедура ведь серверная. Даже если и так он бы хоть серверную процедуру до конца выполнил, у меня там после установки html ещё код есть так до него не доходить а сразу после установки клиент ПриАктивации строки вызывается
7 alexei366
 
29.11.13
16:29
&НаКлиенте
Процедура ТаблицаПриАктивизацииСтроки(Элемент)
    
    ТекСтрока = Элементы.Таблица.ТекущаяСтрока;
    Если ТекСтрока = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    
    УстановитьДанные(ТекСтрока);    
    
    
КонецПроцедуры



&НаСервере
Процедура УстановитьДанные(НомерСтр)
    
    СтрокаД = Объект.Таблица.НайтиПоИдентификатору(НомерСтр);
    

    ТекстФормДок.УстановитьHTML(СтрокаД.Текст,Новый Структура);
    // после установки вызывается "ТаблицаПриАктивизацииСтроки(Элемент)"




    // тут ещё код но его выполнение не наступет

    
КонецПроцедуры
8 alexei366
 
29.11.13
16:30
(7) 8.3.4.317 - такси, ну если чо
9 sikuda
 
29.11.13
16:58
Да 8.3.4.347.
Зацикливание происходит на функции НайтиПоИдентификатору
10 sikuda
 
29.11.13
17:03
То есть не зацикливание, а каждый вызов НайтиПоИдентификатору приводит к Активизиции строки...
11 SilentMan
 
29.11.13
17:13
(7) Зачем СП читать? Ведь по-русски же написано (обработчик ПриАктивизацииСтроки):
Примечание:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.
12 alexei366
 
30.11.13
11:49
(10) Не найти а УстановитьHTML()
13 alexei366
 
30.11.13
11:51
(11)  ))))))))))))))   Клево, написали но не объяснили почему.
Ну и фиг с ними, пришлось на клиенте держать инд тек строки и смотреть если инд тек строки не изменился то не вызывать сервер)))
14 alexei366
 
30.11.13
12:05
(11) Я б с удовольствием не использовал бы серверный метод, но по другому данные загнать в форматированный документ походу не как
AdBlock убивает бесплатный контент. 1Сергей