Руководство разработчика

Регистрация изменений и их откат

Все изменения, вносимые пользователем в табличную форму в режиме показа, регистрируются в истории изменений. Регистрация изменений в табличной форме позволяет выполнить отмену или повтор действия.

Все изменения происходящие в табличной форме заносятся в список регистрации изменений. Этот список имеет ограниченную длину. Как только достигается конец списка отмена или повтор изменений больше невозможна. Регистрация изменений устанавливается при помощи метода УСТ_РЕЖИМ_ОТМЕНЫ. По умолчанию режим регистрации изменений выключен. Это объясняется тем, что если пользователь применит команду отмены действия для только что показанной заполненной формы, то форма вернется в исходное состояния, а процесс возврата формы в исходное состояния весьма ресурсозатратерн.

Пример иллюстрирует обработчик события команда, в котором происходит регистрация измений интерактивных действий пользователя. Пользователю выводится таблица с заголовком и пустой строкой. В качестве интерактивных действий выступают две операции - добавление новой строки и ее заполнение. Два этих действия вызываются при помощи кнопок панели инструментов.

Пример

ТИП РедФорма(ТАБ_ФОРМА)
[
  ПОДМЕНА файл = "Таб_форма.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))
        УСТ_ДАННЫЕ_ЯЧЕЙКИ(яч_цена, СУММАП(цена))
	ИНАЧЕ
	  РЕЗУЛЬТАТ = НЕТ
    КОНЕЦ_ВЫБОРА
  КОНЕЦ_ФУНКЦИИ
]


ВЫЧИСЛИТЬ
  ПЕРЕМ РедФорма: тф
  // тф <- данные
  тф.ПОКАЗАТЬ
КОНЕЦ

См. также: