Имя: Пароль:
1C
1С v8
Обработка событий таблицы формы
0 clean_kirill
 
19.02.16
14:06
Господа.
Поделитесь, пожалуйста, опытом на заданную тему. Проблема такая: по событию окончания редактирования строки таблицы формы необходимо произвести ряд манипуляций (изменить) с некими реквизитами этого объекта. В событии запрещено вызывать процедуры &НаСервере, можно только без контекста, а есть необходимость использовать уже написанные и именно серверные процедуры. Это как-нибудь решается ?
1 Nuobu
 
19.02.16
14:44
(0) передачей параметров в серверные процедуры.
2 clean_kirill
 
19.02.16
15:09
Это очевидно. Но нужно передать весь объект и загонять его целиком в параметры - это как-то называется, наверное... Я о другом. Есть ли где-то событие, которое среагирует на изменение данных и в котором можно законно вызывать &НаСервере.
3 Zhuravlik
 
19.02.16
15:14
(0) почему "В событии запрещено вызывать процедуры &НаСервере, можно только без контекста", что за событие?
4 Zhuravlik
 
19.02.16
15:15
а, понял. А нельзя воспользоваться событием "ПриИзменении" поля таблицы?
5 clean_kirill
 
19.02.16
15:35
Хорошая мысль. Надо пробовать.
Процедура вешается на изменение всей строки целиком потому как любое изменение в любом поле вызывает пересчет всей строки таблицы и часть этих событий вызывают друг друга, а
при окончании редактирования мы уже имеем подготовленный для дальнейшей обработки результат.
6 clean_kirill
 
19.02.16
16:08
(4) Любопытно, что событие:
ТаблицаФормы (FormTable) ПриИзменении (OnChange)
Синтаксис:
ПриИзменении()
Описание:
Возникает при изменении данных.

... на самом деле возникает только при добавлении или удалении строки, но никак не при изменении данных таблицы.
7 singlych
 
19.02.16
17:03
(6) Имеется в виду событие поля таблицы (т.е. колонки), а не самой таблицы. Там уже можно получить всю строку и передать ее в процедуру, где происходит пересчет. И так для всех полей, изменение к-х должно вызвать пересчет строки.
8 clean_kirill
 
19.02.16
17:11
(7) Да, у (4) так и написано - поля таблицы.
(6) Я уж так, до кучи. Для общего понимания логики разработчиков платформы.
9 singlych
 
19.02.16
17:16
(8) ну дык не удивительно, меняя данные в строке, ты меняешь данные строки, а не данные таблицы. Вассал моего вассала - не мой вассал.
10 clean_kirill
 
19.02.16
17:20
(9) А как быть с изменением табличной части у объекта, который становится модифицированным ?
11 singlych
 
19.02.16
17:25
(9) (10) А вот хз, засомневался, посмотрел, у меня при изменении поля таблицы оба события срабатывают. Все-таки вассал.
12 Nuobu
 
19.02.16
17:29
(11) То потому что у тебя нету строчки "СтандартнаяОбработка = Ложь;" а у автора - скорее всего есть.
13 clean_kirill
 
19.02.16
17:31
(12) А где СтандартнаяОбработка в ПриИзменении ?
14 clean_kirill
 
19.02.16
17:33
ПриИзменении срабатывают сначала у поля, потом у таблицы, но это не означает завершение редактирования. И на такое промежуточное состояние вешать пересчет всего объекта как-то нелогично.
15 clean_kirill
 
19.02.16
17:34
(6) Вдогонку к своему посту: при изменении поля таблица реагирует (ПриИзменении), при завершении редактирования не реагирует.
16 DmitrO
 
19.02.16
23:54
(0) это решается очень просто развязкой через таймер
При окончании редактирования подключается обработчик ожидания, однократно с минимальными таймаутом. И в его процедуре делается контекстный серверный вызов.
17 clean_kirill
 
20.02.16
11:54
(16) Спасибо, обязательно попробую.
Так, глядишь, пользователи построят собственную событийную модель :)
18 DmitrO
 
21.02.16
10:11
Сдается мне, Билли, нас кто-то тут назвал пользователями!
19 clean_kirill
 
22.02.16
16:54
(18) Сорри, если прозвучало некорректно. Однако, я таковым себя и ощущаю, пользуя этот ... интерпретатор, в котором очень часто, вместо того, чтобы просто открыть дверь, надо ломиться через огороды и задние дворы.
Кстати, способ применил, работает, еще раз спасибо.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.