Добрый день! Пишу под себя небольшую конфигурацию в 1С:Предприятие 8.3.
Наткнулся на проблему, не могу решить пару дней.
Цель: есть документ о перемещении оборудования между нашими базами. В реквизитах документа указываем новый адрес и старый. В табличной части выбираем необходимое оборудование из справочника Оборудование. Необходимо, чтобы в выпадающем списке было только то оборудование, которое находится на эту дату на старом адресе. Записи все делаются в РегистрСведений Базировка.

В форме выбора справочника Оборудование сделал следующий произвольный запрос с помощью конструктора:

```1c
    ВЫБРАТЬ
    СправочникОборудование.Ссылка КАК Ссылка,
    СправочникОборудование.ПометкаУдаления КАК ПометкаУдаления,
    СправочникОборудование.Родитель КАК Родитель,
    СправочникОборудование.ЭтоГруппа КАК ЭтоГруппа,
    СправочникОборудование.Код КАК Код,
    СправочникОборудование.Наименование КАК Наименование,
    СправочникОборудование.ИнвентарныйНомер КАК ИнвентарныйНомер,
    БазировкаСрезПоследних.Оборудование КАК Оборудование,
    БазировкаСрезПоследних.АдресБазы КАК АдресБазы
    ИЗ
    РегистрСведений.Базировка.СрезПоследних КАК БазировкаСрезПоследних
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Оборудование КАК СправочникОборудование
    ПО БазировкаСрезПоследних.Оборудование = СправочникОборудование.Ссылка
    ГДЕ
    БазировкаСрезПоследних.АдресБазы = &АдресБазы
    И БазировкаСрезПоследних.Период = &Период
```

Далее в ФормеДокумента в табличной части в свойствах оборудования на вкладке Представление в Связях параметров выбора ставлю условия:

```1c
    Период(Дата), АдресБазы(СтарыйАдрес).
```

И Формой Выбора ставлю ту форму где прописывал произвольный запрос.

Когда создаю новый документ при обращении в табличной части к списку оборудования выдает ошибку:
Ошибка при выполнении запроса.
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "НаборДанныхДинамическогоСписка"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
{(16, 43)}: Не задано значение параметра "АдресБазы"
ИЛИ БазировкаСрезПоследних.АдресБазы = <<?>>&АдресБазы

Что и где ещё необходимо прописать? Или должен быть совершенно другой алгоритм действий?
---
Итак в ходе поисков удалось выяснить, что код в форме документа

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

при записи в Событиях "Создать" и прочих не работает, а вот "НачалоВыбора" без строчки "СандартнаяОбработка=Ложь;" вызывает два окна, но работает как надо.

Так же этот код можно заменить записью в Свойствах Элемента Табличной Части: 1. "ВыборФормы" - ФормаВыбораТест и 2. "СвязиПараметровВыбора" - Период(Объект.Дата), АдресБазы(Объект.СтарыйАдрес).

В самой форме выбора прописываем:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Список.Параметры.УстановитьЗначениеПараметра("Период", Параметры.Период);
    Список.Параметры.УстановитьЗначениеПараметра("АдресБазы", Параметры.АдресБазы);
    КонецПроцедуры
```

Все параметры передаются, но если стоит режим просмотра - "Иерархический список" или "Древо", то появляется пустой список, если переключиться на режим "Список", то всё появляется согласно установленным параметрам.

Также выяснил что код

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

работает не корректно: он отбирает вначале по параметру АдресБазы, а уже потом по дате, поэтому в список попадают записи старые, хотя уже есть более свежая запись о перемещении на другую базу.
Поэтому изменил код на такой:

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

И как констатация факта (для себя не забыть), в ходе поиска кода запроса выяснил, что если в динамическом списке не задана "Основная таблица", то в форме при выборе нужной записи она не попадает в строчку документа. (в ходе экспериментов она стала пустой, долго искал причину ошибки)
---
Суть вашей проблемы что вы не заполнили параметр &АдресБазы до момента выполнения своего запроса...
То есть примерно так...

```1c
    Запрос.УстановитьПараметр("АдресБазы", СтарыйАдрес);
    РезультатЗапроса = Запрос.Выполнить();
