Добрый день! Вопрос такой, есть сильно переписанная БП 3. Конф 3.0.37.2. В документах ставка НДС по умолчанию подтягивается из номенклатуры. Хочу реализовать чтобы до 01012019 подтягивался НДС18, после НДС20. Ставка НДС это перечисление.
Подскажите пожалуйста как лучше реализовать? Как сделано в последних версиях БП 3?
---
Добавить еще одно перечисление "20%" , пройтись поиском , и везде где есть "18%" ,включить вилку на дату, до 01012019, "18%" после 20%
---
В зависимости от даты получают ставку по умолчанию, затем везде где есть реквизит НДС и ставка пересчитывают, если отличается от умолчания. При записи можно в подписке заменить с предупреждением или без если ставка отличается.
---
Присоединяюсь к (3) - так и делал при адаптации старенькой УТ 11.1. Добавил два значения перечисления СтавкиНДС: НДС20 и НДС20_120, поискал по строке "НДС18", вставил проверки вида
```1c
    Объект.СтавкаНДС = ?(ТекущаяДата() >= Дата(2019, 1, 1), Перечисления.СтавкиНДС.НДС20, Перечисления.СтавкиНДС.НДС18);
```
. Еще советую просмотреть формы документов (и объектов, и списков) на предмет списков выбора, заполненных непрограммным способом. Например, мне попались форма списка авансовых СФ.
---
Добавить еще одно перечисление "20%" , пройтись поиском , и везде где есть "18%" ,включить вилку на дату, до 01012019, "18%" после 20%
---
В последней БП в номенклатуре СтавкаНДС переименована в УдалитьСтавкаНДС.
Добавлено перечисление ВидыСтавокНДС со значениями Общая, ОбщаяРасчетная, Пониженная, ПониженнаяРасчетная, Нулевая, БезНДС.
Перечисление СтавкиНДС осталось и используется в документах.
Для получения ставки НДС из ВидаСтавкиНДС используется функция в модуле менеджера перечисления СтавкиНДС:

```1c
    Функция СтавкаНДС(ВидСтавки, Период) Экспорт

    Если ВидСтавки = Перечисления.ВидыСтавокНДС.Общая Тогда
    Возврат УчетНДСКлиентСервер.ОбщаяСтавкаНДС(Период);
    ИначеЕсли ВидСтавки = Перечисления.ВидыСтавокНДС.ОбщаяРасчетная Тогда
    Возврат УчетНДСКлиентСервер.ОбщаяРасчетнаяСтавкаНДС(Период);
    ИначеЕсли ВидСтавки = Перечисления.ВидыСтавокНДС.Пониженная Тогда
    Возврат Перечисления.СтавкиНДС.НДС10;
    ИначеЕсли ВидСтавки = Перечисления.ВидыСтавокНДС.ПониженнаяРасчетная Тогда
    Возврат Перечисления.СтавкиНДС.НДС10_110;
    ИначеЕсли ВидСтавки = Перечисления.ВидыСтавокНДС.Нулевая Тогда
    Возврат Перечисления.СтавкиНДС.НДС0;
    ИначеЕсли ВидСтавки = Перечисления.ВидыСтавокНДС.БезНДС Тогда
    Возврат Перечисления.СтавкиНДС.БезНДС;
    Иначе
    Возврат Перечисления.СтавкиНДС.ПустаяСсылка();
    КонецЕсли;

    КонецФункции
```

Для получения ВидаСтавкиНДС из СтавкиНДС используется функция в модуле менеджера перечисления ВидыСтавокНДС:

```1c
    Функция ВидСтавки(СтавкаНДС) Экспорт

    Если СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
    Возврат Перечисления.ВидыСтавокНДС.Общая;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
    Возврат Перечисления.ВидыСтавокНДС.ОбщаяРасчетная;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда
    Возврат Перечисления.ВидыСтавокНДС.Пониженная;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
    Возврат Перечисления.ВидыСтавокНДС.ПониженнаяРасчетная;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС0 Тогда
    Возврат Перечисления.ВидыСтавокНДС.Нулевая;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда
    Возврат Перечисления.ВидыСтавокНДС.БезНДС;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
    Возврат Перечисления.ВидыСтавокНДС.Общая;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
    Возврат Перечисления.ВидыСтавокНДС.ОбщаяРасчетная;
    Иначе
    Возврат Перечисления.ВидыСтавокНДС.ПустаяСсылка();
    КонецЕсли;

    КонецФункции
```

Текст УчетНДСКлиентСервер.ОбщаяСтавкаНДС(Период):

```1c
    Функция ОбщаяСтавкаНДС(Период) Экспорт

    Если Период < '20190101' Тогда
    Возврат ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС18");
    Иначе
    Возврат ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20");
    КонецЕсли;

    КонецФункции
```
---
Спасибо всем! Проблему решил.