Имя: Пароль:
1C
 
Установка программного отбора на несколько полей
0 Tolstiy Beremenniy
 
15.11.18
06:43
Суть задачи такая. Открываю форму списка документа.
Устанавливаю на неё программный отбор.
Необходимо отобрать не закрытые заявки и те документы в которых
текущий пользователь информационной базы равен Исполнителю или
Адресату.
Сейчас есть такой отбор. Он отбирает в процедуре ПриОткрытии()
в форме списка документы где текущий пользователь информационной
базы равен Исполнителю. Какой код нужно добавить, что бы ещё отбирать
документы где текущий пользователь информационной базы был равен и
Адресату????

        СписокЗаявокУИиС.Отбор.Элементы.Очистить();
        //
         ГруппаОтбора           = СписокЗаявокУИиС.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
        ГруппаОтбора.Представление = "Программный отбор";
        //
        ЭлементОтбора                = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        //ЭлементОтбора.Родитель       = ГруппаОтбора;
        ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Исполнитель");
        ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.Использование  = Истина;
        ЭлементОтбора.ПравоеЗначение = _ТекущийПользователь;
        ЭлементОтбора.Представление   = "Программный отбор";
        //
        ЭлементОтбора                  = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        //ЭлементОтбора.Родитель          = ГруппаОтбора;
        ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("СтатусЗаявки");
        ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеРавно;
        ЭлементОтбора.Использование  = Истина;
        ЭлементОтбора.ПравоеЗначение = СтатусЗавершен();
        ЭлементОтбора.Представление   = "Программный отбор";
1 Tolstiy Beremenniy
 
15.11.18
06:56
Up!
2 Tolstiy Beremenniy
 
15.11.18
07:02
Сейчас отбор программно накладывается в соответствии
с кодом в (0) вот так:

Исполнитель = ТекущийПользователь
И
СтатусЗаявки Не СтатусЗавершен

Как доработать код в (0) что бы было вот так, ->

Исполнитель  = ТекущийПользователь
И
СтатусЗаявки Не СтатусЗавершен
ИЛИ
Адресат      = ТекущийПользователь
И
СтатусЗаявки Не СтатусЗавершен

Подскажите пожалуйста!
3 catena
 
15.11.18
07:05
(2)Ты действительно даже уже сформулировав логическую операцию не можешь написать код по раскидыванию на группы?
4 chelentano
 
15.11.18
07:05
В группу с "И" добавь группу с "ИЛИ", в которой ставь отбор по адресату и исполнителю
5 Tolstiy Beremenniy
 
15.11.18
07:08
(3) Ну вот я попробовал раскидать группы, но это не
правильно. Идет ошибка. Как будет правильно?

        //
        СписокЗаявокУИиС.Отбор.Элементы.Очистить();
        //
         ГруппаОтбора           = СписокЗаявокУИиС.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
        ГруппаОтбора.Представление = "Программный отбор";
        //
         ГруппаОтбора1           = ГруппаОтбора.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
        ГруппаОтбора1.Представление = "Программный отбор";
        //
        ЭлементОтбора                = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        //ЭлементОтбора.Родитель       = ГруппаОтбора;
        ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Исполнитель");
        ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.Использование  = Истина;
        ЭлементОтбора.ПравоеЗначение = _ТекущийПользователь;
        ЭлементОтбора.Представление   = "Программный отбор";
        //
        ЭлементОтбора                  = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        //ЭлементОтбора.Родитель          = ГруппаОтбора;
        ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("СтатусЗаявки");
        ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеРавно;
        ЭлементОтбора.Использование  = Истина;
        ЭлементОтбора.ПравоеЗначение = СтатусЗавершен();
        ЭлементОтбора.Представление   = "Программный отбор";
        // ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
         ГруппаОтбора2           = ГруппаОтбора.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
        ГруппаОтбора2.Представление = "Программный отбор";
        //
        ЭлементОтбора                = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        //ЭлементОтбора.Родитель       = ГруппаОтбора;
        ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Адресат");
        ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.Использование  = Истина;
        ЭлементОтбора.ПравоеЗначение = _ТекущийПользователь;
        ЭлементОтбора.Представление   = "Программный отбор";
        //
        ЭлементОтбора                  = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        //ЭлементОтбора.Родитель          = ГруппаОтбора;
        ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("СтатусЗаявки");
        ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеРавно;
        ЭлементОтбора.Использование  = Истина;
        ЭлементОтбора.ПравоеЗначение = СтатусЗавершен();
        ЭлементОтбора.Представление   = "Программный отбор";
6 Tolstiy Beremenniy
 
15.11.18
07:09
(3) ошибка возникает тут

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

До меня не доходит пока как сделать правильнО!
7 Tolstiy Beremenniy
 
15.11.18
07:10
(4) ну я в (5) пробую. Не понимаю как нужно правильно.
8 Tolstiy Beremenniy
 
15.11.18
07:16
(3) Подскажите пожалуйста как это будет по коду?
9 catena
 
15.11.18
07:16
(6)Объясни мне, белоголовой женщине, почему ты элементы добавляешь в элементы, а группу внезапно решил добавить в отбор?

ЭлементОтбора                = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ГруппаОтбора1           = ГруппаОтбора.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
10 catena
 
15.11.18
07:17
(8)Не, я принципиально против такого подхода. Тебе вон добренькие типа (4) готовый код дают, так ты до сих пор ни кодить, ни СП читать не научился. Так балбесом и останешься.
11 Tolstiy Beremenniy
 
15.11.18
07:23
Условие должно быть такое. Ещё добавился один реквизит.
Верно ли изменен код?

Постановщик  = ТекущийПользователь
И
СтатусЗаявки Не СтатусЗавершен
ИЛИ
Исполнитель  = ТекущийПользователь
И
СтатусЗаявки Не СтатусЗавершен
ИЛИ
Адресат      = ТекущийПользователь
И
СтатусЗаявки Не СтатусЗавершен

        //
        СписокЗаявокУИиС.Отбор.Элементы.Очистить();
        //
         ГруппаОтбораИ               = СписокЗаявокУИиС.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаОтбораИ.ТипГруппы     = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
        ГруппаОтбораИ.Представление = "Программный отбор";
        //
         ГруппаОтбораИЛИ                 = СписокЗаявокУИиС.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаОтбораИЛИ.ТипГруппы     = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
        ГруппаОтбораИЛИ.Представление = "Программный отбор";
        //
        ЭлементОтбора                = ГруппаОтбораИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        //ЭлементОтбора.Родитель       = ГруппаОтбора;
        ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Подготовил");
        ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.Использование  = Истина;
        ЭлементОтбора.ПравоеЗначение = _ТекущийПользователь;
        ЭлементОтбора.Представление   = "Программный отбор";
        //
        ЭлементОтбора                = ГруппаОтбораИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        //ЭлементОтбора.Родитель       = ГруппаОтбора;
        ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Адресат");
        ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.Использование  = Истина;
        ЭлементОтбора.ПравоеЗначение = _ТекущийПользователь;
        ЭлементОтбора.Представление   = "Программный отбор";
        //
        ЭлементОтбора                = ГруппаОтбораИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        //ЭлементОтбора.Родитель       = ГруппаОтбора;
        ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Исполнитель");
        ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.Использование  = Истина;
        ЭлементОтбора.ПравоеЗначение = _ТекущийПользователь;
        ЭлементОтбора.Представление   = "Программный отбор";
        //
        ЭлементОтбора                  = ГруппаОтбораИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        //ЭлементОтбора.Родитель          = ГруппаОтбора;
        ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("СтатусЗаявки");
        ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеРавно;
        ЭлементОтбора.Использование  = Истина;
        ЭлементОтбора.ПравоеЗначение = СтатусЗавершен();
        ЭлементОтбора.Представление   = "Программный отбор";
12 Tolstiy Beremenniy
 
15.11.18
07:24
По коду получается само условие вот такое, ->

Постановщик  = ТекущийПользователь
ИЛИ
Исполнитель  = ТекущийПользователь
ИЛИ
Адресат      = ТекущийПользователь
И
СтатусЗаявки Не СтатусЗавершен


Верен ли код в (11) ?
13 catena
 
15.11.18
07:26
(12)Тут форум, а не отладчик. Запусти и проверь.
14 Tolstiy Beremenniy
 
15.11.18
07:55
(13) Ну я по логике кода узнаю.
Код в (5) не правильный !!!
15 hhhh
 
15.11.18
08:00
(14) ну и этот по логике кода пробей
16 Tolstiy Beremenniy
 
15.11.18
08:04
(15) Да мне не сильно прозрачен код этот отборов.
В тестовом режиме пока продвигаюсь!!!!!!
накапливаю знания и информацию по нему.
17 Tolstiy Beremenniy
 
15.11.18
08:07
Код в (11) не отрабатывает!!!!
я открыл форму списка под пользователем, под которым нет
документов для отбора. А там значится документ.
то есть получается он не работает!!!!

Вот и прошу подсказки, сам не могу пока разобраться как
нужно правильно1
18 Tolstiy Beremenniy
 
15.11.18
08:10
(17+) Или работает.
А то я защел под пользователем у которого есть полные права.
а под таких отбор не задан.
19 Deon
 
15.11.18
08:15
(18) По идее, код должен работать. Вроде, всё правильно. ГруппаИ, правда, тебе не нужна, если ты в неё всего 1 элемент суёшь
20 catena
 
15.11.18
08:46
(19)Работать должен, но не так, как нужно ТС. Но он пока не отличает, где не работает, а где работает не так, как ему хотелось.
21 Tolstiy Beremenniy
 
15.11.18
12:42
(20) А почему не так?
В чём оплошность?

Нужно что бы при открытии формы списка, будь то открывший
её постановщик, адресат или исполнитель. Их документы что
бы, по текущему пользователю параметров сеанса,
отображались в форме списка формы.

Это при открытии.

Так же на форме списка разместил 3 кнопки:
1. ФильтрНеЗакрытые - показывает не закрытые заявки по текущему постановщику, адресату или исполнителю. В зависимости кто текущий пользователь параметров сеанса.

2. ФильтрВсе - показывает все заявки по текущему постановщику, адресату или исполнителю.

3. ОтключитьОтбор - отключает отбор, и показывает все введенные заявки в форме списка документов.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший