1с запрос отбор из списка значений

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

Параметры в запросах в языке 1С 8.3, 8.2 (в примерах)

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

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).

Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

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

Нажмите одну из кнопок, чтобы поделиться:

« Как стать программистом 1С » Язык 1С » Список значений 1С в качестве отбора на форме списка

Список значений 1С в качестве отбора на форме списка

У каждого документа есть список. Его можно отобразить как на форме списка этого документа, так и на любой обработке. Для этого на форму выносится таблица значений (в толстом клиенте), в качестве типа значения выбирается ДокументСписокИмядокумента.

Над списком документов размещаем командную панель (в свойствах ставим галочку «Автозаполнение» и источник – имя таблицы значений). В панели появится кнопка «Отбор». Для отбора доступны поля документа, у которых включена индексация и которые добавлены в таблицу документов.

С помощью отбора возможно ограничить список документов только теми, которые подпадают под установленные ограничения отбора. Установить ограничения можно в частности на «равно» (организация в документе равна организации в отборе, тип сравнения «равно») и на «список» (организация в документе равна одной из организаций в отборе, тип сравнения «в списке»).

Такой отбор возможно установить программно из кода 1С.

Код может быть расположен в любом обработчике, обычно его располагают в обработчике события формы ПередОткрытием() или ПриОткрытии().

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

Пример программного кода установки отбора на форме списка с помощью списка значений 1С:

//список значений 1С в качестве отбора на форме списка
//создадим список значений, который содержит «разрешенные» организации
//выберем запросом все организации из справочника
//таким образом запретим к отображению все документы, в которых организация не выбрана (пустая)
//PS. это сделано для примера, проще установить отбор «не равно» пустая организация (т.е. Справочники.Организации.ПустаяСсылка())
Запрос = Новый Запрос(«ВЫБРАТЬ Ссылка ИЗ Справочник.Организации»);
спОрганизаций = Новый СписокЗначений();
спОрганизаций.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(«Ссылка»));

//список значений 1С в качестве отбора на форме списка
//ищем отбор с указанным именем
//аккуратно — в данном случае у реквизита документа «Организация» в свойствах установлено «Индексировать»
//в других случаях отбора с таким именем может не быть, тогда нужно указывать «Если ОрганизацияОтбор <> Неопределено (т.е. отбор с таким именем найден)»
ОрганизацияОтбор = СписокДокументов.Отбор.Найти(«Организация»);
ОрганизацияОтбор.ВидСравнения = ВидСравнения.ВСписке; //устанавливаем «в списке»
ОрганизацияОтбор.Значение = спОрганизаций; //подставляем нужный список организаций
ОрганизацияОтбор.Использование = Истина; //включаем использование

//здесь мы запретим пользователю изменять наш отбор
ОрганизацияОтбор = ЭлементыФормы.СписокДокументов.НастройкаОтбора.Найти(«Организация»);
ОрганизацияОтбор.Доступность = Ложь;

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

Реализуем простую конфигурацию с двумя простыми справочниками:
-«Подразделения»;
— «Склады», с реквизитом «Подразделение», тип «Справочник.Подразделения».

Начнем эксперименты с обычного приложения. Добавляем обычную форму выбора для справочника «Склады». Так же добавляем обработку, на форму выносим реквизиты:
— Подразделение, тип «СписокЗначений», тип значений списка «СправочникСсылка.Подразделения»;
— Склад, тип «СписокЗначений», тип значений списка «СправочникСсылка.Склады».

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

Теперь, при изменении значения реквизита «Подразделение» будем выполнять следующую процедуру:

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

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

В результате, мы и выбираемые значения ограничили, и отбор в подборе установили.

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

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

Переделаем процедуру ПодразделениеПриИзмененииНаСервере, будем использовать свойство ПараметрыВыбора элемента формы:

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

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

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

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

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: