Функция ВЫБОР
Функция ВЫБОР выводит диалоговое окно, позволяющее выбрать строку из указанного списка.
ФУНКЦИЯ ТИП_ЧИСЛО: ВЫБОР(ТИП_СПИСОК: список [, ТИП_СТРОКА: заголовок_окна [, заголовок_колонки [, ТИП_ЧИСЛО: ширина [, номер [, ТИП_ЛОГИКА редактирование [, добавление [, удаление [, выбор_записи ]]]] ]] ]] [, [обработчики событий] ] [; имя_доп_парам_1 = знач_доп_парам_1 [; имя_доп_парам_2 = знач_доп_парам_2 [; ... ]]] )
Параметры
- список
- Объект типа список, содержимое строк которого будет выведено в диалоговом окне.
- заголовок_окна
- Заголовок диалогового окна. Если не указан, то отображается заголовок "Выбор из списка".
- заголовок_колонки
- Заголовок колонки. Если не указан, то отображается пустой заголовок.
- ширина
- Ширина строки в символах. Минимальное значение – 30. По умолчанию, либо при указании меньшего значения используется значение 30.
- номер
- Номер записи, на которую устанавливается курсор таблицы при вызове метода (по умолчанию 1).
- редактирование
- Разрешать ли редактирование значения записей списка по клавише F4 (см. Редактирование элементов). По умолчанию НЕТ.
- добавление
- Разрешать ли добавлять новые записи в список по клавише F7 (см. Добавление элемента). По умолчанию НЕТ.
- удаление
- Разрешать ли удаление записи из списка по клавише F8 (см. Удаление элемента). По умолчанию НЕТ.
- выбор_записи
- Указывает на необходимость открытия окна редактирования при выборе записи по клавише Enter (по умолчанию НЕТ).
- имя_доп_парам_n
- Имя n-го дополнительного параметра.
Внимание! Из соображений синтаксической однозначности дополнительные параметры отделяются от остальных параметров и между собой точкой с запятой, а не запятой.
Поддерживаются следующие параметры:- сообщение – текстовое сообщение, которое отображается над таблицей (строка);
- справка – ссылка на файл справки или команда Инфо-Навигатора (строка);
- кол_строк – количество видимых строк от 5 до 50, по умолчанию 10 (число).
- нач_действие – определяет действие при открытии окна: "add" - добавление строки, "edit" - редактирование тек. строки, "delete" - удаление тек. строки (строка);
- @<имя> – пользовательский параметр любого типа, который можно считать из функций-обработчиков с помощью функции РЕД_ПОЛЕ. Подробнее о типах пользовательских параметров см. Замечание 1.
- @@ – динамический список пользовательских параметров. Подробнее см. Замечание 1.
- знач_доп_парам_n
- Значение n-го дополнительного параметра (выражение соответствующего имени параметра типа).
Замечание 1. Пользовательский параметр может быть одного из простых типов (строка, число, ...) или быть списком (ТИП_СПИСОК).
Список может указываться с именованным параметром, тогда добавляются параметры с именами <имя>N, где N - номер строки списка от 1. Типом таких параметров будет "строка", а значениями - строки списка.
Например, есть переменная типа список "сп", содержащая 3 элемента "RUB", "USD" и "EUR". Укажем при вызове ВЫБОР @валюта = сп, тогда создадутся 3 параметра: "валюта1" со значением "RUB", "валюта2" со значением "USD" и "валюта3" со значением "EUR".
Для получении значения параметра функцией РЕД_ПОЛЕ надо указывать имя с учетом индекса, например "валюта2".
Такой режим использования списков может быть полезным при передаче наборов однородных параметров.
Можно передавать несколько списков с разным именем-префиксом.
Другая возможность передать динамический список параметров - это использование безымянного списка @@. Например, есть переменная типа список "сп", задаем ее как безымянный параметр: @@ = сп.
В элементах такого списка необходимо указать имя параметра, знак "=" и значение, например "город = Москва".
Все формируемые таким способом параметры имеют строковый тип. Пробелы справа, слева и вокруг = игнорируются.
Для получения значения параметра функцией РЕД_ПОЛЕ задается имя, указанное перед "=", например РЕД_ПОЛЕ("город") вернет значение "Москва".
Можно указывать несколько безымянных списков, в этом случае параметры добавляются также, как если бы были указаны в одном списке.
Замечание 2. Для получения списка имен пользовательских дополнительных параметров из функций-обработчиков можно вызвать функцию СПИСОК_АТРИБУТОВ с параметром "бд_ред_параметры". При этом возвращаются все имена, как для одиночных значений, так и заданные элементами списков.
Окно, вызываемое функцией ВЫБОР выглядит следующим образом:

Функции-обработчики
Имеется механизм пользовательской проверки и редактирования данных при добавлении, сохранении и удалении строк списка в функции ВЫБОР. Для этой цели могут задаваться функции-обработчики добавления, изменения и удаления. Все функции-обработчики имеют следующий вид:
ФУНКЦИЯ ТИП_ЛОГИКА: <имя>(ПЕРЕМ ТИП_СТРОКА: стр)
Список обработчиков указывается в квадратных скобках. Обработчики в списке разделяются запятыми. Для указания конкретного обработчика используется следующий синтаксис:
тип_обработчика:(имя_библиотеки,имя_функции)
- тип_обработчика
- Идентификатор: И – проверка Изменения, Д – проверка Добавление, У – Удаление, Н – перед добавлеНием, П – Перед изменением, А – замена диалога добАвления, М – замена диалога изМенения.
- имя_библиотеки, имя_функции
- Строковые константные выражения.
Замечание: в идентификаторе типа обработчика могут присутствовать другие буквы, но значение имеет только первая. То есть вместо И, Д, У, Н, П, А, М можно использовать, например: Изм, Доб, Уд.
Буква | Название | Комментарий | Возвращаемое значение | Строковый параметр |
---|---|---|---|---|
Н | Перед добавлением | Не вызывается при задании пользовательского диалога добавления (А). | При возврате НЕТ предотвращает показ стандартного диалога добавления строки. | На вход всегда приходит пустая строка. На выход может быть передана "рыба" для последующего редактирования пользователем. |
Д | Проверка добавления | Не вызывается при задании пользовательского диалога добавления (А). | При возврате НЕТ предотвращает добавление новой строки в список. | На вход приходит введенная пользователем строка. Обработчик может изменить строку, на выходе - строка, добавляемая в список. |
А | Замена диалога добавления | Не вызываются обработчики данных (Н и Д). Для вызова УСТ_АТРИБУТ("custom_dlg_action", ...) поддерживаются команды "continue", "repeat", "ok" и "cancel". | При возврате НЕТ соответствует нажатию "Отмена" в диалоге. | На вход всегда приходит пустая строка. На выходе строка, добавляемая в список. |
П | Перед изменением | Не вызывается при задании пользовательского диалога изменения (М). | При возврате НЕТ редактирование строки активируется в режиме "только чтение" (можно скопировать в буфер обмена). | На вход приходит исходная строка из списка. Обработчик может изменить строку, на выходе - редактируемая строка. |
И | Проверка изменения | Не вызывается при задании пользовательского диалога изменения (М). | При возврате НЕТ предотвращает сохранение измененной строки в список. | На вход приходит измененная пользователем строка. Обработчик может изменить строку, на выходе - строка, сохраняемая в список. |
М | Замена диалога изменения | Не вызываются обработчики данных (П и И). Для вызова УСТ_АТРИБУТ("custom_dlg_action", ...) поддерживаются все команды. | При возврате НЕТ соответствует нажатию "Отмена" в диалоге. | На вход приходит исходная строка из списка. На выходе строка, сохраняемая в список. |
У | Удаление | Вызывается перед удалением строки из списка. Может использоваться для показа окна подтверждения удаления. | При возврате НЕТ предотвращает удаление строки из списка. | На вход приходит удаляемая строка. Значение на выходе роли не играет. |
В функциях-обработчиках можно считать или установить значения фиксированных параметров вызовом функций РЕД_ПОЛЕ и УСТ_РЕД_ПОЛЕ:
- "#ОРИГ_ЗАГОЛОВОК" – строка, оригинальный заголовок окна, заданный при вызове функции (только чтение);
- "#ТЕК_ЗАГОЛОВОК" – строка, текущий заголовок окна;
- "#ТЕК_ПОЗ" – число, номер строки в таблице (от 1).
Возвращаемое значение
При нажатии на кнопку ОК функция ВЫБОР возвращает номер выбранной записи. При нажатии на кнопку Отмена возвращает 0. Более точно определить была нажата кнопка ОК или Отмена позволяет вызоыв функции АТРИБУТ("результат_диалога").
Замечание: существует также ключевое слово ВЫБОР, используемое для многовариантной передачи управления в зависимости от значения заданного выражения.
Пример использования
СОЗДАТЬ(варианты, ТИП_СПИСОК) варианты.ДОБАВИТЬ("Рубли") варианты.ДОБАВИТЬ("Доллары") варианты.ДОБАВИТЬ("Евро") варианты.ДОБАВИТЬ("Франк") варианты.ДОБАВИТЬ("Фунт") варианты.ДОБАВИТЬ("Юань") варианты.ДОБАВИТЬ("Рупия") валюта = ВЫБОР(варианты, "Выберите валюту", "Валюта", 70, 3, ДА, ДА, ДА, НЕТ)
