Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
26 ноя 2022, 23:20

Курс валюты в запросе

Автор Дмитрий357, 24 сен 2022, 12:02

0 Пользователей и 1 гость просматривают эту тему.

Дмитрий357

Здравствуйте! Подскажите пжл как в запросе задать курс =1, если валюта российский рубль. В справочнике Валюты нет кратности, только наименование и код валюты. В регистре сведений КурсыВалют измерение Валюта, ресурс Курс, кратности нет. Валюта выбирается пользователем на форме обработки. Привожу пример запроса:
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
        |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество,
        |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) / КурсыВалютСрезПоследних.Курс КАК Цена,
        |    ТоварыНаСкладахОстатки.КоличествоОстаток * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) / КурсыВалютСрезПоследних.Курс КАК Стоимость
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
        |        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура,
        |    РегистрСведений.КурсыВалют.СрезПоследних(, Валюта = &Валюта) КАК КурсыВалютСрезПоследних
        |ГДЕ
        |    ТоварыНаСкладахОстатки.КоличествоОстаток > 0";
   
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("ВидЦены", ВидЦены);
    Запрос.УстановитьПараметр("Валюта", Валюта);
    РезультатЗапроса = Запрос.Выполнить();
   
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

LexaK

Дмитрий357, может так
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
        |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество,
        |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) / ЕСТЬNULL(КурсыВалютСрезПоследних.Курс,1) КАК Цена,
        |    ТоварыНаСкладахОстатки.КоличествоОстаток * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) /
        |        ЕСТЬNULL(КурсыВалютСрезПоследних.Курс,1) КАК Стоимость
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
        |        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура,
        |    РегистрСведений.КурсыВалют.СрезПоследних(, Валюта = &Валюта) КАК КурсыВалютСрезПоследних
        |ГДЕ
        |    ТоварыНаСкладахОстатки.КоличествоОстаток > 0";
   
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("ВидЦены", ВидЦены);
    Запрос.УстановитьПараметр("Валюта", Валюта);
    РезультатЗапроса = Запрос.Выполнить();
   
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
если помогло нажмите: Спасибо!

Дмитрий357

LexaK, Не подходит. Такой валюты в регистре КурсВалют вообще нет, поскольку у нее нет курса

antoneus

А ЕСТЬNULL там по-вашему для чего?

Дмитрий357

antoneus, я уже попробывал. Не раюотает

Дмитрий357

antoneus, естьnull мог сработать, если бы сама Валюта РоссийскийРубль была в регисте курсыВалют. А ее там физически нет, поскольку для нее курс не загружается. Соответственно нет валюты и нет ее курса. Вот если была бы валюта, тогда естьnull бы сработал, поскольку курс у нее не было бы

LexaK

Дмитрий357, А ДОРАБОТАННЫЙ ЗАПРОС ЧТО ВОЗВРАЩАЕТ?

вот эта конструкция
ЕСТЬNULL(КурсыВалютСрезПоследних.Курс,1)
как раз для ЛЮБОЙ валюты, которой нет вернет - 1
если помогло нажмите: Спасибо!

Дмитрий357

LexaK, Не работает так. Написанный в начале темы запрос представляет собой функцию и возвращает результат запроса. Дальше по нажатию кнопки заполнить должна заполняться табличная часть обработки. Приведу код, где дальше используется эта функция
&НаСервере
Процедура ЗаполнитьНаСервере()
ВыборкаДетальныеЗаписи=ПолучитьВыборку ();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
НовСтр = Объект.ОстаткиТоваров.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр,ВыборкаДетальныеЗаписи);
КонецЦикла;
КонецПроцедуры

Дмитрий357

LexaK, А разве доработанный запрос возвращает валюту с курсом 1? Мне кажется, он возвращает значение курса 1 для уже имеющейся валюты в документе УстановкКУрсовВалют, на основании которого создаются записи регистра сведений КурсыВалют

LexaK

Дмитрий357, ваш приведенный код может не работать просто по тому что не остатков!
курс то тут причем?

"погоняте" свои запросы сначала, в консоли запросов, сразу станет все понятно!  :)
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск