При переходе с конфигурации «Бухгалтерия предприятия» редакции 2.0 на редакцию 3.0 многие пользователи и разработчики столкнулись с неприятным изменением: из пользовательских настроек исчезла привычная опция «Основная ставка НДС». Из-за этого при загрузке банковских выписок или создании документов программа принудительно устанавливала ставку НДС (ранее 18%, затем 20%) либо значение «Без НДС» для организаций на спецрежимах. Пользователям приходилось вручную корректировать ставку в каждой строчке выписки, что существенно замедляло работу.
В этой статье мы подробно разберем, как функционирует механизм определения ставки НДС при загрузке документов в 1С:Бухгалтерия 3.0, как решить эту проблему программно с помощью расширения конфигурации (для старых и кастомизированных релизов) и как использовать штатные возможности, добавленные разработчиками в современных версиях программы.
Для начала проанализируем, где именно в программном коде 1С:Бухгалтерия 3.0 происходит автоматическое заполнение ставки НДС. Если мы имеем дело с нетиповым поведением или старым релизом, нам потребуется вмешательство в логику конфигурации.
В ранних версиях «Бухгалтерии предприятия 3.0» за автоподстановку отвечал общий модуль ЗаполнениеДокументов. Логика назначения ставки базировалась на следующем фрагменте кода:
Если ОбщегоНазначенияБП.ЕстьНезаполненныйРеквизитТабЧастиДокумента("СтавкаНДС", СтрокаПлатеж, МетаданныеДокумента, "РасшифровкаПлатежа") Тогда
Если ЕстьРеквизитОрганизация И ЗначениеЗаполнено(ДокументОбъект.Организация) И (МетаданныеДокумента.Имя = "ПриходныйКассовыйОрдер" ИЛИ МетаданныеДокумента.Имя = "ПоступлениеНаРасчетныйСчет") Тогда
СтрокаПлатеж.СтавкаНДС = ?(НЕ ПлательщикНДС, Перечисления.СтавкиНДС.БезНДС, Перечисления.СтавкиНДС.НДС20);
Иначе
СтрокаПлатеж.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
КонецЕсли;
КонецЕсли;
Как мы видим, жестко прописано использование ставки Перечисления.СтавкиНДС.НДС20 (или НДС18 в старых релизах), если организация является плательщиком НДС. Никаких гибких настроек здесь не предусматривалось.
В современных релизах логика усложнилась и распределилась по нескольким общим модулям. Процесс загрузки банковской выписки теперь выглядит следующим образом:
СоздатьДокументы в общем модуле ЗагрузкаВыпискиПоБанковскомуСчету.ВыделитьНДСИзНазначенияПлатежа(ИсходноеНазначениеПлатежа, СуммаПлатежа) из того же модуля. Программа ищет текстовые вхождения, такие как «в т.ч. НДС 20%», «в т.ч. НДС 10%» или «без НДС». Если совпадение найдено, устанавливается распознанная ставка.УчетНДСКлиентСервер и последовательно вызывает две ключевые функции:
СтавкаНДСВДоговореКонтрагента (пытается получить ставку, закрепленную за конкретным договором);СтавкаНДСПоУмолчанию (возвращает базовую ставку конфигурации).Если нам необходимо программно изменить поведение системы (например, установить ставку 10% вместо 20% по умолчанию для определенного круга операций), нам нужно переопределить поведение этих функций.
Чтобы не снимать конфигурацию с поддержки и сохранить возможность простого обновления, мы рекомендуем использовать механизм расширений. Мы можем перехватить выполнение функций в модуле УчетНДСКлиентСервер или ЗаполнениеДокументов.
Рассмотрим пример создания расширения для подмены ставки НДС по умолчанию:
УчетНДСКлиентСервер (нажмите на него правой кнопкой мыши в основной конфигурации и выберите «Добавить в расширение»).СтавкаНДСПоУмолчанию аннотацию &Вместо.Пример переопределяющего кода в расширении:
&Вместо("СтавкаНДСПоУмолчанию")
Функция Расш1_СтавкаНДСПоУмолчанию(Параметры)
// Если нам нужно принудительно установить 10% по умолчанию для определенных условий
Возврат ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС10");
КонецФункции
Аналогичным образом мы можем доработать функцию СтавкаНДСВДоговореКонтрагента, чтобы возвращать необходимую ставку в зависимости от вида договора или реквизитов контрагента.
Посмотрим на пример переопределения логики в общем модуле ЗагрузкаВыпискиПоБанковскомуСчету. Мы можем перехватить момент создания документов и принудительно подставить нужную нам ставку, если она не была распознана автоматически:
&После("ВыделитьНДСИзНазначенияПлатежа")
Функция Расш1_ВыделитьНДСИзНазначенияПлатежа(ИсходноеНазначениеПлатежа, СуммаПлатежа, Результат)
// Если стандартный алгоритм вернул неопределенную ставку или "Без НДС", а нам нужна 10%
Если Результат = Неопределено Или Результат.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС") Тогда
// Проверяем дополнительные условия, например, ключевые слова
Если Найти(ВРег(ИсходноеНазначениеПлатежа), "ДЕТСКИЕ ТОВАРЫ") > 0 Тогда
Результат.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС10");
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Такой подход позволяет автоматизировать рутину бухгалтера без изменения типового кода и сохраняет полную работоспособность обновлений 1С.
Разработчики фирмы «1С» со временем отреагировали на пожелания пользователей и вернули гибкие механизмы настройки НДС без необходимости доработки кода. Если вы работаете на актуальном релизе программы (начиная с релиза 3.0.130 и выше), вам доступны следующие инструменты.
В программу был возвращен функционал, аналогичный поведению версии 2.0. Каждый пользователь может задать для себя индивидуальную «ходовую» ставку НДС.
Выясним, где находится эта настройка и как ее активировать:
На что влияет эта настройка: данное значение будет подставляться автоматически при создании элементов справочника «Номенклатура», а также использоваться по умолчанию в регламентных операциях и банковских документах, если система не сможет вычислить ставку на основе более приоритетных правил (например, из текста платежного поручения).
Начиная с релиза 3.0.89, у пользователей появилась возможность точечной настройки НДС под конкретного контрагента и сделку. Это позволяет избавиться от ошибок, когда с разными контрагентами ведутся расчеты по разным ставкам НДС.
Рассмотрим, как настроить автозаполнение в карточке договора:
Проанализируем итоговую последовательность, по которой система принимает решение о выборе ставки НДС при загрузке банковских выписок в актуальных релизах:
Используя предложенные штатные настройки или механизмы расширения конфигурации, вы сможете полностью автоматизировать процесс заполнения НДС в банковских документах, минимизировать ручной труд и избежать досадных ошибок при формировании книги покупок и продаж.