```

Вот это непонятные строки..

```1c
    Период(Дата), АдресБазы(СтарыйАдрес).
```

Приведите более полный код ...
---
Вот это непонятные строки..

```1c
    Период(Дата), АдресБазы(СтарыйАдрес).
```

Приведите более полный код ...

Прикрепил скриншот, где этот код.

(2) Суть вашей проблемы что вы не заполнили параметр &АдресБазы до момента выполнения своего запроса...
Стесняюсь спросить "Куда ставить?"

Попробовал вставить в События при изменении:

```1c
    &НаСервере
    Процедура СоставОборудованиеПриИзмененииНаСервере()
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("АдресБазы", Объект.СтарыйАдрес);
    Запрос.УстановитьПараметр("Период", Объект.Дата);

    РезультатЗапроса = Запрос.Выполнить();

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

    &НаКлиенте
    Процедура СоставОборудованиеПриИзменении(Элемент)
    СоставОборудованиеПриИзмененииНаСервере();
    КонецПроцедуры
```

Нет никакой реакции(((
---
Событие "При изменении" возникает не при возникновении ваших желаний что-то поменять, а только после того как вы УЖЕ что-то поменяли.
И потому ясно , что текст ваш явно "не туда"...
Кроме того вот такой
---
А почему у вас не заполнено поле "Параметры выбора"?
---
Пытался заполнить, но там даются только реквизиты справочника Оборудование.
---
Все правильно вы же сами сделали
В форме выбора справочника Оборудование сделал следующий произвольный запрос с помощью конструктора:
Вы указали Справочник Оборудование в своей форме выбора?
Но копать нужно вам именно в этой закладке , ибо именно в ней передаются Параметы вашего запроса , а их вы не передали, вот он и пустой
---
Вы пошли совершенно не верным путем...
Вы вообще не там ищете параметры своего запроса....
---
Куда двигаться?

Вот попробовал отсюда Есть форма, содержащая динамический список с произвольным запросом. Как при открытии формы установить нужные параметры в этом запросе?

Сделал следующее:
1. В Модуле "ФормаВыбораТест" прописал код:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Список.Параметры.УстановитьЗначениеПараметра("АдресБазы", Параметры.АдресБазы);
    Список.Параметры.УстановитьЗначениеПараметра("Период", Параметры.Период);
    КонецПроцедуры
```

2. В модуле Формы документа "Перемещение оборудования":

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

Но синтаксис ругается на Объект.Дата, если его убрать, то список открывается пустым.
Как здесь указать ссылку на дату?
---
Эх сегодня только помогал таким вопросом. Нужно в Передать параметр в динамический список.:
ТвойСписок.УстановитьПаратр("АдресБазы", СтарыйАдрес);
---
Понимаю, что при открытии этого списка параметры как-то должны попадать в этот запрос, но вот как и куда - остаётся для меня загадкой. Пробовал вставить в События Поля "Оборудование" ПриИзменении, о чём написал выше.
---
Событие при создании. Там передаешь параметры списку
---
(6) Событие при создании

Прописал в событие при Создании:

```1c
    &НаСервере
    Процедура СоставОборудованиеСозданиеНаСервере()
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("АдресБазы", Объект.СтарыйАдрес);
    Запрос.УстановитьПараметр("Период", Объект.Дата);

    РезультатЗапроса = Запрос.Выполнить();

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

    &НаКлиенте
    Процедура СоставОборудованиеСоздание(Элемент, СтандартнаяОбработка)
    СоставОборудованиеСозданиеНаСервере();
    КонецПроцедуры
```

Ошибка так и осталась, такое ощущение, что он и не начинает работать.
---
(4) Событие "При изменении" возникает не при возникновении ваших желаний что-то поменять, а только после того как вы УЖЕ что-то поменяли.
И потому ясно , что текст ваш явно "не туда"...
Кроме того вот такой текст еще хуже...
ибо а Где же сам Запрос?

```1c
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("АдресБазы", Объект.СтарыйАдрес);
    Запрос.УстановитьПараметр("Период", Объект.Дата);

    РезультатЗапроса = Запрос.Выполнить();
```

Вы должны сформировать Список запросом, который выполнится ДО открытия окна вашей формы со списком оборудования...
А до этого момента , то есть еще раньше вы должны передать пареметры в запрос.

И приведите уж весь текст модуля вашей формы, для ясности...
И Обратите внимание на советы (6)...
---
Вначале делаю новую "ФормаВыбораТест", в которой делаю запрос в настройках списка:

```1c
    ВЫБРАТЬ
    СправочникОборудование.Ссылка КАК Ссылка,
    СправочникОборудование.ПометкаУдаления КАК ПометкаУдаления,
    СправочникОборудование.Родитель КАК Родитель,
    СправочникОборудование.ЭтоГруппа КАК ЭтоГруппа,
    СправочникОборудование.Код КАК Код,
    СправочникОборудование.Наименование КАК Наименование,
    СправочникОборудование.ИнвентарныйНомер КАК ИнвентарныйНомер,
    БазировкаСрезПоследних.Оборудование КАК Оборудование,
    БазировкаСрезПоследних.АдресБазы КАК АдресБазы
    ИЗ
    РегистрСведений.Базировка.СрезПоследних КАК БазировкаСрезПоследних
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Оборудование КАК СправочникОборудование
    ПО БазировкаСрезПоследних.Оборудование = СправочникОборудование.Ссылка
    ГДЕ
    БазировкаСрезПоследних.АдресБазы = &АдресБазы
    И БазировкаСрезПоследних.Период = &Период
```

И дальнейшие все мои действия не приводят к успеху (((
Весь код из модуля я сюда уже написал, другого ничего нет.
---
По-моему, тут не нужны никакие параметры. Платформа сама всё должна сделать, если правильно указать связи параметров выбора. И я не заметил слова "Отбор" в их представлении.
---
Так я тоже так считал, что заполнив нужные поля, должно сработать, но ни чего не получается.
---
Вы не заполнили нужные поля - Параметры выбора...
Если вы уберете из вашего запроса вообще Параметры , то он сформирует и выдаст вам список без отбора, то есть все по идее
А уже потом будете пытаться засунуть в него ограничения...
---
Проверил на тестовой базе. Всё работает без единой строчки кода. Ну и, разумеется, в тексте запроса динамического списка никаких параметров не нужно.
---
Слово "Отбор" обязательно в имени?
---
Обратите внимание на в тексте запроса динамического списка никаких параметров не нужно
У вас в тексте параметры, их нужно удалить скорее всего
---
Да. Можете почитать про Связи параметров выбора: https://its.1c.ru/db/v8312doc#bookmark:dev:TI000000299
---
К сожалению в 7 дневной ограниченной версии нет доступа к этому материалу(((
---
В настройках динамического списка, что-нибудь прописывали?
---
Нет.
---
Но в запросе нет параметров! Сорри не внимательно прочитал в предыдущем сообщении
---
Нет.
---
Убрал параметры. И они должны появится, как я понимаю, в свойствах "Связи параметров выбора". Почему автоматически не предлагает эти имена. Пробовал вручную прописать в строке
```1c
    Отбор.Период(Дата), Отбор.АдресБазы(СтарыйАдрес)
```
. ВСё равно один результат - выпадает пустой список.
---
выпадает пустой список
Значит в динамическом списке нет записей, соответствующих отбору.
Выдержка из ИТС:
5.6.17. Связи параметров выбора
Связи параметров выбора – данное свойство позволяет указать список реквизитов, которые будут поставлять значения, используемые при выборе значения реквизита, при открытии формы выбора, при отображении списка быстрого выбора и при выполнении ввода по строке.

В качестве примера можно привести выбор договора с контрагентом. Вначале осуществляется выбор контрагента, а затем выполняется выбор договора только из списка договоров выбранного контрагента. Причем отбор автоматически изменяется при смене контрагента.

Для того чтобы ограничить выбор, реквизиту в свойстве Связи параметров выбора устанавливается соответствие имени реквизита, по которому будет выполняться фильтрация выбираемых значений, и реквизита, из которого будет браться значение фильтрации.

Рис. 151. Связи параметров выбора

Значения, указанные в данном свойстве, будут переданы в открываемую форму через структуру Параметры (см. здесь). При этом значение колонки Имя будет соответствовать ключу элемента структуры, а значение реквизита, указанное в колонке Реквизит, – значению элемента структуры. Если в колонке Имя указано значение вида Отбор.Владелец, то будет создан параметр формы Отбор (типа Структура). В этой структуре будет создан элемент с ключом Код и значением, полученным из реквизита, указанного в колонке Реквизит (в нашем примере – Поставщик).
---
Всё отлично работает, когда в качестве параметра выбираешь справочник (например сделал форму в реквизитах выбираю должность, а в табличной части сотрудников и в список попадали только люди с такой должностью).
А вот что делать если в качестве параметра выступает данные из реестра сведений, который накладывает ограничения на справочник?
---
Я сейчас понял, что проблема у вас в запросе. Судя по всему, вам нужно получить срез последних на дату документа. А сейчас просто устанавливается отбор по полю Период. Добавьте в запрос параметр ДатаСреза и заполняйте его при создании формы выбора на сервере:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Список.Параметры.УстановитьЗначениеПараметра("ДатаСреза", Параметры.ДатаСреза);
    КонецПроцедуры
```
---
Запрос исправил, код

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Список.Параметры.УстановитьЗначениеПараметра("ДатаСреза", Параметры.ДатаСреза);
    КонецПроцедуры
```

вставил в модуль "ФормаВыбораТест", его надо где-то ещё прописывать или ссылаться на него? На самой форме я не нашёл в свойствах вкладки "События".

В свойствах ТЧ.Состав.Оборудование. в "Связи параметра выбора" пришлось вручную писать имена:

```1c
    ДатаСреза(Дата), Отбор.АдресБазы(СтарыйАдрес)
```

Ошибок не выдаёт, но список всё равно пустой...
---
Больше идей нет? Может по другому нужно решать задачу?
---
https://forum.infostart.ru/forum9/topic149495/

В форму выбора требуется передать, из формы документа,значения параметров для запроса.
И на форме выбора при создание формы установить параметры динамического списка.
---
Итак в ходе поисков удалось выяснить, что код в форме документа

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

при записи в Событиях "Создать" и прочих не работает, а вот "НачалоВыбора" без строчки "СандартнаяОбработка=Ложь;" вызывает два окна, но работает как надо.

Так же этот код можно заменить записью в Свойствах Элемента Табличной Части: 1. "ВыборФормы" - ФормаВыбораТест и 2. "СвязиПараметровВыбора" - Период(Объект.Дата), АдресБазы(Объект.СтарыйАдрес).

В самой форме выбора прописываем:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Список.Параметры.УстановитьЗначениеПараметра("Период", Параметры.Период);
    Список.Параметры.УстановитьЗначениеПараметра("АдресБазы", Параметры.АдресБазы);
    КонецПроцедуры
```

Все параметры передаются, но если стоит режим просмотра - "Иерархический список" или "Древо", то появляется пустой список, если переключиться на режим "Список", то всё появляется согласно установленным параметрам.

Также выяснил что код

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

работает не корректно: он отбирает вначале по параметру АдресБазы, а уже потом по дате, поэтому в список попадают записи старые, хотя уже есть более свежая запись о перемещении на другую базу.
Поэтому изменил код на такой:

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

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