Имя: Пароль:
1C
 
Установка отбора на динамический список
,
0 Tolstiy Beremenniy
 
12.11.18
07:45
На форме списка документов, лежит динамический список.
Необходим на него при открытии накладывать отбор документов
по исполнителю. то есть что бы в этом списке отображались документы
только исполнителя. Так же иметь возможность устанавливать убирать
фильтрацию принудительно. разместив на форме поле со значениями
списка, не выполненные, все. Что бы отображать нужные документы
в списке в зависимости от выбранного статуса.
Как правильно накладывается отбор на динамический список?
1 Tolstiy Beremenniy
 
12.11.18
07:47
Это следует делать в процедуре

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)


или в процедуре ПриОткрытии()
2 SleepyHead
 
гуру
12.11.18
08:02
А чем не устраивает настройка списка?
3 rphosts
 
12.11.18
08:07
накладывать в серверной контекстной процедуре, которую вызывать из ПриСозданииНаСервере и из обработчика изменения критерия отбора("не выполненные, все")
4 rphosts
 
12.11.18
08:08
(2) ну иногда от юзера требуется не просто изолировать возможность корректировать отбор, но даже скрыть информацию о том, что такой отбор наложен
5 Tolstiy Beremenniy
 
12.11.18
08:18
Почему ругается на Родитель????
Поле объекта не доступно для записи (Родитель)


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ГруппаОтбора           = СписокЗаявокУИиС.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
    //
    ЭлементОтбора                = СписокЗаявокУИиС.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.Родитель       = ГруппаОтбора;
    ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Исполнитель");
    ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Меньше;
    ЭлементОтбора.Использование  = Истина;
    ЭлементОтбора.ПравоеЗначение = ТекПользБазы();
    //
    ЭлементОтбора                  = СписокЗаявокУИиС.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.Родитель          = ГруппаОтбора;
    ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("ОписаниеЗаявки");
    ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеРавно;
    ЭлементОтбора.Использование  = Истина;
    ЭлементОтбора.ПравоеЗначение = СтатусЗавершен();  
КонецПроцедуры
6 Tolstiy Beremenniy
 
12.11.18
08:18
(2) Я ищу решения. Может и настройка списка подойдет
Важно делать это программно.
7 Lexey_
 
12.11.18
08:26
(5) потому, что "Поле объекта не доступно для записи"
8 Tolstiy Beremenniy
 
12.11.18
08:35
Подскажите что сейчас не так в отборе?



    ГруппаОтбора           = СписокЗаявокУИиС.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
    ГруппаОтбора.Представление = "Программный отбор";
    //
    ЭлементОтбора                = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    //ЭлементОтбора.Родитель       = ГруппаОтбора;
    ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Исполнитель");
    ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Меньше;
    ЭлементОтбора.Использование  = Истина;
    ЭлементОтбора.ПравоеЗначение = ТекПользБазы();
    ГруппаОтбора.Представление   = "Программный отбор";
    //
    ЭлементОтбора                  = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    //ЭлементОтбора.Родитель          = ГруппаОтбора;
    ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("СтатусЗаявки");
    ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеРавно;
    ЭлементОтбора.Использование  = Истина;
    ЭлементОтбора.ПравоеЗначение = СтатусЗавершен();
    ГруппаОтбора.Представление   = "Программный отбор";




То отобрал совсем не те значения. То выдается сообщение


Параметры Отбора, Сортировки, Группировки или список отображаемых полей заданы неверно.
по причине:
Невозможно применить фиксированные настройки. Пересекаются элементы отбора.
9 hhhh
 
12.11.18
08:39
(8) что значит исполнитель меньше пользователя? Ростом меньше? Или уже в плечах?
10 Tolstiy Beremenniy
 
12.11.18
08:41
(9) Простите! Выходит я взял пример, подкорректировал, но не до конца.
Отлаживаю!!!!
12 Tolstiy Beremenniy
 
12.11.18
08:44
Вот, поправил. Выдает Невозможно применить фиксированные настройки. Пересекаются элементы отбора.



&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ГруппаОтбора           = СписокЗаявокУИиС.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
    ГруппаОтбора.Представление = "Программный отбор";
    //
    ЭлементОтбора                = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    //ЭлементОтбора.Родитель       = ГруппаОтбора;
    ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Исполнитель");
    ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование  = Истина;
    ЭлементОтбора.ПравоеЗначение = ТекПользБазы();
    ГруппаОтбора.Представление   = "Программный отбор";
    //
    ЭлементОтбора                  = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    //ЭлементОтбора.Родитель          = ГруппаОтбора;
    ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("СтатусЗаявки");
    ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование  = Истина;
    ЭлементОтбора.ПравоеЗначение = СтатусЗавершен();
    ГруппаОтбора.Представление   = "Программный отбор";
13 Kashey
 
12.11.18
08:45
Попробуй отбор добавлять вот так:

Отбор = СписокЗаявокУИиС.КомпоновщикНастроек.Настройки.Отбор.Элементы;
14 Пес Барбос
 
12.11.18
08:45
Если у и тебя типовая конф., то поищи в общих модулях "УстановитьЭлементОтбораДинамическогоСписка"

Пример, (у меня ERP)
        ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список,"Подразделение",Параметры.Подразделение,ВидСравненияКомпоновкиДанных.Равно,,Истина);
15 catena
 
12.11.18
08:47
(12)Очищать отбор перед добавление не пробовал?
16 Tolstiy Beremenniy
 
12.11.18
08:47
(13) то есть вот это

Отбор = СписокЗаявокУИиС.КомпоновщикНастроек.Настройки.Отбор.Элементы;

за место

ГруппаОтбора           = СписокЗаявокУИиС.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбора
КомпоновкиДанных"));

??
17 Tolstiy Beremenniy
 
12.11.18
08:48
(14) Документооборот 8 КОРП, редакция 2.1 (2.1.11.5)
18 Tolstiy Beremenniy
 
12.11.18
08:49
(15) Подскажите пожалуйста, как очистить отбор?
Наверное я давно не работал с отборами в УФ.
19 Пес Барбос
 
12.11.18
08:49
(17) глобальным поиском поищи УстановитьЭлементОтбораДинамическогоСписка
20 Tolstiy Beremenniy
 
12.11.18
08:50
(19) Есть такая, в названном вами модуле.

// Добавить или заменить существующий элемент отбора динамического списка.
//
// Параметры:
//   ДинамическийСписок - ДинамическийСписок - Список, в котором требуется установить отбор.
//   ИмяПоля            - Строка - Поле, по которому необходимо установить отбор.
//   ПравоеЗначение     - Произвольный - Значение отбора.
//       Необязательный. Значение по умолчанию: Неопределено.
//       Внимание! Если передать Неопределено, то значение не будет изменено.
//   ВидСравнения  - ВидСравненияКомпоновкиДанных - Условие отбора.
//   Представление - Строка - Представление элемента компоновки данных.
//       Необязательный. Значение по умолчанию: Неопределено.
//       Если указано, то выводится только флажок использования с указанным представлением (значение не выводится).
//       Для очистки (чтобы значение снова выводилось) следует передать пустую строку.
//   Использование - Булево - Флажок использования этого отбора.
//       Необязательный. Значение по умолчанию: Неопределено.
//   РежимОтображения - РежимОтображенияЭлементаНастройкиКомпоновкиДанных - Способ отображения этого отбора
//                                                                          пользователю.
//       * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ - В группе быстрых настроек над списком.
//       * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный       - В настройка списка (в подменю Еще).
//       * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный   - Запретить пользователю менять этот отбор.
//   ИдентификаторПользовательскойНастройки - Строка - Уникальный идентификатор этого отбора.
//       Используется для связи с пользовательскими настройками.
//
// См. также:
//   Одноименные свойства объекта "ЭлементОтбораКомпоновкиДанных" в синтакс-помощнике.
//
Процедура УстановитьЭлементОтбораДинамическогоСписка(ДинамическийСписок, ИмяПоля,
    ПравоеЗначение = Неопределено,
    ВидСравнения = Неопределено,
    Представление = Неопределено,
    Использование = Неопределено,
    РежимОтображения = Неопределено,
    ИдентификаторПользовательскойНастройки = Неопределено) Экспорт
    
    Если РежимОтображения = Неопределено Тогда
        РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
    КонецЕсли;
    
    Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда
        ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
    Иначе
        ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.Настройки.Отбор;
    КонецЕсли;
    
    УстановитьЭлементОтбора(
        ОтборДинамическогоСписка,
        ИмяПоля,
        ПравоеЗначение,
        ВидСравнения,
        Представление,
        Использование,
        РежимОтображения,
        ИдентификаторПользовательскойНастройки);
    
КонецПроцедуры
21 Lexey_
 
12.11.18
09:00
(18) давно - это никогда?
22 dezss
 
12.11.18
09:12
(12) одинаковые представления, ИМХО, могут мешать)

А очищать так:
СписокЗаявокУИиС.Отбор.Элементы.Очистить();
23 Tolstiy Beremenniy
 
12.11.18
10:07
(22) ок, пробую.
24 Tolstiy Beremenniy
 
12.11.18
10:09
Странно! но ошибка идет все равно (((((


Параметры Отбора, Сортировки, Группировки или список отображаемых полей заданы неверно.
по причине:
Невозможно применить фиксированные настройки. Пересекаются элементы отбора.


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    СписокЗаявокУИиС.Отбор.Элементы.Очистить();
    //
    ГруппаОтбора           = СписокЗаявокУИиС.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
    ГруппаОтбора.Представление = "Программный отбор";
    //
    ЭлементОтбора                = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    //ЭлементОтбора.Родитель       = ГруппаОтбора;
    ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Исполнитель");
    ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование  = Истина;
    ЭлементОтбора.ПравоеЗначение = ТекПользБазы();
    ГруппаОтбора.Представление   = "Программный отбор";
    //
    ЭлементОтбора                  = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    //ЭлементОтбора.Родитель          = ГруппаОтбора;
    ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("СтатусЗаявки");
    ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование  = Истина;
    ЭлементОтбора.ПравоеЗначение = СтатусЗавершен();
    ГруппаОтбора.Представление   = "Программный отбор";



Я же очищаю предварительно отбор.
Почему идет ошибка?
25 Вафель
 
12.11.18
10:11
(24) у тебя еще пользоательский отбор задан. вот он и пересекается
26 Tolstiy Beremenniy
 
12.11.18
10:13
(25) Я думал вот этим я все сбрасываю, ->

    СписокЗаявокУИиС.Отбор.Элементы.Очистить();

Как его сбросить то?
27 Kashey
 
12.11.18
10:16
(16) Попробуй так:
ОтборСписка = СписокЗаявокУИиС.КомпоновщикНастроек.Настройки.Отбор.Элементы;
ГруппаОтбора   = ОтборСписка.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
28 Вафель
 
12.11.18
10:17
Отбор - Это фиксированный отбор.
А Список.ПользовательскиеНастройки - это совсем другое
29 Tolstiy Beremenniy
 
12.11.18
10:21
Есть документ, отвечающий вот этим условиям.
Текущий пользователь такой то, и СтатусЗаявки такой то.
Но в списке пусто! Почему может не срабатывать отбор?


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    СписокЗаявокУИиС.Отбор.Элементы.Очистить();
    //
    ГруппаОтбора           = СписокЗаявокУИиС.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
    ГруппаОтбора.Представление = "Программный отбор";
    //
    ЭлементОтбора                = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    //ЭлементОтбора.Родитель       = ГруппаОтбора;
    ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Исполнитель");
    ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование  = Истина;
    ЭлементОтбора.ПравоеЗначение = ТекПользБазы();
    ГруппаОтбора.Представление   = "Программный отбор";
    //
    ЭлементОтбора                  = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    //ЭлементОтбора.Родитель          = ГруппаОтбора;
    ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("СтатусЗаявки");
    ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеРавно;
    ЭлементОтбора.Использование  = Истина;
    ЭлементОтбора.ПравоеЗначение = СтатусЗавершен();
    ГруппаОтбора.Представление   = "Программный отбор";
30 Tolstiy Beremenniy
 
12.11.18
10:22
(29) С этим кажется понятно!!!!

(28) Нужно ещё очищать подобным способом заданный отбор
в пользовательских настройках?
31 dezss
 
12.11.18
10:28
кароч, сперва надо было тебе пояндексить

Пересекаются элементы отбора УФ
32 Tolstiy Beremenniy
 
12.11.18
11:38
(31) По данной вами ветви форума, нужно очищать
пользовательские настройки в процедуре
СписокПередЗагрузкойПользовательскихНастроекНаСервере(Элемент, Настройки) ???

Как именно это делать?
33 Tolstiy Beremenniy
 
12.11.18
12:49
(31) Правильно что тут в конце ветки выяснили как очищать пользовательские настройки? Подскажите пожалуйста как это делать мне не понятно! А посмотрел по коду. Как правильно их очищать?
34 dezss
 
12.11.18
12:55
(33) я такого не делал, а проверять времени нет...
просто направление знаешь, дальше копай инет и иди)
35 Tolstiy Beremenniy
 
13.11.18
04:48
(34) Примерное направление знаю.
Но что то не пойму как их там очищать.
Нужно видимо время и усердие что бы попытаться понять.
Пока переключился на другую задачу.
36 DexterMorgan
 
14.11.18
10:40
(0) Ты во франче? или фикси?
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс