Как сделать множественный выбор в 1с

Обновлено: 02.07.2024

Организация выбора из произвольной формы (на примере выбора из списка регистра сведений)

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

Для этого используется возможность открытия формы в режиме выбора и возможность обработки события выбора.

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

Вначале создадим новую форму списка регистра сведений и назовем ее "ФормаВыбора". В форме реализуем событие Выбор табличного поля отображающего список.

В этом событии мы отменяем стандартное действие, предусмотренное расширением табличного поля, и вместо него вызываем метод ОповеститьОВыборе() , передавая ему в качестве параметра текущую строку. Значением текущей строки будет являться значение типа РегистрСведенийКлючЗаписи.<имя> .

Теперь реализуем функциональность выбора в той форме, в которой это требуется. Например, в форме обработки, имеющей поля ввода "Валюта" и "Период".

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

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

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

Теперь нам нужно только реализовать обработчик выбора в форме и выполнить в нем необходимее действия с выбранным значением.

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

В форме размещаем кнопку "Подбор". Это может быть кнопка панели инструментов или отдельно стоящая кнопка.

В обработчике события Нажатие для кнопки пишем:

При этом происходят довольно интересные вещи:

1. В первой строке получаем форму выбора. Это особая форма, которая может не совпадать с формой списка (а может совпадать). Форму выбора можно создать самому, или она будет сгенерирована системой автоматически, или форма списка может работать в режиме выбора.

Если вы получили не форму подбора, а обычную форму (методом ПолучитьФорму или ПолучитьФормуСписка), то по умолчанию у нее не установлено свойство РежимВыбора. Нужно или установить это свойство в Истина, или оповещать о выборе элемента самостоятельно (см. метод формы ОповеститьОВыборе).

а) Первым параметром можно передать имя формы или объект описания метаданных типа формы. Если у объекта несколько форм выбора, то здесь можно указать, какую форму нужно использовать.

б) Вторым параметр указывается владелец формы - форма или элемент управления, из которого производится вызов формы выбора. После совершения выбора именно владельцу формы будет послано оповещение о выборе, которое инициирует событие "ОбработкаВыбора" (у формы или элемента формы).

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

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

3. Третья строка открывает форму выбора. После первой строки форма еще не была открыта, но ее модуль уже был скомпилирован и инициализирован.

В свойствах формы должен быть назначен обработчик события "ОбработкаВыбора".

2. Множественный выбор

При таком выборе пользователь может выделить сразу несколько элементов (например, с помощью клавиши Ctrl) и после нажатия кнопки "Выбрать" система вернет массив выбранных элементов, а не один элемент, как в первом случае.

Тогда обработчик события ОбработкаВыбора можно написать так:

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

В данной статье будет описана процедура множественного выбора в 1С. Мы подробно рассмотрим метод с множественным выбором на данной платформе и проиллюстрируем его на конкретном примере, а также проведём анализ множественного подбора как функции, от которой произошла модель множественного выбора.

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

Множественный подбор – это инструмент, который работает в системе 1С 8.3 с формами справочника и делает различные подборки в них. Данная форма будет запущена до тех пор, пока не завершат её работу при помощи метода «Закрыть()».

Рассмотрим форму для документа «ПриходнаяНакладная», далее откроем обработчик команды «Подбор» и сделаем с его помощью замену старого текса новым. Данное действие может быть совершено при помощи кода, который продемонстрирован на скриншоте ниже:



Рис. 1 Работа с множественным подбором в форме справочника в 1С 8.3

Чтобы открыть форму, обращаемся к её параметрам, они регулируют состояние, в котором данная форма будет открыта. Параметры открытия формы имеют вид структуры, в которой один элемент соответствует одному состоянию. И, соответственно, код элемента – это наименование параметра открытия формы.

Данную структуру далее выводим в метод «ОткрытьФорму()». Перед этим также стоит сделать формировку структуры. Видим, что там находится единственный элемент, код которого – «ЗакрыватьПриВыборе».

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

2. Подбор при помощи множественного выбора в 1С

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

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

Так что следует запустить возможность выделения нескольких элементов. Для этого нужно задействовать параметр по расширению формы в динамическом списке – «МножественныйВыбор».

Для использования модели множественного выбора необходимо в форме в документе «ПриходнаяНакладная» поменять содержимое в команде «Подбор», как демонстрируется на скриншоте с примером кода ниже:



Рис. 2 Подключение возможности выделения нескольких элементов

После вышеуказанного действия форма с выборами сможет отдавать не по одному элементу, а сразу массив из элементов. Далее следует в обработчике для события «ОбработкаВыбора» сделать обход массива из элементов, которые были им получены. Это можно сделать, как показано на скриншоте с программным кодом ниже:



Рис. 3 Форма с выборами – множественный выбор

Таким образом стандартный множественный выбор в форме выбора был полностью реализован в системе 1С.

В данной статье будет описана процедура множественного выбора в 1С. Мы подробно рассмотрим метод с множественным выбором на данной платформе и проиллюстрируем его на конкретном примере, а также проведём анализ множественного подбора как функции, от которой произошла модель множественного выбора.

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

Множественный подбор – это инструмент, который работает в системе 1С 8.3 с формами справочника и делает различные подборки в них. Данная форма будет запущена до тех пор, пока не завершат её работу при помощи метода «Закрыть()».

Рассмотрим форму для документа «ПриходнаяНакладная», далее откроем обработчик команды «Подбор» и сделаем с его помощью замену старого текса новым. Данное действие может быть совершено при помощи кода, который продемонстрирован на скриншоте ниже:



Рис. 1 Работа с множественным подбором в форме справочника в 1С 8.3

Чтобы открыть форму, обращаемся к её параметрам, они регулируют состояние, в котором данная форма будет открыта. Параметры открытия формы имеют вид структуры, в которой один элемент соответствует одному состоянию. И, соответственно, код элемента – это наименование параметра открытия формы.

Данную структуру далее выводим в метод «ОткрытьФорму()». Перед этим также стоит сделать формировку структуры. Видим, что там находится единственный элемент, код которого – «ЗакрыватьПриВыборе».

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

2. Подбор при помощи множественного выбора в 1С

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

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

Так что следует запустить возможность выделения нескольких элементов. Для этого нужно задействовать параметр по расширению формы в динамическом списке – «МножественныйВыбор».

Для использования модели множественного выбора необходимо в форме в документе «ПриходнаяНакладная» поменять содержимое в команде «Подбор», как демонстрируется на скриншоте с примером кода ниже:



Рис. 2 Подключение возможности выделения нескольких элементов

После вышеуказанного действия форма с выборами сможет отдавать не по одному элементу, а сразу массив из элементов. Далее следует в обработчике для события «ОбработкаВыбора» сделать обход массива из элементов, которые были им получены. Это можно сделать, как показано на скриншоте с программным кодом ниже:



Рис. 3 Форма с выборами – множественный выбор

Таким образом стандартный множественный выбор в форме выбора был полностью реализован в системе 1С.

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

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

Результат подбора будет доступен в обработчике события ОбработкаВыбора формы документа или элемента формы (в зависимости от того, чему мы подчиним форму справочника при открытии). Событие ОбработкаВыбора в форме документа будет вызвано в двух случаях:

  • когда в форме справочника будет выполнен интерактивный выбор;
  • когда в форме справочника будет вызван метод ОповеститьОВыборе .

Одиночный подбор

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

Откроем форму документа ПриходнаяНакладная , создадим команду Подбор и назначим для нее обработчик:

В этой процедуре мы открываем форму выбора для справочника Номенклатура , указывая, что она подчинена таблице Материалы формы документа ПриходнаяНакладная ( Элементы.Материалы ). При выборе из формы выбора справочника выбранное значение будет передано в обработчик события ОбработкаВыбора таблицы формы Материалы , так как она является владельцем открытой формы выбора.

Поэтому откроем палитру свойств таблицы Материалы и создадим обработчик события ОбработкаВыбора :

В этой процедуре мы добавляем новую строку в таблицу Материалы и присваиваем колонке Материал в новой строке выбранное в форме выбора справочника значение. Это значение передается в обработчик события в параметре ВыбранноеЗначение .

Множественный подбор

При множественном подборе форма справочника будет открыта до тех пор, пока пользователь не закроет ее интерактивно или не будет вызван метод формы Закрыть() .

Обработчик команды Подбор :

Обработчик события ОбработкаВыбора остается без изменений.

Подбор с использованием множественного выбора

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

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

Обработчик команды Подбор :

Обработчик события ОбработкаВыбора :

Множественный подбор с использованием множественного выбора

Последний способ подбора сочетает в себе оба рассмотренных ранее способа. Мы будем отмечать сразу несколько элементов справочника и подбирать их в документ без закрытия формы выбора. Затем снова отмечать несколько элементов справочника и подбирать их в документ. Для этого нам будет необходимо при открытии формы выбора установить оба параметра: ЗакрыватьПриВыборе и МножественныйВыбор .

Обработчик команды Подбор :

Обработчик события ОбработкаВыбора остается без изменений.

Использование метода ОповеститьОВыборе()

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

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

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

Справка

ТабличноеПоле.ДобавитьСтроку()

Добавляет строку в табличное поле, аналогично выполнению команды «Добавить».

  • Если табличное поле связано с таблицей или деревом значений, метод добавляет строку в таблицу или дерево значений (аналогично соответствующим методам этих объектов).
  • Если табличное поле связано со списком объектов, хранимых в базе данных, метод начинает редактирование нового объекта этого списка. (Например, список объектов в форме списка справочника, или документа).
  • Если табличное поле связано с набором записей или табличной частью, то метод начинает редактирование новой записи. (Например, список записей в форме списка регистра сведений; табличная часть документа или справочника).

Доступность: Толстый клиент.

ДанныеФормыКоллекция.Добавить()

Добавляет элемент в конец коллекции и возвращает его в качестве результата метода. Возвращаемое значение: ДанныеФормыЭлементКоллекции .

Доступность: тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).

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