Как исправить ошибку синхронизации "ЗначениеXDTO = ФабрикаXDTO.Создать" после добавления ставок НДС 5% и 7%?

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

В конце 2024 года и начале 2025 года многие компании столкнулись с необходимостью доработки учетных систем в связи с изменениями в налоговом законодательстве (введение НДС 5% и 7% для упрощенной системы налогообложения). Для пользователей старых конфигураций (таких как "Комплексная автоматизация 1.1", "Управление производственным предприятием 1.3", "Управление торговлей 10.3") это стало серьезным вызовом. Одной из самых частых технических проблем, возникающих после ручного добавления новых ставок НДС, является поломка механизмов синхронизации и обмена данными.

Разберем подробно, почему возникает ошибка ЗначениеXDTO = ФабрикаXDTO.Создать, как устроена валидация данных при обмене и какие шаги необходимо предпринять программисту 1С для корректного решения этой задачи. Мы рассмотрим как "правильный" метод через изменение конфигурации, так и обходные пути для ситуаций, когда изменение метаданных нежелательно.

Суть проблемы: почему ломается обмен?

Давайте проанализируем текст ошибки, с которой столкнулся автор темы. Система сообщает о сбое при выполнении метода ФабрикаXDTO.Создать. Это ключевой момент для понимания происходящего.

Старые механизмы обмена (и "Универсальный обмен данными", использующий правила конвертации, и более новые, использующие формат EnterpriseData) опираются на строго типизированные схемы данных. В платформе 1С эти схемы описываются объектами метаданных, которые называются Пакеты XDTO.

Когда вы добавляете новое значение в перечисление СтавкиНДС (например, "НДС5") в режиме Конфигуратора, вы меняете структуру данных базы. Однако схема обмена (XDTO-пакет), которая служит "контрактом" между базами, остается старой. В этой схеме жестко прописан список разрешенных значений (Enumeration):

  1. НДС18
  2. НДС20
  3. НДС10
  4. НДС0
  5. БезНДС

Значений НДС5 и НДС7 в этом списке нет. Когда механизм выгрузки пытается превратить данные документа в XML-файл, он берет вашу новую ставку "НДС5", обращается к Фабрике XDTO и просит: "Создай мне объект типа СтавкаНДС со значением 'НДС5'". Фабрика сверяется со схемой, не находит там такого варианта и выдает критическую ошибку.

Решение 1: Изменение Пакета XDTO (Рекомендуемый способ)

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

Шаг 1. Поиск нужного пакета

В дереве конфигурации существует множество пакетов XDTO. Нам нужно найти тот, который используется именно в вашем плане обмена. Обычно имя пакета можно найти в модуле плана обмена или обработки, отвечающей за выгрузку. В типовых старых конфигурациях часто используются следующие имена:

Самый простой способ найти нужный пакет — воспользоваться глобальным поиском по конфигурации. Попробуйте найти строку с именем одной из старых ставок, например, "НДС20". Поиск приведет вас либо к модулю, где формируется сообщение, либо прямо в свойства пакета XDTO.

Шаг 2. Редактирование схемы

Найдя нужный пакет в ветке Общие — Пакеты XDTO, откройте его двойным кликом. Перед вами откроется редактор схемы.

  1. В левой части редактора найдите тип данных, отвечающий за ставку НДС. Он может называться СтавкаНДС, VATRate или Rate. Часто этот тип находится в пространстве имен документа или справочника номенклатуры.
  2. Посмотрите на свойства этого типа. Если это перечисление, то в свойствах будет доступен список Варианты значений (Enumeration variants).
  3. Откройте этот список. Вы увидите существующие ставки.
  4. Добавьте новые строки. Критически важно, чтобы строковое значение, которое вы вписываете сюда, в точности совпадало с Синонимом или Именем (в зависимости от логики правил) элемента перечисления в вашей базе. Обычно это НДС5 и НДС7.

Шаг 3. Проверка правил конвертации (для КД 2.0)

Если вы используете правила обмена (файл XML), созданные в "Конвертации данных 2.0", изменения пакета XDTO может быть недостаточно. Необходимо проверить Правила Конвертации Свойств (ПКС) для ставки НДС. Для популярных решений часто применяют готовое правило обмена для УТ10 и БП 3.0 со ставками НДС 22%, 5%, 7%.

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

Решение 2: Использование подписки на событие или модификация правил (Обходной путь)

Иногда менять структуру пакетов XDTO в конфигураторе "страшно" или невозможно (например, база на полной поддержке, хотя для КА 1.1 это редкость). В этом случае можно обмануть механизм обмена, подменяя данные "на лету" перед выгрузкой.

Для этого нам потребуется отредактировать правила обмена (если они внешние) или внести изменения в код модуля менеджера обмена.

Суть метода:

В момент выгрузки документа (событие ПередВыгрузкой или ПриВыгрузке), мы проверяем, какая ставка НДС указана в документе. Если это 5% или 7%, мы заменяем выгружаемое значение на то, которое "знает" схема XDTO (например, "Без НДС" или "0%"), а информацию о реальной ставке пишем в комментарий.

Рассмотрим пример кода, который можно использовать в правилах конвертации (КД 2.0) в обработчике события ПередВыгрузкой для свойства "СтавкаНДС":


// Пример алгоритма для обработчика ПКС "СтавкаНДС"
Если Источник.СтавкаНДС = Перечисления.СтавкиНДС.НДС5 Тогда
    // Подменяем значение на валидное для старой схемы
    Значение = Перечисления.СтавкиНДС.БезНДС; 
    
    // Опционально: можно добавить пометку в комментарий документа-приемника, 
    // но это нужно делать в правиле выгрузки самого документа, а не свойства.
ИначеЕсли Источник.СтавкаНДС = Перечисления.СтавкиНДС.НДС7 Тогда
    Значение = Перечисления.СтавкиНДС.БезНДС;
КонецЕсли;

При таком подходе ошибка ФабрикаXDTO.Создать исчезнет, так как в XML попадет валидное значение "БезНДС". Однако, у этого метода есть существенный недостаток: данные в базе-приемнике будут искажены. Бухгалтеру придется вручную или специальной обработкой восстанавливать правильные ставки в загруженных документах.

Особенности синхронизации через формат EnterpriseData

Если ваша старая "Комплексная автоматизация" обменивается данными с современной "Бухгалтерией предприятия 3.0" через формат EnterpriseData, ситуация немного сложнее.

Форматы EnterpriseData версионируются (например, 1.5, 1.8, 1.10). Старые версии формата физически не поддерживают новые ставки. Даже если вы добавите НДС5 в пакет XDTO старой версии, принимающая сторона (Бухгалтерия) может отказаться принимать такой файл, если она настроена на работу по стандарту.

В этом случае правильным решением будет:

  1. Обновить принимающую базу ("Бухгалтерия предприятия") до самого свежего релиза, где есть поддержка НДС 5% и 7%.
  2. В старой базе (КА) актуализировать пакет XDTO до версии, поддерживающей новые ставки (взять его из новой Бухгалтерии или УТ 11).
  3. Адаптировать модуль обмена данными в КА для работы с новой версией формата EnterpriseData.

Это трудоемкая задача, требующая квалификации программиста уровня Senior.

Рекомендации по безопасности

Прежде чем вносить изменения в пакеты XDTO или правила обмена, выполните следующие действия:

Заключение

Ошибка синхронизации при введении новых ставок НДС в старых конфигурациях 1С — это закономерный результат жесткой структуры форматов обмена. Проблема решается путем расширения списка допустимых значений в пакете XDTO. Главное — соблюдать точность идентификаторов и помнить, что принимающая база также должна быть готова "узнать" новые ставки налога. Для облегчения процесса можно использовать готовое решение, такое как Ставка НДС 22% для конфигурации 1С:Управление торговлей 10.

← На главную