Как передать значение из запроса в объект в документе

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

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

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

а в поле "Условие" указывается Экспедитор и так же как и Дата, устанавливается как параметр запроса
Запрос.УстановитьПараметр("Экспедитор",Объект.Экспедитор);
Запрос.Выполнить();


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

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


Ну ли типа того)
19. Varlant1n 12.01.21 15:21 Сейчас в теме
(10)

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

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

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

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

ГДЕ
 |	СведенияОбЭкспедиторахСрезПоследних.Экспедитор = &Экспедитор";
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
7. Vitaly1C8 12.01.21 14:45 Сейчас в теме
(1) Вероятно не проходит условие внутри цикла:
Если ВыбранныйЭкспедитор = Выборка.Экспедитор И Объект.Дата = Выборка.Период Тогда
9. Varlant1n 12.01.21 14:46 Сейчас в теме
(7) А каким образом можно иначе записать условие о том, что экспедитор из запроса должен быть таким же как при выборе в документе и дата должна быть одинаковая?
2. ilnur75 12.01.21 14:28 Сейчас в теме
в теле цикла напишите:
Объект.Водитель = Выборка.Водитель;
3. Varlant1n 12.01.21 14:30 Сейчас в теме
(2) Я сейчас пару минут назад так и сделал, но никакого результата. Я даже через отладчик не могу проверить, что идет не так, так как процедура будто не реагирует на изменения поля Экспедитор.
4. ilnur75 12.01.21 14:32 Сейчас в теме
сохраните доработки.
закройте 1с - конфигуратор и режим пользователя.
снова запустите 1с.
у меня так отладчик начинает нормально работать.
5. Varlant1n 12.01.21 14:33 Сейчас в теме
У меня стоит процедура ЭкспедиторПриИзменении. Может дело в этом? Может у меня должно быть другое событие?
6. ilnur75 12.01.21 14:42 Сейчас в теме
а что смущает? Изменили экспедитора, хотите увидеть его водителя? В запрос надо бы тогда параметром экспедитора добавить.
8. Varlant1n 12.01.21 14:45 Сейчас в теме
(6) Допустим создаю документ на сегодняшнюю дату. До этого в регистре сведений была создана пара экспедитор и водитель на сегодняшний документ. И создавая документ, при выборе экспедитора в поле Водитель (которое рядом) автоматов появлялось значение водителя, который с ним в паре.
10. ВасяЧ 12.01.21 14:48 Сейчас в теме
Все проверки должен сделать сам запрос.
Не нужно выбирать в запросе период и Экспедитора а потом проверять их в выборке.
Выбрать нужно только водителя.
Период нужно задать как параметр в запросе. Если в запросе выбирается срез последних, тогда период нужно указать в Параметрах виртуальной таблицы. В конструкторе запросов нажать иконку "Таблица с шестеренкой", откроется окно "Параметры виртуальной таблицы".
В окне будут поля "Период" и "Условие".
В поле "период" обычно указывается параметр запроса, например &Дата, потом в тексте программы нужно установить параметр дата строкой

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

а в поле "Условие" указывается Экспедитор и так же как и Дата, устанавливается как параметр запроса
Запрос.УстановитьПараметр("Экспедитор",Объект.Экспедитор);
Запрос.Выполнить();


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

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


Ну ли типа того)
11. ilnur75 12.01.21 14:50 Сейчас в теме
(10) ну вот и ответ.

можно еще использовать событие НачалоВыбора для поля экспедитор , или водитель (на ваше усмотрение). или для обоих написать свой обработчик.
13. Varlant1n 12.01.21 14:54 Сейчас в теме
(11) Да, сейчас буду пробовать реализовать. Спасибо Вам за внимание!
14. Varlant1n 12.01.21 15:03 Сейчас в теме
(10)
(11)

Нет, не сработало почему-то. И процедуру поменял. И сделал через сервер-клиент. Всё равно не работает(
12. Varlant1n 12.01.21 14:54 Сейчас в теме
(10) Спасибо за то, что уделили столько времени и написали столько всего. Сейчас попробую это реализовать. Огромное спасибо!
19. Varlant1n 12.01.21 15:21 Сейчас в теме
(10)

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

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

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

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

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

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

Странная у вас конструкция. Элемент передается в клиентскую процедуру события. У вас должно быть 2 процедуры Клиентская и Серверная по типу:
&НаСервере
Процедура ЭкспедиторПриИзмененииНаСервере()
	// Вставить содержимое обработчика.
КонецПроцедуры

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

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

Там же должен быть всего 1 водитель?
18. Varlant1n 12.01.21 15:12 Сейчас в теме
(17) Да, в каждой паре 1 водитель и 1 экспедитор
20. ilnur75 12.01.21 15:35 Сейчас в теме
это к тому что не нужно делать обход в цикле. Достаточно поставить проверку Если ... Тогда
21. ВасяЧ 12.01.21 15:44 Сейчас в теме
Указывать "ГДЕ" при запросе к в виртуальной таблице это "незачет"))

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