Почему запрос не работает в форме документа?
Здравствуйте. Я пытаюсь получить данные из справочника Номенклатура (Номенклатура.Цена) для реквизита 'Цены' Табличной части 'Материалы' документа 'ПриходнаяНакладная' с помощью запроса, который берет Номенклатура.Цена на основе соответствия Номенклатура.Наименование и Материалы.Наименование. Но компилятор не узнает Запрос и пишет ошибку 'Тип не определен'. Есть ли способ исправить ошибку или получить данные из другого справочника для документа?
Код в форме документа:
Код в форме документа:
СтрокаТЧ = Элементы.Материалы.ТекущиеДанные;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Цена КАК Цена
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование = &Наименование";
Запрос.УстановитьПараметр("Цена", Цена);
Запрос.УстановитьПараметр("ТекущаяСсылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
СтрокаТЧ.Цена = РезультатЗапроса;
СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество; ПоказатьПрикрепленные файлы:
По теме из базы знаний
- Кто сейчас проводит документ: человек или компьютер? Зачем нужна подобная классификация "режимов" проведения документа в 1С 8.3 в клиент-серверном режиме и как получить ответ на этот вопрос при работе с обработчиками событий управляемой формы и документа?
- Разные хм... неожиданности при работе с УТ 11 и платформой
- Конфигурация Flowcon: Набор инструментов для управления задачами, проектами и бизнесом в 1С
- SynchroWB — интеграция 1С и Wildberries: автоматизация заказов и остатков по API с УТ, КА, ERP, УНФ, Розница 3
- Правила работы с транзакциями 1С
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Данная ошибка означает, что вы пытаетесь собрать и выполнить Запрос на Клиенте - а сделать это можно только на Сервере - на что система и ругается, не знает она на клиенте такого метода, он там не доступен в принципе!
т.е. мы на клиенте и нам надо получить цену - пишем функцию/процедуру которая обращается на сервер ( путем директивы компиляции перед началом функции &НаСервере) и там получает нужную цену, по переданному входящему параметру ссылка на номенклатура.
Но компилятор не узнает Запрос и пишет ошибку 'Тип не определен'.
Данная ошибка означает, что вы пытаетесь собрать и выполнить Запрос на Клиенте - а сделать это можно только на Сервере - на что система и ругается, не знает она на клиенте такого метода, он там не доступен в принципе!
&НаКлиенте
Процедура МатериалыМатериалПриИзменении(Элемент)
СтрокаТЧ = Элементы.Материалы.ТекущиеДанные;
СтрокаТЧ.Цена = ПолучитьЦенуНоменклатурыНаСервере(СтрокаТЧ.Материал); // тут наименование колонки, возможно СтрокаТЧ.Номенклатура
СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;
КонецПроцедуры
&НаСервере
Функция ПолучитьЦенуНоменклатурыНаСервере(НоменклатураСсылка)
РезультатЦена = 0;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущаяСсылка", НоменклатураСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Цена КАК Цена
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &ТекущаяСсылка";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
РезультатЦена = Выборка.Цена;
КонецЕсли;
Возврат РезультатЦена ;
КонецФункции Показатьт.е. мы на клиенте и нам надо получить цену - пишем функцию/процедуру которая обращается на сервер ( путем директивы компиляции перед началом функции &НаСервере) и там получает нужную цену, по переданному входящему параметру ссылка на номенклатура.
(2) Не знаю какого-то Славу, у меня просто лабораторные из вуза без методичек, лекции к сожалению малополезные и насчет скриптов вообще очень мало говорят(никаких там про запросов и всяких нужных вещей). И хочу просто поскорее сдать две лабораторные на этой неделе. Мне не нравятся, как все там преподают. Искать по поисковику тоже не помогает. А нейросеть вообще не понимает про 1С в отличии от остальных языков программирования. И это НЕ МОЙ ВЫБОР, мне пришлось мучиться целый год с 1С предметом в вузе. И выполнение лабораторных по 1С для меня это боль и ненависть. Поэтому я активно задаю вопросы на этом сайте.
Мы все учились понемногу, чему-нибудь... и далее по тексту.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Наминклатура.Ссылка КАК Ссылка,
| Наминклатура.Цена КАК Цена
|ИЗ
| Справочник.Наминклатура КАК Наминклатура
|ГДЕ
| Наминклатура.Наименование = &Название";
Запрос.УстановитьПараметр("Название", ТутНаименованиеДляПоиска);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаТЧ.Цена = Выборка.Цена;
КонецЦикла;
Показать
(4) А первая строка(Запрос = Новый Запрос;) точно будет работать? Не выдаст ли ошибку, связанную с типами? Может из-за того, что моя процедура - командная? Ведь запрос работал без ошибки в форме объекта справочника и там процедура ПриЗаписи(Отказ), а в форме документа выдает ошибку.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот