Как узнать реальную ставку НДС в документе Счет-фактура в 1С

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

При программной обработке документов или анализе данных через отладчик разработчики часто сталкиваются с ситуацией, когда в объекте СчетФактураВыданный реквизит СтавкаНДС в шапке документа содержит фиксированное значение (например, 18%, 20% или 21%), в то время как в первичном документе-основании (например, РеализацияТоваровУслуг) указаны совершенно другие условия — 0% или «Без НДС». При этом итоговые суммы взаиморасчетов и налога рассчитываются корректно. Разберем подробно, почему так происходит и как правильно получить реальную ставку налога.

Причины расхождения ставки НДС в счете-фактуре и основании

Для понимания логики работы конфигураций на платформе 1С (в частности, «Управление торговлей 10.3» и аналогичных решений) проанализируем архитектуру хранения налоговых реквизитов:

  1. Построчный учет НДС: В документах реализации ставка налога привязывается к каждой конкретной строке табличной части (Товары, Услуги). В одном документе могут одновременно находиться позиции с разными ставками: например, льготные товары, позиции со стандартной ставкой и операции без НДС.
  2. Назначение реквизита шапки: Реквизит СтавкаНДС в шапке документа часто является значением по умолчанию для автоподстановки или используется для специализированных операций (например, счетов-фактур на аванс). Автоматическая обратная синхронизация ставки из строк в шапку типовой архитектурой не предусмотрена.
  3. Формирование движений и печатных форм: При проведении документа реализации и связанного счета-фактуры данные для регистров учета и печатных форм берутся непосредственно из строк табличных частей документа-основания, а не из реквизита шапки.

Способ 1. Получение ставок через запрос к табличным частям основания

Самым надежным и архитектурно правильным подходом является извлечение уникальных ставок НДС напрямую из строк документа-основания. Рассмотрим, как это реализовать с помощью запроса с ключевым словом РАЗЛИЧНЫЕ:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	Т.СтавкаНДС КАК СтавкаНДС
    |ИЗ
    |	Документ.РеализацияТоваровУслуг.Товары КАК Т
    |ГДЕ
    |	Т.Ссылка = &ДокументОснование
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	У.СтавкаНДС
    |ИЗ
    |	Документ.РеализацияТоваровУслуг.Услуги КАК У
    |ГДЕ
    |	У.Ссылка = &ДокументОснование";

Запрос.УстановитьПараметр("ДокументОснование", Объект.ДокументОснование);
Выборка = Запрос.Выполнить().Выбрать();

КоличествоСтавок = Выборка.Количество();
Если КоличествоСтавок = 1 Тогда
    Выборка.Следующий();
    РеальнаяСтавка = Выборка.СтавкаНДС; // Тип ПеречислениеСсылка.СтавкиНДС
ИначеЕсли КоличествоСтавок > 1 Тогда
    // В документе присутствуют смешанные ставки НДС
    Пока Выборка.Следующий() Цикл
        // Обработка каждой ставки индивидуально
    КонецЦикла;
Иначе
    // Документ без строк
КонецЕсли;

Обратите внимание: реквизит СтавкаНДС в строках табличной части хранит не числовое значение, а ссылку на элемент перечисления ПеречислениеСсылка.СтавкиНДС (например, Перечисления.СтавкиНДС.НДС21, Перечисления.СтавкиНДС.НДС0, Перечисления.СтавкиНДС.БезНДС). Анализ данных следует выполнять по ссылочным значениям.

Способ 2. Расчет процентной ставки по суммам документа

В случаях быстрой обработки однородных документов, где гарантированно применяется одна ставка и нет смешанных строк, вычисляют процент математически через итоговые реквизиты документа-основания:


Если Объект.ДокументОснование.ВсегоБезНДС <> 0 Тогда
    СтавкаНДСЧислом = Окр(100 * (Объект.ДокументОснование.ВсегоНДС / Объект.ДокументОснование.ВсегоБезНДС), 2);
Иначе
    СтавкаНДСЧислом = 0;
КонецЕсли;

Разберем ограничения данного метода, о которых важно помнить:

  1. Деление на ноль: При операциях без НДС или документах с нулевой суммой база равна нулю, поэтому обязательна предварительная проверка делителя.
  2. Смешанные ставки: Если в документе присутствуют товары со ставками 21% и 0%, расчет выдаст некорректный усредненный процент.
  3. Погрешности округления: Так как НДС в 1С рассчитывается и округляется построчно, на больших объемах позиций деление итоговых сумм может давать дробные отклонения от номинальной ставки.

Способ 3. Получение данных из движений регистра

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

← На главную