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

    &НаКлиенте
    Процедура УслугаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    ОписаниеЗакрытия = Новый ОписаниеОповещения("ОбработатьВыбор",ЭтотОбъект);
    ФормаВыбора = ОткрытьФорму("Справочник.Услуги.ФормаВыбора",,ЭтаФорма,,,,ОписаниеЗакрытия,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

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

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

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

    &НаКлиенте
    Процедура ОбработатьВыбор(Результат,Параметры) Экспорт

    Объект.Услуга = Результат;

    КонецПроцедуры
```
---
запрос не глупость, а не корректный. Надо не справочник соединять , а регистр сведений должности по врачам, с регистром сведений услуги по должностям. В запрос срез последних рег сведений должности врача передавать параметр ФИО врача на дату документа и на эту же дату левым соединением получать срез последних по регистру услуг и соединять их по должности. Создать реквизит услуга с типом справочник услуг и в событии поля формы, кажется начало выбора(могу ошибиться, надо по экспериментировать), если вариант с выпадающим списком не подходит, в форме выбора этого справочника, установить отбор по этому списку что получен из запроса. Тут два варианта или подправить произвольный запрос формы выбора или установить сам отбор списка в присозданиинасервере.
---
Распишу если правильно понял документ твой.
Есть поле врач и есть поле услуга, если тебе надо, чтоб при выборе ФИО врача , в поле выбора услуги, открывался справочник только с услугами этого врача, то в событиях поля услуга, при начале выбора, создаёшь запрос, выбрать из рег сведений должности по врачам срез последних, параметром отбора будут дата документа и ФИО врача , соединяет левым соединением с услугами, также срез последних на дату документа. Первая часть сделана. Потом результат запроса переводишь или в список значений или в массив значений , все зависит от варианта , который ты выберешь в форме выбора справочника услуг. Поскольку после того как отработает событие при начале выбора, откроется форма выбора этого справочника. Там или допиливаешь произвольный запрос и отбираешь по услугам в (&массиве) который ты передашь из документа на форму выбора, через параметры(тут надо почитать материал как передать параметр в произвольный запрос динамического списка) или при создании на сервере динамическийсписок.отбор и тип сравнения в списке, в интернете полно материала, как при открытии наложить отбор в динамическом списке формы выбора. Все задача решена.
---
Я получил список значений который необходим запросом. И не могу понять как этот список перенести на реквизит "Услуги". Этот реквизит у меня с типом справочник СправочникСсылка.Услуги. Где этот динамический список должен быть?
---
вот когда кликаешь в поле услуга, у тебя открывается справочник услуги, это и есть динамический список, который надо отфильтровать. Тебе твой список, надо передать в параметры, вот тебе надо тоже самое сделать
https://forum.infostart.ru/forum9/topic313097/
Используй открытьформу выбора и параметры передаются в виде структуры. А в самой форме выбора в при создании на сервере получаешь из параметров этот список, я кстати не помню, можно ли список туда передать, но попробуй, по идее должно, если нет, передай массив, а в при создании на сервере создашь список. Данные в этой процедуре, получишь параметры.... В отладчике напиши параметры и увидишь содержание и лепи свой отбор или передавай массив в виде параметра в произвольный запрос и подправь сам запрос к динамическому списку
---
Хорошо, смотрите, когда я выбираю событие при НачалоВыбора, в нем я не могу создать запрос. Сам список я с нужными значениями с помощью запроса с параметром Врач я получаю при изменении Врача.
Как этот список который я получил передать в параметры? Я окончательно запутался.
---
а зачем его делать при изменении врача, там это не нужно, поскольку выбор услуги может и не произойти? Сделай функцию на сервере и туда вложи этот запрос и запроси этот список из начало выбора и функция тебе его вернёт, а дальше передавай в форму выбора. Потом когда сделаешь, я подскажу что исправить в запросе, чтоб сейчас не путать тебя) используй функцию на серверебезконтекста, а не на сервере и передай врача так список услуг =ЗапросСпискаУслуг(объект.врач)

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

```1c
    &НаКлиенте
    Процедура МастерНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

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

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

    &НаКлиенте
    Процедура ОбработатьВыбор(Результат,Параметры) Экспорт

    Объект.Мастер = Результат;

    КонецПроцедуры
```
---
попробуй может пройдет, если будет ошибка то скорее всего где ссылка и всписке, там надо по эксперемнитировать, может содержит вместо всписке. я тебе сделал без параметров и сразу с отбором

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

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

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

    &НаКлиенте
    Процедура ОбработатьВыбор(Результат,Параметры) Экспорт

    Объект.Врач= Результат;

    КонецПроцедуры
```
---
Не работает(
---
ты массив перевел в список значений?
---
в функции переделай

```1c
    СписокЗначений = Новый СписокЗначений;
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий Цикл
    СписокЗначений.Добавить(Выборка.Услуга.Ссылка,Строка(Выборка.Услуга));
    КонецЦикла;
    Возврат СписокЗначений;
```
---
Поменял, пробовал с вашей программой и тоже не работает(
---
https://forum.infostart.ru/forum9/topic313085/#message3069991

Допиши фрагмент
И сделай как у меня
---
выборка.следующий()

Ну, ты поглядывай на синтаксис, я тебе пишу в спешке и параллельно своим занимаюсь. Проверяй на ошибки!
---
ещё увидел косяк. Объект.услуга , а не объект.врач = результат. В описании оповещения. Глянул , что сделал. Там мой вариант кода, надо было не к врачу а к услуге. То что у тебя врачначаловыбора, перекинь в услугуначаловыбора.
---
```1c
    СписокЗначений = Новый СписокЗначений;
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
    СписокЗначений.Добавить(Выборка.Услуга.Ссылка,Строка(Выборка.Услуга));
    КонецЦикла;
    Возврат СписокЗначений;

    &НаКлиенте
    Процедура УслугаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    ОписаниеЗакрытия = Новый ОписаниеОповещения("ОбработатьВыбор",ЭтотОбъект);
    ФормаВыбора = ОткрытьФорму("Справочник.Услуги.ФормаВыбора",,ЭтаФорма,,,,ОписаниеЗакрытия,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

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

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

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

    &НаКлиенте
    Процедура ОбработатьВыбор(Результат,Параметры) Экспорт

    Объект.Услуга = Результат;

    КонецПроцедуры
```
---
Это победа, вы лучший. Благодарю что помогли с этим. Мне осталось только понять как это можно сделать через открыть форму. Проверял, что список приходит верный, видимо в обозначении параметра ошибка. Еще раз благодарю. Это круто. Вы мощь.
---
так я не понял, справочник открылся с отбором или нет? Что ещё там тебе понять надо?
---
При нажатии в документе на поле услуга, появляется список из всех выбранных ранее, и при нажатии показать все, появляется справочник с отбором)
---
алилуя))) ну, эту историю ранее открытых можно убрать и сделать только на кнопку открытия. Выпадающий список тоже можно создать, при очень сильном желании. Но я говорил, там надо запрос подправить. В запрос надо передавать , помимо врача и дату документа и отбирать срез последних по дате тоже. Вот если надо будет что то исправить в старом документе, нажмёшь услугу и у тебя о берутся услуги по срезу на текущую дату, а надо на дату документа!!!