Имя: Пароль:
1C
1С v8
Фильтрация динамического списка в иерархии
0 Новичок1С Учится
 
01.03.19
14:51
Здравствуйте великие умы Мисты! Я начинающий программист 1С, у которого уже есть задачи и нет понимания в решении некоторых вопросов. Одним из таких является такой вопрос, вытекающий из задачи: Хочу фильтровать все динамические списки разных документов в Бух 3.0. Нашёл событие, вернее процедуру, связанную с открытием данного списка в общем модуле "ОбщегоНазначенияБПКлиент". Называется она ОткрытьОсновнуюФорму.

Процедура ОткрытьОсновнуюФорму(ОжидаетсяДлительноеОткрытие, ПараметрыОткрытия, ПараметрыФормы = Неопределено) Экспорт

    Если ПараметрыФормы = Неопределено Тогда
        ПараметрыФормы = Новый Структура;
    КонецЕсли;
    
    // Отключаем подписку на событие ОбработкаПолученияФормы(), если она определена для данного объекта.
    ПараметрыФормы.Вставить("ОтключитьОжиданиеПриОткрытииФорм", Истина);

    Если ПараметрыОткрытия.ЗамерПроизводительности = Истина Тогда
        // Bремя ключевой операции будет задано позже.
        ПараметрыФормы.Вставить("УИДЗамера", ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина));

    ИначеЕсли ТипЗнч(ПараметрыОткрытия.ЗамерПроизводительности) = Тип("Строка")
        И Не ПустаяСтрока(ПараметрыОткрытия.ЗамерПроизводительности) Тогда
        // Начинаем замер определенной ключевой операции.
        ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина, ПараметрыОткрытия.ЗамерПроизводительности);

    КонецЕсли;
    
    ВремяНачалаОткрытия = ТекущаяУниверсальнаяДатаВМиллисекундах();
    
    Если ПараметрыОткрытия.ОбработчикОткрытияФормы <> Неопределено Тогда
        
        ВыполнитьОбработкуОповещения(ПараметрыОткрытия.ОбработчикОткрытияФормы, ПараметрыФормы);
        
    Иначе

        ОткрытьФорму(ПараметрыОткрытия.ИмяФормы,
            ПараметрыФормы,
            ПараметрыОткрытия.Владелец,
            ПараметрыОткрытия.Уникальность,
            ПараметрыОткрытия.Окно,
            ПараметрыОткрытия.НавигационнаяСсылка,
            ПараметрыОткрытия.ОписаниеОповещенияОЗакрытии,
            ПараметрыОткрытия.РежимОткрытияОкна);
            
    КонецЕсли;
    
    ЗамерОткрытия = Новый Структура;
    ЗамерОткрытия.Вставить("ВремяНачалаОткрытия",         ВремяНачалаОткрытия);
    ЗамерОткрытия.Вставить("ОжидаетсяДлительноеОткрытие", ОжидаетсяДлительноеОткрытие);
    ЗамерОткрытия.Вставить("ИмяФормы",                    ПараметрыОткрытия.ИмяФормы);
    
    ИмяПараметра = "БухгалтерияПредприятия.ЗамерОткрытия";
    ПараметрыПриложения.Вставить(ИмяПараметра, ЗамерОткрытия);
    ПодключитьОбработчикОжидания("Подключаемый_ДобавитьСтатистикуОткрытия", 0.1, Истина);
    
КонецПроцедуры



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

Вариант с "жестким значение параметра", который работает, но частично. Не отображаются филиалы, а они нужны...

            ПараметрыОтбора = Новый Структура;
            ПараметрыОтбора.Вставить("ПодразделениеОрганизации", ПодразделениеПользователя);
            ПараметрыФормы = Новый Структура("Отбор", ПараметрыОтбора);


Вариант с параметрами отбора ввиду структуры, который почему то не работает...

            ПараметрыОтбора1 = Новый Структура;
            ПараметрыОтбора1.Вставить("ЛевоеЗначение", Новый ПолеКомпоновкиДанных("ПодразделениеОрганизации"));
            ПараметрыОтбора1.Вставить("ВидСравнения", ВидСравненияКомпоновкиДанных.ВИерархии);
            ПараметрыОтбора1.Вставить("ПравоеЗначение", ПодразделениеПользователя);
            ПараметрыОтбора1.Вставить("РежимОтображения", РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный);
            ПараметрыОтбора = Новый Структура;
            ПараметрыОтбора.Вставить("ПодразделениеОрганизации",ПараметрыОтбора1);
            ПараметрыФормы = Новый Структура;
            ПараметрыФормы.Вставить("ПараметрыОтбора", ПараметрыОтбора);                        

Подскажите пожалуйста где моя ошибка и как правильно реализовать открытие формы с правильно заданной фильтрацией...
1 sqr4
 
01.03.19
14:59
2 Новичок1С Учится
 
01.03.19
14:59
Забыл сказать что задача поставлена сделать без использования РЛС...
3 DrWatson
 
01.03.19
15:05
(0)
Расширение управляемой формы для динамического списка (Managed form extension for dynamic lists)
Отбор (Filter)
Описание:

Тип: Структура.
Используется для установки отбора в динамическом списке. Ключ структуры - имя поля основной таблицы.
Значение элемента структуры содержит значение отбора.
Если значение является массивом, фиксированным массивом или списком значений с не одним элементом, то отбор будет применяться с видом сравнения ВСписке.
4 sqr4
 
01.03.19
15:06
(3) Именно (0) Использовать жесткий вариант, в параметр передавать, заранее полученный список подразделений.
5 DrWatson
 
01.03.19
15:07
Какой-то гугл у тебя неправильный, второй вариант не должен работать.
6 Новичок1С Учится
 
01.03.19
15:48
(4) Подразделений или филиалов? Если филиалов то их тоже нужно передавать структурой? В итоге получится структура "Филиалы" в структуре "ПараметрыОтбора" в структуре "ПараметрыФормы" ?
7 Новичок1С Учится
 
01.03.19
15:48
(5) Да нет правильный, он у меня и не работает. Видимо я не совсем правильно понят область применения данной конструкции
8 Новичок1С Учится
 
04.03.19
08:31
Всё таки не могу определить решение для данного вопроса, помогите кто нибудь...
9 sqr4
 
04.03.19
08:57
(6) всего и подразделений и филиалов
10 Новичок1С Учится
 
04.03.19
10:01
(9) Т.е. если я правильно понял, мне необходимо заранее формировать переменную с типом данных Структура, в которой будет содержаться подразделение и входящие в это подразделение филиалы. Затем добавить эту структуру в структуру "ПараметрыФормы" и уже с этим параметром открывать форму? Грубо говоря само существование структуры в структуре "ПараметрыФормы" будет эквивалентно указанию отбора с любым значением из этого списка?
11 Новичок1С Учится
 
04.03.19
13:51
(10) Так и сделал, только опечатался, не структура в структуре "ПараметрыФормы", а список. Всё работает, Спасибо!
12 Cyberhawk
 
05.03.19
16:46
Много букв. В трех словах в чем затык?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн