При переходе на новые ставки НДС (например, с 18% на 20% или при индивидуальных доработках системы) технические специалисты часто сталкиваются с неприятной проблемой: в документах продажи и покупки ставка обновляется и переносится корректно, а вот в банковских выписках и платежных поручениях после синхронизации упорно продолжает появляться старая ставка 18%.
В этой статье мы подробно разберем, почему возникает эта проблема, где именно в правилах обмена «скрываются» жестко прописанные старые ставки, и как шаг за шагом настроить корректный перенос данных между конфигурациями «1С:Управление торговлей 11» и «1С:Бухгалтерия предприятия 3.0».
---
Давайте проанализируем структуру данных в конфигурации УТ 11. В отличие от накладных (документов реализации или поступления), в платежных документах — таких как ПоступлениеБезналичныхДенежныхСредств или СписаниеБезналичныхДенежныхСредств — ставка НДС в явном виде в шапке документа часто отсутствует. Особенно это характерно для платежей, которые вешаются «на сальдо» договора (без указания конкретного заказа или накладной в расшифровке платежа).
Когда срабатывает обмен данными, система пытается заполнить ставку НДС в БП 3.0. Если в самом документе УТ ставка не определена, в игру вступают правила конвертации объектов (ПКО) и правил конвертации свойств (ПКС), созданные в программе «1С:Конвертация данных 2.0». В этих правилах разработчики часто прописывают «подстраховочные» алгоритмы: если контрагент является плательщиком НДС, то по умолчанию ему присваивается ставка 18%.
Сложность заключается в том, что подобные алгоритмы могут выполняться на двух разных этапах синхронизации:
Поскольку значение заполняется принудительно кодом правил, стандартные механизмы БП 3.0 по автоматическому определению ставки НДС на дату документа игнорируются.
---
Если вы уже изменили все очевидные модули обмена в конфигураторе, но ставка 18% все равно продолжает «прилетать» в бухгалтерию, необходимо выгрузить правила обмена в XML-файл и провести глобальный поиск.
Выполним следующие действия:
НДС18, СтавкаНДС, "18" или 18%.Рассмотрим пример типичного кода, который может быть скрыт в алгоритмах правил конвертации:
// Пример алгоритма "По умолчанию" в правилах обмена
Если ОбладаетПризнакомПлательщикаНДС(Объект.Контрагент) Тогда
Значение = Перечисления.СтавкиНДС.НДС18;
КонецЕсли;
Обратите внимание, что в «Конвертации данных» алгоритмы могут быть вложены друг в друга и распределены по иерархии. Если в программе настройки правил включен иерархический просмотр, вы можете просто не заметить нужную ветку. Специалисты рекомендуют отключать иерархическое отображение при поиске обработчиков событий.
---
Как показывает практика, частичное исправление кода (например, только в правилах выгрузки ПКС) не решит проблему, если аналогичный обработчик прописан на этапе загрузки в ПКО. Нам необходимо скорректировать оба места.
Проанализируем пример исправления кода в событии «При выгрузке» для ПКС (Правила конвертации свойств) свойства СтавкаНДС табличной части документа:
// Старый некорректный код:
// Если Не ЗначениеЗаполнено(Источник.СтавкаНДС) Тогда
// Значение = "НДС18";
// КонецЕсли;
// Новый корректный код (учитываем ставку 20%):
Если Не ЗначениеЗаполнено(Источник.СтавкаНДС) Тогда
// Задаем новую ставку по умолчанию
Значение = Перечисления.СтавкиНДС.НДС20;
КонецЕсли;
Теперь переместимся в обработчик события «После загрузки» для ПКО (Правила конвертации объектов) соответствующего банковского документа. Здесь система может переопределять загруженные данные:
// Исправление логики после загрузки в БП
Для Каждого СтрокаТаблицы Из Объект.РасшифровкаПлатежа Цикл
Если СтрокаТаблицы.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
СтрокаТаблицы.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
// Не забываем пересчитать сумму НДС, если это необходимо
СтрокаТаблицы.СуммаНДС = Округлить(СтрокаТаблицы.СуммаВзаиморасчетов * 20 / 120, 2);
КонецЕсли;
КонецЦикла;
После внесения изменений в оба обработчика сохраните правила, загрузите их обратно в узел синхронизации данных и проведите тестовый обмен.
---
Постоянно переписывать жестко заданные ставки в коде правил конвертации при каждом изменении законодательства — не самый эффективный путь. Более изящное решение заключается в том, чтобы вообще очищать значение ставки при выгрузке, если оно не задано в источнике явным образом.
Давайте выясним причину: в конфигурации «1С:Бухгалтерия предприятия 3.0» встроен мощный механизм работы с НДС. При записи документа с пустым значением ставки система автоматически определяет актуальную ставку (18%, 20% или иную), ориентируясь на дату документа.
В правилах обмена в ПКС СтавкаНДС для банковских документов мы можем прописать следующий лаконичный код:
// Если ставка в УТ не определена, не передаем её вообще,
// позволяя БП определить ставку автоматически на основании даты документа.
Если Не ЗначениеЗаполнено(Источник.СтавкаНДС) Тогда
Отказ = Истина;
КонецЕсли;
---
Если вы полностью очистили и переписали правила обмена, но ставка 18% всё равно проскакивает в новых документах, проверьте следующие системные настройки в обеих базах:
Администрирование -> Настройки пользователей и прав -> Настройки пользователей. Проверьте реквизит Основная ставка НДС для пользователя, под которым выполняется регламентное задание обмена (или под вашей учетной записью). При создании или перезаписи документа система может подставлять значение оттуда.Для быстрого исправления данных в карточках номенклатуры и договоров воспользуйтесь стандартным инструментом:
Перейдите в НСИ и администрирование -> Сервис -> Групповое изменение реквизитов. Выберите объект "Номенклатура" или "Договоры контрагентов", установите отбор по старой ставке и замените её на актуальные 20%.
Применяя описанный комплексный подход к анализу правил обмена КД 2.0 и проверке настроек баз данных, вы гарантированно избавитесь от появления устаревших ставок НДС при синхронизации документов.