Имя: Пароль:
1C
1С v8
ЗУП Журнал документов, добавить отбор при открытии формы списка
,
0 lg2marvel
 
11.11.19
12:40
Добрый день.
ЗУП 3.1.10.
При создании формы журнала прогулов создается параметр отбора:

    СтруктураПараметровОтбора = Новый Структура();
    ЗарплатаКадры.ДобавитьПараметрОтбора(СтруктураПараметровОтбора, "Подразделение",
        Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций"), НСтр("ru = 'Подразделение'"));    
ЗарплатаКадры.ПриСозданииНаСервереФормыСДинамическимСписком(ЭтотОбъект, "Список",,
        СтруктураПараметровОтбора, "СписокКритерииОтбора");

Не могу придумать как программно присвоить отбор данному параметру, сталкивался кто-то? Подскажите пожалуйста.
1 lg2marvel
 
11.11.19
15:25
При открытии выполняю следующее:
        ДопСтрока = СтрЗаменить(ЭтаФорма.ПараметрыКритерияОтбора[1].ИмяРеквизитаФормыПараметра,"Подразделение_","");    
        ЭтаФорма[ЭтаФорма.ПараметрыКритерияОтбора[1].ИмяРеквизитаФормыПараметра] = ЕЕ_Подразделение;
        ЭтаФорма["Подразделение_Использование_"+ДопСтрока] = истина;
        ЗарплатаКадрыКлиент.ПараметрОтбораНаФормеСДинамическимСпискомПриИзменении(ЭтотОбъект, ЭтаФорма.ПараметрыКритерияОтбора[1].ИмяРеквизитаФормыПараметра);


Отбор устанавливается, но чтоб применить отображение на списке нужно снять и поставить галочку ЭтаФорма["Подразделение_Использование_"+ДопСтрока]. Тогда список обновляется. F5 - не помогает. Как обновить список?
2 lg2marvel
 
11.11.19
15:49
(1) Параметры
ЭтаФорма[ЭтаФорма.ПараметрыКритерияОтбора[1].ИмяРеквизитаФормыПараметра]
и
ЭтаФорма["Подразделение_Использование_"+ДопСтрока]
Созданы программно в (0)
3 ГдеСобака Зарыта
 
11.11.19
15:58
СтруктураПараметровОтбора.Подразделение = Новый ФиксированныйМассив(МассивТвоихПодразделений);
Не уверен, но может подойти
4 ГдеСобака Зарыта
 
11.11.19
16:08
Извиняюсь за оффтоп. А есть ли способ как-то засунуть в список значение, которое не соответствует отбору? То бишь мне нужен отбор в дин списке, но чтобы один элемент в нем был всегда, независимо от отбора
5 lg2marvel
 
11.11.19
16:13
(4) было такое, просто после заполнения списка добавлял необходимое мне значение. Ну или если нужно - то проверять есть ли это значение в списке СписокЗначений.НайтиПоЗначению
6 lg2marvel
 
11.11.19
16:15
(3) нет, не то.
    СтруктураПараметровОтбора = Новый Структура();
    ЗарплатаКадры.ДобавитьПараметрОтбора(СтруктураПараметровОтбора, "ФизическоеЛицо",
        Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"), НСтр("ru = 'Сотрудник'"));
    ЗарплатаКадры.ДобавитьПараметрОтбора(СтруктураПараметровОтбора, "Подразделение",
        Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций"), НСтр("ru = 'Подразделение'"));
        
        мс = Новый Массив;
        мс.Добавить(УПР_Подразделение);
        СтруктураПараметровОтбора.Подразделение = Новый ФиксированныйМассив(мс);
В дальнейшем выдает ошибку
Поле объекта не обнаружено (ТипПараметра)
на строку:
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизитаФормы, ОписаниеПараметра.ТипПараметра));
7 Максим Нижегородец
 
11.11.19
16:20
Нужно в запрос формирующий динамический список передавать ДВА параметра. Первый БУЛЕВО включающий или отключающий отбор по списку, а второй сам СПИСОК отбора. В большинстве случаев флаг ЛОЖЬ и список не имеет значения. Но если нужен отбор по списку, то флаг ИСТИНА и СПИСОК заполняется нужными значениями.
8 ГдеСобака Зарыта
 
11.11.19
16:27
(6) А отладчик что говорит? ИмяРеквизитаФормы? ОписаниеПараметра?
9 hhhh
 
11.11.19
16:33
(6) ОписаниеПараметра не то значит
10 unenu
 
11.11.19
16:34
(0) там не все так просто, правда типовые механизмы можно докрутить в расширении.
в некоторых формах добавлен типовой универсальных отбор, который встроен в разной степени сложности
в отдельных формах.
К счастью есть всего три варианта сложности и функционал расширения для каждого позволяет производить
манипуляции с универсальным отбором как душе угодно.
код приводить лень и некогда, может быть когда нибудь если не забуду и будет мотивация.
11 unenu
 
11.11.19
16:36
наводка: в универсальном отборе реквизиты формы и элементы формы формируются динамически и имена попадают уиды для уникальности - поиск и модификация того, что вы называли ОписаниеПараметра и есть один из вариантов, остальные два проще
12 lg2marvel
 
11.11.19
16:36
(8) В ЭтаФорма.ПараметрыКритерияОтбора (ДанныеФормыЭлементКоллекция) - перечень созданных параметров, здесь их два:
ФизическоеЛицо и Подразделение, для каждого параметра присваивается уникальное при каждом запуске имя:
ИмяРеквизитаФормыПараметра    "Подразделение_4a14db68xc518x4c36xba90x93f35d9020a1"    Строка
ИмяРеквизитаФормыПараметраИспользование    "Подразделение_Использование_4a14db68xc518x4c36xba90x93f35d9020a1"    Строка
ИмяЭлементаФормыПараметра    "Подразделение_8549f278x5fcax439dxb6b7x0964bc9f8bd1"    Строка
ИмяЭлементаФормыПараметраИспользование    "Подразделение_Использование_8549f278x5fcax439dxb6b7x0964bc9f8bd1"    Строка

Я беру эти параметры и присваиваю им значения
        ДопСтрока = СтрЗаменить(ЭтаФорма.ПараметрыКритерияОтбора[1].ИмяРеквизитаФормыПараметра,"Подразделение_","");    
        ЭтаФорма[ЭтаФорма.ПараметрыКритерияОтбора[1].ИмяРеквизитаФормыПараметра] = ЕЕ_Подразделение;
        ЭтаФорма["Подразделение_Использование_"+ДопСтрока] = истина;

Затем вызываю обработчик который срабатывает при изменении этих реквизитов:
ЗарплатаКадрыКлиент.ПараметрОтбораНаФормеСДинамическимСпискомПриИзменении(ЭтотОбъект, ЭтаФорма.ПараметрыКритерияОтбора[1].ИмяРеквизитаФормыПараметра);

В модуле формы он выглядит так:
&НаКлиенте
Процедура Подключаемый_ПараметрОтбораПриИзменении(Элемент)
    ЗарплатаКадрыКлиент.ПараметрОтбораНаФормеСДинамическимСпискомПриИзменении(ЭтотОбъект, Элемент.Имя);
КонецПроцедуры
13 lg2marvel
 
11.11.19
17:41
Всем спасибо, вопрос решен переопределением процедуры
ЗарплатаКадрыКлиент.ПараметрОтбораНаФормеСДинамическимСпискомПриИзменении

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