форма выбора нескольких значений 1с

Форма выбора (подбор) в управляемых формах

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

Пример 1.

Простой вызов формы выбора с одним возвращаемым результатом:

Пример 2.

Выбор нескольких значений (документов или справочников) :

В первых 2-х примерах мы использовали обработчик (Событие) формы «ОбработкаВыбора».

Теперь рассмотрим пример с использованием «Обработки оповещения», на мой взгляд более удобно )

Пример 3.

Думаю многие не знают про фишку Оповещением «на Сервере». То есть результат можно вернуть сразу на сервер без дополнительных условий. Работает до 8.3.13.1644, с 8.3.16.1063 этот метод недоступен.

Пример 4.

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

Пример 5.

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

Пример 6.

Пример 7.

Как открыть форму выбора с Позиционированием ранее выбранного значения:

Тестировалось на 1С:Предприятие 8.3 (8.3.16.1063) и 1С:Предприятие 8.3 (8.3.13.1644), Спасибо за внимание, возможно, кому-то поможет)

Источник

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

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

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

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

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

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

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

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

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

Источник

Как осуществить множественный выбор?

1. Что такое множественный выбор в 1С?

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

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

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

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

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

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

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

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

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

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

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

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

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

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

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

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

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

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

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

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

Источник

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

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

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

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

Например, если список выбора имеет значениями числа 1, 2 и 3, тогда в поле выбора удастся установить любое из этих значений. При установке других значений, хотя ошибки времени выполнения и не произойдет, они сохранены не будут.

Представление значения, хранящегося в поле выбора

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

Поиск значения в поле выбора по введенному тексту

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

Связь поля выбора с данными

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

Особенности инициализации и использования списка выбора

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

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

При смене типа значения (свойство «ТипЗначения») для списка выбора, у которого есть элементы, будет выполнено преобразование их значений к новому типу. Может быть следующая ситуация: после смены типа значения для списка выбора некоторое значение, которое раньше удавалось успешно установить в поле выбора, после смены типа значения установить не получается. Причина такой ситуации в том, что в процессе установки типа значения для списка выбора, успешно устанавливаемое ранее значение было конвертировано в другое значение (в соответствии с новым типом значения). Соответственно, устанавливаемое значение в списке выбора больше найдено не будет.

Использование поля выбора: пример 1

Пусть есть форма, в которой размещены поле выбора (ПолеВыбора1), поле ввода (ПолеВвода1) и создан реквизит (Реквизит1: число, длина = 10, точность = 0). В качестве данных для редактирования в ПолеВвода1 и ПолеВыбора1 стоит реквизит Реквизит1. В теле модуля формы написан следующий код:

Открыв такую форму в режиме 1С:Предприятие, можно видеть, как будут устанавливаться значения в поле выбора:

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

2. Выбираем в поле выбора в выпадающем списке строку с надписью «Один»: в поле ввода помещается значение 1. Поскольку поле ввода и поле выбора связаны с одним и тем же реквизитом формы, при изменении значения в поле ввода оно устанавливается в поле выбора и наоборот. В данном случае в поле выбора выбрали строку «Один», значение для которой равно 1. Оно и отобразилось в поле ввода.

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

3. Выбираем в поле выбора в выпадающем списке строку с надписью «Два»: в поле ввода помещается значение 2.

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

Перейдем в поле ввода и попробуем редактировать значения в нем:

1. Введем в поле ввода значение 3 и сойдем с поля ввода. В поле выбора запишется значение 3 и установится значение из соответствующей строки списка выбора поля выбора («Три»).

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

2. Вернемся в поле ввода и введем в нем значение 4. Перейдем с поля ввода к следующему элементу управления. В поле ввода будет сохранено введенное значение «4», а поле выбора станет пустым. В данном случае введенное в поле ввода значение 4 будет сохранено в связанных с полем ввода данных, после чего выставлено из них в поле выбора. Поскольку поле выбора в списке выбора значения 4 не имеет, оно установлено в поле выбора не будет.

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

Использование поля выбора: пример 2

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

Открыв такую форму в режиме 1С:Предприятие, можно видеть, как будут устанавливаться значения в поле выбора:

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

2. Выбираем в поле выбора в выпадающем списке строку с надписью «Один»: в поле ввода помещается значение. Поскольку поле ввода и поле выбора связаны с одним и тем же реквизитом формы, при изменении значения в поле ввода оно устанавливается в поле выбора и наоборот. В данном случае в поле выбора выбрали строку «Один», значение для которой равно ссылке на на элемент справочника Справочники.Номенклатура.Элемент1. Оно и отобразилось в поле ввода.

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

3. Выбираем в поле выбора в выпадающем списке строку с надписью «Два»: в поле ввода помещается ссылка на элемент справочника Справочники.Номенклатура.Элемент2:

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

Перейдем в поле ввода и попробуем редактировать значения в нем:

1. Выберем в поле ввода значение Справочники.Номенклатура.Элемент1. В поле выбора запишется значение Справочники.Номенклатура.Элемент1 и установится значение из соответствующей строки списка выбора поля выбора («Один»).

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

2. Выберем в поле ввода значение Справочники.Номенклатура.Элемент2. В поле выбора запишется значение Справочники.Номенклатура.Элемент2 и установится значение из соответствующей строки списка выбора поля выбора («Два»).

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

3. Выберем в поле ввода значение Справочники.Номенклатура.Элемент3. В поле выбора значение Справочники.Номенклатура.Элемент3 записано не будет, поскольку оно не было добавлено в список выбора. Значением в поле ввода будет «Неопределено»:

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

Использование поля выбора: пример 3

Пусть есть внешняя обработка, в которой создан реквизит Реквизит1 типа СправочникСсылка.Номенклатура. Во внешней обработке есть две формы: в первой устанавливается значение реквизита и по нажатию на кнопку открывается вторая форма.

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

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

Значение реквизита в списке выбора для поля выбора отсутствует:

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

Источник

Работа с данными выбора

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

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

СВЯЗИ ПАРАМЕТРОВ ВЫБОРА

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

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

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

Поясню на конкретных примерах. Представим себе форму, в которой есть два реквизита типа Контрагент. Скажем нужно указать первого контрагента, а потом выбрать второго. Однако второго контрагента можно выбрать только из той же группы контрагентов, в которой находится первый. Здесь условие связи параметров выбора могло бы быть таким: Отбор.Родитель = Контрагент.Родитель. Однако правое выражение через точку не поддерживается платформой и потому такое условие связи ввести нельзя.

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

ПАРАМЕТРЫ ВЫБОРА

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

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

ОБХОД ОГРАНИЧЕНИЙ ПАРАМЕТРОВ ВЫБОРА

Практика

На практике мне попадались следующие решения:

Недостатками этих решений являются:

Решение

В рамках наложенных ограничений платформы, недостающие параметры можно передать косвенно через указание реквизита формы. Так, если по приведенному примеру выше, нам нужно указать связь по родителю реквизита Контрагент, то условие связи параметров может быть таким: Отбор.КонтрагентРодителя = Контрагент. Тогда в форму выбора или же в предопределенную процедуру обработки выбора будет передан параметр с именем КонтрагентРодителя и значением реквизита формы Контрагент. Далее нам достаточно отработать условие по этому параметру, а именно использовать этот параметр для получения значения через точку Контрагент.Родитель и уже это, полученное косвенно, значение параметра использовать для установки необходимого отбора по родителю.

Аналогично для второго примера условие связи будет: Отбор.Договор = Договор. Несмотря на то, что условие накладывается на справочник Статьи, в котором отсутствует поле Договор, такое условие в рамках платформы вполне допустимо использовать. В этом случае в форму выбора будет передан параметр Договор со значением из реквизита формы Договор. Далее нам необходимо построить запрос через соединение основной таблицы Статьи с таблицей РегистрСведений.СтатьиДоговора и уже на поле регистра сведений наложить условие отбора по переданному значению договора.

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

ПОДСИСТЕМА РАБОТА С ДАННЫМИ ВЫБОРА

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

Рисунок 1. Диаграмма последовательности

Предлагаемая подсистема реализует интерфейс для работы следующих сценариев:

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

Обработка параметров, функция ПолучитьТекстЗапроса

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

В следующем листинге демонстрируется пример-заготовка реализации такой функции. Данная реализация основана на использовании объектной модели запроса. Работа с объектной моделью осуществляется с использованием подсистемы «Работа со схемой запроса». С шаблонами построения текста запроса при использовании подсистемы можно подробнее ознакомиться в одноименной статье.

Листинг 1. Общая структура функции ПолучитьТекстЗапроса на примере справочника _ДемоНоменклатура

Динамический список формы выбора

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

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

Для работа подсистемы необходимо настроить динамический список формы выбора: установить произвольный запрос и изменить псевдоним основной таблицы на имя «Источник».

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

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

Листинг 2. Демонстрация разделения параметров в функции ПолучитьТекстЗапроса

Листинг 3. Подключение формы выбора к подсистеме

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

Список данных выбора

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

Рисунок 2. Список выбора

Механизм получения списка данных выбора аналогичен описанному для динамического списка формы выбора.

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

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

Листинг 4. Подключение процедуры к подсистеме

Проверка на соответствие условиям параметров выбора. Заполнение по-умолчанию.

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

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

Листинг 5. Проверка соответствия переменной СсылкаНаЗначение переданным параметрам выбора из структуры Параметры

СТЕНД «РАБОТА С ДАННЫМИ ВЫБОРА»

форма выбора нескольких значений 1с. Смотреть фото форма выбора нескольких значений 1с. Смотреть картинку форма выбора нескольких значений 1с. Картинка про форма выбора нескольких значений 1с. Фото форма выбора нескольких значений 1с

Рисунок 3. Форма обработки стенда

Для демонстрации работы подсистемы выбран справочник _ДемоНоменклатура из демо-конфигурации БСП. С помощью расширения конфигурации в справочнике доработан менеджер объекта и форма выбора. В модуль менеджера добавлена функция ПолучитьТекстЗапроса и предопределенная процедура ОбработкаДанныхВыбора. В форме выбора добавлен вызов процедуры ЗаполнитьТекстЗапросаДинамическогоСписка.

В функции ПолучитьТекстЗапроса реализована обработка дополнительных параметров:

В процедуре используются приемы по формированию текста запроса в объектной модели с использованием подсистемы РаботаСоСхемойЗапроса. Более подробно читайте здесь.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *