С выходом версии 1С:Управление торговлей 11.5 (а также соответствующих версий ERP 2.5 и Комплексной автоматизации 2.5) разработчики и пользователи столкнулись с фундаментальным изменением: объект СтавкиНДС, который многие годы был перечислением, превратился в полноценный справочник. В этой статье мы подробно разберем, чем вызвано такое решение, какие преимущества оно дает и как теперь правильно писать код для работы с налогами.
На первый взгляд изменение кажется избыточным, однако оно решает сразу несколько критических задач развития системы. Рассмотрим их подробнее:
НДС20, программистам приходилось писать громоздкие конструкции или использовать дополнительные функции. В справочнике СтавкиНДС теперь есть явный числовой реквизит Ставка, который можно напрямую использовать в математических формулах.Проанализируем ситуацию с точки зрения методологии учета. Часто пользователи путают эти понятия, но для системы (и для налоговой) это принципиально разные сущности, что теперь наглядно отражено в свойствах элементов справочника:
НДС 0% — это применение налоговой ставки 0. Организация остается плательщиком НДС, подает декларацию и, что самое важное, имеет право на налоговый вычет по входящему НДС. Это характерно для экспортных операций.
Без НДС — это операции, которые вообще не подлежат налогообложению (освобождены по ст. 149 НК РФ или применение УСН). В этом случае входящий НДС нельзя принять к вычету, он должен быть включен в стоимость товаров или списан на расходы.
Благодаря тому, что ставки НДС теперь являются справочником, в системе проще реализовать логику «восстановления» или «распределения» НДС, опираясь на реквизиты конкретного элемента справочника.
Рассмотрим, как изменился подход к написанию кода. Раньше мы обращались к ставкам так: Перечисления.СтавкиНДС.НДС20. Теперь такой подход работать не будет (или будет вести к обращению к устаревшим метаданным). Выясним, как правильно находить нужные значения.
Для сохранения стабильности разработчики 1С создали в справочнике предопределенные элементы. Это позволяет обращаться к ним привычным способом через точку. Рассмотрим пример получения ссылки на ставку 20%:
// Правильное обращение в новых версиях УТ 11.5 / ERP 2.5
СтавкаСсылка = Справочники.СтавкиНДС.НДС20;
// Получение числового значения ставки для расчета суммы
ЧисловаяСтавка = СтавкаСсылка.Ставка; // Вернет 20
СуммаНДС = СуммаБезНДС * (ЧисловаяСтавка / 100);
Часто возникает задача загрузки данных из внешних систем или старых конфигураций, где НДС еще представлен в виде перечисления или текста. Проанализируем пример функции, которая помогает сопоставить текстовое название или значение из перечисления со справочником в УТ 11.5:
&НаСервере
Функция НайтиСтавкуНДСПоНаименованию(ЗначениеСтавки)
// ЗначениеСтавки может быть строкой или значением старого перечисления
Наименование = СокрЛП(Строка(ЗначениеСтавки));
// Используем предопределенные элементы справочника для надежности
Если Найти(Наименование, "20/120") > 0 Тогда
Возврат Справочники.СтавкиНДС.НДС20_120;
ИначеЕсли Найти(Наименование, "20") > 0 Тогда
Возврат Справочники.СтавкиНДС.НДС20;
ИначеЕсли Найти(Наименование, "10/110") > 0 Тогда
Возврат Справочники.СтавкиНДС.НДС10_110;
ИначеЕсли Найти(Наименование, "10") > 0 Тогда
Возврат Справочники.СтавкиНДС.НДС10;
ИначеЕсли Найти(Наименование, "0") > 0 Тогда
Возврат Справочники.СтавкиНДС.НДС0;
ИначеЕсли ВРег(Наименование) = "БЕЗ НДС" Тогда
Возврат Справочники.СтавкиНДС.БезНДС;
КонецЕсли;
// Если ставка не найдена среди стандартных, можно попытаться найти по наименованию
СсылкаНаСтавку = Справочники.СтавкиНДС.НайтиПоНаименованию(Наименование);
Если СсылкаНаСтавку.Пустая() Тогда
ВызватьИсключение "Не удалось определить ставку НДС для значения: " + Наименование;
КонецЕсли;
Возврат СсылкаНаСтавку;
КонецФункции
В типовых решениях 1С (УТ, ERP, КА) для работы со ставками НДС предусмотрены специальные общие модули, такие как СтавкиНДСКлиентСервер. Рекомендуется использовать именно их функции, так как они учитывают логику периодичности и актуальности ставок. Посмотрим на пример вычисления суммы НДС через типовой механизм:
// Пример использования типового функционала для расчета суммы НДС
ДанныеНДС = СтавкиНДСКлиентСервер.ПолучитьПараметрыНДС(СтавкаНДС);
СуммаНДС = СтавкиНДСКлиентСервер.РассчитатьСуммуНДС(СуммаДокумента, ДанныеНДС.Процент, ДанныеНДС.СтавкаНДСВключенаВСуму);
Этот подход является наиболее правильным, так как он скрывает внутреннюю структуру справочника и защищает ваш код от будущих изменений архитектуры 1С.
Перевод СтавкиНДС в справочник — это важный шаг к унификации и повышению гибкости системы. Несмотря на необходимость обновления некоторых пользовательских обработок и запросов, это изменение упрощает жизнь программистам в долгосрочной перспективе, позволяя легко адаптировать систему под любые изменения налогового кодекса. При разработке расширений или интеграций всегда отдавайте предпочтение работе с предопределенными элементами или функциями общих модулей типовой конфигурации.