Почему запрос не работает в форме документа?

1. bluk21 10.10.25 17:37 Сейчас в теме
Здравствуйте. Я пытаюсь получить данные из справочника Номенклатура (Номенклатура.Цена) для реквизита 'Цены' Табличной части 'Материалы' документа 'ПриходнаяНакладная' с помощью запроса, который берет Номенклатура.Цена на основе соответствия Номенклатура.Наименование и Материалы.Наименование. Но компилятор не узнает Запрос и пишет ошибку 'Тип не определен'. Есть ли способ исправить ошибку или получить данные из другого справочника для документа?
Код в форме документа:
СтрокаТЧ = Элементы.Материалы.ТекущиеДанные;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Номенклатура.Ссылка КАК Ссылка,
	|	Номенклатура.Цена КАК Цена
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	|	Номенклатура.Наименование = &Наименование";
	Запрос.УстановитьПараметр("Цена", Цена);
    Запрос.УстановитьПараметр("ТекущаяСсылка", Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
	СтрокаТЧ.Цена = РезультатЗапроса;
	
	СтрокаТЧ.Сумма  = СтрокаТЧ.Цена  * СтрокаТЧ.Количество;
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
17. Anton_new01 13.10.25 09:55 Сейчас в теме
(1)
Но компилятор не узнает Запрос и пишет ошибку 'Тип не определен'.

Данная ошибка означает, что вы пытаетесь собрать и выполнить Запрос на Клиенте - а сделать это можно только на Сервере - на что система и ругается, не знает она на клиенте такого метода, он там не доступен в принципе!

&НаКлиенте
Процедура МатериалыМатериалПриИзменении(Элемент)
	
	СтрокаТЧ = Элементы.Материалы.ТекущиеДанные;
	СтрокаТЧ.Цена = ПолучитьЦенуНоменклатурыНаСервере(СтрокаТЧ.Материал); // тут наименование колонки, возможно СтрокаТЧ.Номенклатура
	СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;
	
КонецПроцедуры

&НаСервере
Функция ПолучитьЦенуНоменклатурыНаСервере(НоменклатураСсылка)
	
	РезультатЦена = 0;
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ТекущаяСсылка", НоменклатураСсылка);
	Запрос.Текст = 
	"ВЫБРАТЬ
	|    Номенклатура.Цена КАК Цена
	|ИЗ
	|    Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	|    Номенклатура.Ссылка = &ТекущаяСсылка";
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		РезультатЦена  = Выборка.Цена;
	КонецЕсли;
	
	Возврат РезультатЦена ;
		
КонецФункции
Показать


т.е. мы на клиенте и нам надо получить цену - пишем функцию/процедуру которая обращается на сервер ( путем директивы компиляции перед началом функции &НаСервере) и там получает нужную цену, по переданному входящему параметру ссылка на номенклатура.
2. user_2166499 10.10.25 17:44 Сейчас в теме
Судя по всему ты хочешь отхватить все лавры Славы Карзуничева.
Не пытался учить основы? Курсы там, книжки... Не?
3. bluk21 10.10.25 19:23 Сейчас в теме
(2) Не знаю какого-то Славу, у меня просто лабораторные из вуза без методичек, лекции к сожалению малополезные и насчет скриптов вообще очень мало говорят(никаких там про запросов и всяких нужных вещей). И хочу просто поскорее сдать две лабораторные на этой неделе. Мне не нравятся, как все там преподают. Искать по поисковику тоже не помогает. А нейросеть вообще не понимает про 1С в отличии от остальных языков программирования. И это НЕ МОЙ ВЫБОР, мне пришлось мучиться целый год с 1С предметом в вузе. И выполнение лабораторных по 1С для меня это боль и ненависть. Поэтому я активно задаю вопросы на этом сайте.
4. grafit 8 10.10.25 19:37 Сейчас в теме
Мы все учились понемногу, чему-нибудь... и далее по тексту.
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Наминклатура.Ссылка КАК Ссылка,
		|	Наминклатура.Цена КАК Цена
		|ИЗ
		|	Справочник.Наминклатура КАК Наминклатура
		|ГДЕ
		|	Наминклатура.Наименование  = &Название";

	Запрос.УстановитьПараметр("Название", ТутНаименованиеДляПоиска);
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	Пока Выборка.Следующий() Цикл
		СтрокаТЧ.Цена  = Выборка.Цена;
	КонецЦикла;
Показать
5. bluk21 10.10.25 20:05 Сейчас в теме
(4) А первая строка(Запрос = Новый Запрос;) точно будет работать? Не выдаст ли ошибку, связанную с типами? Может из-за того, что моя процедура - командная? Ведь запрос работал без ошибки в форме объекта справочника и там процедура ПриЗаписи(Отказ), а в форме документа выдает ошибку.
6. grafit 8 10.10.25 20:10 Сейчас в теме
(5) Не видно подробностей. Где это (сервер, клиент).
7. bluk21 10.10.25 20:13 Сейчас в теме
(6) на клиенте. Перепутал процедуру немного.
&НаКлиенте
Процедура МатериалыМатериалПриИзменении(Элемент)
9. grafit 8 10.10.25 20:23 Сейчас в теме
(7) Запрос надо на сервере выполнять, результат передавать на клиента, на твою форму.
Lyalin_Vladimir; +1 Ответить
11. user_2166499 10.10.25 20:30 Сейчас в теме
(9)
результат передавать на клиента
"Потом еще полдня за ним бегать будешь, чтобы фотографию отдать"
Lyalin_Vladimir; +1 Ответить
12. bluk21 10.10.25 20:41 Сейчас в теме
(9) Жаль. Я есть другой способ получения данных из другого справочника? Использовал сервер, и там записал в код Запрос.УстановитьПараметр("Цена", Объект.Номенклатура.Цена). Ничего не изменилось в цене.
8. bluk21 10.10.25 20:21 Сейчас в теме
(6) Не работает код, надо решить проблему с ошибкой: {Документ.ПриходнаяНакладная.Форма.ФормаДокумента.Форма(4,17)}: Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
10. user_2166499 10.10.25 20:23 Сейчас в теме
(8) Блять, открой уже синтакс-помощник и прочитай, где доступен Запрос!
Это и есть - АЗЫ.
Xershi; orakool2; Lyalin_Vladimir; +3 Ответить
13. bluk21 10.10.25 20:51 Сейчас в теме
(10) И чем мне это поможет? Даже прочитав синтаксис-помощник, я все равно сделаю ошибки и это не решит проблему с запросами.
14. user_2166499 10.10.25 21:01 Сейчас в теме
(13) Это будет ДРУГАЯ ошибка. Или ты теперь принципиально не будешь читать справку? Будешь тупо писать наугад, а мы за тобой будем подтирать? Может хоть что-то сам попытаешься?
Xershi; orakool2; Lyalin_Vladimir; +3 Ответить
15. BBL 12.10.25 00:20 Сейчас в теме
клиент намекает что ничего не знает ни про какие запросы. может спросить у сервера?
16. VPanin56 590 13.10.25 08:26 Сейчас в теме
Интересно,
- чему вас учат
- чему вы научитесь
- и что из вас получится
19. bluk21 13.10.25 12:45 Сейчас в теме
Признаюсь, на самом деле этот вопрос для меня закрыт(жаль, что не знаю, как удалить вопросы), ведь я нашел другое решение без запроса и более простое.
18. Xershi 1528 13.10.25 10:40 Сейчас в теме
Посмотри курсы по запросам и уроки про клиент-серверный код, иначе все твои вопросы на свалку!
Если не хочешь учиться, купи работу профи и спи спокойно!
user_2166499; +1 Ответить
Для отправки сообщения требуется регистрация/авторизация

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот