1с ширина выпадающего списка как уменьшить

Обновлено: 05.07.2024

Работа с полем выбора

Элемент управления "Поле выбора" предназначен для хранения и быстрого выбора одного из значений, входящих в его список выбора. Список выбора для поля выбора есть список значений. Значением поля выбора является одно единственное значение, а не весь список выбора.

Установка значения в поле выбора

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

Например, если список выбора имеет значениями числа 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 справочника в значения из списка выбора не входит.

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

Мы подготовили ряд изменений, которые должны сделать интерфейс 1С:Предприятия более удобным, повысить его юзабилити. Известно, что на удобство работы влияют не только большие, фундаментальные решения, но и значительное количество «мелочей», с которыми постоянно сталкивается пользователь. В версиях 8.3.8 и 8.3.9 мы решили собрать некоторые «неудобные мелочи», и улучшить их работу.

Ширина выпадающего списка поля ввода

Реализовано в версии 8.3.8.1652.

Раньше ширина выпадающего списка поля ввода была постоянной, и не изменялась в процессе работы. Когда вы знали, что представления элементов будут заведомо длинными, вы могли установить нужную ширину списка с помощью свойства ШиринаВыпадающегоСписка. Например, для справочников видов деятельности или любых списков, содержащих регламентированные значения.

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


А делать такой список заведомо широким тоже неудобно, потому что в большом количестве случаев он будет просто занимать лишнее место на экране.

Чтобы решить эту проблему мы научили выпадающий список поля ввода автоматически подстраивать свою ширину под ширину отображаемых в нём элементов.


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

Минимальная ширина выпадающего списка, как и раньше, определяется как максимальное значение из фиксированного значения, заданного константой в Платформе, и значения свойства ШиринаВыпадающегоСписка.

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

Также мы изменили поведение при нажатии клавиш Home и End. Раньше, когда поле находилось в режиме редактирования, и у него был открыт выпадающий список, нажатие этих клавиш приводило к перемещению курсора вверх и вниз по списку.

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

Удобство работы со списками документов

Реализовано в версии 8.3.8.1652.

Работа со списками документов или журналами документов несколько отличается от работы с прочими списками. Документы имеют ряд функциональных возможностей, которые используются довольно часто, но доступ к ним в форме списка был не очень удобным. Через меню Ещё, или через командную панель формы.

Теперь мы добавили эти команды в контекстное меню таблицы.


Команда завершения работы пользователя

Реализовано в версии 8.3.8.1652.

Раньше пользователи, привыкшие к работе с веб-приложениями, испытывали определённое неудобство от того, что не видели команды завершения работы пользователя. Они привыкли к тому, что обычно такая команда есть, и она находится на видном месте. И чтобы завершить работу веб-приложения нужно не просто закрыть окно браузера, а именно выполнить эту команду. Которая, в том числе, завершит и сеанс авторизации. Чтобы при следующем запуске приложения нельзя было войти в него «просто так», а только после ввода логина и пароля.

В 1С:Предприятии и команда Выход, и команда Завершить работу пользователя … (при использовании OpenID-аутентификации) существуют, но располагаются в меню Файл, о чём многие пользователи не знают.


Чтобы сделать работу пользователей более привычной, мы добавили команду завершения работы в заголовок приложения, рядом с кнопкой О программе. Она отображается в виде гиперссылки с именем текущего пользователя.


При нажатии на гиперссылку открывается диалог с именем пользователя и командой Завершить работу.


Эта команда, при обычной аутентификации, завершает работу клиентского приложения. А при OpenID-аутентификации она завершает работу пользователя (OpenID logout) и также завершает работу приложения.

При публикации информационной базы на веб-сервере можно задать URL, по которому будет выполнен переход после завершения работы веб-клиента этой командой. Например, для возврата на основную страницу поставщика сервиса, если пользователь работал с приложением в модели сервиса.

Прокрутка в таблицах динамических списков

Реализовано в версии 8.3.8.1652.

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


На наш взгляд эти кнопки позволяют удобнее и понятнее выполнять наиболее частые действия в больших списках. Раньше не все пользователи понимали, как перейти в самый верх, самый низ списка, или как пролистать страницы. Теперь выполнять эти действия будет проще. В том числе и потому, что такой же подход (листание) отчасти принят в веб-приложениях для показа очень больших списков.

Вертикальная полоса, отображающая прокрутку, теперь отсутствует. А горизонтальная прокрутка отображается так же, как и раньше, под таблицей, в области, не занятой кнопками. Но отрисовывается она теперь (как и все полосы прокрутки) более тёмным цветом, чем раньше, поэтому хорошо заметна в форме.

Вертикальную полосу прокрутки мы убрали потому, что её текущий вид вводил пользователей в заблуждение. Они воспринимали её как обычную (такую же, как все другие) полосу прокрутки, и пытались перемещать бегунок. Это не давало им ожидаемого результата, т.к. динамический список так не работает.

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

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

Работа тонкого клиента на сенсорных экранах

Реализовано в версии 8.3.9.1818.

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

Для текстового документа, поля ввода, графической схемы, планировщика и форматированного документа прокрутка осуществляется двумя пальцами.


Жест одним пальцем используется в них для выделения или перетаскивания внутри элемента.

Для табличного документа прокрутка одним пальцем осуществляется только по вертикали.


По горизонтали жест одним пальцем используется в нём для выделения.

В то же время прокрутка двумя пальцами работает в табличном документе по обоим направлениям.


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


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

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

Раньше ширина выпадающего списка поля ввода была постоянной, и не изменялась в процессе работы. Когда вы знали, что представления элементов будут заведомо длинными, вы могли установить нужную ширину списка с помощью свойства ШиринаВыпадающегоСписка. Например, для справочников видов деятельности или любых списков, содержащих регламентированные значения.

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


А делать такой список заведомо широким тоже неудобно, потому что в большом количестве случаев он будет просто занимать лишнее место на экране.

Чтобы решить эту проблему мы научили выпадающий список поля ввода автоматически подстраивать свою ширину под ширину отображаемых в нём элементов.


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

Минимальная ширина выпадающего списка, как и раньше, определяется как максимальное значение из фиксированного значения, заданного константой в Платформе, и значения свойстваШиринаВыпадающегоСписка.

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

Также мы изменили поведение при нажатии клавиш Home и End. Раньше, когда поле находилось в режиме редактирования, и у него был открыт выпадающий список, нажатие этих клавиш приводило к перемещению курсора вверх и вниз по списку.

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

Читайте также: