Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как программно получить цену по договору          
TailorMade Подменю пользователя
сообщение 09.10.19, 11:58
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 24
Спасибо сказали: 0 раз
Рейтинг: 0

Здравствуйте. Есть документ Заказ Покупателя. В нем есть Договор, у которого установлен тип цен. И по этому типу цен документов "Установка цен номенклатуры" установлена цена. Как программно с модуля документа Заказ Покупателя получить эту цену?
УТП 8.3

sava1 Подменю пользователя
сообщение 09.10.19, 13:13
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

запрос к рег. сведений ЦеныНоменклатуры с отбором по указанной цене и Номенклатуре

Сообщение отредактировал sava1 - 09.10.19, 13:13

Vofka Подменю пользователя
сообщение 09.10.19, 13:20
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Посмотрите модуль Ценообразование, там есть много функций для получения цены.

TailorMade Подменю пользователя
сообщение 09.10.19, 14:08
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 24
Спасибо сказали: 0 раз
Рейтинг: 0

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

Vofka Подменю пользователя
сообщение 09.10.19, 15:12
Сообщение #5

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Запрос.Текст = "
|ВЫБРАТЬ
|    ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
|    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен = &ТипЦен И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних
|";


Сообщение отредактировал Vofka - 09.10.19, 15:12

TailorMade Подменю пользователя
сообщение 09.10.19, 15:12
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 24
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

Vofka Подменю пользователя
сообщение 09.10.19, 15:14
Сообщение #7

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Цитата(TailorMade @ 09.10.19, 16:12) *
Сделал так, вроде нормально выводит

Если вас не смущает, что вы при этом в запросе не используете Дату, то вариант нормальный smile.gif

TailorMade Подменю пользователя
сообщение 09.10.19, 15:33
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 24
Спасибо сказали: 0 раз
Рейтинг: 0

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

когда смотрю через отладку, то видно, что параметры Дата и ТипЦены попадают в запрос, но Номенклатура почему-то не попадает

Vofka Подменю пользователя
сообщение 09.10.19, 15:39
Сообщение #9

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

TailorMade, так не ищет?

TailorMade Подменю пользователя
сообщение 09.10.19, 16:48
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 24
Спасибо сказали: 0 раз
Рейтинг: 0

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

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


Если параметр Дата не указать, то в таком случае попадает. Не понимаю, почему так

Макс1С Подменю пользователя
сообщение 09.10.19, 16:54
Сообщение #11

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 189
Из: Днепр
Спасибо сказали: 62 раз
Рейтинг: 58.6

TailorMade @ Сегодня, 17:48 * ,
Сверьте дату/время документа в котором запускаете и дату установки цен, скорее в этом дело. А без даты в срезе последних вы получите абсолютно все записи(историю) цен по указанной номенклатуре

TailorMade Подменю пользователя
сообщение 09.10.19, 17:22
Сообщение #12

Общительный
**
Группа: Пользователи
Сообщений: 24
Спасибо сказали: 0 раз
Рейтинг: 0

Макс1С @ Сегодня, 17:54 * ,
Вот так вот. Я болван конечно! Спасибо вам, что указали на это smile.gif

Спасибо вам всем!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 3:23
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!