Как исправить ошибку в формуле расчета цены без НДС с перечислением?

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

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

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

        Где ошибка, как поправить ?

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

          Ошибка в формуле расчёта цены без НДС в части:

          |ЦеныНоменклатурыСрезПоследних.Цена *(1-ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС/(100+ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС))

          Проблема в том, что ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС — это перечисление, а не число. Нельзя напрямую делить перечисление на число.

          Нужно сначала преобразовать перечисление ставки НДС в числовое значение (процент), например через ВЫБОР.

          Правильный вариант:

          |ВЫБОР
          | КОГДА ЦеныНоменклатурыСрезПоследних.Валюта ЕСТЬ NULL
          | ТОГДА
          | ЦеныНоменклатурыСрезПоследних.Цена *
          | (1 —
          | (ВЫБОР
          | КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 ТОГДА 20
          | КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 ТОГДА 18
          | КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС10 ТОГДА 10
          | КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС0 ТОГДА 0
          | КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС ТОГДА 0
          | ИНАЧЕ 0
          | КОНЕЦ
          | /
          | (100 + ВЫБОР
          | КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 ТОГДА 20
          | КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 ТОГДА 18
          | КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС10 ТОГДА 10
          | КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС0 ТОГДА 0
          | КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС ТОГДА 0
          | ИНАЧЕ 0
          | КОНЕЦ
          | )
          | )
          | ИНАЧЕ
          | ЦеныНоменклатурыСрезПоследних.Цена * КурсНоменклатуры.Кратность / КурсНоменклатуры.Курс
          |КОНЕЦ КАК ЦенаРубБезНДС

          Если нужно, можно упростить, вынеся ВЫБОР ставки НДС в отдельный параметр или переменную.

          Так вы корректно получите цену без НДС с учётом ставки из перечисления.

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