Переход на новую ставку НДС 20% в конфигурации «Торговля и склад 7.7» (ТиС) вызвал немало вопросов у разработчиков и бухгалтеров. Основная проблема заключалась в том, что типовое решение от фирмы 1С предлагало лишь инструмент для массовой замены ставки в справочнике Номенклатура. Однако на практике организации часто сталкиваются с необходимостью выписывать документы «задним числом» за прошлый год (где ставка 18%) или готовить документы заранее. Рассмотрим подробнее, как решить эту задачу максимально эффективно, сохранив корректность учета в обоих периодах.
Стандартная логика ТиС 7.7 предполагает, что ставка НДС берется из карточки товара в момент подбора позиции в документ. Если мы просто воспользуемся обработкой и заменим 18% на 20% во всем справочнике Номенклатура, то при попытке перевыбрать товар в старом документе (например, от декабря 2018 года) программа подставит новую ставку, что приведет к искажению налоговых данных.
Сделать реквизит СтавкаНДС периодическим в 7.7 — это трудоемкая задача, требующая переписки множества отчетов и алгоритмов проведения. Поэтому оптимальным решением является внедрение программной логики, которая будет динамически определять нужную ставку в зависимости от даты документа. Проанализируем способы реализации этой логики.
Чтобы система сама понимала, какую ставку подставить, необходимо внести изменения в общие процедуры пересчета налогов. Наиболее подходящее место для этого — процедура глПересчетТаблЧасти или функции, вызываемые при выборе номенклатуры. Разберем программный код, который позволит автоматизировать этот процесс.
Проанализируем пример функции в Глобальном модуле, которая возвращает актуальную ставку в зависимости от даты:
Функция глПолучитьСтавкуНДС(ВыбДатаДок, Номенклатура) Экспорт
// Если дата документа 01.01.2019 или позже
Если ВыбДатаДок >= Дата("01.01.2019") Тогда
Если Номенклатура.СтавкаНДС = Перечисление.СтавкиНДС.НДС18 Тогда
// Если в справочнике еще стоит 18, возвращаем 20
Возврат Перечисление.СтавкиНДС.НДС20;
Иначе
Возврат Номенклатура.СтавкаНДС;
КонецЕсли;
Иначе
// Для документов старого периода (до 2019 года)
Если Номенклатура.СтавкаНДС = Перечисление.СтавкиНДС.НДС20 Тогда
// Если в справочнике уже стоит 20, возвращаем 18
Возврат Перечисление.СтавкиНДС.НДС18;
Иначе
Возврат Номенклатура.СтавкаНДС;
КонецЕсли;
КонецЕсли;
КонецФункции
Далее в процедуре глПересчетТаблЧасти, которая отвечает за обновление строк при изменении товара, заменим прямое обращение к реквизиту справочника на вызов нашей функции:
// Вместо прямого присвоения:
// Конт.СтавкаНДС = Номенклатура.СтавкаНДС;
// Используем логику с привязкой к дате:
Конт.СтавкаНДС = глПолучитьСтавкуНДС(Конт.ДатаДок, Номенклатура);
Такой подход позволяет не торопиться с массовым обновлением справочника Номенклатура и гарантирует, что в документах 2018 года всегда будет 18%, а в 2019-м — 20%.
Если вы решили все же обновить справочник (например, когда работа с документами прошлого года полностью завершена), лучше использовать специализированную обработку. Это позволит избежать ручного редактирования каждой карточки. Рассмотрим пример кода для такой обработки, который выполняет замену с проверкой текущего значения:
Спр = СоздатьОбъект("Справочник.Номенклатура");
Спр.ВыбратьЭлементы(0); // Выбираем все элементы без учета иерархии
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;
// Проверяем, установлена ли сейчас ставка 18%
Если Спр.СтавкаНДС = Перечисление.СтавкиНДС.НДС18 Тогда
Спр.СтавкаНДС = Перечисление.СтавкиНДС.НДС20;
Спр.Записать();
Состояние("Обработана номенклатура: " + Спр.Наименование);
КонецЕсли;
КонецЦикла;
Предупреждение("Замена ставок НДС успешно завершена!");
Важный момент: перед запуском подобных обработок обязательно создавайте резервную копию базы данных. Если в вашей конфигурации используются специфические ставки (например, 10% или 0%), убедитесь, что ваш код их не затрагивает.
Особое внимание стоит уделить возвратам товаров. Если покупатель возвращает товар в 2019 году, который был куплен в 2018 году, ставка в документе возврата должна соответствовать ставке отгрузки (то есть 18%).
Разберем, как действовать в этом случае:
Помимо изменения справочника и кода, не забудьте обновить значения «по умолчанию» для пользователей. В ТиС 7.7 ставка НДС часто прописывается в настройках пользователя, чтобы она автоматически подставлялась в новые документы.
Выясним, где это находится:
Это действие избавит сотрудников от необходимости менять ставку вручную при создании каждого нового счета или реализации.
Рассмотрим причины, по которым архитекторы 1С и опытные программисты не рекомендуют делать СтавкаНДС периодическим реквизитом:
Цены. Изменение типа реквизита может нарушить механизм расчета цен «включая НДС».Таким образом, использование глобальной функции с логикой по дате документа является самым безопасным и «малокровным» способом адаптации старой системы к новым налоговым реалиям.