Как добавить новые ставки НДС 5% и 7% в модуль Диадок для 1С

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

С изменениями в налоговом законодательстве (согласно Федеральному закону от 12.07.2024 № 176-ФЗ), с 2025 года вводятся новые льготные ставки НДС 5% и 7% для налогоплательщиков на УСН. Если вы используете старые или кастомизированные конфигурации 1С, такие как Управление торговлей 10.3, и работаете через модуль Диадок.Про версии ниже 4.47, вы столкнетесь с проблемой: система не позволяет передать новые значения ставок в структуру Content, обнуляя их до Неопределено.

В качестве альтернативы сложным доработкам некоторые пользователи выбирают внешние решения, например, выгрузку УПД в XML (5.03) для УТ 10.3, которая уже поддерживает новые требования. Однако в этой статье мы разберем, как самостоятельно доработать модуль Диадока, чтобы обойти жесткие ограничения старых версий и успешно отправлять документы с новыми ставками, не дожидаясь полного обновления всей системы.

Анализ проблемы: почему ставки «исчезают»

Проанализируем ситуацию: при попытке присвоить значение "5" или "7" атрибуту TaxRate (Налоговая ставка) в объекте Content, значение сбрасывается. Это происходит по двум причинам:

  1. Валидация по XSD-схеме: Внутри модуля Диадока зашиты XML-схемы (XSD), которые жестко описывают допустимые значения (перечисления — enumerations). Если ставки "5%" или "7%" там отсутствуют, парсер или валидатор контента их отклонит. Для лучшего понимания структуры файлов полезно использовать инструменты, такие как конвертация схемы XSD в модель XDTO, что помогает наглядно разобрать составные типы.
  2. Логика преобразования типов: В программном коде модуля часто используются функции-посредники, которые преобразуют перечисления 1С в строковые значения для Диадока. Если в этих функциях нет обработки новых ставок, они возвращают Неопределено.

Рассмотрим пошагово процесс исправления обоих механизмов.

Шаг 1. Модификация XSD-схем в модуле «ГенерацияXML»

Основная часть логики формирования электронного документа сосредоточена во внешних обработках, входящих в состав пакета Диадок. Нам необходимо найти макеты, содержащие определения схем. Чаще всего это обработка ГенерацияXML.epf (или аналогичный модуль внутри основного решения).

Выясним причину ошибки «некорректный тип в фасете перечисления». Для этого найдем в макетах текст схемы, обычно он называется proto_xsd. Разберем, что нужно сделать:

  1. Откроем модуль генерации XML и найдем макет proto_xsd.
  2. Перейдем к описанию типа НалСтТип (или аналогичного, отвечающего за налоговую ставку). Обычно это район 1300–1400 строк.
  3. Добавим новые значения в список допустимых перечислений.

Пример того, как должен выглядеть фрагмент схемы после правки:


<xs:simpleType name="НалСтТип">
    <xs:restriction base="xs:string">
        <xs:enumeration value="0%" />
        <xs:enumeration value="10%" />
        <xs:enumeration value="20%" />
        <xs:enumeration value="5%" /> <!-- Добавляем ставку 5% -->
        <xs:enumeration value="7%" /> <!-- Добавляем ставку 7% -->
        <xs:enumeration value="10/110" />
        <xs:enumeration value="20/120" />
        <xs:enumeration value="5/105" /> <!-- Добавляем расчетную ставку 5% -->
        <xs:enumeration value="7/107" /> <!-- Добавляем расчетную ставку 7% -->
        <xs:enumeration value="без НДС" />
    </xs:restriction>
</xs:simpleType>

Важно: правки нужно внести не только в proto_xsd, но и в специфические схемы для конкретных форматов, если они вынесены в отдельные макеты (например, Schema_УПД_820 или Schema_УПД_970). Согласно приказу ФНС № ЕД-7-26/970@, именно строковое представление с символом процента является легитимным.

Шаг 2. Корректировка программной логики формирования ставок

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

Посмотрим на модуль Модуль_ИнтеграцияУниверсальнаяЛогика.epf (название может варьироваться в зависимости от версии подключаемого модуля). Нас интересует процедура ПолучитьПредставлениеСтавкиНДС.

Разберем пример доработки кода:


Функция ПолучитьПредставлениеСтавкиНДС(ЗначениеСтавки) Экспорт
    
    // Стандартная логика для 18% и 20% уже есть в коде
    Если ЗначениеСтавки = Перечисления.СтавкиНДС.НДС20 Или ЗначениеСтавки = 20 Тогда
        Возврат "20%";
    ИначеЕсли ЗначениеСтавки = Перечисления.СтавкиНДС.НДС10 Или ЗначениеСтавки = 10 Тогда
        Возврат "10%";
    // ДОБАВЛЯЕМ НОВЫЕ СТАВКИ:
    ИначеЕсли Строка(ЗначениеСтавки) = "5" Или ЗначениеСтавки = 5 Тогда
        Возврат "5%";
    ИначеЕсли Строка(ЗначениеСтавки) = "7" Или ЗначениеСтавки = 7 Тогда
        Возврат "7%";
    // Обработка расчетных ставок для авансовых УПД
    ИначеЕсли ЗначениеСтавки = "5/105" Тогда
        Возврат "5/105";
    КонецЕсли;
    
    // ... остальная логика
КонецФункции

Обратите внимание, что в старых конфигурациях типа УТ 10.3 ставки в перечислении СтавкиНДС могут не иметь соответствующих значений "НДС5" и "НДС7". В этом случае вам придется сначала добавить их в метаданные самой конфигурации 1С, а затем прописать их обработку в модуле Диадока.

Однако будьте внимательны: изменение метаданных (добавление новых значений перечислений) может повлиять на обмен данными с бухгалтерией. После таких правок рекомендуется обновить правила конвертации. Для корректной синхронизации используйте актуальные правила обмена (выгрузка) УТ 10.3 - БП 3.0, учитывающие ставки 5% и 7%. Если же вы используете версию КОРП, вам понадобятся соответствующие правила конвертации УТ 10.3 - БП КОРП 3.0.

Шаг 3. Устранение ошибки «Неопределено» в структуре Content

Если после правки схем значение все равно становится Неопределено, значит, срабатывает внутренняя проверка DiadocSDK или объекта Content. В модуле Диадок.Про формирование контента часто идет через создание объекта и установку его свойств.

Проанализируем ситуацию, когда мы заполняем сведения о налогах в строках документа. Ищите в коде место, где вызывается метод заполнения суммы налога, обычно это функция ЗаполнитьСведенияОНалоге. Убедитесь, что передаваемое значение TaxRate соответствует одному из строковых значений, которые мы только что добавили в XSD (например, "5%").

Типичная ошибка: передача числа 5 вместо строки "5%". Модуль Диадока ожидает именно строковый формат, предусмотренный форматом ФНС.

Особенности для УПД и других документов

Рассмотрим подробнее нюансы форматов:

Если вы используете подключаемый модуль (ПМ), проверьте, чтобы версия DiadocSDK.dll была актуальной. Хотя основная логика находится в 1С, компонента может накладывать свои ограничения на строковые значения атрибутов.

Резюме и рекомендации

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

  1. В конфигурации 1С: Добавьте новые значения в перечисление СтавкиНДС (5% и 7%), если их там еще нет.
  2. В макетах Диадока: Найдите все вхождения simpleType name="НалСтТип" в XML-схемах и добавьте туда enumeration для "5%", "7%", "5/105" и "7/107".
  3. В коде обработки: Обновите функцию ПолучитьПредставлениеСтавкиНДС, чтобы она корректно транслировала новые значения из 1С в строковые форматы для XML.

Помните, что любое ручное изменение в коде сторонней обработки затруднит ее последующее обновление. Рекомендуется документировать все внесенные правки, чтобы при переходе на официальную версию 4.47+ вы могли корректно перенести свои доработки или безболезненно заменить их типовым функционалом.

← На главную