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

Обработчик ТАБЛИЦА.редактирование

Обработчик редактирование вызывается таблицей, когда пользователь выбирает ячейку или строку с помощью двойного клика правой кнопкой мыши или нажатия клавиши Enter. Учитываются только нефиксированные ячейки. При отсутствии обработчика редактирование применяется редактирование в соответствии с типом значения индексного поля элементы. Если значение для выбранной ячейки в индексном поле элементы отсутствует, то ничего не происходит. Если обработчик задан, поведение определяется возвращаемым значением.

ФУНКЦИЯ ЦЕЛОЕ: <имя функции>(ПЕРЕМ ТАБЛИЦА: элемент; 
                             ЦЕЛОЕ: столбец; 
                             ЦЕЛОЕ: строка; 
                             ПЕРЕМ *: знач; 
                             ПЕРЕМ СТРОКА: парам)

Параметры

элемент
Ссылка на элемент, для которого вызывается обработчик.
столбец
Номер столбца ячейки.
строка
Номер строки ячейки.
знач
Данные для редактирования.
парам
Строка дополнительных параметров редактирования.

Возвращаемое значение

Значение одной из констант РЕД_....

Параметры редактирования ячеек

Параметры редактирования ячеек служат для дополнительной настройки поля ввода, создаваемого в ячейке таблицы. Содержимое строки параметров зависит от типа создаваемого поля ввода, т.е. возвращенной константы РЕД_… . Для большинства полей ввода параметры задаются стандартной строкой параметров. В стандартной строке параметров пары <параметр> = <значение> разделяются ";". В значениях параметров не должно содержаться символа ";". Значение главного параметра может указываться в начале строки без имени параметра.

Перед строкой параметров поля ввода может указываться фиксированный или настраиваемый формат в строковом представлении. Формат указывается в начале строки через разделитель "||" от остальных параметров. Пример строки параметров с настраиваемым форматом для вещественных чисел (РЕД_ЧИСЛО): "F(@Цена)||спин=0.1;кнопки=SE*".

Для применения к полю ввода формата, указанного в поле таблицы формат или форматы, нужно указать в начале строки "||" без предшествующего фиксированного или настраиваемого формата. Например: "||спин=0.1;кнопки=SE*".

Форматы используются только для чисел, логики, дат и времени. Тип указанного формата должен соответствовать типу элемента, т.е. при возврате РЕД_ДАТА нужно указывать формат D(...) и т.д.

В качестве параметров редактирования могут выступать следующие строки:

* – если формат указан в строке параметров (через "||"), то значение этого параметра игнорируется.

Пример:

Пусть в таблице надо отобразить записи, которые состоят из даты, соответствующей ей строки текста и логического значения. Для начала создадим тип строки таблицы. Затем объявим в типе формы индексное поле, элементами которого будут строки таблицы. Свяжем таблицу с этим индексным полем с помощью обработчика данные. Реализуем редактирование данных всех трех столбцов различными способами. Для даты используем вывод на экран в строковом виде с помощью функции ДАТАП. Для логических значений выведем строки "Вкл" или "Выкл" и будем использовать редактирование с помощью модального диалогового окна (функция ВОПРОС). Редактирование строки осуществим в том виде, как она выводится на экран.

// Тип для описания строк таблицы
ТИП СтрокаТаблицы
[
    ДАТА: дата = 01.01.2001;
    ЛОГИКА: вкл = ДА;
    СТРОКА: текст = "-";
] // ТИП СтрокаТаблицы

ТИП МояФорма (БЛАНК)
[
    // индексное поле – внешний для таблицы источник данных
    СтрокаТаблицы: строки [ ЧИСЛО ];

    // другие поля формы
    // …

    // элемент таблицы
    ТАБЛИЦА: Таблица1 = [ данные = ПолучениеДанных,
                          редактирование = РедДанных,
                          сохранение = СохрДанных
                          // …
    ];

    // метод формы – обработчик запроса данных
    ФУНКЦИЯ ПолучениеДанных(ПЕРЕМ ТАБЛИЦА: таблица; ЧИСЛО: столбец,
                            строка; ПЕРЕМ *: знач)	
        ВЫБОР (столбец)
            #1:    // в первый столбец выводим дату 
                знач =  ДАТАП( строки[строка].дата )
            #2:    // во второй столбец выводим признак выключения
                ЕСЛИ строки[строка].вкл ТО
                    знач = "Вкл"
                ИНАЧЕ
                    знач = "Выкл"
                КОНЕЦ_ЕСЛИ
            #3:    // в третий столбец выводим текст
                знач = строки[строка].текст
        КОНЕЦ_ВЫБОРА
    КОНЕЦ_ФУНКЦИИ

    // метод формы – запрос на начало редактирования
    ФУНКЦИЯ ЧИСЛО: РедДанных (ПЕРЕМ ТАБЛИЦА: таблица; ЧИСЛО: столбец,
                        строка; ПЕРЕМ *: знач;  ПЕРЕМ СТРОКА: парам )
        ВЫБОР (столбец)
            #1:    // первый столбец – редактирование даты
                знач = строки[строка].дата
                ВЫХОД ( РЕД_ДАТА )
            #2:    // второй столбец – запрет редактирования в таблице,
                   // вызов диалога
                строки[строка].вкл = ВОПРОС("Включить?")
                ВЫХОД ( РЕД_ЗАПРЕТ )
            #3:    // редактирование строки
                знач = строки[строка].текст
                ВЫХОД ( РЕД_СТРОКА )
        КОНЕЦ_ВЫБОРА
        // в остальных случаях – стандартное поведение
        РедДанных = РЕД_СТАНДАРТ
    КОНЕЦ_ФУНКЦИИ

    // метод формы – запрос на сохранение данных после редактирования
    ФУНКЦИЯ СохрДанных (ПЕРЕМ ТАБЛИЦА: таблица;  ЧИСЛО: столбец,
                        строка; *: знач)
        ВЫБОР (столбец)
            #1:    // сохранение даты
                строки[строка].дата = ДАТА ( знач )
            #3:    // сохранение текста
                строки[строка].текст = СТРОКА ( знач )
        КОНЕЦ_ВЫБОРА 
    КОНЕЦ_ФУНКЦИИ
] // ТИП МояФорма

См. также: