Открытие управляемой формы списка с установленным отбором 1С.
Приветствую всех заглянувших на огонёк! 🙂
Тема открытия списка документов, справочников, регистра с отбором на управляемых формах (УФ) давно «избита». Но нюансы как всегда появляются.
Реализация такого функционала возможна несколькими способами. Но в данной заметке я рассмотрю 2 очень похожих и тем не менее несколько различающихся: с отображением примененного отбора на форме и без отображения примененного отбора.
Отбор устанавливается программно.
Установка программного отбора на управляемых формах имеет на мой взгляд одно неоспоримое преимущество: нет необходимости изменять целевую форму (форму списка), достаточно прописать несколько строчек кода в том месте, откуда вызывается отбор. Это может очень пригодиться, когда ведется доработка типовой конфигурации и желательно изменять как можно меньше объектов с максимумом эффективности. Открытие списка с отбором может пригодиться в разных задачах, но как правило это подбор нужного документа (или элемента справочника) в вашу форму.
Чаще всего применяется второй способ, но иногда необходим и первый.
На форумах информация есть, но она чаще всего сильно разрозненная и не полная (
А точнее:
В первом случае выделенный раздел выводится, во втором случае — нет.
1. Если необходимо отразить примененный отбор на форме списка:
Форма = ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаВыбора",, Элементы.Товары); //Здесь указываете свою форму ПользовательскийОтбор = Форма.СписокДокументыПоступления.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Форма.СписокДокументыПоступления.КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки); //Если вам известен идентификатор, указываете здесь. Но можно не заполнять ПользовательскийОтбор.Элементы.Очистить(); //Очищаются ранее установленные нстройки //Установка элемента отбора ОтборВладелец = ПользовательскийОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборВладелец.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборВладелец.ИдентификаторПользовательскойНастройки = "Партнер"; //Произвольный текст ОтборВладелец.Использование = Истина; ОтборВладелец.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Партнер"); ОтборВладелец.ПравоеЗначение = Объект.Партнер; //Этот блок можно повторять столько раз, сколько требуется установить отборов. Идентификатор в каждом отоборе должен быть разный.
Ключевой момент в этом коде то, что используется пользовательская настройка отбора в динамическом списке той формы, которую необходимо открыть.
2. Если необходимо открыть без отображения отбора:
Форма = ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаВыбора",, Элементы.Товары); //Здесь указываете свою форму //Установка элемента отбора ОтборВладелец = Форма.СписокДокументыПоступления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборВладелец.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборВладелец.Использование = Истина; ОтборВладелец.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Партнер"); ОтборВладелец.ПравоеЗначение = Объект.Партнер; //Этот блок можно повторять столько раз, сколько требуется установить отборов
Второй вариант проще первого, но в этом случае не используется пользовательская настройка, а значить условия отбора не появляются над формой списка.
На этом все, тема Открытие списка с отбором — на мой взгляд раскрыта 🙂
Если есть вопросы, задавайте в комментариях.
PS. А для тех кто занимается поддержкой расчета зарплаты на предприятии (не только программисты), напоминаю что по этой тематике выделен отдельный ресурс Pro-Zup.info.
Если у Вас возникают по этой теме вопросы, Вы заинтересованы в расширении возможностей типовой программы или есть пожелания по устранению проблем — добро пожаловать на ресурс https://pro-zup.info/
Тема «Открытие списка с отбором» не раскрыта. Как сделать не отбор по конкретному значению, а отбор например по больше-меньше?
Вы наверное невнимательно смотрите? Условие отбора прописано же в коде:
ОтборВладелец.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Вид сравнения можно поставить какой требуется.
Еще бы примеры для обычных форм
Не совсем понятно в чем проблема, особенно по устаревшей технологии ))
Можно чуть проще:
Настройки = Список.КомпоновщикНастроек;
ДополнительныеПараметры = Новый Структура(«ВПользовательскиеНастройки», Истина);
ЭлементОтбора = КомпоновкаДанныхКлиентСервер.ДобавитьОтбор(Настройки, «NewСтатусSKU», Перечисления.Ма_СтатусыSKU.Активный, ВидСравненияКомпоновкиДанных.Равно, Истина, ДополнительныеПараметры);
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
ЭлементОтбора.ИдентификаторПользовательскойНастройки = «NewСтатусSKU»;