Здравствуйте. Есть документ Заказ Покупателя. В нем есть Договор, у которого установлен тип цен. И по этому типу цен документов "Установка цен номенклатуры" установлена цена. Как программно с модуля документа Заказ Покупателя получить эту цену?
УТП 8.3
запрос к рег. сведений ЦеныНоменклатуры с отбором по указанной цене и Номенклатуре
Посмотрите модуль Ценообразование, там есть много функций для получения цены.
Я сделал такую процедуру, но не могу понять, почему она ничего не выводит. Хотя запрос я проверял и значение в него попадает
Процедура ПолучитьЦену()
ТипЦен = ЭтотОбъект.ДоговорКонтрагента.ТипЦен;
ЗначениеНоменклатуры = Справочники.Номенклатура.НайтиПоКоду("000101087");
Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
|ГДЕ
| ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
| И ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура
|
|СГРУППИРОВАТЬ ПО
| ЦеныНоменклатурыСрезПоследних.Цена";
Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);
Запрос.УстановитьПараметр("Номенклатура", ЗначениеНоменклатуры);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Сообщить(Выборка.Цена);
КонецЕсли;
КонецПроцедуры
Запрос.Текст = "
|ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен = &ТипЦен И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних
|";
Сделал так, вроде нормально выводит
Функция ПолучитьЦену()
ЗначениеНоменклатуры = Справочники.Номенклатура.НайтиПоКоду("000101087");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатуры.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|ГДЕ
| ЦеныНоменклатуры.ТипЦен = &ТицЦен
| И ЦеныНоменклатуры.Номенклатура = &Номенклатура
|
|СГРУППИРОВАТЬ ПО
| ЦеныНоменклатуры.Цена";
Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);
Запрос.УстановитьПараметр("ТицЦен", ЭтотОбъект.ДоговорКонтрагента.ТипЦен);
Запрос.УстановитьПараметр("Номенклатура", ЗначениеНоменклатуры);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Возврат ВыборкаДетальныеЗаписи.Цена;
КонецЦикла;
КонецФункции
Vofka @ Сегодня, 16:14
,
А если через условие в запросе дату указать? Я - дурак и не заметил..
Просто если так, как вы сказали брать Срез Последних, то почему-то ничего не попадает
когда смотрю через отладку, то видно, что параметры Дата и ТипЦены попадают в запрос, но Номенклатура почему-то не попадает
TailorMade, https://pro1c.org.ua/topic/kak-programmno-poluchit-tsenu-po-dogovoru-54554/?view=findpost&p=156357 не ищет?
Vofka @ Сегодня, 16:39
,
Номенклатура не попадает..
Так вся функция выглядит :
Функция ПолучитьЦену()
ЗначениеНоменклатуры = Справочники.Номенклатура.НайтиПоКоду("000101087");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| &Дата,
| ТипЦен = &ТипЦен
| И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних";
Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);
Запрос.УстановитьПараметр("ТипЦен", ЭтотОбъект.ДоговорКонтрагента.ТипЦен);
Запрос.УстановитьПараметр("Номенклатура", ЗначениеНоменклатуры);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Возврат ВыборкаДетальныеЗаписи.Цена;
КонецЦикла;
КонецФункции
TailorMade @ Сегодня, 17:48
,
Сверьте дату/время документа в котором запускаете и дату установки цен, скорее в этом дело. А без даты в срезе последних вы получите абсолютно все записи(историю) цен по указанной номенклатуре
Макс1С @ Сегодня, 17:54
,
Вот так вот. Я болван конечно! Спасибо вам, что указали на это
Спасибо вам всем!
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua