Как доработать старую конфигурацию 1С при изменении ставки НДС с 18% на 20%

Программист 1С v8.3 (Обычные формы) Налоговый учет IT и автоматизация бизнеса
← На главную

Переход на новую ставку НДС в 20% стал серьезным вызовом для владельцев необновляемых и сильно кастомизированных конфигураций 1С. В данной статье мы проанализируем методику внедрения изменений в систему «руками», разберем основные технические «подводные камни» и рассмотрим наиболее эффективные способы автоматизации этого процесса, которые применяли эксперты на практике.

Методика подготовки метаданных и справочников

Первым делом проанализируем структуру хранения ставок в вашей базе. В большинстве конфигураций 1С (УТ 10.3, КА 1.1, УПП, ТиС 7.7) ставка НДС является значением перечисления. Начнем работу по шагам:

  1. Добавление нового значения в перечисление: Проверим перечисление СтавкиНДС. Если значения НДС20 и НДС20_120 (расчетная ставка) отсутствуют, их необходимо добавить. Важно: убедитесь, что вы создаете именно новые элементы, а не переименовываете старые, так как исторические документы за прошлые периоды должны сохранить ставку 18%.
  2. Массовое обновление справочников: Нам потребуется изменить ставку НДС «по умолчанию» в нескольких ключевых местах:
    • Справочник Номенклатура;
    • Справочник ДоговорыКонтрагентов (если там фиксируется ставка);
    • Справочник ВидыЦен (или настройки прайс-листов).

Для массовой замены лучше всего использовать обработку «Групповая обработка справочников и документов» или написать простенький скрипт. Однако, рассмотрим ситуацию, когда в 7.7 реквизит СтавкаНДС является периодическим — в этом случае достаточно просто установить новое значение с нужной даты.

Поиск и исправление «жесткого» кода

Самое трудоемкое — это поиск упоминаний старой ставки в программном коде. Проанализируем ситуацию: разработчики часто используют прямое обращение к значениям перечисления. Выполним глобальный поиск по конфигурации строки НДС18.

Рассмотрим пример типичной ошибки, которую нужно исправить:


// Было:
Если СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
    СтрокаТЧ.СуммаНДС = СтрокаТЧ.Сумма * 18 / 118;
КонецЕсли;

// Стало (учитываем дату документа):
Если ДатаДокумента < ДатаПерехода Тогда
    // Логика для 18%
Иначе
    Если СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
        СтрокаТЧ.СуммаНДС = СтрокаТЧ.Сумма * 20 / 120;
    КонецЕсли;
КонецЕсли;

Обратите внимание: таких вхождений в старых конфигурациях вроде УТ 10.3 может быть более 700. Особое внимание уделите модулям проведения документов, книгам покупок и продаж, а также алгоритмам формирования счетов-фактур на аванс.

Умный подход: использование универсальной функции

Чтобы не плодить условия Если... Иначе по всей базе, разберем более изящное решение, которое предложили разработчики 1С в новых версиях ERP. Суть заключается в том, чтобы не хранить конкретную ставку в номенклатуре, а хранить «Вид ставки НДС» (Общая, Пониженная, Нулевая).

Рекомендуем создать общую функцию, которая будет возвращать актуальную ставку в зависимости от даты:


Функция гдПолучитьАктуальнуюСтавкуНДС(ДатаДокумента) Экспорт
    Если ДатаДокумента < '20190101000000' Тогда
        Возврат Перечисления.СтавкиНДС.НДС18;
    Иначе
        Возврат Перечисления.СтавкиНДС.НДС20;
    КонецЕсли;
КонецФункции

Затем в коде подстановки (например, при выборе товара в документе) мы просто вызываем эту функцию. Это избавит пользователей от необходимости вручную менять ставку в карточке товара «под бой курантов».

Специфические проблемы переходного периода

Выясним причину возможных сложностей в январе. Основная головная боль бухгалтерии — это межпериодные расчеты. Рассмотрим основные сценарии:

  1. Корректировочные счета-фактуры: Если вы делаете корректировку отгрузки 2018 года в 2019 году, ставка НДС в корректировке ОБЯЗАНА остаться 18%. Система должна это понимать и не подставлять 20% автоматически.
  2. Возвраты товаров: С 2019 года изменились правила возвратов. Проанализируем логику: теперь возврат часто оформляется через корректировочный счет-фактуру. Если ваша старая конфигурация «умеет» делать возврат только через обратную реализацию, вам придется дописать код, чтобы ставка соответствовала первичному документу.
  3. Доплаты 2% по авансам: Посмотрим на ситуацию, когда аванс получен в декабре (18%), а товар отгружен в январе (20%). Если покупатель доплачивает 2%, эти суммы требуют особого отражения в книге продаж. В самописных системах этот механизм придется создавать с нуля.

Доработка экранных форм и списков выбора

Многие забывают, что в управляемых и обычных формах состав списка выбора для ставки НДС часто задан статично. Проанализируем свойства элементов форм (комбобоксов). Если в свойстве СписокВыбора жестко прописаны значения, их нужно обновить программно в событии ПриОткрытии или ПриСозданииНаСервере, исключая старые ставки для новых документов и наоборот.

Пример программного ограничения списка в форме:


Список = Элементы.СтавкаНДС.СписокВыбора;
Список.Очистить();
Если Объект.Дата < '20190101' Тогда
    Список.Добавить(Перечисления.СтавкиНДС.НДС18);
    Список.Добавить(Перечисления.СтавкиНДС.НДС18_118);
Иначе
    Список.Добавить(Перечисления.СтавкиНДС.НДС20);
    Список.Добавить(Перечисления.СтавкиНДС.НДС20_120);
КонецЕсли;

Интеграция с торговым оборудованием (ККТ)

Разберем важный момент: 1С не печатает НДС сама, она передает команду на фискальный регистратор. Если вы добавили ставку 20% в 1С, но не обновили прошивку кассы или драйвер, касса может вернуть ошибку «Некорректный налог». Проверьте таблицу соответствия налоговых ставок в драйвере (обычно это индексы 1-4). Важно, чтобы индекс ставки НДС 20% в 1С совпадал с тем, который ожидает касса после обновления прошивки.

Техническая ловушка в УТ 11 (запросы)

Рассмотрим специфическую проблему, замеченную при доработке УТ 11.3. При формировании движений по регистрам НДС система часто собирает текст запроса из фрагментов. Проанализируем ситуацию: если вы добавляете свои куски кода в общие модули проведения, следите за символом ";" (точка с запятой). В некоторых релизах части запроса склеиваются «встык», и отсутствие разделителя приведет к синтаксической ошибке, которую сложно отловить конструктором запросов.

Подведем итог: ручное внедрение НДС 20% в старые конфигурации 1С — задача выполнимая, но требующая системного подхода. Основной акцент следует делать не на массовой замене данных в справочниках, а на создании гибкой логики выбора ставки в зависимости от даты документа и корректной обработке переходных операций (возвратов и корректировок).

← На главную