Форма выбора (подбор) в управляемых формах
Статья будет состоять из нескольких приведенных примеров кода с описанием того, как прибегнуть к Подбору.
Пример 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.2 (обычные формы), нам нужно выполнить некоторые действия. Сначала мы ее получим. После этого выставим отбор и программно откроем, вот пример кода:
Отбор на форме в поле ввода 1С 8.2 с несколькими значениями
В примере выше мы рассмотрели как устанавливать отбор на форме выбора по конкретному значению. Теперь давайте рассмотрим ситуацию когда нужно подставить несколько значений, это может быть например как массив, так и выгрузка из результата запроса. Это отбор в поле ввода 1с с несколькими значениями.
Для начала получаем форму выбора, в параметрах передаем «Элемент» (владельца), устанавливаем флаг режима выбора. Потом создаем список значений и массив, отмечаем что в качестве отбора когда устанавливается вид сравнения в списке, может присутствовать объект только с типом СписокЗначений. Добавляем элементы в массив, затем этот массив загружаем в СписокЗначений который в следствии мы устанавливаем в отборе. Также не забываем включить флаг использования данного отбора, и установить ВидСравнения.
Установка отбора в поле ввода на форме в 1С 8.3, событие НачалоВыбора
Как альтернатива можно воспользоваться вариантом как описано открытие формы выбора с отбором для 1С 8.2, конечно код возможно чуть-чуть придется модифицировать, но суть остается та же.
У нас вы можете заказать услуги сопровождения 1с баз данных, а также любые доработки для 1с.
Как открыть форму списка с некоторым отбором?
Есть несколько способов для того, чтобы открыть форму списка с некоторым, заранее установленным отбором. Рассмотрим их по-порядку:
ЗначениеОтбора = Новый Структура(«Номер», «333»);
ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);
2. Можно открыть форму списка без параметров:
И затем, в обработчике события формы списка приходных накладных ПриСозданииНаСервере написать код, который создает отбор в динамическом списке, являющемся основным реквизитом формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Номер»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ПравоеЗначение = «000000001»;
3. И наконец, условие отбора можно поместить в произвольный запрос, выбирающий данные для динамического списка. Например, нам нужно открыть список приходных накладных, в которых присутствует номенклатура, выделенная в списке номенклатуры.
Обработчик выполнения этой команды заполним следующим образом:
ФормаСписка = ПолучитьФорму(«Документ.ПриходнаяНакладная.ФормаСписка»);
ФормаСписка.ФильтрПоТовару = Элементы.Список.ТекущаяСтрока;
ФормаСписка.Открыть();
В этом обработчике мы получаем форму списка приходных накладных и передаем в параметр формы ФильтрПоТовару ссылку на текущий элемент в списке номенклатуры и открываем форму с этим параметром.
В поле Запрос введем следующий текст запроса:
В результате по нажатию кнопки Приходные накладные в форме списка номенклатуры мы будем получать список только тех приходных накладных, в которых присутствует номенклатура, выделенная в данный момент в списке номенклатуры.
Демонстрационный пример для 3-го варианта находится в каталоге 1CITS/EXE/FAQ/ОткрытьФормуСОтбором.dt. Пример выполнен на версии платформы 8.2.9.356.
Установка отбора для поля ввода управляемой формы через ПараметрыВыбора (без переопределения событий «НачалоВыбора», «Автоподбор»)
Для ограничения вывода элементов какого-нибудь справочника или перечисления при редактировании поля ввода можно воспользоваться программной установкой свойства элемента формы «ПараметрыВыбора», которое доступно, начиная с версии платформы 8.2.
Данное свойство представляет собой фиксированный массив элементов типа «ПараметрВыбора», позволяет организовать простую фильтрацию доступных для выбора элементов в поле ввода. При этом фильтрация будет работать как при автоподборе, так и при открытии формы выбора.
Рассмотрим пару типовых случаев применения этого свойства для установки отбора:
Отфильтруем ввод сотрудника по значению реквизита «Организация» на форме документа.
Фильтрация будет установлена у поля ввода «СписокСотрудниковСотрудник», в таблице документа.
Для выбора будут доступны только те сотрудники, у которых значения реквизита «Организация» совпадает со значением, установленным в реквизите «Организация» документа.
Вот так будет выглядеть процедура установки фильтра:
Данная процедура вызывается в событии формы «ПриОткрытии» и в событии «ПриИзменении» поля ввода «Организация».
Не всегда достаточно одного значения сравнения, следующий случай продемонстрирует, как накладывать отбор по списку ссылок.
Фильтрация будет установлена у поля ввода «Статус».
Если у сохранённого документа установлен статус «Черновик», то список доступных элементов перечисления «Статусы» будет ограничен значениями «Черновик» и «НаРассмотрении».
Данная процедура вызывается в событиях формы «ПриСозданииНаСервере» и «ПослеЗаписиНаСервере»
Кроме этого в параметрах выбора можно устанавливать свои нетиповые свойства:
Данный параметр потом можно будет извлечь из параметров формы выбора справочника «Сотрудники» (в событии «ПриСозданииНаСервере»), а также из параметров в обработчике «ОбработкаПолученияДанныхВыбора» в модуле менеджера справочника «Сотрудники».
Организация выбора из произвольной формы (на примере выбора из списка регистра сведений)
1С:Предприятие 8 поддерживает готовую функциональность для организации выбора из форм списков объектных данных (справочников, документов и т.д.). В большинстве случаев выбираются именно такие значения. Однако, в некоторых случаях, необходимо организовать выбор и других значений. Механизм форм 1С:Предприятия 8 включает универсальный механизм выбора, позволяющий организовать выбор практически любых значений.
Для этого используется возможность открытия формы в режиме выбора и возможность обработки события выбора.
В качестве примера приведем реализацию выбора записи регистра сведений. Стандартные расширения форм не поддерживают механику выбора, однако ее несложно реализовать.
Вначале создадим новую форму списка регистра сведений и назовем ее «ФормаВыбора». В форме реализуем событие Выбор табличного поля отображающего список.
Теперь реализуем функциональность выбора в той форме, в которой это требуется. Например, в форме обработки, имеющей поля ввода «Валюта» и «Период».
Заметим, что если для установки текущей строки расширение формы не предоставляет стандартного параметра, то можно создать свой реквизит у формы выбора, заполнить его аналогично заполнению стандартного параметра в этом примере, и при открытии формы обеспечить позиционирование в списке в соответствии со значением данного реквизита.
Далее мы создаем форму, устанавливаем ей режим выбора, владельца формы, и выполняем открытие формы.
Теперь нам нужно только реализовать обработчик выбора в форме и выполнить в нем необходимее действия с выбранным значением.