Переход на новую ставку НДС в 20% стал серьезным вызовом для владельцев необновляемых и сильно кастомизированных конфигураций 1С. В данной статье мы проанализируем методику внедрения изменений в систему «руками», разберем основные технические «подводные камни» и рассмотрим наиболее эффективные способы автоматизации этого процесса, которые применяли эксперты на практике.
Первым делом проанализируем структуру хранения ставок в вашей базе. В большинстве конфигураций 1С (УТ 10.3, КА 1.1, УПП, ТиС 7.7) ставка НДС является значением перечисления. Начнем работу по шагам:
СтавкиНДС. Если значения НДС20 и НДС20_120 (расчетная ставка) отсутствуют, их необходимо добавить. Важно: убедитесь, что вы создаете именно новые элементы, а не переименовываете старые, так как исторические документы за прошлые периоды должны сохранить ставку 18%.Номенклатура;ДоговорыКонтрагентов (если там фиксируется ставка);ВидыЦен (или настройки прайс-листов).Для массовой замены лучше всего использовать обработку «Групповая обработка справочников и документов» или написать простенький скрипт. Однако, рассмотрим ситуацию, когда в 7.7 реквизит СтавкаНДС является периодическим — в этом случае достаточно просто установить новое значение с нужной даты.
Самое трудоемкое — это поиск упоминаний старой ставки в программном коде. Проанализируем ситуацию: разработчики часто используют прямое обращение к значениям перечисления. Выполним глобальный поиск по конфигурации строки НДС18.
Рассмотрим пример типичной ошибки, которую нужно исправить:
// Было:
Если СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
СтрокаТЧ.СуммаНДС = СтрокаТЧ.Сумма * 18 / 118;
КонецЕсли;
// Стало (учитываем дату документа):
Если ДатаДокумента < ДатаПерехода Тогда
// Логика для 18%
Иначе
Если СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
СтрокаТЧ.СуммаНДС = СтрокаТЧ.Сумма * 20 / 120;
КонецЕсли;
КонецЕсли;
Обратите внимание: таких вхождений в старых конфигурациях вроде УТ 10.3 может быть более 700. Особое внимание уделите модулям проведения документов, книгам покупок и продаж, а также алгоритмам формирования счетов-фактур на аванс.
Чтобы не плодить условия Если... Иначе по всей базе, разберем более изящное решение, которое предложили разработчики 1С в новых версиях ERP. Суть заключается в том, чтобы не хранить конкретную ставку в номенклатуре, а хранить «Вид ставки НДС» (Общая, Пониженная, Нулевая).
Рекомендуем создать общую функцию, которая будет возвращать актуальную ставку в зависимости от даты:
Функция гдПолучитьАктуальнуюСтавкуНДС(ДатаДокумента) Экспорт
Если ДатаДокумента < '20190101000000' Тогда
Возврат Перечисления.СтавкиНДС.НДС18;
Иначе
Возврат Перечисления.СтавкиНДС.НДС20;
КонецЕсли;
КонецФункции
Затем в коде подстановки (например, при выборе товара в документе) мы просто вызываем эту функцию. Это избавит пользователей от необходимости вручную менять ставку в карточке товара «под бой курантов».
Выясним причину возможных сложностей в январе. Основная головная боль бухгалтерии — это межпериодные расчеты. Рассмотрим основные сценарии:
Многие забывают, что в управляемых и обычных формах состав списка выбора для ставки НДС часто задан статично. Проанализируем свойства элементов форм (комбобоксов). Если в свойстве СписокВыбора жестко прописаны значения, их нужно обновить программно в событии ПриОткрытии или ПриСозданииНаСервере, исключая старые ставки для новых документов и наоборот.
Пример программного ограничения списка в форме:
Список = Элементы.СтавкаНДС.СписокВыбора;
Список.Очистить();
Если Объект.Дата < '20190101' Тогда
Список.Добавить(Перечисления.СтавкиНДС.НДС18);
Список.Добавить(Перечисления.СтавкиНДС.НДС18_118);
Иначе
Список.Добавить(Перечисления.СтавкиНДС.НДС20);
Список.Добавить(Перечисления.СтавкиНДС.НДС20_120);
КонецЕсли;
Разберем важный момент: 1С не печатает НДС сама, она передает команду на фискальный регистратор. Если вы добавили ставку 20% в 1С, но не обновили прошивку кассы или драйвер, касса может вернуть ошибку «Некорректный налог». Проверьте таблицу соответствия налоговых ставок в драйвере (обычно это индексы 1-4). Важно, чтобы индекс ставки НДС 20% в 1С совпадал с тем, который ожидает касса после обновления прошивки.
Рассмотрим специфическую проблему, замеченную при доработке УТ 11.3. При формировании движений по регистрам НДС система часто собирает текст запроса из фрагментов. Проанализируем ситуацию: если вы добавляете свои куски кода в общие модули проведения, следите за символом ";" (точка с запятой). В некоторых релизах части запроса склеиваются «встык», и отсутствие разделителя приведет к синтаксической ошибке, которую сложно отловить конструктором запросов.
Подведем итог: ручное внедрение НДС 20% в старые конфигурации 1С — задача выполнимая, но требующая системного подхода. Основной акцент следует делать не на массовой замене данных в справочниках, а на создании гибкой логики выбора ставки в зависимости от даты документа и корректной обработке переходных операций (возвратов и корректировок).