Почему в 1С:УНФ запрос к номенклатуре возвращает ставку НДС 18% вместо 20%?

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

При работе с конфигурацией 1С:Управление нашей фирмой (УНФ) 1.6 технические специалисты часто сталкиваются с парадоксальной ситуацией. В карточке номенклатуры визуально выбрана ставка 20%, в документах расчет налога происходит корректно, однако при попытке получить данные через Консоль запросов или программный код, система возвращает значение 18%. Рассмотрим подробно, почему так происходит и как правильно извлекать актуальные данные.

Анализ причины: механизм подмены представления

Основная причина такого поведения кроется в архитектурном решении, которое фирма «1С» применила при переходе со ставки НДС 18% на 20% в 2019 году. Чтобы не изменять структуру базы данных и не создавать тысячи новых элементов, был задействован механизм ОбработкаПолученияПредставления в модуле менеджера справочника СтавкиНДС.

Проанализируем ситуацию: в таблице базы данных (SQL или файловой) в поле Наименование у элемента справочника может по-прежнему храниться строка «18%». Однако платформа 1С:Предприятие 8.3 позволяет перехватить вывод этого значения на экран. Если в программном коде модуля менеджера прописано условие, проверяющее текущую дату (если дата > 01.01.2019), система принудительно заменяет текст «18%» на «20%» в интерфейсе. Консоль запросов, обращаясь напрямую к полю Наименование, игнорирует этот программный «слой» и выдает «сырое» значение из базы.

Различие между Наименованием и Представлением в запросах

Это классическая ловушка для разработчика. Разберем по шагам, как работает язык запросов в данном контексте:

  1. Когда мы пишем Номенклатура.СтавкаНДС.Наименование, мы требуем от платформы выдать конкретную строку из физической таблицы.
  2. Когда мы используем функцию ПРЕДСТАВЛЕНИЕ(Номенклатура.СтавкаНДС), платформа обращается к специальному обработчику в коде.

Для решения проблемы в запросе следует использовать именно функцию получения представления. Рассмотрим пример:


ВЫБРАТЬ
    Номенклатура.Ссылка КАК Товар,
    ПРЕДСТАВЛЕНИЕ(Номенклатура.СтавкаНДС) КАК АктуальнаяСтавка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Ссылка = &Ссылка

Использование функции ПРЕДСТАВЛЕНИЕ заставит систему применить логику из МодуляМенеджера, и вы получите ожидаемые 20%.

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

В новых версиях УНФ (1.6.16 и выше) была внедрена еще более сложная логика. Ставка НДС теперь жестко завязана на перечисление ВидыСтавокНДС. Выясним причину, почему это важно:

Если ваш запрос используется для расчетов, правильнее анализировать не наименование, а именно Вид ставки. Посмотрим на пример кода, который позволит программно определить реальный процент:


СтавкаСсылка = Выборка.СтавкаНДС;
// Обращаемся к типовому методу УНФ для получения числового значения
ЗначениеСтавки = РаботаСНоменклатурой.ПолучитьСтавкуНДСЧислом(СтавкаСсылка, ТекущаяДата());

Проверка программного кода модуля менеджера

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


Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Если Данные.ВидСтавки = Перечисления.ВидыСтавокНДС.Общая Тогда
        Если ТекущаяДата() >= ДатаПерехода Тогда
            Представление = "20%";
        Иначе
            Представление = "18%";
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Этот код объясняет, почему в формах документов, таких как Расходная накладная, всё отображается корректно: при выборе номенклатуры платформа вызывает это событие для отрисовки текста в поле.

Дополнительные рекомендации по диагностике

Если замена Наименования на Представление в запросе не помогла, проанализируем следующие факторы:

  1. Кэш метаданных: Иногда после обновления конфигурации локальный кэш пользователя хранит старые структуры. Попробуйте очистить кэш или запустить базу с параметром /ClearCache.
  2. Настройки пользователя: Проверьте «Мои настройки». В УНФ есть возможность задать основную ставку НДС для подстановки. Если там выбрано старое значение, оно может влиять на заполнение документов, но не на данные в самой карточке.
  3. Ручное редактирование наименований: Убедитесь, что в справочнике СтавкиНДС кто-то из пользователей вручную не изменил наименование элемента с «20%» на «18%» (или наоборот), создав путаницу между ссылкой и её текстовым описанием.

Резюме: При работе с НДС в УНФ 1.6 всегда помните, что визуальное отображение ставки — это результат работы программной логики платформы, а не просто текст из базы данных. Для получения верных значений в отчетах и консоли запросов используйте функцию ПРЕДСТАВЛЕНИЕ(), а для математических расчетов — специализированные функции общих модулей, которые учитывают дату документа и вид ставки НДС.

← На главную