Не могу понять как мне в табличную часть обработки при выборе номенклатуры получить Цену?
и...
Ошибка, не задан параметр Номенклатура. Конфигурация БП
Функция ПолучитьЦенуНоменклатуры(Номенклатура) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатуры.Цена,
| ЦеныНоменклатуры.Номенклатура
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|ГДЕ
| ЦеныНоменклатуры.Номенклатура = &Номенклатура
|
|СГРУППИРОВАТЬ ПО
| ЦеныНоменклатуры.Номенклатура,
| ЦеныНоменклатуры.Цена";
Запрос.УстановитьПараметр("Товар",Номенклатура);
РезультатЗапроса=Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Возврат Выборка;
КонецФункции
Показатьи...
Процедура ПриИзмененииНоменклатурыТоваров(Номенклатура)
ВыбЦен = ПолучитьЦенуНоменклатуры(Номенклатура);
Если ВыбЦен.Следующий() Тогда
ЦенТов = Товары.Добавить();
ЦенТов.Цена = ВыбЦен.Цена;
КонецЕсли;
КонецПроцедуры
ПоказатьОшибка, не задан параметр Номенклатура. Конфигурация БП
По теме из базы знаний
- Обработка для выгрузки в xml остатков и цен номенклатуры. Подходит для конфигураций УТ 10.3, УПП 1.3 и их аналогов на рынке СНГ
- Обработка для выгрузки в json остатков и цен номенклатуры. Подходит для конфигураций УТ 10.3, УПП 1.3 и их аналогов на рынке СНГ
- УТ 11: Установка цен номенклатуры по себестоимости для корректного формирования отчетов в ценах себестоимости и работы интеркампани – (также для КА 2, ЕРП 2)
- Анализ цен продажи и цен номенклатуры. Розница 2.3
- Отмена заказов клиентов в ценах номенклатуры – упущенная прибыль, отменённые заказы клиентов
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(6) fruktik, попробуйте как во втором варианте только слегка изменить
Дата = ТекущаяДата();
ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен=&ТипЦен)
|КАК
| ЦеныНоменклатурыСрезПоследних
|ГДЕ
| ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
РезультатЗапроса=Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() тогда
Возврат Выборка.Цена;
Иначе
Возврат 0;
КонецЕсли;
Показать
(2) deniseek77, ничего( В отладчике не ругался, а так запустил выплюнул ошибку у даты
Не задано значение параметра "Дата". Я немного изменил запрос на этот
Не задано значение параметра "Дата". Я немного изменил запрос на этот
Дата = ТекущаяДата();
ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен=&ТипЦен)
|КАК
| ЦеныНоменклатурыСрезПоследних
|ГДЕ
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Наименование = &Название";
Запрос.УстановитьПараметр("Название",Номенклатура);
РезультатЗапроса=Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Возврат Выборка;
Показать
(3) fruktik, А в этом варианте запроса вы передали только один параметр, а в самом запросе их у вас три. И так как дата идет первым вот она на нее и ругается. Передайте в запрос остальные параметры. И проверьте что вы передаете в название, что получает сама функция, если номенклатуру, то года в название вы должны передать Номенклатура.Наименование, хотя может быть вы уже в функцию передали наименование тогда все верно.
в новом запросе-Вы ищите по наименованию, что является плохим, очень плохим отбором, не универсальным параметром!Про предыдущий вопрос...Отладчик не может возвращать "ничего" есть: ошибка выполнения, либо возвращение значения, например: неопределено, булево, ссылка, объект, структура или соответствие..
Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса=Запрос.Выполнить();
по причине:
{(7, 35)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ЦеныНоменклатуры.Номенклатура <<?>>= &Номенклатура
РезультатЗапроса=Запрос.Выполнить();
по причине:
{(7, 35)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ЦеныНоменклатуры.Номенклатура <<?>>= &Номенклатура
Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ЦеныНоменклатурыСрезПоследних.Номенклатура <<?>>= &Номенклатура
Вот такая штука. А почему он в консоли не ругается?
неограниченной длины и поля несовместимых типов.
ЦеныНоменклатурыСрезПоследних.Номенклатура <<?>>= &Номенклатура
Вот такая штука. А почему он в консоли не ругается?
(10) fruktik, сейчас под рукой нет 1с-ки, так что попробуйте проверить типы данных, посмотрите в отладчике. Они должны совпадать, можно попробовать сделать запрос без условий по номенклатуре, зато вы увидите одинаковые ли параметры вы передаете в запрос и что он возвращает. Может попробовать сравнивать ссылки. Но сначала проверьте в каком виде данные о номенклатуре передаются в функцию.
дата нормально)), я вот тоже не знаю как из процедуры передать значение номенклатуры.
Процедура ТоварыНоменклатураПриИзменении(Элемент)
ВыбЦен = ПолучитьЦенуНоменклатуры(Номенклатура);
Если ВыбЦен.Следующий() Тогда
ЦенТов = Товары.Добавить();
ЦенТов.Цена = ВыбЦен.Цена;
КонецЕсли;
КонецПроцедуры
Показать
Процедура в 15 написана, а функция вот:
Функция ПолучитьЦенуНоменклатуры(Номенклатура) Экспорт
Дата = ТекущаяДата();
ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен=&ТипЦен)
|КАК
| ЦеныНоменклатурыСрезПоследних
|ГДЕ
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
Запрос.УстановитьПараметр("Дата",ТекущаяДата());
Запрос.УстановитьПараметр("ТипЦен",ТипЦен);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() тогда
Возврат Выборка.Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Показать
Если это табличная часть то нужно сначала получить номенклатуру в текущей строке.
Как вариант
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
СтрокаТабличнойЧасти.ВыбЦен = ПолучитьЦенуНоменклатуры(СтрокаТабличнойЧасти.Номенклатура)
Ну как то так вроде
Как вариант
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
СтрокаТабличнойЧасти.ВыбЦен = ПолучитьЦенуНоменклатуры(СтрокаТабличнойЧасти.Номенклатура)
Ну как то так вроде
(21) fruktik, Если нужно просто получить цену то тогда просто
Суть ошибки в том, что обрабатывается событие изменения значения в поле табличной части.
При этом непонятно по какому именно значению номенклатуры должна быть получена цена.
Нужно в функцию передать выбранное в текущей строке значение номенклатуры, к которому можно получить доступ через ЭлементыФормы.Товары.ТекущиеДанные
собственно в коде это реализуется так:
...
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
ВыбЦен = ПолучитьЦенуНоменклатуры(СтрокаТабличнойЧасти.Номенклатура)
Суть ошибки в том, что обрабатывается событие изменения значения в поле табличной части.
При этом непонятно по какому именно значению номенклатуры должна быть получена цена.
Нужно в функцию передать выбранное в текущей строке значение номенклатуры, к которому можно получить доступ через ЭлементыФормы.Товары.ТекущиеДанные
собственно в коде это реализуется так:
Процедура ТоварыНоменклатураПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
ВыбЦен = ПолучитьЦенуНоменклатуры(СтрокаТабличнойЧасти.Номенклатура)
...
(23) fruktik, Вот рабочий вариант
Функция ПолучитьЦенуНоменклатуры(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|ЦеныНоменклатуры.Цена
|ИЗ
|РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата,Номенклатура = &Номенклатура и ТипЦен = &ТипЦен) КАК ЦеныНоменклатуры
|СГРУППИРОВАТЬ ПО
|ЦеныНоменклатуры.Цена";
//Параметры запроса
Запрос.УстановитьПараметр("Дата",Дата);// Дата
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);// Номенклатура
Запрос.УстановитьПараметр("ТипЦен",ТипЦен);// Типы цен номенклатуры
ЦеныНоменклатуры = Запрос.Выполнить().Выгрузить();
Если ЦеныНоменклатуры.Количество()<>0 Тогда
Возврат ЦеныНоменклатуры[0].Цена
Иначе
Возврат 0;
КонецЕсли;
КонецФункции //ПолучитьЦенуНоменклатуры
Процедура ТоварыНоменклатураПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
Цена = ПолучитьЦенуНоменклатуры(СтрокаТабличнойЧасти.Номенклатура)
Показать
Если это стандартная кнопка, то она просто добавляет строку, а уже в строке ты добавляешь номенклатуру и прочее.
Если это твоя кнопка, то при нажатии опиши процесс создания строки:
Новаястрока = Товары.Добавить();
После чего вызови форму выбора номенклатуры и заполни значение НоваяСтрока.Номенклатура
Если это твоя кнопка, то при нажатии опиши процесс создания строки:
Новаястрока = Товары.Добавить();
После чего вызови форму выбора номенклатуры и заполни значение НоваяСтрока.Номенклатура
(30) Sevens, ну вот так написал и ничего
НоваяСтрока = Товары.Добавить();
Нов = Справочники.Номенклатура;
ФормаСписка = Нов.ПолучитьФормуВыбора();
Если Не ФормаСписка.Открыта() Тогда
ФормаСписка.Открыть();
КонецЕсли;
НоваяСтрока.Номенклатура = Справочники.Номенклатура.Выбрать();
ПоказатьФункция ПолучитьЦенуНоменклатуры(Номенклатура)
Дата = ТекущаяДата();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|ЦеныНоменклатуры.Цена
|ИЗ
|РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата,Номенклатура = &Номенклатура ) КАК ЦеныНоменклатуры
|СГРУППИРОВАТЬ ПО
|ЦеныНоменклатуры.Цена";
//Параметры запроса
Запрос.УстановитьПараметр("Дата",Дата);// Дата
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);// Номенклатура
//Запрос.УстановитьПараметр("ТипЦен",Справочники.ВидыЦен);// Типы цен номенклатуры
ЦеныНоменклатуры = Запрос.Выполнить().Выгрузить();
Если ЦеныНоменклатуры.Количество()<>0 Тогда
Возврат ЦеныНоменклатуры[0].Цена
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
ПоказатьВОТ РАБОЧИЙ ВАРИАНТ
ВОТ РАБОЧИЙ ВАРИАНТ С ОТБОРОМ ПО КОЛОНКЕ ЦЕНЫ
Функция ПолучитьЦенуНоменклатуры(Номенклатура) Экспорт
Дата = ТекущаяДата();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|ЦеныНоменклатуры.Цена
|ИЗ
|РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата,Номенклатура = &Номенклатура и ВидЦен = &ТипЦен) КАК ЦеныНоменклатуры
|СГРУППИРОВАТЬ ПО
|ЦеныНоменклатуры.Цена";
//Параметры запроса
Запрос.УстановитьПараметр("Дата",Дата);// Дата
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);// Номенклатура
Запрос.УстановитьПараметр("ТипЦен", ТипЦены);// Типы цен номенклатуры
ЦеныНоменклатуры = Запрос.Выполнить().Выгрузить();
Если ЦеныНоменклатуры.Количество()<>0 Тогда
Возврат ЦеныНоменклатуры[0].Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот