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