Регистрация изменений и их откат
Все изменения, вносимые пользователем в табличную форму в режиме показа, регистрируются в истории изменений. Регистрация изменений в табличной форме позволяет выполнить отмену или повтор действия.
Все изменения происходящие в табличной форме заносятся в список регистрации изменений. Этот список имеет ограниченную длину. Как только достигается конец списка отмена или повтор изменений больше невозможна. Регистрация изменений устанавливается при помощи метода УСТ_РЕЖИМ_ОТМЕНЫ. По умолчанию режим регистрации изменений выключен. Это объясняется тем, что если пользователь применит команду отмены действия для только что показанной заполненной формы, то форма вернется в исходное состояния, а процесс возврата формы в исходное состояния весьма ресурсозатратерн.
Пример иллюстрирует обработчик события команда, в котором происходит регистрация измений интерактивных действий пользователя. Пользователю выводится таблица с заголовком и пустой строкой. В качестве интерактивных действий выступают две операции - добавление новой строки и ее заполнение. Два этих действия вызываются при помощи кнопок панели инструментов.
Пример
ТИП РедФорма(ТАБ_ФОРМА) [ ПОДМЕНА файл = "Таб_форма.ibf"; ПОДМЕНА открытие = {Открытие}; ПОДМЕНА команда = {Команда}; ФУНКЦИЯ Открытие ПЕРЕМ ПАНЕЛЬ_ИНСТРУМЕНТОВ: панель ПЕРЕМ МИНИ_КНОПКА:кн1, кн2, кн3, кн4 кн1.иконка.файл = "#ADD" кн1.команда = "add_str" кн1.текст = "Добавить строку" кн2.иконка.файл = "#EDIT" кн2.команда = "fill_str" кн2.текст = "Заполнить строку" кн3.иконка.файл = "#UNDO" кн3.команда = "_UNDO_" кн3.текст = "Отменить" кн4.иконка.файл = "#REDO" кн4.команда = "_REDO_" кн4.текст = "Повторить" панель.текст_кнопок = ДА панель.равный_размер = НЕТ панель.кнопки =(кн1, кн2, кн3, кн4) УСТ_ПАН_ИНСТР(панель) КОНЕЦ_ФУНКЦИИ ФУНКЦИЯ ЛОГИКА: Команда(ПЕРЕМ ТАБ_ФОРМА: форма; СТРОКА: код) УСТ_РЕЖИМ_ОТМЕНЫ(ДА) ПЕРЕМ стр = КОЛ_СТРОК("Раздел2") ВЫБОР(код) #"add_str": РЕЗУЛЬТАТ = ДА ПЕРЕМ ТФ_РЕЖИМ_ДОБАВЛЕНИЯ: режим_добавления режим_добавления = [копировать_данные = НЕТ, копировать_атрибуты = ДА, деление_границ = ТФ_ДГ_КОПИРОВАТЬ] УСТ_РЕЖ_ДОБАВЛЕНИЯ(режим_добавления) ДОБАВИТЬ_СТРОКУ("Раздел2", стр) #"fill_str": РЕЗУЛЬТАТ = ДА ПЕРЕМ ТФ_ЯЧЕЙКА: яч_наим, яч_ед, яч_цена ПЕРЕМ ЦЕЛОЕ: цена= СЛУЧ_ЧИСЛО(2000) яч_наим = [имя_раздела = "Раздел2", имя_столбца = "наименование",строка = стр] яч_ед = [имя_раздела = "Раздел2", имя_столбца = "ед_изм",строка = стр1] яч_цена = [имя_раздела = "Раздел2", имя_столбца = "цена",строка = стр1] УСТ_ТИП_ЯЧЕЙКИ(яч_наим, ТФ_ТЯ_СТРОКА) УСТ_ТИП_ЯЧЕЙКИ(яч_ед, ТФ_ТЯ_СТРОКА) УСТ_ТИП_ЯЧЕЙКИ(яч_цена, ТФ_ТЯ_СТРОКА) УСТ_ДАННЫЕ_ЯЧЕЙКИ(яч_наим, "Товар "+ СТР(стр-1)) УСТ_ДАННЫЕ_ЯЧЕЙКИ(яч_цена, СУММАП(цена)) ИНАЧЕ РЕЗУЛЬТАТ = НЕТ КОНЕЦ_ВЫБОРА КОНЕЦ_ФУНКЦИИ ] ВЫЧИСЛИТЬ ПЕРЕМ РедФорма: тф // тф <- данные тф.ПОКАЗАТЬ КОНЕЦ