К статье
Практический материал

Разработка и Конфигурация · 8 мин

Как в запросе 1С получить ставку НДС

Как получить ставку НДС в запросе 1С: перечисление СтавкиНДС, регистр сведений, выбор по периоду и виду ставки. Примеры запросов, проверка результата и типичные ошибки.

Ставка НДС в типовых конфигурациях 1С хранится по-разному в зависимости от версии: в старших релизах это перечисление Перечисления.СтавкиНДС, а в современных решениях (БП 3.0, УТ 11, ERP) ставка часто представлена справочником Справочники.СтавкиНДС с реквизитами «ПеречислениеСтавкаНДС» и «Ставка». Поэтому первый шаг — определить, какой объект метаданных используется в вашей конфигурации.

Получить ставку НДС в запросе можно тремя основными способами: обратиться к перечислению напрямую, соединиться со справочником ставок либо извлечь данные из табличной части документа, где ставка уже указана. Ниже разобраны все варианты с примерами кода, условиями выбора и проверкой результата.

Определяем, где хранится ставка НДС в вашей конфигурации

Перед написанием запроса откройте конфигуратор и проверьте дерево метаданных. Если в разделе «Справочники» есть объект СтавкиНДС — конфигурация использует справочную модель. Если такого справочника нет, ставка задаётся перечислением СтавкиНДС с предопределёнными значениями вида НДС20, НДС10, БезНДС.

Различие принципиально: перечисление нельзя расширять и у него нет числового значения ставки — только ссылка на предопределённый элемент. Справочник, напротив, содержит реквизит Ставка (число 20, 10, 0) и позволяет добавлять новые элементы, например расчётные ставки 20/120 и 10/110.

Есть справочник СтавкиНДССправочная модель

Используйте Справочник.СтавкиНДС и реквизит Ставка

Справочника нетПеречисление

Используйте ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)

Нужна ставка из документаТабличная часть

Соединяйтесь с табличной частью документа по ссылке

Получение ставки через перечисление СтавкиНДС

Если конфигурация использует перечисление, ссылку на конкретную ставку получают через функцию ЗНАЧЕНИЕ() прямо в тексте запроса. Это удобно для отбора документов по конкретной ставке или для подстановки ставки в временную таблицу.

ВЫБРАТЬ

РеализацияТовары.Номенклатура КАК Номенклатура,

РеализацияТовары.СтавкаНДС КАК СтавкаНДС,

РеализацияТовары.СуммаНДС КАК СуммаНДС

ИЗ

Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары

ГДЕ

РеализацияТовары.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)

И РеализацияТовары.Ссылка = &Ссылка

Ограничение этого подхода: перечисление не даёт числового значения ставки. Если нужно число 20 для расчёта, придётся использовать конструкцию ВЫБОР КОГДА ... ТОГДА 20 либо получать представление и преобразовывать его в коде вне запроса.

Получение числовой ставки из справочника СтавкиНДС

В конфигурациях со справочной моделью числовое значение ставки хранится в реквизите Ставка. Запрос к справочнику возвращает и ссылку на элемент, и число, которое можно использовать в арифметических выражениях — например, для пересчёта суммы НДС.

ВЫБРАТЬ

СтавкиНДС.Ссылка КАК СтавкаНДС,

СтавкиНДС.Ставка КАК Ставка,

СтавкиНДС.ПеречислениеСтавкаНДС КАК ПеречислениеСтавкаНДС

ИЗ

Справочник.СтавкиНДС КАК СтавкиНДС

ГДЕ

НЕ СтавкиНДС.ПометкаУдаления

Обратите внимание на реквизит ПеречислениеСтавкаНДС: он связывает элемент справочника с перечислением и нужен для совместимости с типовыми механизмами. При поиске ставки по числу фильтруйте по реквизиту Ставка, а не по наименованию — наименование может отличаться («20%», «НДС 20%»).

Ставка НДС из табличной части документа

Чаще всего ставка нужна не сама по себе, а вместе с данными документа. В этом случае соединяйтесь с табличной частью и выбирайте поле СтавкаНДС вместе с суммами. Если конфигурация справочная, через точку можно сразу получить числовое значение.

ВЫБРАТЬ

Товары.Номенклатура КАК Номенклатура,

Товары.СтавкаНДС КАК СтавкаНДС,

Товары.СтавкаНДС.Ставка КАК СтавкаЧислом,

Товары.Сумма КАК Сумма,

Товары.СуммаНДС КАК СуммаНДС

ИЗ

Документ.РеализацияТоваровУслуг.Товары КАК Товары

ГДЕ

Товары.Ссылка = &Ссылка

Разыменование СтавкаНДС.Ставка работает только если поле ссылается на справочник. Если это перечисление, попытка обратиться к реквизиту вызовет ошибку компоновки запроса — проверьте тип поля в конфигураторе заранее.

