1с ограничить список выбора из справочника
Работа с полем выбора
Элемент управления "Поле выбора" предназначен для хранения и быстрого выбора одного из значений, входящих в его список выбора. Список выбора для поля выбора есть список значений. Значением поля выбора является одно единственное значение, а не весь список выбора.
Установка значения в поле выбора
В Поле выбора можно установить любое значение. В процессе установки значения будет выполнен его поиск среди значений, входящих в список выбора. Если устанавливаемое значение найдено в списке выбора, оно будет сохранено в поле выбора, иначе в поле выбора будет установлено значение "Неопределено". Исключение составляет значение "Неопределено", которое можно установить в поле выбора в любом случае, независимо от того, какие значения при этом хранятся в списке выбора.
Например, если список выбора имеет значениями числа 1, 2 и 3, тогда в поле выбора удастся установить любое из этих значений. При установке других значений, хотя ошибки времени выполнения и не произойдет, они сохранены не будут.
Представление значения, хранящегося в поле выбора
В качестве представления значения, хранящегося в поле выбора, используется представление элемента списка выбора, значение которого эквивалентного значению поля выбора. Если у элемента списка выбора представление не указано, оно формируется в виде текстового представления самого значения. В ситуациях, когда в списке выбора есть несколько одинаковых значений с разными представлениями, будет использоваться первое найденное из этих значений. Представление значения при этом будет сформировано на его основе, как описывалось выше.
Поиск значения в поле выбора по введенному тексту
Поиск значений по тексту осуществляется на основе представлений для элементов списка выбора. Для тех из элементов, в которых представление значения не указано, используется представление самого значения, хранящегося в нем.
Связь поля выбора с данными
Поле выбора можно связывать по данным с выбираемым значением, а не со списком значений. Например, если мы хотим, чтобы в поле выбора можно было выбирать число, и оно было связано по данным со значением некоторого реквизита, типом данных для реквизита должно быть число, а не список значений.
Особенности инициализации и использования списка выбора
Для правильного отображения в поле выбора данных, с которыми он связан, список выбора должен формироваться в теле модуля формы. Формировать список выбора для поля выбора в обработчике любого из событий формы – поздно. Это приведет к тому, что в поле выбора будет установлено значение "Неопределено", хотя в реквизите при этом может быть любое значение.
Такая ситуация возникает из-за того, что данные устанавливаются в элементы управления формы, связанные с ними, в процессе создания формы. А обработчики событий ПередОткрытием(), ПриОткрытии() вызываются после создания самой формы, в процессе инициализации ее визуальной части. Получается, что при создании формы полю выбора поставили некоторое значение в момент, когда его список выбора пустой. При этом, поскольку список выбора пустой, вместо устанавливаемого значения в поле выбора будет сохранено значение "Неопределено".
При смене типа значения (свойство "ТипЗначения") для списка выбора, у которого есть элементы, будет выполнено преобразование их значений к новому типу. Может быть следующая ситуация: после смены типа значения для списка выбора некоторое значение, которое раньше удавалось успешно установить в поле выбора, после смены типа значения установить не получается. Причина такой ситуации в том, что в процессе установки типа значения для списка выбора, успешно устанавливаемое ранее значение было конвертировано в другое значение (в соответствии с новым типом значения). Соответственно, устанавливаемое значение в списке выбора больше найдено не будет.
Использование поля выбора: пример 1
Пусть есть форма, в которой размещены поле выбора (ПолеВыбора1), поле ввода (ПолеВвода1) и создан реквизит (Реквизит1: число, длина = 10, точность = 0). В качестве данных для редактирования в ПолеВвода1 и ПолеВыбора1 стоит реквизит Реквизит1. В теле модуля формы написан следующий код:
Открыв такую форму в режиме 1С:Предприятие, можно видеть, как будут устанавливаться значения в поле выбора:
1. В начальном состоянии поле выбора - пустое, поле ввода содержит значение 0.
2. Выбираем в поле выбора в выпадающем списке строку с надписью "Один": в поле ввода помещается значение 1. Поскольку поле ввода и поле выбора связаны с одним и тем же реквизитом формы, при изменении значения в поле ввода оно устанавливается в поле выбора и наоборот. В данном случае в поле выбора выбрали строку "Один", значение для которой равно 1. Оно и отобразилось в поле ввода.
3. Выбираем в поле выбора в выпадающем списке строку с надписью "Два": в поле ввода помещается значение 2.
Перейдем в поле ввода и попробуем редактировать значения в нем:
1. Введем в поле ввода значение 3 и сойдем с поля ввода. В поле выбора запишется значение 3 и установится значение из соответствующей строки списка выбора поля выбора ("Три").
2. Вернемся в поле ввода и введем в нем значение 4. Перейдем с поля ввода к следующему элементу управления. В поле ввода будет сохранено введенное значение "4", а поле выбора станет пустым. В данном случае введенное в поле ввода значение 4 будет сохранено в связанных с полем ввода данных, после чего выставлено из них в поле выбора. Поскольку поле выбора в списке выбора значения 4 не имеет, оно установлено в поле выбора не будет.
Использование поля выбора: пример 2
Пусть есть форма, в которой размещены поле выбора (ПолеВыбора1), поле ввода (ПолеВвода1) и создан реквизит (Реквизит1: СправочникСсылка.Номенклатура). В качестве данных для редактирования в ПолеВвода1 и ПолеВыбора1 стоит реквизит Реквизит1. В теле модуля формы написан следующий код:
Открыв такую форму в режиме 1С:Предприятие, можно видеть, как будут устанавливаться значения в поле выбора:
1. В начальном состоянии поле выбора и поле ввода - пустые:
2. Выбираем в поле выбора в выпадающем списке строку с надписью "Один": в поле ввода помещается значение. Поскольку поле ввода и поле выбора связаны с одним и тем же реквизитом формы, при изменении значения в поле ввода оно устанавливается в поле выбора и наоборот. В данном случае в поле выбора выбрали строку "Один", значение для которой равно ссылке на на элемент справочника Справочники.Номенклатура.Элемент1. Оно и отобразилось в поле ввода.
3. Выбираем в поле выбора в выпадающем списке строку с надписью "Два": в поле ввода помещается ссылка на элемент справочника Справочники.Номенклатура.Элемент2:
Перейдем в поле ввода и попробуем редактировать значения в нем:
1. Выберем в поле ввода значение Справочники.Номенклатура.Элемент1. В поле выбора запишется значение Справочники.Номенклатура.Элемент1 и установится значение из соответствующей строки списка выбора поля выбора ("Один").
2. Выберем в поле ввода значение Справочники.Номенклатура.Элемент2. В поле выбора запишется значение Справочники.Номенклатура.Элемент2 и установится значение из соответствующей строки списка выбора поля выбора ("Два").
3. Выберем в поле ввода значение Справочники.Номенклатура.Элемент3. В поле выбора значение Справочники.Номенклатура.Элемент3 записано не будет, поскольку оно не было добавлено в список выбора. Значением в поле ввода будет "Неопределено":
Использование поля выбора: пример 3
Пусть есть внешняя обработка, в которой создан реквизит Реквизит1 типа СправочникСсылка.Номенклатура. Во внешней обработке есть две формы: в первой устанавливается значение реквизита и по нажатию на кнопку открывается вторая форма.
В левой колонке - внешний вид первой формы внешней обработки. По нажатию на кнопку "Открыть форму" из поля ввода берется значение и сохраняется в реквизите внешней обработки, после чего открывается вторая форма:
В правой колонке - внешний вид второй формы внешней обработки. В ней размещены поле выбора и поле ввода; они оба связаны с реквизитом внешней обработки Реквизит1 по данным. Приведем текст модуля формы:
Мы видим,. что в модуле формы инициализируется список выбора для поля выбора: поле выбора может принимать значения Справочники.Номенклатура.Элемент1, Справочники.Номенклатура.Элемент2, Неопределено. При этом для двух первых значений явно указаны их представления - "Один" и "Два".
Посмотрим, как будет выглядеть вторая форма в зависимости от того, какое значение сохранено предварительно в реквизите внешней обработки Реквизит1.
Значение реквизита - пустая ссылка:
В данном случае в поле ввода значением будет пустая ссылка на элемент справочника, а в поле выбора - Неопределено . Поскольку в списке выбора для поля выбора пустая ссылка на элемент справочника в значения не входит, ее установить нельзя - при установке значения в виде пустой ссылки поле выбора примет значение Неопределено .
Значение реквизита - одно из значений, имеющихся в списке выбора для поля выбора:
В данном случае и в поле ввода, и в поле выбора значением будет ссылка на Элемент1 справочника. При этом для представления значения поле выбора воспользуется представлением установленного значения из списка выбора - строкой "Один".
Значение реквизита в списке выбора для поля выбора отсутствует:
В данном случае в открываемой форме в поле выбора и поле ввода будет произведена попытка установить в качестве значения ссылку на Элемент3 справочника. В поле ввода такое значение будет нормально установлено, а вот в поле выбора после его установки сохранится значение Неопределено , поскольку ссылка на Элемент3 справочника в значения из списка выбора не входит.
Заметим, что в данном примере в случае переноса инициализации списка выбора для поля выбора в любой из обработчиков событий открываемой формы в каждом из рассмотренных случаев поле выбора будет принимать значение Неопределено , поскольку на момент установки значения в него список выбора будет еще пустой.
Как сделать в выпадающем списке отбор по набраному тексту
Есть выпадающий список, как сделать чтоб при наборе текста в нем предлагало варианты которые.
Отбор по владельцу в выпадающем списке (8.3)
Раньше как-то делал, после перерыва в практике забыл начисто. Потыкался наугад, не помогло. Есть.
Как в выпадающем списке сделать поле для ввода?
как сделать чтобы в выпадающем списке можно было не только выбрать, но и ввести значение?
Как разместить кнопку в выпадающем списке
Подскажите требуется сделать кнопочку добавить при выборе из выподающего списка (<select><option>).
Получите запросом все нужные счета и установите отбор по списку счетов
Tklwegsd, не представляю как это сделать, нашел в инете похожий пример, но по моему там лишнегоgabd_marat, Выборкой или получением каждого нужного счета через
и т.д., но это увеличит количество обращений к базе, что в принципе считается не очень хорошим тоном.К тому же во втором случае если будет в план счетов добавлен новый субсчет - придется дописывать код. нашел в инете похожий пример, но по моему там лишнего Если вы хотите писать под 1С и не умеете делать запросы к базе - то самое время научиться =)
Код в примере то что нужно, только в условие иерархии нужно вставить список значений в вашем случае. renat_dmitriev, Запрос не написал. но если даже создаю функцию на сервере и вставляю код выше, все равно не работает (выдает полный список плана счетов). В чем причина ? (Читал что в 1с 8.3 нужно правильно настроить свойства поля, были какие то изменения, никто не в курсе)
gabd_marat, Может причина в том, что эта процедура у вас на сервере, а на клиенте ничего не вызывается? Вы смотрели в отладчике? В процедуру заходит? Отбор устанавливает? В форме выбора при открытии отбор установлен?
Добавлено через 23 минуты
Если счетов немного, то 100% работающий вариант через ДанныеВыбора:
В обработчике на клиенте пишете
где ПолучитьСписокСчетов - серверная функция, возвращающая список значений из вашего запроса.
По поводу этого кода - мне вообще непонятно как на сервер можно в управляемом приложении передать Элемент. Я пытаюсь - выдает ошибку. Похоже нужно открывать прямо с клиента через открытьФорму. Сейчас посмотрю как это делается.
Добавлено через 9 минут
Рабочий код:
Через окно свойств элемента формы, а не просто в коде, создаете обработчик на клиенте
На сервере создаете серверную процедуру ПолучитьСписокСчетов, которая возвращает список счетов отбора.И все должно прекрасно работать.
Спасибо , сейчас попробую
gabd_marat, Почитайте пожалуйста в синтакс-помощнике событие Автоввод, думаю по аналогии разберетесь. Там нас интересует параметр ДанныеВыбора, который опять же можно заполнить нашим списком, добавив в запрос дополнительное условие
а в параметры запроса добавив
где переменная Текст является параметром обработчка. Как отфильтровать значения в выпадающем списке?
Здравствуйте! Суть вопроса вот в чем: есть таблица "Table1" с набором различных полей, одно из.
Как посчитать сумму значений в выпадающем списке?
Подскажите, пожалуйста. Есть выпадающий список в той же ячейке. Каждому элементу списка присвоено.
Как убрать повторяющиеся записи в выпадающем списке
Всем привет! Столкнулся со следующей проблемой: Ни с того, ни с сего, в моём выпадающем списке по.
Как установить font bold в выпадающем списке?
В тэге <select> внутри тэгов <option> хочу чтобы был текст жирным шрифтом. Но успеха не добился.
Как в webbrowser'е выбрать пункт в выпадающем списке
Доброго времени суток, подскажите как в webbrowser'е выбрать пункт в выпадающем списке ? .
Как в выпадающем списке выбрать несколько записей
Всем привет! Необходимо сделать так, что бы при добавление в расписание занятия записи, я мог.
Использование отбора:
Функционал, который используется для интерактивного отбора в списках, можно использовать и для отбора программным способом.
Для этого нужно для события НачалоВыбора соответствующего поля ввода определить процедуру обработки и внутри процедуры программно устанавить отбор для списка.
Далее следует пример процедуры обработки события НачалоВыбора для поля ввода СтатьяПДР. Реквизит (и поле ввода, соответственно) СтатьяПДР имеет тип СправочникСсылка.ПрочиеДоходыИРасходы. Для списка справочника «Прочие доходы и расходы» устанавливается отбор по реквизиту «Вид прочих доходов и расходов» со значением «Прочие внереализационные доходы (расходы)».
Код 1C v 8.х
Обратите внимание на строку кода:
Код 1C v 8.х
Она закрывает доступ к настройке отбора «Вид прочих доходов и расходов». Таким образом, пользователь не может отключить заданный программно отбор и имеет возможность сделать выбор значения только из ограниченного списка.
Внутри процедуры обработки события НачалоВыбора параметру СтандартнаяОбработка нужно обязательно присвоить значение Ложь. В противном случае будет открыт и ограниченный список, и стандартный список, а это, конечно, не входит в наши планы.
В следующем примере для поля ввода СчетДт типа ПланСчетовСсылка.Хозрасчетный устанавливается отбор в виде списка счетов. Список счетов предварительно формируется с помощью запроса.
Использование выбора из списка:
Выбор значения Перечисления обычно осуществляется из маленького списка. Но даже если включить выбор из формы (это делается с помощью свойства «Быстрый выбор» поля ввода), функционал отбора для перечислений все равно неприменим.
В таком случае подходящий способ ограничения списка выбора - использование метода формы ВыбратьИзСписка. Аналогично первому способу, необходимо определить процедуру обработки события НачалоВыбора для поля ввода значения. В следующем примере для поля ввода ВидПДР типа ПеречислениеСсылка.ВидыПрочихДоходовИРасходов программно устанавливается ограниченный список выбора.
Результат работы процедуры показан на рисунке. Метод ВыбратьИзСписка открывает маленький список с набором значений, переданных в процедуру в первом параметре (в примере - список значений ВидыПДР).
Пример ограничения списка выбора для перечисления в 1С 8
У меня непонятки с Клиент и Сервером.
Есть процедура заполнения СпискаЗначений. Список нужно заполнить документами. Для того, чтобы вытащить список документов, я использую Метаданные.Документы. Метаданные можно использовать только на сервере.
А процедуру, в которой я использую СписокЗначений, СписокДокументовНачалоВыбора можно использовать только на клиенте. Что делать?
Как отобразить и заполнить список выбора в 8.3
Добрый день. Есть на форме у меня таблица. Две колонки. Одна колонка число, вторая строка. В.
Как заполнить список выбора у элемента табличной части
Насколько понял нужно формировать в обработчике начало выбора или начало выбора из списка, это я.
Ошибка в SQL: Список выбора для инструкции INSERT содержит меньшее число элементов, чем список вставки
Всем привет. возникла проблема с заполнением таблицы из других таблиц. USE GO INSERT INTO .
Как заполнить список случайными целыми числами и вывести из него во второй список нечетные числа
Вообщем нужно создать 2 кнопки: 1)Заполняет список случайными целыми числами. 2)выводит во второй.
надо заполнить просто списком всех видов документов в конфигурации?
Phil, Спасибо!! Так правильно будет? Можно ли вытаскивать имя документа, как я сделала?
Phil, а я смогу потом по синониму найти документ? Мне нужно будет сделать проверку на наличие реквизита у выбранного документа. Тамика, а можно всю задачу целиком узнать, что надо сделать?
и каким способом надо реализовать, ил всё равно как?
Phil, и подскажите пожалуйста - как избежать лишнего добавления документов в список? У меня процедура ПриначалеВЫбора. Она срабатывает каждый раз, когда я делаю выбор и каждый раз создаются все эти документы. В итоге, в списке значений два набора одинаковых.
Добавлено через 55 секунд
Phil, нужно сделать список документов выпадающий. Потом я выбираю один из них и нажимаю кнопку. На нажатие должна выполняться процедура - проверка наличия реквизита "Сумма" у документа. Если есть - сообщить значение, если нет - вывести предупреждение об этом.
Phil, сейчас попробую код.)))
Такой вопрос ещё - как сделать, чтобы вот при выборе элемента в списке он становился на поле ввода?
Объяснила, блин.
Есть у меня два документа в выпадающем списке. Когда я выбираю Документ1, то хочу, чтобы в поле этого элемента отразился мой выбор - Документ1. Если Документ2, то чтобы он отразился, соответственно. А у меня получается, что выбираю Документ2 - а в поле элемента выбора светится Документ1.
И, простите за глупый вопрос, что значит вопросительный знак после Сообщить.
Тамика, почему список выбора нужно заполнять именно в момент начала выбора?
Читайте также: