Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как программно получить цену по договору
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
TailorMade
Здравствуйте. Есть документ Заказ Покупателя. В нем есть Договор, у которого установлен тип цен. И по этому типу цен документов "Установка цен номенклатуры" установлена цена. Как программно с модуля документа Заказ Покупателя получить эту цену?
УТП 8.3
sava1
запрос к рег. сведений ЦеныНоменклатуры с отбором по указанной цене и Номенклатуре
Vofka
Посмотрите модуль Ценообразование, там есть много функций для получения цены.
TailorMade
Я сделал такую процедуру, но не могу понять, почему она ничего не выводит. Хотя запрос я проверял и значение в него попадает
Процедура ПолучитьЦену()
    
    ТипЦен = ЭтотОбъект.ДоговорКонтрагента.ТипЦен;    
    ЗначениеНоменклатуры = Справочники.Номенклатура.НайтиПоКоду("000101087");
    
    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
                  |    ЦеныНоменклатурыСрезПоследних.Цена
                  |ИЗ
                  |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
                  |ГДЕ
                  |    ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
                  |    И ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    ЦеныНоменклатурыСрезПоследних.Цена";
                  
    Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
    Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);
    Запрос.УстановитьПараметр("Номенклатура", ЗначениеНоменклатуры);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
         Сообщить(Выборка.Цена);
    КонецЕсли;
    
КонецПроцедуры
Vofka
Запрос.Текст = "
|ВЫБРАТЬ
|    ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
|    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен = &ТипЦен И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних
|";
TailorMade
Сделал так, вроде нормально выводит
Функция ПолучитьЦену()
    
    ЗначениеНоменклатуры = Справочники.Номенклатура.НайтиПоКоду("000101087");
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЦеныНоменклатуры.Цена
        |ИЗ
        |    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        |ГДЕ
        |    ЦеныНоменклатуры.ТипЦен = &ТицЦен
        |    И ЦеныНоменклатуры.Номенклатура = &Номенклатура
        |
        |СГРУППИРОВАТЬ ПО
        |    ЦеныНоменклатуры.Цена";
    
    Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);
    Запрос.УстановитьПараметр("ТицЦен", ЭтотОбъект.ДоговорКонтрагента.ТипЦен);
    Запрос.УстановитьПараметр("Номенклатура", ЗначениеНоменклатуры);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Возврат ВыборкаДетальныеЗаписи.Цена;
    КонецЦикла;

КонецФункции
Vofka
Цитата(TailorMade @ 09.10.19, 16:12) необходимо зарегистрироваться для просмотра ссылки
Сделал так, вроде нормально выводит

Если вас не смущает, что вы при этом в запросе не используете Дату, то вариант нормальный smile.gif
TailorMade
Vofka @ Сегодня, 16:14 необходимо зарегистрироваться для просмотра ссылки ,
А если через условие в запросе дату указать? Я - дурак и не заметил..
Просто если так, как вы сказали брать Срез Последних, то почему-то ничего не попадает

когда смотрю через отладку, то видно, что параметры Дата и ТипЦены попадают в запрос, но Номенклатура почему-то не попадает
Vofka
TailorMade, необходимо зарегистрироваться для просмотра ссылки не ищет?
TailorMade
Vofka @ Сегодня, 16:39 необходимо зарегистрироваться для просмотра ссылки ,
Номенклатура не попадает..
Так вся функция выглядит :
Функция ПолучитьЦену()
    
    ЗначениеНоменклатуры = Справочники.Номенклатура.НайтиПоКоду("000101087");
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЦеныНоменклатурыСрезПоследних.Цена
        |ИЗ
        |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
        |            &Дата,
        |            ТипЦен = &ТипЦен
        |                И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних";
    
    Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);
    Запрос.УстановитьПараметр("ТипЦен", ЭтотОбъект.ДоговорКонтрагента.ТипЦен);
    Запрос.УстановитьПараметр("Номенклатура", ЗначениеНоменклатуры);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Возврат ВыборкаДетальныеЗаписи.Цена;
    КонецЦикла;

КонецФункции


Если параметр Дата не указать, то в таком случае попадает. Не понимаю, почему так
Макс1С
TailorMade @ Сегодня, 17:48 необходимо зарегистрироваться для просмотра ссылки ,
Сверьте дату/время документа в котором запускаете и дату установки цен, скорее в этом дело. А без даты в срезе последних вы получите абсолютно все записи(историю) цен по указанной номенклатуре
TailorMade
Макс1С @ Сегодня, 17:54 необходимо зарегистрироваться для просмотра ссылки ,
Вот так вот. Я болван конечно! Спасибо вам, что указали на это smile.gif

Спасибо вам всем!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.