Такая проблема. Есть документ "Перемещение Товаров"
В нем мы видим все документы, которые созданы в нем.
А можно как то сделать, чтобы отбор был по отправителю и получателю.
То есть, если мы из группы "Х", то мы должны видеть те документы, которые соответствуют нашей группе.
Если мы отправили из группы Х" в группу "У" и наоборот, мы должны эти документы увидеть.
Другие документы из группы "У" мы не видим.
---
вот так надо, группу условий не добавляй
```1c
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеОтправитель");
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.равно;
    ЭлементОтбора.ПравоеЗначение =ПараметрыСеанса.ТекущийПользователь.Подразделение;
    ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеПолучатель");
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.равно;
    ЭлементОтбора.ПравоеЗначение =ПараметрыСеанса.ТекущийПользователь.Подразделение;
    ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
```
---
Если Упр Приложение ( Бухгалтерия 3 например), там кнопка есть:
 "Еще" - "Настроить список" - Отбор по ответственному
---
8,3 бухгалтерия КОРП, редакция 3,0. Нет, Вы не поняли.
Нужно закодить такой отбор, чтобы люди из своего подразделения, видели только свои документы, которые отправляли кому то и получали от кого то
---
зачем кодить, вы один раз настройте и сохраните в пользовательских настройках
---
Это к каждому пользователю ходить и сохранять? Нет, так не пойдет. Нужно, чтобы это работало системно
---
Можно и кодом , если задача такая)

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

А я сделал вот так. Но только по отправителю, а как сделать, чтобы и по получателю были там?
---
Так надо через группу ИЛИ

```1c
    ГруппаОтбора = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
    ГруппаОтборв.ТипГруппы=ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
    ЭлементОтбора = ГруппаОтборв.Элементы.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеОтправитель");
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
    ЭлементОтбора.ПравоеЗначение =ПараметрыСеанса.ТекущийПользователь.Подразделение;
    ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
    ЭлементОтбора = ГруппаОтборв.Элементы.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеПолучатель");
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
    ЭлементОтбора.ПравоеЗначение =ПараметрыСеанса.ТекущийПользователь.Подразделение;
    ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
```
---
Спасибо большое!
Только еще один вопрос.
Смотрите, есть главное подразделение, которое может смотреть все группы. И есть пользователи из этого подразделения.
Как реализовать, чтобы эти пользователи могли все это видеть?

```1c
    Если ПараметрыСеанса.ТекущийПользователь.Подразделение.Родитель.Код<>"00-000001" И Строка(ПараметрыСеанса.ТекущийПользователь.Подразделение.Код)<>"00-000001" Тогда
```

То есть вот. Как это правильно все записать?
---
Очевидно же. Если условие не выполняется по главному подразделению, то пишем отбор, выполняется, отбор не устанавливаем
---
Если ПараметрыСеанса.ТекущийПользователь.Подразделение.Ссылка.ПринадлежитЭлементу(Справочник.подразделения.Найтипокоду("00-000001")) И ПараметрыСеанса.ТекущийПользователь.Подразделение.Родитель.Код = "00-000001" Тогда
/// видят всё
Иначе
///Не видят ничего
КонецЕсли;
---
По синтаксису ругается, когда так пишу...
Подскажите, как правильно
---
ошибку покажи
---
наверное на Справочник.Подразделения ругается, замени на Справочник.Пользователи
Или покажи ошибку
---
так же, 2 отбор добавь
---
То есть про получателя будет также, только как это записать правильно?

```1c
    ЭлементОтбора = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеПолучатель");// и Новый ПолеКомпоновкиДанных("ПодразделениеПолучатель");
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
    ЭлементОтбора.ПравоеЗначение =ПараметрыСеанса.ТекущийПользователь.Подразделение;// ПараметрыСеанса.ТекущийПользователь.Подразделение; //если через реквизит иначе через запрос свойства или
    ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
```
---
Да так же , при создании на сервере засунь оба отбора и по идее должно работать
---
вот так надо, группу условий не добавляй
```1c
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеОтправитель");
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.равно;
    ЭлементОтбора.ПравоеЗначение =ПараметрыСеанса.ТекущийПользователь.Подразделение;
    ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеПолучатель");
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.равно;
    ЭлементОтбора.ПравоеЗначение =ПараметрыСеанса.ТекущийПользователь.Подразделение;
    ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
```
---
еще вопрос, смотрите, есть платежные поручения, в них делаю такой же отбор в формесписка, но работает, только для пользователей главного подразделения. Остальные подразделения не видят документы. Помогите, пожалуйста, не пойму, что делаю не так
---
```1c
    Если ПараметрыСеанса.ТекущийПользователь.Подразделение.Ссылка.ПринадлежитЭлементу(Справочник.подразделения.Найтипокоду("00-000001")) ИЛИ ПараметрыСеанса.ТекущийПользователь.Подразделение.Родитель = Справочник.подразделения.Найтипокоду("00-000001") Тогда
    /// видят всё
    Иначе
    ///Не видят ничего
    КонецЕсли;
```

Измените условие , на
```1c
    Если ПараметрыСеанса.ТекущийПользователь.Подразделение.Ссылка.ПринадлежитЭлементу(Справочник.подразделения.Найтипокоду("00-000001")) ИЛИ ПараметрыСеанса.ТекущийПользователь.Подразделение.Родитель = Справочник.подразделения.Найтипокоду("00-000001") Тогда
    /// видят всЁ
    Иначе
    ///видят всЕ
    КонецЕсли;
```
---
Если ПараметрыСеанса.ТекущийПользователь.Подразделение.Ссылка.ПринадлежитЭлементу(Справочник.подразделения.Найтипокоду("00-000001")) ИЛИ ПараметрыСеанса.ТекущийПользователь.Подразделение.Родитель = Справочник.подразделения.Найтипокоду("00-000001") Тогда

Вот мой код, с учетом Ваших поправок

```1c
    Если ПараметрыСеанса.ТекущийПользователь.Подразделение.Ссылка.ПринадлежитЭлементу(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("00-000001")) ИЛИ ПараметрыСеанса.ТекущийПользователь.Подразделение.Родитель = Справочники.ПодразделенияОрганизаций.НайтиПоКоду("00-000001") Тогда
    //Если ПараметрыСеанса.ТекущийПользователь.ПодразделениеОрганизации.Родитель.Код <> "00-000001" Тогда

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

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

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

Но все равно выдает ошибку,
{ОП Документ.ПлатежноеПоручение.Форма.ФормаСписка.Форма(15)}: Значение не является значением объектного типа (ЛевоеЗначение)
     ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеОрганизации");
---
Новый ПолеКомпоновкиДанных("ПодразделениеОрганизации")
У вас точно есть такое поле ? И так ли оно называется ?
проверьте в запросе
---
у вас ошибка в коде ...
```1c
    Если ПараметрыСеанса.ТекущийПользователь.Подразделение.Ссылка.ПринадлежитЭлементу(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("00-000001")) ИЛИ ПараметрыСеанса.ТекущийПользователь.Подразделение.Родитель = Справочники.ПодразделенияОрганизаций.НайтиПоКоду("00-000001") Тогда
    //Если ПараметрыСеанса.ТекущийПользователь.ПодразделениеОрганизации.Родитель.Код <> "00-000001" Тогда

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

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

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

{ОП Документ.ПлатежноеПоручение.Форма.ФормаСписка.Форма(14)}: Значение не является значением объектного типа (ЛевоеЗначение)
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеОрганизации");
---
ЭлементОтбора = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Вот так допишите
---
ЭлементОтбора не дописал
---
для пользователей из головной группы работает, т.е. видны документы все.
А для пользователей других групп ничего нет(
---
убери отбор для других пользователей тогда

ЭлементОтбора.Использование = Ложь;
---
и еще у Вас 2 одинаковых кода..
---
да
---
можно еще параметром в запросе прописать и при открытии указать параметры
---
в свойствах списка...
---
а лучше так :
```1c
    ЭлементОтбора = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

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

    ЭлементОтбора.ПравоеЗначение =ПараметрыСеанса.ТекущийПользователь.Подразделение;
    Иначе
    ЭлементОтбора.ПравоеЗначение =ПараметрыСеанса.ТекущийПользователь.Подразделение; ///ВАШИ Условия
    Конецесли;
    ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
```
---
```1c
    Если ПараметрыСеанса.ТекущийПользователь.Подразделение.Ссылка.ПринадлежитЭлементу(Справочник.подразделения.Найтипокоду("00-000001")) ИЛИ ПараметрыСеанса.ТекущийПользователь.Подразделение.Родитель = Справочник.подразделения.Найтипокоду("00-000001") Тогда
    /// видят всё
    Иначе
    ///Не видят ничего
    КонецЕсли;
```
---
Да, спасибо большое. Все работает , как надо.
Другой небольшой вопрос возник, теперь также нужно реализовать такой же отбор в Журнале документов, деньги. На приход и расход.
Пишем же ту же самую процедуру?
---
именно
---
Помогите...(
---
```1c
    &НаСервере
    Процедура ОППриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    ЭлементОтбора = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеОрганизации");
    ЭлементОтбора.ПравоеЗначение =ПараметрыСеанса.ТекущийПользователь.Подразделение;
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
    Если ПараметрыСеанса.ТекущийПользователь.Подразделение.Ссылка.ПринадлежитЭлементу(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("00-000001")) ИЛИ ПараметрыСеанса.ТекущийПользователь.Подразделение.Родитель = Справочники.ПодразделенияОрганизаций.НайтиПоКоду("00-000001") Тогда
    //ЭлементОтбора = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.Использование = истина;
    Иначе
    ЭлементОтбора.Использование = Ложь;
    Конецесли;
    ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
    КонецПроцедуры
```
---
Вообще какой именно отбор вы хотите установить ?
Подразделение документа = подразделения сотрудника? Может у сотрудника нет документов, поэтому не выполняется отбор?
---
Нет, отбор не по сотруднику, а по подразделению сотрудника. То есть, если сотрудник из подразделения Х, он видит все документы созданные другими пользователями подразделения Х. и т.д.
И если сотрудник из подразделения УПРАВЛЕНИЯ, то он видит вообще все документы, независимо каким подразделением они были созданы
---
так вот же,
```1c
    &НаСервере
    Процедура ОППриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    ЭлементОтбора = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеОрганизации");
    ЭлементОтбора.ПравоеЗначение =ПараметрыСеанса.ТекущийПользователь.Подразделение;
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
    Если ПараметрыСеанса.ТекущийПользователь.Подразделение.Ссылка.ПринадлежитЭлементу(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("00-000001")) ИЛИ ПараметрыСеанса.ТекущийПользователь.Подразделение.Родитель = Справочники.ПодразделенияОрганизаций.НайтиПоКоду("00-000001") Тогда ///Если управления то отбор отключаем ( видны все доки)
    ЭлементОтбора.Использование = ложь;
    Иначе ///Включаем отбор по подразделению сотрудника
    ЭлементОтбора.Использование = истина;
    Конецесли;
    ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
    КонецПроцедуры
```
---
Вот я из подразделения Х и я не вижу доки, которые создавали другие пользователи из моего подразделения.
НО если я себя переношу в подразделение "управление", то вижу все доки, как надо
---
посмотри совпадают ли подразделения через отладчик либо через сообщить()
---
Смотрел, все нормально.
В других доках делал такой же отбор, все нормально работает, а тут никак(
---
там может еще стоять пользовательский отбор, перед добавлением отбора удали старые :
```1c
    Для каждого ЭлементОтбора Из Список.Отбор.Элементы Цикл
    Список.Отбор.Элементы.Удалить(ЭлементОтбора )
    КонецЦикла;
```
---
Для каждого ЭлементОтбора Из Список.Отбор.Элементы Цикл
Список.Отбор.Элементы.Удалить(ЭлементОтбора )
КонецЦикла;
не помогло(
---
Медицина бессильна?
---
тут уже надо самому смотреть, по идее все должно работать.
Через отладчик проверь что там не формирует
---
Или такое нельзя сделать?
---
```1c
    &НаСервере
    Процедура ОППриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    ЭлементОтбора = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

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

Теперь все видят все;(
---
А что мешает ограничить через роли ?
Или обязательно ломать все списки документов ?
---
Обязательно через отбор(
---
Ну тогда под каждый список необходимо настраивать в зависимости от условий