Порядок действий
  1. 1
    Откройте конфигуратор и проверьте наличие справочника СтавкиНДС
  2. 2
    Определите тип поля СтавкаНДС в табличной части нужного документа
  3. 3
    Напишите запрос: для справочника — с разыменованием .Ставка, для перечисления — через ЗНАЧЕНИЕ()
  4. 4
    Выполните запрос в консоли запросов на тестовом документе
  5. 5
    Сверьте числовую ставку и сумму НДС с данными формы документа

Выбор ставки по условию: ВЫБОР и соединения

Когда ставку нужно вычислить по условию — например, подставить 20%, если ставка не заполнена, — используйте конструкцию ВЫБОР. Это типовой приём при формировании отчётов, где пустая ставка должна трактоваться как «БезНДС» или как ставка по умолчанию.

ВЫБОР

КОГДА Товары.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)

ТОГДА 20

КОГДА Товары.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)

ТОГДА 10

ИНАЧЕ 0

КОНЕЦ КАК СтавкаЧислом

Для соединения номенклатуры со ставкой по умолчанию (если ставка задана в карточке товара или в регистре) используйте ЛЕВОЕ СОЕДИНЕНИЕ и обрабатывайте NULL через ЕСТЬNULL. Иначе строки без ставки выпадут из результата или дадут пустое значение в расчётах.

Типичные ошибки
01
Разыменование перечисления через точку — запрос падает с ошибкой, потому что у перечисления нет реквизитов
02
Сравнение ставки со строкой «НДС20» — ссылка никогда не равна строке, отбор не сработает
03
Использование расчётной ставки 20/120 как обычной 20 — сумма НДС завышается
04
Игнорирование NULL при левом соединении — пустые ставки ломают расчёт суммы НДС

Проверка результата и отладка запроса

Проверяйте запрос на реальном документе через консоль запросов: сравните поле «СтавкаНДС» в форме документа с тем, что вернул запрос. Если в результате пусто — убедитесь, что параметр &Ссылка заполнен и документ проведён (для виртуальных таблиц это критично, для табличных частей — нет).

Дополнительный контроль — пересчёт суммы НДС: умножьте базу на полученную числовую ставку и сравните с СуммаНДС документа. Расхождение в копейках допустимо из-за округления, систематическое расхождение означает, что выбрана не та ставка или используется расчётная ставка.

Контрольные точки

Как проверить результат

Тип поля СтавкаНДС
Норма

Справочник.СтавкиНДС или Перечисление.СтавкиНДС

Тревожный признак

Строка или неопределённый тип

Числовое значение ставки
Норма

Совпадает со ставкой в форме документа

Тревожный признак

Пусто, NULL или отличается

СуммаНДС = база × ставка
Норма

Сходится с точностью до округления

Тревожный признак

Систематическое расхождение

FAQ

Как получить ставку НДС по умолчанию для номенклатуры?

Ставка по умолчанию обычно хранится в реквизите справочника «Номенклатура» (например, «ВидСтавкиНДС» или «СтавкаНДС» в зависимости от конфигурации). Соедините таблицу товаров со справочником номенклатуры и выберите этот реквизит, обернув его в ЕСТЬNULL на случай незаполненности.

Можно ли получить ставку НДС без соединения со справочником?

Да, если ставка уже есть в табличной части документа — выберите поле СтавкаНДС напрямую. Для числового значения без соединения используйте конструкцию ВЫБОР с перечислением, но этот способ требует перечисления всех вариантов ставок в тексте запроса.

Почему запрос возвращает пустую ставку, хотя в документе она есть?

Чаще всего причина в незаполненном параметре отбора или в том, что запрос обращается к другой табличной части. Также проверьте, не используется ли левое соединение без ЕСТЬNULL — тогда пустая ставка отображается как NULL.

Как отобрать документы только с необлагаемыми операциями?

Добавьте в условие ГДЕ сравнение со значением БезНДС: для перечисления — Равно ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.БезНДС), для справочника — отбор по реквизиту Ставка = 0 с проверкой признака «Без НДС», так как нулевая ставка и «Без НДС» — разные операции.

Чем отличается ставка 0% от «Без НДС» в запросе?

Это разные элементы: ставка 0% применяется при экспорте и требует подтверждения, а «Без НДС» — необлагаемая операция. В запросе фильтруйте их раздельно, иначе отчёт по НДС сформируется некорректно.

Итог

Что важно запомнить

Сначала определите модель хранения ставки (перечисление или справочник), затем выбирайте способ: ЗНАЧЕНИЕ() для перечисления, реквизит Ставка для числового значения, разыменование в табличной части для документов. Всегда обрабатывайте NULL и отделяйте расчётные ставки от обычных, а результат проверяйте пересчётом суммы НДС.