При регулярном обновлении конфигурации «1С:Бухгалтерия предприятия» многие разработчики сталкиваются с неожиданным поведением: после изменения налогового законодательства и появления новых ставок НДС типовой обмен через универсальный формат EnterpriseData с недоработанной или не обновляемой «1С:Управление торговлей» завершается с ошибками валидации XML. При анализе выясняется, что в используемом пакете XDTO новые ставки отсутствуют. Разберем причины такого поведения платформы и конфигураций, а также рассмотрим технические способы решения возникшей проблемы.
Проанализируем архитектуру универсального формата EnterpriseData и правила версионирования, принятые фирмой «1С»:
enumeration). Механизм платформы ФабрикаXDTO при сериализации и десериализации осуществляет строгую проверку соответствия переданных строк значениям фасета. Если в потоке данных встречается значение, отсутствующее в схеме, платформа выбрасывает исключение валидации. В современных версиях формата EnterpriseData ставки НДС были перенесены из строго типизированного перечисления в структуру справочника, что сняло жесткое ограничение на валидацию.Рассмотрим распространенную ошибку: попытку просто отредактировать состав фасетов в пакете XDTO. Даже если вручную добавить новые значения ставок НДС в пакет схемы, синхронизация данных все равно завершится с ошибкой либо новые ставки будут проигнорированы и очищены при загрузке.
Дело в том, что механизм конвертации универсального формата в Библиотеке стандартных подсистем жестко завязан на программный код общего модуля МенеджерОбменаЧерезУниверсальныйФормат (или отдельных менеджеров конкретных версий формата). Для корректной обработки данных требуется сопоставление сразу на нескольких уровнях:
ЗаполнитьПравилаКонвертацииПредопределенныхДанных.ОпределитьСтавкуНДС_Отправка и соответствующих методах чтения данных при загрузке документов.Таким образом, одной модификации XML-схемы недостаточно — необходима адаптация всей цепочки логики конвертации.
Разберем наиболее надежный и системный способ, который позволяет сохранить конфигурацию «1С:Бухгалтерия предприятия» полностью типовой и находящейся на официальной поддержке без внесения локальных изменений.
Если конфигурация «1С:Управление торговлей» дорабатывается программистами вручную и не обновляется типовым способом, логично адаптировать именно ее. Выполним следующие шаги:
Этот вариант исключает проблемы с будущими типовыми обновлениями базы бухгалтерского учета.
Если внесение масштабных изменений в нетиповую конфигурацию невозможно или нецелесообразно, решим задачу с помощью создания расширения для конфигурации «1С:Бухгалтерия предприятия».
Посмотрим на алгоритм реализации перехвата данных:
МенеджерОбменаЧерезУниверсальныйФормат с использованием аннотаций &Вместо, &После или &ИзменениеИКонтроль.Такой подход сохраняет основную конфигурацию на полной поддержке и гарантирует корректное проведение документов даже при использовании устаревших версий формата обмена.
Проанализируем еще один универсальный механизм формата EnterpriseData. Все объекты, унаследованные от базового типа Object, содержат дополнительное составное свойство AdditionalInfo. Это свойство предназначено разработчиками именно для передачи произвольных структур данных без вмешательства в утвержденную XSD-схему.
Схема реализации следующая:
AdditionalInfo строки документа или объекта, а в основное типизированное поле подставляем допустимое для старой схемы фиктивное значение, проходящее валидацию.ПриПолученииДанных или алгоритмах постобработки) считываем данные из AdditionalInfo и устанавливаем корректный элемент справочника ставок НДС в загруженный документ перед его записью.Данный способ позволяет обойти строгое ограничение фасетов платформы без нарушения структуры типового пакета XDTO.