Здравствуйте,дорогие форумчане. Мне надо из запроса к регистру передать значение поля Водитель в документ, через проверку экспедитора. То есть, если в регистре у экспедитора есть на определенную дату водитель. То при вводе в поле ввода этого экспедитора, автоматически передать значение Водителя из регистра. Вот код, который я написал, но как передать значение в поле ввода, я не знаю. Помогите, пожалуйста(

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

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

    Пока Выборка.Следующий() Цикл
    Если ВыбранныйЭкспедитор = Выборка.Экспедитор И Объект.Дата = Выборка.Период Тогда

    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
```
---
Все проверки должен сделать сам запрос.
Не нужно выбирать в запросе период и Экспедитора а потом проверять их в выборке.
 Выбрать нужно только водителя.
Период нужно задать как параметр в запросе. Если в запросе выбирается срез последних, тогда период нужно указать в Параметрах виртуальной таблицы. В конструкторе запросов нажать иконку "Таблица с шестеренкой", откроется окно "Параметры виртуальной таблицы".
В окне будут поля "Период" и "Условие".
В поле "период" обычно указывается параметр запроса, например &Дата, потом в тексте программы нужно установить параметр дата строкой

Запрос.УстановитьПараметр("Дата",Объект.Дата)

а в поле "Условие" указывается Экспедитор и так же как и Дата, устанавливается как параметр запроса

```1c
    Запрос.УстановитьПараметр("Экспедитор",Объект.Экспедитор);
    Запрос.Выполнить();
```

Запрос должен принять вид типа:

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

Ну ли типа того)
---
Наконец-то!!!! ВСЁ!!! Короче в чем была ошибка:

{Документ.ЗаданиеЭкспедитора.Форма.ФормаДокумента.Форма(12)}: Ошибка при вызове метода контекста (Выполнить)
  РезультатЗапроса = Запрос.Выполнить();
по причине:
{(4, 62)}: Неверные параметры "РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних, 1"
РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних(&Дата, <<?>>&Экспедитор) КАК СведенияОбЭкспедиторахСрезПоследних

То есть ставить в условие "Экспедитора" таким образом нельзя.

Его надо просто вынести в:

```1c
    ГДЕ
    | СведенияОбЭкспедиторахСрезПоследних.Экспедитор = &Экспедитор";
```
---
Вероятно не проходит условие внутри цикла:

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

Запрос.УстановитьПараметр("Дата",Объект.Дата)

а в поле "Условие" указывается Экспедитор и так же как и Дата, устанавливается как параметр запроса

```1c
    Запрос.УстановитьПараметр("Экспедитор",Объект.Экспедитор);
    Запрос.Выполнить();
```

Запрос должен принять вид типа:

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

Ну ли типа того)
---
ну вот и ответ.

можно еще использовать событие НачалоВыбора для поля экспедитор , или водитель (на ваше усмотрение). или для обоих написать свой обработчик.
---
Да, сейчас буду пробовать реализовать. Спасибо Вам за внимание!
---
(11)

Нет, не сработало почему-то. И процедуру поменял. И сделал через сервер-клиент. Всё равно не работает(
---
Спасибо за то, что уделили столько времени и написали столько всего. Сейчас попробую это реализовать. Огромное спасибо!
---
Наконец-то!!!! ВСЁ!!! Короче в чем была ошибка:

{Документ.ЗаданиеЭкспедитора.Форма.ФормаДокумента.Форма(12)}: Ошибка при вызове метода контекста (Выполнить)
  РезультатЗапроса = Запрос.Выполнить();
по причине:
{(4, 62)}: Неверные параметры "РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних, 1"
РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних(&Дата, <<?>>&Экспедитор) КАК СведенияОбЭкспедиторахСрезПоследних

То есть ставить в условие "Экспедитора" таким образом нельзя.

Его надо просто вынести в:

```1c
    ГДЕ
    | СведенияОбЭкспедиторахСрезПоследних.Экспедитор = &Экспедитор";
```
---
Вот, что в итоге у меня есть:

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

    &НаКлиенте
    Процедура ЭкспедиторПриИзменении(Элемент)
    ЭкспедиторПриИзмененииНаСервере();
    КонецПроцедуры
```
---
Запрос лучше всего отладить не в Конфигураторе, а в Предприятии, в "Консоли запросов", посмотреть, есть ли вообще какой-нибудь результат.
И еще:

Пока Выборка.Следующий() Цикл
Объект.Водитель = Выборка.Водитель;
КонецЦикла

Там же должен быть всего 1 водитель?
---
Да, в каждой паре 1 водитель и 1 экспедитор
---
это к тому что не нужно делать обход в цикле. Достаточно поставить проверку Если ... Тогда
---
Указывать "ГДЕ" при запросе к в виртуальной таблице это "незачет"))

Ошибка была в том что параметр Экспедитор не был ничему равен: СрезПоследних(&Дата, &Экспедитор)
Нужно так: СрезПоследних(&Дата, Экспедитор = &Экспедитор)