База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибки и упростить сложный запрос с вложенным выбором в 1С? › Ответ в теме: Как исправить ошибки и упростить сложный запрос с вложенным выбором в 1С?
Ошибка в вашем фрагменте запроса связана с неправильным вложением ВЫБОРОВ и отсутствием закрывающих КОНЕЦ для всех веток. Кроме того, есть избыточные проверки, которые можно упростить.
Вот упрощённый и исправленный вариант для поля ЦенаРУБСкидка:
|ВЫБОР
| КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.флФиксЦена
| ТОГДА
| ВЫБОР
| КОГДА ЦеныНоменклатурыСрезПоследних.Валюта ЕСТЬ NULL
| ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
| ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Цена * КурсНоменклатуры.Кратность / КурсНоменклатуры.Курс
| КОНЕЦ
| ИНАЧЕ
| ВЫБОР
| КОГДА ЦеныНоменклатурыСрезПоследних.Валюта ЕСТЬ NULL
| ТОГДА ЦеныНоменклатурыСрезПоследних.Цена * (1 — &Пр1 / 100) * (1 — &Пр2 / 100)
| ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Цена * (1 — &Пр1 / 100) * (1 — &Пр2 / 100) * КурсНоменклатуры.Кратность / КурсНоменклатуры.Курс
| КОНЕЦ
|КОНЕЦ КАК ЦенаРУБСкидка
Объяснение:
— Внешний ВЫБОР проверяет флаг флФиксЦена.
— Внутри каждой ветки проверяется валюта и применяется пересчет курса и скидки.
— Убрана лишняя вложенность и дублирование.
Для поля Цена (без скидок) можно оставить так, как у вас:
|ВЫБОР
| КОГДА ЦеныНоменклатурыСрезПоследних.Валюта ЕСТЬ NULL
| ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
| ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Цена * КурсНоменклатуры.Кратность / КурсНоменклатуры.Курс
|КОНЕЦ КАК Цена
Так будет проще и без ошибок.
Если хотите, могу помочь оформить полный запрос.