Здравствуйте!
База написана с нуля из чистого шаблона.
Есть отчет "ОтчетПоКС", у данного отчета есть реквизит "Задание" с типом "ДокументСсылка.ЛистСогласования".
Есть схема схема компоновки данных.
В данной схеме есть поле отбора ЗаданиеСсылка, в котором выбираем документ "ЛистСогласования". Также есть форма отчета, с указанием документа "Лист согласования".
Скажите, пожалуйста, как сделать чтобы при выборе документа "Лист согласования" автоматически включался отбор по этому документу.
Спасибо.
---
Перед добавлением отбора, нужно проверить существует ли он

```1c
    &НаСервере
    Процедура ЗаданиеПриИзмененииНаСервере()
    ПолеОтбора = Новый ПолеКомпоновкиДанных("Задание");

    // найдем отбор
    ЭлементОтбора = Неопределено;
    Для Каждого Отбор Из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
    Если Отбор.ЛевоеЗначение = ПолеОтбора Тогда
    ЭлементОтбора = Отбор;
    Прервать
    КонецЕсли;
    КонецЦикла;

    // если не нашли, то создадим
    Если ЭлементОтбора = Неопределено Тогда
    ЭлементОтбора = Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = ПолеОтбора;
    КонецЕсли;

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

Включите ЛистСогласования в отборы, поставьте - Быстрый Доступ.
---
Я, наверное запутанно объяснил. Выкладываю скрин. На нем, при заполнении 1. должен автоматически включиться отбор 2.
---
У данных полей один и тотже тип - ссылка на документ.
---
"Задание" - это ссылка на документ. "Ссылка.Задание" - дубликат этого поля ?
---
Да, это дубликат.
---
есть поле отбора ЗаданиеСсылка, в котором выбираем документ "ЛистСогласования"

чтобы при выборе документа "Лист согласования" автоматически включался отбор по этому документу.

Вполне достаточно одного поля выбора в быстрых настройках
---
Я так тоже думал, но поставили такую задачу, т.к. данный отбор в дальнейшем будет скрыт, а при выборе "Задание" будут заполняться еще реквизиты в верхней части формы отчета. Поэтому программный отбор необходим.
---
Т.е. выбираем одно значение, а второе должно копироваться из первого, так?
Тогда можно это делать в процедуре ПередОткрытием
---
Да, выбрав определенное задание, должна автоматически поставиться галочка отбора, а в поле отбора появиться это задание.
---
Пытаюсь в процедуре ПередОткрытием написать:

```1c
    &НаСервере
    Процедура ПриОткрытииНаСервере()

    НастройкиКомпоновкиДанных = Отчет.КомпоновщикНастроек.ПолучитьНастройки();

    НовыйОтбор = НастройкиКомпоновкиДанных.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    НовыйОтбор.ЛевоеЗначение = Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора.НайтиПоле("Задание").Поле;
    НовыйОтбор.ПравоеЗначение = Отчет.Задание;
    НовыйОтбор.Использование = Истина;

    КонецПроцедуры
```

Но ругается на строку: НовыйОтбор.ЛевоеЗначение = Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора.НайтиПоле("Задание").Поле;

и выдает ошибку:

{Отчет.ОтчетПоКС.Форма.ФормаОтчета.Форма(42)}: Ошибка при вызове метода контекста (НайтиПоле)
 НовыйОтбор.ЛевоеЗначение = Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора.НайтиПоле("Задание").Поле;//Отчет.КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("ЗаданиеСсылка");
по причине:
Несоответствие типов (параметр номер '1')
---
Я, наверное, все неправильно делаю.
---
Сделал так:

```1c
    &НаСервере
    Процедура ЗаданиеПриИзмененииНаСервере()

    НовыйЭлементОтбора = Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

    ПолеОтбора = Новый ПолеКомпоновкиДанных("Задание");

    НовыйЭлементОтбора.ЛевоеЗначение = ПолеОтбора;
    НовыйЭлементОтбора.Использование = Истина;
    НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    НовыйЭлементОтбора.ПравоеЗначение = Отчет.Задание;

    КонецПроцедуры
```

Но есть одно увесистое "НО". При единичном задании отбора, все хорошо, т.е. мы выбрали нужное задание, получили по нему данные, проанализировали и закрыли отчет. Для такой цепочки данная процедура идеальна. Но, если, у нас стоит задача проанализировать несколько заданий, то при отборе первого отчет отрабатывает, а вот при выборе второго, отбор добавляет к первому еще и второе значение.

Подскажите, как очищать отбор, при выборе нового задания?
---
Отчет. КомпоновщикНастроек.Настройки.Отбор.Элементы.Удалить()
---
Перед добавлением отбора, нужно проверить существует ли он

```1c
    &НаСервере
    Процедура ЗаданиеПриИзмененииНаСервере()
    ПолеОтбора = Новый ПолеКомпоновкиДанных("Задание");

    // найдем отбор
    ЭлементОтбора = Неопределено;
    Для Каждого Отбор Из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
    Если Отбор.ЛевоеЗначение = ПолеОтбора Тогда
    ЭлементОтбора = Отбор;
    Прервать
    КонецЕсли;
    КонецЦикла;

    // если не нашли, то создадим
    Если ЭлементОтбора = Неопределено Тогда
    ЭлементОтбора = Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = ПолеОтбора;
    КонецЕсли;

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