Как исправить ошибку проверки модели XDTO (xdto-objectType-3.2.1) при обновлении конфигурации 1С

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

При обновлении нетиповых или сильно доработанных конфигураций (например, УПП 1.3 или УСО 1.3) администраторы и программисты часто сталкиваются с критической ошибкой: «Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: ... пакет: ... свойства '...' не определен». Эта проблема особенно актуальна для распределенных информационных баз (РИБ), когда в главном узле обновление проходит успешно, а в подчиненном — выдает ошибку. В этой статье мы подробно разберем причины возникновения этой ситуации и рассмотрим пошаговые методы её решения.

Причины возникновения ошибки XDTO

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

  1. Некорректный кэш конфигурации: Платформа 1С хранит временные копии структур метаданных. При обновлении старые данные в кэше могут конфликтовать с новыми описаниями типов.
  2. Ошибки динамического обновления: Использование механизма «Демонического обновления» (обновление конфигурации базы данных без выгона пользователей) часто приводит к рассогласованию таблиц Config и ConfigSave.
  3. Неполная выгрузка данных в РИБ: В распределенных базах файл обновления может сформироваться некорректно на стороне источника из-за того же кэша, в результате чего приемник получает «битую» структуру.
  4. Устаревшая версия платформы: Новые релизы конфигураций часто используют современные пространства имен XML, которые корректно обрабатываются только актуальными версиями платформы (например, переход с 8.2 на 8.3).

Метод 1: Полная очистка кэша на стороне источника и приемника

Как показывает практика, в 90% случаев проблема решается банальной, но правильной очисткой кэша. Если вы работаете в РИБ, крайне важно выполнить эти действия сначала в главном узле, а затем повторить в дочернем. Ускорить этот процесс поможет батник для очистки кэша 1С.

Рассмотрим последовательность действий для локального кэша:

  1. Завершим работу всех сеансов с базой данных.
  2. Перейдем в каталоги временных файлов пользователя:
    • %AppData%\1C\1cv8\
    • %LocalAppData%\1C\1cv8\
  3. Удалим все папки с буквенно-цифровыми именами (например, 25b169...). Для более тонкой работы можно использовать скрипт очистки кэша 1С без стирания настроек пользователей.
  4. Важный момент: Если база клиент-серверная, необходимо также очистить серверный кэш. Для этого остановим службу Агент сервера 1С:Предприятия и удалим содержимое папок snccntx и reg_1541 (за исключением логов) в каталоге установки сервера. Также возможна автоматическая очистка серверного кэша 1С скриптом.

После очистки кэша в главном узле необходимо заново запустить конфигуратор, внести любое мелкое изменение (например, добавить пробел в комментарии общего модуля), сохранить конфигурацию и выполнить повторную выгрузку обмена для дочернего узла.

Метод 2: Исправление проблемных XDTO-пакетов (на примере ЕГАИС)

Иногда ошибка прямо указывает на конкретное свойство, например alcPercentMax или СправкаБ. Часто это связано с пакетами интеграции с государственными системами (ЕГАИС, Маркировка). Если ваше предприятие не использует данный функционал, мы можем рассмотреть радикальный, но эффективный метод — удаление проблемного пакета.

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

  1. Откроем Конфигуратор и перейдем в ветку Общие -> XDTO-пакеты.
  2. Найдем пакет, указанный в ошибке.
  3. Выгрузим его в файл XML (на случай, если придется возвращать).
  4. Удалим пакет из конфигурации.
  5. Выполним обновление конфигурации базы данных.

Внимание: Если пакет используется в коде, система выдаст список ссылок. В этом случае удалять пакет нельзя, нужно выполнить его «перезагрузку». Выгрузите пакет в файл, удалите его, сохраните конфигурацию, а затем загрузите обратно из сохраненного XML-файла. Это заставит платформу пересчитать внутренние индексы свойств.

Метод 3: Ручная корректировка схемы XSD

Если вы столкнулись с ошибкой в пакетах EGCommon или подобных, можно попробовать импортировать исправленную схему вручную. Посмотрим на пример структуры схемы, которую можно использовать для исправления ошибок со временем в датах:


<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="DateNoTime">
    <xs:restriction base="xs:date"/>
  </xs:simpleType>
  <xs:simpleType name="DateTimeWithZone">
    <xs:restriction base="xs:dateTime"/>
  </xs:simpleType>
</xs:schema>

Сохраните необходимую схему в файл с расширением .xsd и воспользуйтесь функцией Импорт схемы XDTO в контекстном меню ветки XDTO-пакетов. Это обновит описание типов и может снять блокирующую ошибку при обновлении метаданных.

Метод 4: Использование полного файла конфигурации (.cf) вместо файла обновления (.cfu)

При последовательном обновлении через .cfu файлы метаданные накапливают изменения. Если в одном из промежуточных этапов произошел сбой, последующие обновления будут выдавать ошибку XDTO. Разберем, как это обойти:

  1. Найдем «эталонную» базу того же релиза, на который мы хотим обновиться (успешно обновленный главный узел или чистая демо-база).
  2. В эталонной базе выполним Конфигурация -> Выгрузить конфигурацию в файл... (получим файл .cf).
  3. В проблемной базе перейдем в Конфигурация -> Загрузить конфигурацию из файла....

Важно: Метод Загрузить конфигурацию полностью заменяет структуру метаданных, в отличие от Сравнить/Объединить. Это наиболее надежный способ устранить любые логические нестыковки в XDTO-моделях, так как пакеты переписываются целиком из гарантированно рабочего источника.

Метод 5: Работа с РИБ и отвязка узла

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

  1. Сделаем резервную копию дочернего узла.
  2. Запустим дочерний узел с параметром /ResetMasterNode (отвязка от главного узла). Это стандартный способ, если нужно отвязать базу от РИБ для исправления структуры.
  3. В конфигураторе выполним Загрузить конфигурацию из файла (.cf), взятого из главного узла.
  4. Обновим конфигурацию базы данных (клавиша F7).
  5. Восстановим связь с главным узлом через код в обработке: ПланыОбмена.УстановитьГлавныйУзел(СсылкаНаГлавныйУзел);

Этот метод гарантирует, что структура метаданных дочернего узла станет идентична главному, и ошибки XDTO исчезнут.

Дополнительные рекомендации

Рассмотрим еще несколько важных моментов, которые помогут избежать подобных проблем в будущем:

Таким образом, мы выяснили, что ошибка проверки XDTO чаще всего является следствием накопленных «мусорных» данных в кэше или результатом некорректного наложения обновлений в распределенных базах. Последовательное применение описанных шагов позволит вам успешно завершить обновление даже в самых сложных случаях.

← На главную