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

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

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #38054
      Фото аватараOdineski
      Участник

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

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

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

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

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

          Объяснение:

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

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

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

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

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С