Имя: Пароль:
1C
 
Восстановление исходного значения флажка после неудачи
,
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=Ложь;
        ВызватьИсключение("Тут ошибка");
КонецеСЛИ;

Не красиво но работает только что проверил
Программист всегда исправляет последнюю ошибку.