Регистрация изменений и их откат
Все изменения, вносимые пользователем в табличную форму в режиме показа, регистрируются в истории изменений. Регистрация изменений в табличной форме позволяет выполнить отмену или повтор действия.
Все изменения происходящие в табличной форме заносятся в список регистрации изменений. Этот список имеет ограниченную длину. Как только достигается конец списка отмена или повтор изменений больше невозможна. Регистрация изменений устанавливается при помощи метода УСТ_РЕЖИМ_ОТМЕНЫ. По умолчанию режим регистрации изменений выключен. Это объясняется тем, что если пользователь применит команду отмены действия для только что показанной заполненной формы, то форма вернется в исходное состояния, а процесс возврата формы в исходное состояния весьма ресурсозатратерн.
Пример иллюстрирует обработчик события команда, в котором происходит регистрация измений интерактивных действий пользователя. Пользователю выводится таблица с заголовком и пустой строкой.
В качестве интерактивных действий выступают две операции - добавление новой строки и ее заполнение. Два этих действия вызываются при помощи кнопок панели инструментов.
Пример
ТИП РедФорма(ТАБ_ФОРМА)
[
ПОДМЕНА файл = "Таб_форма.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))
УСТ_ДАННЫЕ_ЯЧЕЙКИ(яч_цена, СУММАП(цена))
ИНАЧЕ
РЕЗУЛЬТАТ = НЕТ
КОНЕЦ_ВЫБОРА
КОНЕЦ_ФУНКЦИИ
]
ВЫЧИСЛИТЬ
ПЕРЕМ РедФорма: тф
// тф <- данные
тф.ПОКАЗАТЬ
КОНЕЦ