|
Восстановление исходного значения флажка после неудачи | ☑ | ||
---|---|---|---|---|
0
zelenprog
06.10.23
✎
16:11
|
Добрый день!
На форме выводится ТаблицаЗначений, заполненная некоторыми реквизитами контрагентов. Также в этой таблице есть колонки флажков "Проверен", "Записывать". При изменении этих флажков они должны быть сохранены в специальный регистр сведений. В этом регистре всего три реквизита: "Контрагент", "Проверен", "Записывать". При изменении флажков выполняется некоторая логическая проверка. И если изменение флажка соответствует этой проверке, то все работает штатно: флажок записывается в регистр. Если проверка не "проходит", то значение флажка не должно меняться (ни в регистре, ни на форме). Также флажок на форме в таблице не должен меняться, если произошла какая-то ошибка при записи в регистр. То есть флажок на форме должен всегда соответствовать флажку в регистре. Вопрос возник такой. При изменении флажка на форме срабатывает событие "ПриИзменении". В обработчике этого события уже установлено новое значение флажка. Если "логические" проверки флажка не "проходят", то надо восстановить исходное состояние флажка. Как это сделать? Откуда взять исходное значение? Делать копию таблицы, и брать флажки из нее? Или читать флажки из регистра? |
|||
1
vicof
06.10.23
✎
16:28
|
Делай копию. Или таблицы, или строки. В зависимости от нужд.
|
|||
2
АНДР
06.10.23
✎
16:31
|
Если сама проверка не меняет значения флага, то "Проверен = Не Проверен;".
|
|||
3
Arbuz
06.10.23
✎
16:35
|
Если логика требует предыдущего значения 'флажка' в ПриИзменении и его изменение на это значение, то надо менять такую логику.
|
|||
4
zelenprog
06.10.23
✎
16:48
|
(3) >> Если логика требует предыдущего значения 'флажка' в ПриИзменении и его изменение на это значение, то надо менять такую логику.
Нет, предыдущее значение флажка в обработчике не нужно знать. Нужно просто восстановить значение флажка, если: - флажок нельзя менять, и это обнаружилось при проверке - произошла ошибка при записи в регистр А если менять логику, то что тут можно придумать? |
|||
5
zelenprog
06.10.23
✎
16:45
|
(2) Проверка не меняет значение флажка. Она просто проверяет возможность установки нового состояния флажка. И если новое состояние в данных условиях невозможно - то нужно восстановить предыдущее значение.
|
|||
6
zelenprog
06.10.23
✎
16:47
|
(1) >> Делай копию. Или таблицы, или строки. В зависимости от нужд.
Если делать копию, тогда придется "синхронизировать" эту таблицу-копию со значениями регистра. Верно? То есть при успешной записи в регистр мы должны изменить этот флажок и в таблице-копии. Так? То есть получается, это будет что-то типа "кеша". |
|||
7
АНДР
06.10.23
✎
16:52
|
(5) Обучение использованию конструкций
Попытка ... Исключение ... КонецПопытки и Если ... Тогда ... Иначе ... КонецЕсли исключительно на платной основе. ;) |
|||
8
zelenprog
06.10.23
✎
16:56
|
(7) Попытка-Исключение не поможет.
В обработчике события "ПриИзменении" уже стоит новое значение флажка. Либо надо другое событие обрабатывать. А какое? Какое событие есть у флажка, которое срабатывает перед изменением его значения? |
|||
9
bolobol
06.10.23
✎
17:29
|
Открытие формы
|
|||
10
petya_
petrov_63 06.10.23
✎
17:36
|
(0) ПередНачаломИзменения разве не подойдет? вот тут можно кэшировать строку.
|
|||
11
Valdis2007
06.10.23
✎
17:42
|
(10) не помню...у булева, по моему нет такого события?
|
|||
12
АНДР
06.10.23
✎
20:04
|
(8) И какие же значения может принимать булева переменная для флажка!?
|
|||
13
nodrama
07.10.23
✎
12:16
|
надо красиво или не красиво?
полно же вариантов делай как умеешь. 1. сделай копию таблицы где 2 колонки. номер строки и флажек. которая изначально с флажком=ложь. если проверка не прошла, бери номер строки и значения флажка от туда. если прошла то ок. 2. А в чем проблема то можно же просто банально Процедура ПриИзменениилляляляляля(Элемент) в ТЧ Проверка = 0 ; Далее твои проверки где угодно которые вернут Проверка =0 или Проверка 1 Если Проверка=0 тогда Элемент.Родитель.ТекущиеДанные.Реквизит1=Ложь; ВызватьИсключение("Тут ошибка"); КонецеСЛИ; Не красиво но работает только что проверил |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |