Список выбора поля 1с управляемое приложение.

Очень часто бывает необходимо на форме дать возможность пользователю выбрать настройки на форме (перед нажатием кнопки «Выполнить все»). Когда нужно выбрать одно значение из нескольких предопределенных – часто используется выпадающий список значений 1С на форме.

Выпадающий список значений 1С на форме — добавьте на форму толстого клиента поле выбора, уточните его название. Чтобы пользователь не мог изменять список – снимите галочку «Редактирование текста» в свойствах поля выбора.

Сам список выбора добавим программно в обработчике формы «ПриОткрытии». У поля выбора есть подчиненный список значений ЭлементыФормы.ИмяПоляВыбора.СписокВыбора, а для установки значения по умолчанию, и для определения выбранного значения ЭлементыФормы.ИмяПоляВыбора.Значение:
Процедура ПриОткрытии()

ЭлементыФормы.ВыборЗначения.СписокВыбора.Очистить();
ЭлементыФормы.ВыборЗначения.СписокВыбора.Добавить(0, "Создать документ");
ЭлементыФормы.ВыборЗначения.СписокВыбора.Добавить(1, "Изменить документ");
ЭлементыФормы.ВыборЗначения.СписокВыбора.Добавить(2, "Удалить документ");
ЭлементыФормы.ВыборЗначения.Значение = 0;

КонецПроцедуры

Выпадающий список значений 1С на форме — в тонком клиенте на форму нужно создать реквизит формы, в котором мы будем хранить результат, например с типом строка. Перетащите его на форму.
Выпадающий список значений 1С на форме — Вариант 1)

  • Включим кнопку выбора списка
  • В свойстве «Список выбора» нажмите «…» и введите варианты
  • Результат выбора будет сохранен в выбранном реквизите


Выпадающий список значений 1С на форме — Вариант 2)

  • Включим кнопку выбора списка
  • Добавим обработчик «НачалоВыбораИзСписка»

&НаКлиенте
Процедура ВыбранноеЗначениеНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)

Элементы.ВыбранноеЗначение.СписокВыбора.Добавить("Добавить документ");
Элементы.ВыбранноеЗначение.СписокВыбора.Добавить("Редактировать документ");
Элементы.ВыбранноеЗначение.СписокВыбора.Добавить("Удалить документ");

КонецПроцедуры

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

Выпадающий список значений 1С на форме — Вариант 3)

Данный вариант работает аналогично, но интерфейсно выглядит по другому.

Для того чтобы открыть форму выбора с отбором в 1с 8.2 (обычные формы), нам нужно выполнить некоторые действия. Сначала мы ее получим. После этого выставим отбор и программно откроем, вот пример кода:

Отбор на форме в поле ввода 1С 8.2 с несколькими значениями

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

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

Установка отбора в поле ввода на форме в 1С 8.3, событие НачалоВыбора

Теперь рассмотрим отбор в поле ввода на управляемой форме в 1С 8.3 . Найдем на форме интересующий нас элемент, в котором мы будем устанавливать отбор, в нашем случае это поле «Организация». Находим событие «НачалоВыбора», щелкаем на лупу и оказываемся в процедуре. Мы видим параметр ДанныеВыбора, этот параметр имеет тип СписокЗначений. Для того чтобы ограничить выбор необходимыми элементами, нам необходимо заполнить СписокЗначений. Элементы выбрать можем только на сервере, поэтому создаем процедуру с директивой компиляции &НаСервере. В данной процедуре заполняем ДанныеВыбора.

Полный синтаксис (нажмите, чтобы раскрыть)

СписокЗначений

Описание:

Список значений - это не сохраняемый в базе данных объект, который позволяет строить для решения интерфейсных задач динамические наборы значений и манипулировать ими (добавлять, редактировать, удалять элементы, сортировать). Он может быть наполнен значениями любого типа, т.е. в одном списке типы хранимых значений могут быть разными. Одним из примеров использования данного объекта может служить организация выбора конкретного документа из списка возможных документов, сформированного по сложному алгоритму.

Элементы коллекции: ЭлементСпискаЗначений

Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл . При обходе выбираются элементы коллекции.

Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс элемента (нумерация с 0 ).

Свойства:

Методы:

Вставить (Индекс, Значение, Представление, Пометка, Картинка)Вставляет новый элемент в список значений на позицию с указанным индексом. ВыбратьЭлемент (Заголовок, Элемент)Вызывает окно для интерактивного выбора одного из элементов, входящих в список значений. Элемент - элемент, на который следует изначально спозиционировать список значений при интерактивном выборе. Если значением параметра не является элемент списка значений, входящий в данный список, позиционирования не произойдет. ВыгрузитьЗначения ()Создает массив и копирует в него значения элементов списка значений. Добавить (Значение, Представление, Пометка, Картинка)Добавляет новый элемент в конец списка значений. ЗагрузитьЗначения (МассивЗначений)Загружает список значений значениями из переданного массива. При этом все прежние элементы списка удаляются. ЗаполнитьПометки (Пометка)Устанавливает пометку у всех элементов списка значений. Индекс (Элемент)Получает индекс элемента в списке значений. Если не найдено, то возвращается -1. Количество ()Получает количество элементов списка значений. НайтиПоЗначению (ИскомоеЗначение)Осуществляет поиск значения элемента списка значений. Если ни один элемент не хранит значения, равного искомому, то возвращается значение Неопределено . НайтиПоИдентификатору (Идентификатор)Получает элемент списка значений по идентификатору. Если элемент не найден, то возвращается Неопределено . ОтметитьЭлементы (Заголовок)Устанавливает или снимает (интерактивно) пометки у элементов списка значений. Возвращает Истина , если в диалоге нажата кнопка "ОК", Ложь - в противном случае. Очистить ()Очищает список значений, удаляя из него все элементы. ПоказатьВыборЭлемента (ОписаниеОповещенияОЗакрытии, Заголовок, Элемент)Вызывает окно для интерактивного выбора одного из элементов, входящих в список значений. ПоказатьОтметкуЭлементов (ОписаниеОповещенияОЗакрытии, Заголовок)Предназначен для интерактивной установки состояний пометок у элементов списка значений. Получить (Индекс)Получает значение по индексу. Работает аналогично оператору . Сдвинуть (Элемент, Смещение)Сдвигает элемент списка значений на заданное количество позиций вперед или назад. Скопировать ()Создает копию списка значений. СортироватьПоЗначению (Направление)Сортирует список значений в порядке возрастания или убывания хранимых элементами значений. См. пример ниже. СортироватьПоПредставлению (Направление)Сортирует список значений по возрастанию или по убыванию в алфавитном порядке представлений входящих в состав списка значений элементов. См. пример ниже. Удалить (Элемент)Удаляет элемент из списка значений, где Элемент - индекс удаляемого элемента, либо сам элемент.

Конструкторы:

Новый СписокЗначений
&НаКлиенте Процедура ВыполнитьКод(Команда) /// Как создать список значений в 1с 8.3, 8.2 Список = Новый СписокЗначений; /// Как добавить элемент в список значений в 1с 8.3, 8.2 // параметры метода добавить: // - значение // - представление // - отметка (необ.) // - картинка (необ.) Список. Добавить( 1980 , // значение элемента "Год рождения Васи" // представление ) ; Список. Добавить(1985 , "Год рождения Юли" ) ; // значения могут быть разных типов Список. Добавить("Полина" , "Имя ребёнка" ) ; /// Как вставить элемент в список значений в 1с 8.3, 8.2 // вставляем в позицию №2 (элементы нумеруются с 0) // элемент со значением 2010 и представлением // "Год рождения их совместной дочки" Список. Вставить(2 , 2010 , "Год рождения их совместной дочки" ) ; /// Как обойти элементы списка значений в 1с 8.3, 8.2 Для Каждого Элемент Из Список Цикл Сообщить( Элемент. Представление + ": " + Строка(Элемент. Значение) ) ; КонецЦикла ; /// Как очистить список значений в 1с 8.3, 8.2 Список. Очистить() ; Список. Добавить("Понедельник" ) ; Список. Добавить("Вторник" ) ; Список. Добавить("Среда" ) ; /// Как узнать количество элементов списка значений, а также /// получить элемент списка по его индексу в 1с 8.3, 8.2 // нумерация с нуля Для Индекс = 0 По Список. Количество() - 1 Цикл Сообщить(Список[ Индекс] ) ; КонецЦикла ; /// Как найти элемент списка по его значению в 1с 8.3, 8.2 ЗначВторник = Список. НайтиПоЗначению("Вторник" ) ; /// Как узнать индекс элемента в списке в 1с 8.3, 8.2 Сообщить(Список. Индекс(ЗначВторник) ) ; // 1, так как нумерация с нуля /// Как отсортировать список по его значениям в 1с 8.3, 8.2 // было: понедельник, вторник, среда Список. СортироватьПоЗначению(НаправлениеСортировки. Убыв) ; // стало: среда, понедельник, вторник /// Как удалить элемент из списка значений в 1с 8.3, 8.2 // удаляем первый элемент // параметр: элемент списка // или индекс элемента // можно так Список. Удалить(Список[ 0 ] ) ; // или так // Список.Удалить(0); /// Как сдвинуть элемент списка значений в 1с 8.3, 8.2 // сдвигаем нулевой элемент на одну позицию вперёд // было: понедельник вторник Список. Сдвинуть(0 , 1 ) ; // стало: вторник понедельник /// Как сделать копию списка в 1с 8 КопияСписка = Список. Скопировать() ; Цвета = Новый СписокЗначений; Цвета. Добавить("Красный" ) ; Цвета. Добавить("Зелёный" ) ; Цвета. Добавить("Синий" ) ; /// Как выгрузить значения списка в массив в 1с 8.3, 8.2 МассивЦветов = Цвета. ВыгрузитьЗначения() ; /// Как загрузить значения списка из массива в 1с 8.3, 8.2 Цвета. ЗагрузитьЗначения(МассивЦветов) ; КонецПроцедуры /// Как сделать немодальный выбор значения из списка /// значений в 1с 8.3, 8.2 &НаКлиенте Процедура КакСделатьНемодальныйВыборЗначения(Команда) Цвета = Новый СписокЗначений; Цвета. Добавить("Красный" ) ; Цвета. Добавить("Зелёный" ) ; Цвета. Добавить("Синий" ) ; // процедура ПослеВыбораЭлемента определена чуть ниже ОповещениеПослеВыбораЭлемента = Новый ОписаниеОповещения( "ПослеВыбораЭлемента" , ЭтотОбъект ) ; Цвета. ПоказатьВыборЭлемента( ОповещениеПослеВыбораЭлемента, "Выберите любимый цвет" ) ; КонецПроцедуры &НаКлиенте Процедура ПослеВыбораЭлемента(Элемент, Параметры) Экспорт Если Элемент <> Неопределено Тогда Сообщить(Элемент. Значение) ; КонецЕсли ; КонецПроцедуры /// Как сделать немодальную отметку значений из списка /// значений в 1с 8.3, 8.2 &НаКлиенте Процедура КакСделатьНемодальнуюОтметкуЗначений(Команда) Цвета = Новый СписокЗначений; Цвета. Добавить("Красный" ) ; Цвета. Добавить("Зелёный" ) ; Цвета. Добавить("Синий" ) ; // процедура ПослеОтметкиЭлементов определена чуть ниже ОповещениеПослеОтметкиЭлементов = Новый ОписаниеОповещения( "ПослеОтметкиЭлементов" , ЭтотОбъект ) ; Цвета. ПоказатьОтметкуЭлементов( ОповещениеПослеОтметкиЭлементов, "Выберите любимые цвета" ) ; Цвета. ЗаполнитьПометки(Истина ) ; КонецПроцедуры &НаКлиенте Процедура ПослеОтметкиЭлементов(Элементы, Параметры) Экспорт Если Элементы <> Неопределено Тогда Для Каждого Цвет Из Элементы Цикл Если Цвет. Пометка Тогда Сообщить(Цвет. Значение) ; КонецЕсли ; КонецЦикла ; КонецЕсли ; КонецПроцедуры /// Как сделать модальный выбор значения из списка в 1с 8.3, 8.2 &НаКлиенте Процедура КакСделатьМодальныйВыборЗначения(Команда) Цвета = Новый СписокЗначений; Цвета. Добавить("Красный" ) ; Цвета. Добавить("Зелёный" ) ; Цвета. Добавить("Синий" ) ; ВыбЦвет = Цвета. ВыбратьЭлемент("Выберите любимый цвет" ) ; Если ВыбЦвет <> Неопределено Тогда Сообщить(ВыбЦвет. Значение) ; КонецЕсли ; КонецПроцедуры /// Как сделать модальную отметку значений из списка /// значений в 1с 8.3, 8.2 &НаКлиенте Процедура КакСделатьМодальнуюОтметкуЗначений(Команда) Цвета = Новый СписокЗначений; Цвета. Добавить("Красный" ) ; Цвета. Добавить("Зелёный" ) ; Цвета. Добавить("Синий" ) ; Если Цвета. ОтметитьЭлементы("Выберите любимые цвета" ) Тогда Для Каждого Цвет Из Цвета Цикл Если Цвет. Пометка Тогда Сообщить(Цвет. Значение) ; КонецЕсли ; КонецЦикла ; КонецЕсли ; // а вот так можно разом установить все отметки // списка в определенное значение Цвета. ЗаполнитьПометки(Истина ) ; КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере