В форме документа реквизиты Склад и Ответственный

- надо определить по Ответственному(пользователю) к какому складу у него есть доступ и вывести их список?
- у этих справочников есть одинаковые реквизиты у Ответственного в справочнике Пользователи Физ.лицо(из спр Физ..лица), а в справочнике Склады Ответственное лицо(из спр Физ..лица)

- или как то по другому определить закрепленные склады за пользователем ...
---
Примерно так:

```1c
    &НаКлиенте
    Процедура СкладОтправительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ДанныеВыбора = Новый СписокЗначений;
    ДанныеВыбора.ЗагрузитьЗначения(ПолучитьСкладыПоОтветственному());
    КонецПроцедуры

    &НаСервере
    Функция ПолучитьСкладыПоОтветственному()
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    | ОтветственныеЛицаСрезПоследних.СтруктурнаяЕдиница КАК Склад
    |ИЗ
    | РегистрСведений.ОтветственныеЛица.СрезПоследних КАК ОтветственныеЛицаСрезПоследних
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
    | ПО ОтветственныеЛицаСрезПоследних.ФизическоеЛицо = Пользователи.ФизическоеЛицо
    |ГДЕ
    | Пользователи.Ссылка = &Пользователь";
    Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);

    Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад");
    КонецФункции
```
---
Лучше ещё обозначить, что проверка не для всех нужна, например так:

```1c
    &НаКлиенте
    Процедура СкладОтправительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Если ПолныеПрава() Тогда
    Возврат;
    КонецЕсли;

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

    &НаСервере
    Функция ПолныеПрава()
    Возврат РольДоступна("ПолныеПрава");
    КонецФункции
```
---
Что значит "Есть доступ"?
В каком складе он ответственный? Или к какому складу по RLS нет ограничений?
---
В каком складе он ответственный?

- Да, ввести только те склады в которых он ответственный
---
ВЫБРАТЬ
 Склады.Ссылка
ИЗ
 Справочник.Пользователи КАК Пользователи
  ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
  ПО Пользователи.ФизЛицо = Склады.Ответственный
ГДЕ
 Пользователи.Ссылка = &Ссылка
---
```1c
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Склады.Ссылка
    ИЗ
    Справочник.Пользователи КАК Пользователи
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
    ПО Пользователи.ФизЛицо = Склады.Ответственный
    ГДЕ
    Пользователи.Ссылка = &Ссылка и Склады.Ссылка is not null
```

А не так?
---
хммм, а как в процедуру подставить и в какую лучше приИзменении, началоВыбора, началовыбораИзСписка ?
---
Вы изложите подробно что хотите получить в результате? Запрос складов, где пользователь является ответственным, я привёл ниже.
---
Пользователь открыл документ ПеремещениеТоваров в поле СкладОтправитель были доступны только его склады, другие скрывались
---
Примерно так:

```1c
    &НаКлиенте
    Процедура СкладОтправительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ДанныеВыбора = Новый СписокЗначений;
    ДанныеВыбора.ЗагрузитьЗначения(ПолучитьСкладыПоОтветственному());
    КонецПроцедуры

    &НаСервере
    Функция ПолучитьСкладыПоОтветственному()
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    | ОтветственныеЛицаСрезПоследних.СтруктурнаяЕдиница КАК Склад
    |ИЗ
    | РегистрСведений.ОтветственныеЛица.СрезПоследних КАК ОтветственныеЛицаСрезПоследних
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
    | ПО ОтветственныеЛицаСрезПоследних.ФизическоеЛицо = Пользователи.ФизическоеЛицо
    |ГДЕ
    | Пользователи.Ссылка = &Пользователь";
    Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);

    Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад");
    КонецФункции
```
---
Лучше ещё обозначить, что проверка не для всех нужна, например так:

```1c
    &НаКлиенте
    Процедура СкладОтправительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Если ПолныеПрава() Тогда
    Возврат;
    КонецЕсли;

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

    &НаСервере
    Функция ПолныеПрава()
    Возврат РольДоступна("ПолныеПрава");
    КонецФункции
```
---
- нажимаю Отправитель - Получить все - не чего не происходит?
---
когда выбираем из списка, то все значения снизу.
Проверьте, что у пользователей заполнено "Физическое лицо".
---
ой, простите на тестовой смотрел :-) ... еще раз Благодарю...
---
Если выбрать есть из чего и всё работает нормально, но Вам не хватает привычной формы, то нужно переписывать выбор через использование ФормыВыбора с соответствующими отборами и т.д. Я Вам дал простой вариант реализации.
---
Вот за это спасибо, теперь понял тоже в чем дело
---
Запрос на получение складов вам указали в (6)
Условие, которое необходимо проверить предварительно - в (7)

После открытия формы и заполнения значения ответственного в документе заполняйте список выбора у элемента формы "СкладОтправитель" результатом запроса из (12)
---
Это я сам свой пост поправил, потому как фигню я написал, это не вам послание )))
---
Лучше ничего не запрещать, пусть видит все, а перед записью выдавать ошибку. склад не соответствует пользователю. Запрос как получить его склады есть ниже. Иначе намучаетесь интерфейсные заглушки ставить. Перевыбрал ответственного поставил нужный склад и прочее... В модуле объекта перед записью понадежнее будет.
---
у рядового пользователя нет прав на редактирование регистра сведений "Ответственные лица" в котором хранится информация об ответственном за склад.
---
Что-то вы ерунду какую-то пишите. Какой Склады.Ответственный? БП 3.0

```1c
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    | ОтветственныеЛицаСрезПоследних.СтруктурнаяЕдиница КАК Склад
    |ИЗ
    | РегистрСведений.ОтветственныеЛица.СрезПоследних КАК ОтветственныеЛицаСрезПоследних
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
    | ПО ОтветственныеЛицаСрезПоследних.ФизическоеЛицо = Пользователи.ФизическоеЛицо
    |ГДЕ
    | Пользователи.Ссылка = &Пользователь";
    Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);
    ВыборкаСкладов = Запрос.Выполнить().Выбрать();
    Пока ВыборкаСкладов.Следующий() Цикл
    Сообщить(" + ВыборкаСкладов.Склад);
    КонецЦикла;
```
---
у пользователей должен быть заполнен реквизит "Физическое лицо".
---
это похоже на правду
 только параметр пользователь возможно будет выбран в документе
---
Сообщение было скрыто модератором.
---
p/s
что бы не выпадали другие склады в настройках формы на реквизите СкладОтправитель в свойствах поставил:
КнопкаОткрытия - Нет
КнопкаСоздания - Нет
БыстрыйВыбор - Да
ИсторияВыбораПриВводе - Не использовать

НачалоВыбораИзСписка - добавил Процедура СкладОтправительНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка), то же самое что и СкладОтправительНачалоВыбора

- пришлось создать Справочник.СкладыДоступ(реквизиты Склад,ФизическоеЛицо), так как с одним складом могут работать несколько пользователей

-соответственно подправил код

```1c
    &НаСервере
    Функция ПолучитьСкладыПоОтветственному()
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | СкладыДоступ.Склад КАК Склад
    |ИЗ
    | Справочник.СкладыДоступ КАК СкладыДоступ
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
    | ПО СкладыДоступ.ФизическоеЛицо = Пользователи.ФизическоеЛицо
    |ГДЕ
    | Пользователи.Ссылка = &Пользователь";
    Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);

    Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад");

    КонецФункции
```