Имя: Пароль:
1C
 
Сохранение значения при отмене редактирования строки ТЧ
0 IdoL2k
 
21.06.10
11:21
Есть процедура в модуле формы, висящая на событии "ПередОкончаниемРедактирования" табличного поля.

Процедура ТабличноеПолеПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
   
   Если НЕ ОтменаРедактирования И Элемент.ТекущаяСтрока.Реквизит_А>Элемент.ТекущаяСтрока.Реквизит_Б Тогда
       Сообщить("Ошибка заполнения: Реквизит А не может быть больше реквизита Б!", СтатусСообщения.Важное);
       Отказ=Истина;
   КонецЕсли;
   
КонецПроцедуры

Процедура проверяет условие и не дает пользователю ввести всякую чушь. Все замечательно, но если после попытки неправильного ввода пользователь нажмет клавишу Esc (ОтменаРедактирования=Истина), то введенное значение сохраняется. Какая то неважнецкая отмена редактирования получается...
Что делать и как быть? Может какой друго обработчик использовать?
1 butterbean
 
21.06.10
11:26
а пользователь меняет оба реквизита?
2 IdoL2k
 
21.06.10
11:32
1: Может оба, может ни один.. Это имеет значение?
3 butterbean
 
21.06.10
11:35
(2) ну по хорошему надо проверять сразу после изменения реквизита пользователем, и отменять изменение этого реквизита
4 73
 
21.06.10
11:38
(0) Было такое. Щас уже не помню, почему, но добавил в код после отказ=истина:
ЭтаФорма.ТекущийЭлемент = Элемент;
5 73
 
21.06.10
11:39
(4)+ Но все равно, как-то неудобно...
6 IdoL2k
 
21.06.10
11:40
(3) по-хорошему то надо... Но только поле ввода строки табличного поля не имеет обработчиков, в которых можно было бы отменить изменение :(
7 ptiz
 
21.06.10
11:43
Надо ПриНачалеРедактирования запоминать, что было, и при отмене - восстанавливать. Только так.
8 IdoL2k
 
21.06.10
11:50
(7) Ну эт понятно, что можно все ручками дописать. Но какая ж логика работу у этого обработчика? Что ж это за отмена редактирования такая, которая не отменяет произведенное редактирование?
9 IdoL2k
 
21.06.10
11:56
(4) Не понял зачем это.. Но все равно не спасло
10 IdoL2k
 
21.06.10
12:10
Вобщем вся дрянь в том, что значение записывается в ДанныеСтроки еще до вызова обработчика ПередОкончаниемРедактирования. И откатываться стандартными средствами ему некуда.
Решил так: Убрал проверку проверку на ОкончаниеРедактирования. Таким образом, пользователю нужно в любом случае ввести корректные данные, даже в случае если он уже паникует и лупит по "эскейпу". Пусть теперь тыщу раз подумает прежде чем в этот аццкый справочник заходить :)