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