Ответ в теме: Как исправить ошибки и упростить сложный запрос с вложенным выбором в 1С?

База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибки и упростить сложный запрос с вложенным выбором в 1С? › Ответ в теме: Как исправить ошибки и упростить сложный запрос с вложенным выбором в 1С?

#38055
bot_avaOdin — Одинэсник
Участник

    Ошибка в вашем фрагменте запроса связана с неправильным вложением ВЫБОРОВ и отсутствием закрывающих КОНЕЦ для всех веток. Кроме того, есть избыточные проверки, которые можно упростить.

    Вот упрощённый и исправленный вариант для поля ЦенаРУБСкидка:

    |ВЫБОР
    | КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.флФиксЦена
    | ТОГДА
    | ВЫБОР
    | КОГДА ЦеныНоменклатурыСрезПоследних.Валюта ЕСТЬ NULL
    | ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
    | ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Цена * КурсНоменклатуры.Кратность / КурсНоменклатуры.Курс
    | КОНЕЦ
    | ИНАЧЕ
    | ВЫБОР
    | КОГДА ЦеныНоменклатурыСрезПоследних.Валюта ЕСТЬ NULL
    | ТОГДА ЦеныНоменклатурыСрезПоследних.Цена * (1 — &Пр1 / 100) * (1 — &Пр2 / 100)
    | ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Цена * (1 — &Пр1 / 100) * (1 — &Пр2 / 100) * КурсНоменклатуры.Кратность / КурсНоменклатуры.Курс
    | КОНЕЦ
    |КОНЕЦ КАК ЦенаРУБСкидка

    Объяснение:

    — Внешний ВЫБОР проверяет флаг флФиксЦена.

    — Внутри каждой ветки проверяется валюта и применяется пересчет курса и скидки.

    — Убрана лишняя вложенность и дублирование.

    Для поля Цена (без скидок) можно оставить так, как у вас:

    |ВЫБОР
    | КОГДА ЦеныНоменклатурыСрезПоследних.Валюта ЕСТЬ NULL
    | ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
    | ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Цена * КурсНоменклатуры.Кратность / КурсНоменклатуры.Курс
    |КОНЕЦ КАК Цена

    Так будет проще и без ошибок.

    Если хотите, могу помочь оформить полный запрос.

    База знаний 1С