При работе с конфигурацией 1С:Управление нашей фирмой (УНФ) 1.6 технические специалисты часто сталкиваются с парадоксальной ситуацией. В карточке номенклатуры визуально выбрана ставка 20%, в документах расчет налога происходит корректно, однако при попытке получить данные через Консоль запросов или программный код, система возвращает значение 18%. Рассмотрим подробно, почему так происходит и как правильно извлекать актуальные данные.
Основная причина такого поведения кроется в архитектурном решении, которое фирма «1С» применила при переходе со ставки НДС 18% на 20% в 2019 году. Чтобы не изменять структуру базы данных и не создавать тысячи новых элементов, был задействован механизм ОбработкаПолученияПредставления в модуле менеджера справочника СтавкиНДС.
Проанализируем ситуацию: в таблице базы данных (SQL или файловой) в поле Наименование у элемента справочника может по-прежнему храниться строка «18%». Однако платформа 1С:Предприятие 8.3 позволяет перехватить вывод этого значения на экран. Если в программном коде модуля менеджера прописано условие, проверяющее текущую дату (если дата > 01.01.2019), система принудительно заменяет текст «18%» на «20%» в интерфейсе. Консоль запросов, обращаясь напрямую к полю Наименование, игнорирует этот программный «слой» и выдает «сырое» значение из базы.
Это классическая ловушка для разработчика. Разберем по шагам, как работает язык запросов в данном контексте:
Номенклатура.СтавкаНДС.Наименование, мы требуем от платформы выдать конкретную строку из физической таблицы.ПРЕДСТАВЛЕНИЕ(Номенклатура.СтавкаНДС), платформа обращается к специальному обработчику в коде.Для решения проблемы в запросе следует использовать именно функцию получения представления. Рассмотрим пример:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Товар,
ПРЕДСТАВЛЕНИЕ(Номенклатура.СтавкаНДС) КАК АктуальнаяСтавка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Ссылка = &Ссылка
Использование функции ПРЕДСТАВЛЕНИЕ заставит систему применить логику из МодуляМенеджера, и вы получите ожидаемые 20%.
В новых версиях УНФ (1.6.16 и выше) была внедрена еще более сложная логика. Ставка НДС теперь жестко завязана на перечисление ВидыСтавокНДС. Выясним причину, почему это важно:
СтавкиНДС есть реквизит (ссылка на перечисление), который определяет категорию ставки (Общая, Пониженная, Без НДС и т.д.).Общая, то типовые механизмы УНФ (например, в модулях Ценообразование или УчетНДС) автоматически считают её равной 20% для всех актуальных периодов.Если ваш запрос используется для расчетов, правильнее анализировать не наименование, а именно Вид ставки. Посмотрим на пример кода, который позволит программно определить реальный процент:
СтавкаСсылка = Выборка.СтавкаНДС;
// Обращаемся к типовому методу УНФ для получения числового значения
ЗначениеСтавки = РаботаСНоменклатурой.ПолучитьСтавкуНДСЧислом(СтавкаСсылка, ТекущаяДата());
Если вы хотите окончательно убедиться в логике подмены, рекомендуем заглянуть в МодульМенеджера справочника СтавкиНДС. Там вы, скорее всего, обнаружите следующий алгоритм:
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Данные.ВидСтавки = Перечисления.ВидыСтавокНДС.Общая Тогда
Если ТекущаяДата() >= ДатаПерехода Тогда
Представление = "20%";
Иначе
Представление = "18%";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот код объясняет, почему в формах документов, таких как Расходная накладная, всё отображается корректно: при выборе номенклатуры платформа вызывает это событие для отрисовки текста в поле.
Если замена Наименования на Представление в запросе не помогла, проанализируем следующие факторы:
/ClearCache.СтавкиНДС кто-то из пользователей вручную не изменил наименование элемента с «20%» на «18%» (или наоборот), создав путаницу между ссылкой и её текстовым описанием.Резюме: При работе с НДС в УНФ 1.6 всегда помните, что визуальное отображение ставки — это результат работы программной логики платформы, а не просто текст из базы данных. Для получения верных значений в отчетах и консоли запросов используйте функцию ПРЕДСТАВЛЕНИЕ(), а для математических расчетов — специализированные функции общих модулей, которые учитывают дату документа и вид ставки НДС.