Как передать значение из запроса в объект в документе
Здравствуйте,дорогие форумчане. Мне надо из запроса к регистру передать значение поля Водитель в документ, через проверку экспедитора. То есть, если в регистре у экспедитора есть на определенную дату водитель. То при вводе в поле ввода этого экспедитора, автоматически передать значение Водителя из регистра. Вот код, который я написал, но как передать значение в поле ввода, я не знаю. Помогите, пожалуйста(
ВыбранныйЭкспедитор = Объект.Экспедитор;
Если ЗначениеЗаполнено(ВыбранныйЭкспедитор) Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СведенияОбЭкспедиторахСрезПоследних.Период КАК Период,
| СведенияОбЭкспедиторахСрезПоследних.Экспедитор КАК Экспедитор,
| СведенияОбЭкспедиторахСрезПоследних.Водитель КАК Водитель
|ИЗ
| РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних КАК СведенияОбЭкспедиторахСрезПоследних
|УПОРЯДОЧИТЬ ПО
| СведенияОбЭкспедиторахСрезПоследних.Период УБЫВ";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если ВыбранныйЭкспедитор = Выборка.Экспедитор И Объект.Дата = Выборка.Период Тогда
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПоказатьПо теме из базы знаний
- Альтернативные способы работы с XML. Часть 1: Введение в DOM или объектная модель документа XML
- Запрос vs Объект + результат эксперимента, вполне реального
- Как передать документ Word (ActiveDocument или ДвоичныеДанные) с сервера на клиент
- 1с8.2-8.3.Вывод на экран данных запроса с переданными Параметрами из Документа! 8 различных вариантов:от Сообщений, Таблицы и Отчетов до СКД без объекта-отчета
- Как передать Таблицу Значений в Динамический Список?
Найденные решения
Все проверки должен сделать сам запрос.
Не нужно выбирать в запросе период и Экспедитора а потом проверять их в выборке.
Выбрать нужно только водителя.
Период нужно задать как параметр в запросе. Если в запросе выбирается срез последних, тогда период нужно указать в Параметрах виртуальной таблицы. В конструкторе запросов нажать иконку "Таблица с шестеренкой", откроется окно "Параметры виртуальной таблицы".
В окне будут поля "Период" и "Условие".
В поле "период" обычно указывается параметр запроса, например &Дата, потом в тексте программы нужно установить параметр дата строкой
Запрос.УстановитьПараметр("Дата",Объект.Дата)
а в поле "Условие" указывается Экспедитор и так же как и Дата, устанавливается как параметр запроса
Запрос должен принять вид типа:
Ну ли типа того)
Не нужно выбирать в запросе период и Экспедитора а потом проверять их в выборке.
Выбрать нужно только водителя.
Период нужно задать как параметр в запросе. Если в запросе выбирается срез последних, тогда период нужно указать в Параметрах виртуальной таблицы. В конструкторе запросов нажать иконку "Таблица с шестеренкой", откроется окно "Параметры виртуальной таблицы".
В окне будут поля "Период" и "Условие".
В поле "период" обычно указывается параметр запроса, например &Дата, потом в тексте программы нужно установить параметр дата строкой
Запрос.УстановитьПараметр("Дата",Объект.Дата)
а в поле "Условие" указывается Экспедитор и так же как и Дата, устанавливается как параметр запроса
Запрос.УстановитьПараметр("Экспедитор",Объект.Экспедитор);
Запрос.Выполнить();
Запрос должен принять вид типа:
Запрос.Текст = "ВЫБРАТЬ
| СведенияОбЭкспедиторахСрезПоследних.Водитель КАК Водитель
|ИЗ
| РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних(&Дата, Экспедитор = &Экспедитор) КАК СведенияОбЭкспедиторахСрезПоследних
Ну ли типа того)
(10)
Наконец-то!!!! ВСЁ!!! Короче в чем была ошибка:
{Документ.ЗаданиеЭкспедитора.Форма.ФормаДокумента.Форма(12)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(4, 62)}: Неверные параметры "РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних, 1"
РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних(&Дата, <<?>>&Экспедитор) КАК СведенияОбЭкспедиторахСрезПоследних
То есть ставить в условие "Экспедитора" таким образом нельзя.
Его надо просто вынести в:
Наконец-то!!!! ВСЁ!!! Короче в чем была ошибка:
{Документ.ЗаданиеЭкспедитора.Форма.ФормаДокумента.Форма(12)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(4, 62)}: Неверные параметры "РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних, 1"
РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних(&Дата, <<?>>&Экспедитор) КАК СведенияОбЭкспедиторахСрезПоследних
То есть ставить в условие "Экспедитора" таким образом нельзя.
Его надо просто вынести в:
ГДЕ
| СведенияОбЭкспедиторахСрезПоследних.Экспедитор = &Экспедитор";
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(6) Допустим создаю документ на сегодняшнюю дату. До этого в регистре сведений была создана пара экспедитор и водитель на сегодняшний документ. И создавая документ, при выборе экспедитора в поле Водитель (которое рядом) автоматов появлялось значение водителя, который с ним в паре.
Все проверки должен сделать сам запрос.
Не нужно выбирать в запросе период и Экспедитора а потом проверять их в выборке.
Выбрать нужно только водителя.
Период нужно задать как параметр в запросе. Если в запросе выбирается срез последних, тогда период нужно указать в Параметрах виртуальной таблицы. В конструкторе запросов нажать иконку "Таблица с шестеренкой", откроется окно "Параметры виртуальной таблицы".
В окне будут поля "Период" и "Условие".
В поле "период" обычно указывается параметр запроса, например &Дата, потом в тексте программы нужно установить параметр дата строкой
Запрос.УстановитьПараметр("Дата",Объект.Дата)
а в поле "Условие" указывается Экспедитор и так же как и Дата, устанавливается как параметр запроса
Запрос должен принять вид типа:
Ну ли типа того)
Не нужно выбирать в запросе период и Экспедитора а потом проверять их в выборке.
Выбрать нужно только водителя.
Период нужно задать как параметр в запросе. Если в запросе выбирается срез последних, тогда период нужно указать в Параметрах виртуальной таблицы. В конструкторе запросов нажать иконку "Таблица с шестеренкой", откроется окно "Параметры виртуальной таблицы".
В окне будут поля "Период" и "Условие".
В поле "период" обычно указывается параметр запроса, например &Дата, потом в тексте программы нужно установить параметр дата строкой
Запрос.УстановитьПараметр("Дата",Объект.Дата)
а в поле "Условие" указывается Экспедитор и так же как и Дата, устанавливается как параметр запроса
Запрос.УстановитьПараметр("Экспедитор",Объект.Экспедитор);
Запрос.Выполнить();
Запрос должен принять вид типа:
Запрос.Текст = "ВЫБРАТЬ
| СведенияОбЭкспедиторахСрезПоследних.Водитель КАК Водитель
|ИЗ
| РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних(&Дата, Экспедитор = &Экспедитор) КАК СведенияОбЭкспедиторахСрезПоследних
Ну ли типа того)
(10)
Наконец-то!!!! ВСЁ!!! Короче в чем была ошибка:
{Документ.ЗаданиеЭкспедитора.Форма.ФормаДокумента.Форма(12)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(4, 62)}: Неверные параметры "РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних, 1"
РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних(&Дата, <<?>>&Экспедитор) КАК СведенияОбЭкспедиторахСрезПоследних
То есть ставить в условие "Экспедитора" таким образом нельзя.
Его надо просто вынести в:
Наконец-то!!!! ВСЁ!!! Короче в чем была ошибка:
{Документ.ЗаданиеЭкспедитора.Форма.ФормаДокумента.Форма(12)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(4, 62)}: Неверные параметры "РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних, 1"
РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних(&Дата, <<?>>&Экспедитор) КАК СведенияОбЭкспедиторахСрезПоследних
То есть ставить в условие "Экспедитора" таким образом нельзя.
Его надо просто вынести в:
ГДЕ
| СведенияОбЭкспедиторахСрезПоследних.Экспедитор = &Экспедитор";
Вот, что в итоге у меня есть:
&НаСервере
Процедура ЭкспедиторПриИзменении(Элемент)
ВыбранныйЭкспедитор = Объект.Экспедитор;
Если ЗначениеЗаполнено(ВыбранныйЭкспедитор) Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СведенияОбЭкспедиторахСрезПоследних.Водитель КАК Водитель
|ИЗ
| РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних(&Дата, &Экспедитор) КАК СведенияОбЭкспедиторахСрезПоследних";
Запрос.УстановитьПараметр("Дата",Объект.Дата);
Запрос.УстановитьПараметр("Экспедитор",Объект.Экспедитор);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
Объект.Водитель = Выборка.Водитель;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
(15)
Странная у вас конструкция. Элемент передается в клиентскую процедуру события. У вас должно быть 2 процедуры Клиентская и Серверная по типу:
&НаСервере
Процедура ЭкспедиторПриИзменении(Элемент)
Процедура ЭкспедиторПриИзменении(Элемент)
Странная у вас конструкция. Элемент передается в клиентскую процедуру события. У вас должно быть 2 процедуры Клиентская и Серверная по типу:
&НаСервере
Процедура ЭкспедиторПриИзмененииНаСервере()
// Вставить содержимое обработчика.
КонецПроцедуры
&НаКлиенте
Процедура ЭкспедиторПриИзменении(Элемент)
ЭкспедиторПриИзмененииНаСервере();
КонецПроцедуры
Показать
Запрос лучше всего отладить не в Конфигураторе, а в Предприятии, в "Консоли запросов", посмотреть, есть ли вообще какой-нибудь результат.
И еще:
Пока Выборка.Следующий() Цикл
Объект.Водитель = Выборка.Водитель;
КонецЦикла
Там же должен быть всего 1 водитель?
И еще:
Пока Выборка.Следующий() Цикл
Объект.Водитель = Выборка.Водитель;
КонецЦикла
Там же должен быть всего 1 водитель?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот