Ошибка проверки данных XDTO в 1С: причины и решение

Дата: 10.10.2026 09:10:24
XDTO
EnterpriseData
Обмен данными
Синхронизация данных
БСП
Ошибки 1С
Комментарий:
0
Платформа:
8.3
Конфигурация:
Любая
Формы:
Любые

«Ошибка проверки данных XDTO» — ошибка 1С, которую платформа выдаёт, когда данные не подходят под схему: XDTO-пакет конфигурации, формат обмена EnterpriseData или WSDL веб-сервиса. Не заполнено обязательное свойство, строка длиннее разрешённого, значения нет в перечислении — и объект не уходит в другую базу. Разберём, как по тексту дойти до свойства и фасета, как найти объект в синхронизации и как проверить объект XDTO заранее. Основы фабрики и пакетов — в статье XDTO 1С: что это.

Где появляется ошибка

Данные XDTO 1С сверяет со схемой при чтении XML и при явном вызове Проверить(). Типичные места:

  • Синхронизация через EnterpriseData между БП, УТ, КА и другими конфигурациями на БСП. При отправке БСП проверяет каждый объект формата перед записью в сообщение, при получении читает сообщение по той же схеме.
  • Веб-сервисы: запрос или ответ WSПрокси расходится с WSDL.
  • Свои выгрузки: ОбъектXDTO.Проверить(), ФабрикаXDTO.ПрочитатьXML().

В 1С 8.3 ошибка XDTO называет не реквизит базы, а свойство и тип схемы. Сопоставить их — первый шаг.

Как читать «Ошибка проверки данных XDTO»

Текст многострочный: объект, цепочка свойств, в конце нарушение. Шаблоны строк взяты из ресурсов платформы 8.3.27, многоточия — места подстановки.

Строка в текстеЧто из неё взять
Структура объекта '…' не соответствует типу: {URI}ИмяПуть внутри сообщения и тип схемы. URI — пакет и версия формата, например http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.8
Проверка свойства '…': и строки «форма», «имя», «тип»Какое свойство не прошло. Блоков бывает несколько: от внешнего свойства к вложенному
Значение: '…' не соответствует простому типу: …Значение в кавычках и тип, под который оно не подошло

Последняя строка — само нарушение, варианты собраны в таблице причин ниже. Схематично так выглядит сообщение о длинном ИНН: в пакете EnterpriseData 1.8 у ИНН в ключевых свойствах контрагента maxLength = 12, у КПП — 9.

Ошибка проверки данных XDTO:
Структура объекта '/КлючевыеСвойства' не соответствует типу: {http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.8}КлючевыеСвойстваКонтрагент
Проверка свойства 'ИНН':
	форма: Элемент
	имя: ИНН
	тип: …
Значение: '7701234567890' не соответствует простому типу: …
Несоответствие фасету … = '12'

Читайте снизу вверх: нарушение, свойство, объект. Тип из фигурных скобок найдите в конфигураторе: Общие → XDTO-пакеты, пакет с этим пространством имён (в УТ 11.4 — EnterpriseData_1_8_6, EnterpriseData_1_10_3 и другие версии). В свойствах типа видны ограничения.

«Ошибка преобразования данных XDTO» — другая ошибка: XML не читается в тип из-за имени элемента, порядка или пространства имён. «Несоответствие типов XDTO» обычно значит, что в свойство передали значение не того вида.

Типовые причины

Нарушение в текстеПричинаЧто делать
Отсутствует обязательное свойствоПустое обязательное свойство. В EnterpriseData 1.8 у номенклатуры обязательна единица измерения, у контрагента — «ЮридическоеФизическоеЛицо»Заполнить реквизит. Если пусто законно — подставить значение в обработчике: типовой обработчик номенклатуры в УТ 11.4 подставляет «шт» (код 796)
Несоответствие фасету … = '…'Строка длиннее предела. В EnterpriseData 1.8 пределы стоят в основном на кодах: ИНН — 12, КПП — 9, ОКПО — 10Коды исправить в базе, текст в своих интеграциях обрезать по maxLength
Значение не соответствует значениям фасета перечисленияЗначения нет в списке допустимыхПроверить правило конвертации перечисления и версию формата
Значение не соответствует образцуНе подходит под шаблон (pattern)Привести значение к шаблону
Значение: '…' не соответствует простому типу — с dateTime, decimal или booleanДата или число переданы строкой не в том видеПрисваивать Дату и Число или брать XMLСтрока()
Количество значений свойства (0) меньше заданного в модели (1)Пустой список, где нужен хотя бы один элементДозаполнить объект или не выгружать его
Свойство не может содержать неопределенное значениеНеопределено в свойстве без признака nillableЗаполнить свойство или не устанавливать его

Как найти проблемный объект при обмене EnterpriseData

Отправка: предупреждения синхронизации

БСП записывает проблему каждого объекта в регистр предупреждений. В УТ 11.4: НСИ и администрирование → Администрирование → Синхронизация данных, ссылка «Предупреждения при синхронизации данных». В списке есть колонки «Объект», «Описание», «Тип» и команды «Открыть объект», «Журнал регистрации в указанное время». Ошибкам XDTO соответствуют два типа:

  • «Ошибка проверки сконвертированного объекта» — объект собран, но не прошёл схему. В описании дерево свойств с пометками «не заполнено обязательное поле» или «значение поля не соответствует заданным ограничениям».
  • «Ошибка выполнения кода обработчиков при отправке данных» — исключение при конвертации: ошибка в обработчике или значение, которое не удалось превратить в тип формата. Текст платформы идёт после строк «Направление», «ПОД», «ПКО», «Объект».

Описание первого типа строится по шаблону БСП:

Не удалось выполнить конвертацию в объект формата "Справочник.Контрагенты":
Справочник.Контрагенты
  КлючевыеСвойства
    ЮридическоеФизическоеЛицо: не заполнено обязательное поле.

Дополнительная информация:
Направление: Отправка.
ПОД: …
ПКО: Справочник_Контрагенты.
Объект: … (e1cib/data/Справочник.Контрагенты?ref=…).

Подробнее см. в журнале регистрации.

В строке «Объект» — представление и навигационная ссылка на элемент. Такая ошибка завершает отправку со статусом ошибки. В режиме пропуска объектов с ошибками проверки по схеме обмен завершается с предупреждениями, а невыгруженные объекты снова регистрируются к отправке. Для узла режим включает ОбменДаннымиXDTOСервер.ПропускатьОбъектыСОшибкамиПроверкиПоСхеме(Узел, Истина).

Журнал регистрации и получение данных

Полный текст платформы пишется в журнал регистрации: имена событий начинаются с «Обмен данными», уровень «Ошибка», при включённом пропуске — «Предупреждение». При отправке БСП кладёт ссылку на объект в поле «Данные». Где журнал в разных конфигурациях — в статье где в 1С журнал регистрации.

При получении ошибка чтения прерывает загрузку сообщения на проблемном объекте. Если объект прочитан, но упал в обработчике, в строке «Объект» будут тип формата и ключевые свойства: наименование, код, номер, дата. По ним объект ищут и исправляют в базе-отправителе.

Код: выборка предупреждений и журнала

Когда предупреждений сотни, их удобнее выгрузить кодом. Функции серверные, нужны права на регистр и журнал. Запрос можно отладить в консоли запросов.

// Поиск объектов с ошибками XDTO в синхронизации (БСП, обмен через EnterpriseData).
// Серверный код; нужны права на регистр предупреждений и журнал регистрации.

// Предупреждения, записанные при отправке. Узел = Неопределено - по всем синхронизациям.
Функция ПредупрежденияXDTOПриОтправке(Узел = Неопределено, НачалоПериода = '00010101') Экспорт

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Предупреждения.ДатаВозникновения КАК ДатаВозникновения,
	|	Предупреждения.УзелИнформационнойБазы КАК Узел,
	|	Предупреждения.ПроблемныйОбъект КАК Объект,
	|	Предупреждения.ТипПроблемы КАК ТипПроблемы,
	|	Предупреждения.Причина КАК Причина
	|ИЗ
	|	РегистрСведений.РезультатыОбменаДанными КАК Предупреждения
	|ГДЕ
	|	Предупреждения.ТипПроблемы В (&ТипыПроблем)
	|	И НЕ Предупреждения.Пропущена
	|	И Предупреждения.ДатаВозникновения >= &НачалоПериода
	|	И (&ВсеУзлы ИЛИ Предупреждения.УзелИнформационнойБазы = &Узел)
	|
	|УПОРЯДОЧИТЬ ПО
	|	ДатаВозникновения УБЫВ";

	ОшибкаОбработчика = Перечисления.ТипыПроблемОбменаДанными.ОшибкаВыполненияКодаОбработчиковПриОтправкеДанных;
	ТипыПроблем = Новый Массив;
	ТипыПроблем.Добавить(Перечисления.ТипыПроблемОбменаДанными.ОшибкаПроверкиСконвертированногоОбъекта);
	ТипыПроблем.Добавить(ОшибкаОбработчика);
	Запрос.УстановитьПараметр("ТипыПроблем", ТипыПроблем);
	Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
	Запрос.УстановитьПараметр("ВсеУзлы", Узел = Неопределено);
	Запрос.УстановитьПараметр("Узел", Узел);
	ТаблицаПредупреждений = Запрос.Выполнить().Выгрузить();

	// Ошибка обработчика может быть любой: из них оставляем только те, где есть XDTO.
	Результат = ТаблицаПредупреждений.СкопироватьКолонки();
	Для Каждого СтрокаПредупреждения Из ТаблицаПредупреждений Цикл
		Если СтрокаПредупреждения.ТипПроблемы <> ОшибкаОбработчика
			Или СтрНайти(СтрокаПредупреждения.Причина, "XDTO") > 0 Тогда
			ЗаполнитьЗначенияСвойств(Результат.Добавить(), СтрокаПредупреждения);
		КонецЕсли;
	КонецЦикла;

	Возврат Результат;

КонецФункции

// Записи журнала регистрации об ошибках XDTO в обмене: и отправка, и получение.
// В колонке Данные при отправке БСП оставляет ссылку на проблемный объект.
Функция ОшибкиXDTOВЖурналеОбмена(НачалоПериода, КонецПериода) Экспорт

	Уровни = Новый Массив;
	Уровни.Добавить(УровеньЖурналаРегистрации.Ошибка);
	Уровни.Добавить(УровеньЖурналаРегистрации.Предупреждение);
	Отбор = Новый Структура("ДатаНачала, ДатаОкончания, Уровень", НачалоПериода, КонецПериода, Уровни);

	Записи = Новый ТаблицаЗначений;
	ВыгрузитьЖурналРегистрации(Записи, Отбор, "Дата, Событие, Уровень, Данные, Комментарий");

	Результат = Записи.СкопироватьКолонки();
	Для Каждого Запись Из Записи Цикл
		// Имя события содержит план обмена и действие, поэтому сравниваем начало строки.
		Если СтрНачинаетсяС(Запись.Событие, "Обмен данными")
			И СтрНайти(Запись.Комментарий, "XDTO") > 0 Тогда
			ЗаполнитьЗначенияСвойств(Результат.Добавить(), Запись);
		КонецЕсли;
	КонецЦикла;

	Возврат Результат;

КонецФункции

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

Проверка объекта XDTO до записи

В своих интеграциях объект лучше проверить до отправки. Функция вызывает проверку платформы, а если та упала, обходит объект и возвращает строки вида «Заказ/Клиент/ИНН = "7701234567890": длина 13, по схеме не больше 12». Код серверный.

// Проверка объекта XDTO по схеме с понятным списком нарушений.
// Серверный код: общий модуль (флаг «Сервер») или модуль объекта обработки.
// ОбработкаОшибок - с 8.3.17; на старых платформах - глобальная КраткоеПредставлениеОшибки().

// Возвращает массив строк «путь: что не так». Пустой массив - объект прошёл проверку.
Функция ОшибкиПроверкиXDTO(ОбъектXDTO) Экспорт

	Ошибки = Новый Массив;
	Попытка
		ОбъектXDTO.Проверить();
	Исключение
		ТекстПлатформы = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
		СобратьНарушенияXDTO(ОбъектXDTO, ОбъектXDTO.Тип().Имя, Ошибки);
		// Обход не нашёл причину (например, нарушен порядок свойств) - отдаём текст платформы.
		Если Ошибки.Количество() = 0 Тогда
			Ошибки.Добавить(ТекстПлатформы);
		КонецЕсли;
	КонецПопытки;

	Возврат Ошибки;

КонецФункции

Процедура СобратьНарушенияXDTO(ОбъектXDTO, Путь, Ошибки)

	Для Каждого Свойство Из ОбъектXDTO.Свойства() Цикл

		ПутьСвойства = Путь + "/" + Свойство.Имя;

		Если Свойство.ВерхняяГраница = 1 Тогда
			Если ОбъектXDTO.Установлено(Свойство) Тогда
				ПроверитьЭлементXDTO(ОбъектXDTO.ПолучитьXDTO(Свойство), Свойство, ПутьСвойства, Ошибки);
			ИначеЕсли Свойство.НижняяГраница > 0 Тогда
				Ошибки.Добавить(ПутьСвойства + ": обязательное свойство не заполнено");
			КонецЕсли;
			Продолжить;
		КонецЕсли;

		// Списковое свойство: верхняя граница больше 1 или -1 (без ограничения).
		Список = ОбъектXDTO.ПолучитьСписок(Свойство);
		Количество = ?(Список = Неопределено, 0, Список.Количество());
		Если Количество < Свойство.НижняяГраница Тогда
			Ошибки.Добавить(СтрШаблон("%1: элементов %2, по схеме нужно не меньше %3",
				ПутьСвойства, XMLСтрока(Количество), XMLСтрока(Свойство.НижняяГраница)));
		КонецЕсли;
		Если Свойство.ВерхняяГраница > 0 И Количество > Свойство.ВерхняяГраница Тогда
			Ошибки.Добавить(СтрШаблон("%1: элементов %2, по схеме не больше %3",
				ПутьСвойства, XMLСтрока(Количество), XMLСтрока(Свойство.ВерхняяГраница)));
		КонецЕсли;
		Для Индекс = 0 По Количество - 1 Цикл
			ПроверитьЭлементXDTO(Список.ПолучитьXDTO(Индекс), Свойство,
				ПутьСвойства + "[" + XMLСтрока(Индекс + 1) + "]", Ошибки);
		КонецЦикла;

	КонецЦикла;

КонецПроцедуры

Процедура ПроверитьЭлементXDTO(Элемент, Свойство, Путь, Ошибки)

	Если Элемент = Неопределено Тогда
		Если Не Свойство.ВозможноПустое Тогда
			Ошибки.Добавить(Путь + ": пустое значение (nil), а схема его не допускает");
		КонецЕсли;
	ИначеЕсли ТипЗнч(Элемент) = Тип("ОбъектXDTO") Тогда
		СобратьНарушенияXDTO(Элемент, Путь, Ошибки);
	ИначеЕсли ТипЗнч(Элемент) = Тип("ЗначениеXDTO") Тогда
		Нарушение = НарушениеОграниченийXDTO(Элемент.ЛексическоеЗначение, Свойство.Тип);
		Если Не ПустаяСтрока(Нарушение) Тогда
			Ошибки.Добавить(СтрШаблон("%1 = ""%2"": %3", Путь, Лев(Элемент.ЛексическоеЗначение, 100), Нарушение));
		КонецЕсли;
	КонецЕсли;

КонецПроцедуры

// Описание нарушенного ограничения или пустая строка, если значение подходит под тип.
Функция НарушениеОграниченийXDTO(ЛексическоеЗначение, ТипЗначения)

	Если ТипЗнч(ТипЗначения) <> Тип("ТипЗначенияXDTO") Тогда
		Возврат "";
	КонецЕсли;
	Попытка
		ТипЗначения.Проверить(ЛексическоеЗначение);
		Возврат "";
	Исключение
		ТекстПлатформы = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
	КонецПопытки;

	Длина = СтрДлина(ЛексическоеЗначение);
	Ограничение = ЗначенияФасетаXDTO(ТипЗначения, ВидФасетаXDTO.МаксДлина);
	Если Ограничение.Количество() > 0 И Длина > Число(Ограничение[0]) Тогда
		Возврат СтрШаблон("длина %1, по схеме не больше %2", XMLСтрока(Длина), Ограничение[0]);
	КонецЕсли;
	Ограничение = ЗначенияФасетаXDTO(ТипЗначения, ВидФасетаXDTO.МинДлина);
	Если Ограничение.Количество() > 0 И Длина < Число(Ограничение[0]) Тогда
		Возврат СтрШаблон("длина %1, по схеме не меньше %2", XMLСтрока(Длина), Ограничение[0]);
	КонецЕсли;
	Ограничение = ЗначенияФасетаXDTO(ТипЗначения, ВидФасетаXDTO.Длина);
	Если Ограничение.Количество() > 0 И Длина <> Число(Ограничение[0]) Тогда
		Возврат СтрШаблон("длина %1, по схеме ровно %2", XMLСтрока(Длина), Ограничение[0]);
	КонецЕсли;
	Ограничение = ЗначенияФасетаXDTO(ТипЗначения, ВидФасетаXDTO.Перечисление);
	Если Ограничение.Количество() > 0 И Ограничение.Найти(ЛексическоеЗначение) = Неопределено Тогда
		Возврат "значения нет в перечислении: " + СтрСоединить(Ограничение, ", ");
	КонецЕсли;
	Ограничение = ЗначенияФасетаXDTO(ТипЗначения, ВидФасетаXDTO.Образец);
	Если Ограничение.Количество() > 0 Тогда
		Возврат "не подходит под шаблон " + Ограничение[0];
	КонецЕсли;

	// Остальное - вид даты, числа, булева или разрядность числа: нужен текст платформы.
	Возврат ТекстПлатформы;

КонецФункции

// Значения фасета заданного вида. Ограничение может быть объявлено у базового типа,
// поэтому поднимаемся по цепочке, пока не дойдём до встроенного типа XML Schema.
Функция ЗначенияФасетаXDTO(ТипЗначения, ВидФасета) Экспорт

	Значения = Новый Массив;
	ТекущийТип = ТипЗначения;
	Пока ТипЗнч(ТекущийТип) = Тип("ТипЗначенияXDTO")
		И ТекущийТип.URIПространстваИмен <> "http://www.w3.org/2001/XMLSchema" Цикл
		Если ТекущийТип.Фасеты <> Неопределено Тогда
			Для Каждого ТекущийФасет Из ТекущийТип.Фасеты Цикл
				Если ТекущийФасет.Вид = ВидФасета Тогда
					Значения.Добавить(ТекущийФасет.Значение);
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		Если Значения.Количество() > 0 Тогда
			Прервать;
		КонецЕсли;
		ТекущийТип = ТекущийТип.БазовыйТип;
	КонецЦикла;

	Возврат Значения;

КонецФункции

// Пример вызова: своя выгрузка проверяет объект перед записью в XML.
Процедура ЗаписатьОбъектXDTOСПроверкой(ЗаписьXML, ОбъектXDTO) Экспорт

	Ошибки = ОшибкиПроверкиXDTO(ОбъектXDTO);
	Если Ошибки.Количество() > 0 Тогда
		ВызватьИсключение "Объект " + ОбъектXDTO.Тип().Имя + " не соответствует схеме:"
			+ Символы.ПС + СтрСоединить(Ошибки, Символы.ПС);
	КонецЕсли;
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);

КонецПроцедуры

Разбор ключевых строк

  • ОбъектXDTO.Проверить() — проверка платформой; обход запускается, только если она упала.
  • Одиночное свойство читается через ПолучитьXDTO(), списковое — через ПолучитьСписок(), которое для неспискового свойства вызывает исключение. Ветки разделены по ВерхняяГраница.
  • ТипЗначения.Проверить(ЛексическоеЗначение) проверяет значение со всеми фасетами; дальше код только уточняет, какой фасет нарушен.
  • ЗначенияФасетаXDTO() поднимается по БазовыйТип: ограничение может быть объявлено у базового типа. Перечисление — несколько фасетов одного вида, поэтому результат — массив.
  • Порядок свойств и лишние элементы не разбираются: для них остаётся текст платформы.

Обрезка строк по фасету maxLength

Коды не режут: обрезанный ИНН всё равно неверный. В EnterpriseData 1.8 ограничения длины стоят в основном на кодах — ИНН, КПП, ОКПО, ОКАТО, ОКТМО, номерах счетов, а в УТ 11.4 у контрагента ИНН, КПП и код по ОКПО той же длины, что и в формате. Поэтому в типовом обмене ошибка длины обычно идёт от доработки. Обрезка нужна в своих интеграциях: во внешних схемах нередко ограничены и наименования, и комментарии. Процедура ниже заполняет объект XDTO из структуры и укорачивает строки по maxLength.

// Заполняет простые свойства объекта XDTO из структуры: ключ - имя свойства.
// Строки длиннее maxLength укорачиваются, описания обрезок - в массиве Обрезанные.
// Фабрика - та, что создала объект: ФабрикаXDTO для пакетов конфигурации,
// свойство ФабрикаXDTO у WSПрокси для веб-сервиса. ЗначенияФасетаXDTO - из листинга выше.
Процедура ЗаполнитьОбъектXDTOСОбрезкой(ОбъектXDTO, Данные, Фабрика, Обрезанные) Экспорт

	Свойства = ОбъектXDTO.Свойства();
	Для Каждого КлючИЗначение Из Данные Цикл

		Свойство = Свойства.Получить(КлючИЗначение.Ключ);
		Если Свойство = Неопределено Тогда
			ВызватьИсключение СтрШаблон("В типе %1 нет свойства %2", ОбъектXDTO.Тип().Имя, КлючИЗначение.Ключ);
		КонецЕсли;
		Значение = КлючИЗначение.Значение;
		// Пустые значения не устанавливаем; списки и вложенные объекты заполняются отдельно.
		Если Значение = Неопределено Или Свойство.ВерхняяГраница <> 1
			Или ТипЗнч(Свойство.Тип) <> Тип("ТипЗначенияXDTO") Тогда
			Продолжить;
		КонецЕсли;

		Если ТипЗнч(Значение) = Тип("Строка") Тогда
			Укороченная = СтрокаПоДлинеСвойстваXDTO(Значение, Свойство);
			Если Укороченная <> Значение Тогда
				Обрезанные.Добавить(СтрШаблон("%1: %2 -> %3 симв.", Свойство.Имя,
					XMLСтрока(СтрДлина(Значение)), XMLСтрока(СтрДлина(Укороченная))));
				Значение = Укороченная;
			КонецЕсли;
		КонецЕсли;

		// Шаблон и перечисление платформа проверит сама; если ошибка случится здесь - добавим имя свойства.
		Попытка
			ОбъектXDTO.Установить(Свойство, Фабрика.Создать(Свойство.Тип, Значение));
		Исключение
			ВызватьИсключение СтрШаблон("Свойство %1 = ""%2"": %3", Свойство.Имя, Значение,
				ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
		КонецПопытки;

	КонецЦикла;

КонецПроцедуры

// Строка, укороченная до maxLength свойства. Нет ограничения - строка без изменений.
Функция СтрокаПоДлинеСвойстваXDTO(Значение, Свойство) Экспорт

	Если ТипЗнч(Свойство.Тип) <> Тип("ТипЗначенияXDTO") Тогда
		Возврат Значение;
	КонецЕсли;
	МаксДлина = ЗначенияФасетаXDTO(Свойство.Тип, ВидФасетаXDTO.МаксДлина);
	Если МаксДлина.Количество() = 0 Или СтрДлина(Значение) <= Число(МаксДлина[0]) Тогда
		Возврат Значение;
	КонецЕсли;
	Возврат СокрП(Лев(Значение, Число(МаксДлина[0])));

КонецФункции
  • Фабрику передаём явно: объект веб-сервиса создан фабрикой WSПрокси, и тип из неё глобальная ФабрикаXDTO не примет.
  • Строку режем до вызова Создать(), а остальные фасеты проверяет платформа. Исключение дополняем именем свойства и значением, чтобы ошибку было видно сразу.
  • Массив Обрезанные пишите в журнал регистрации: о компромиссе должен знать тот, кто ведёт данные.

Как исправить: данные или правила

  • Коды и обязательные реквизиты (ИНН, КПП, номер, вид контрагента, единица измерения) — исправить в базе и повторить синхронизацию.
  • Перечисления — проверить правило конвертации перечисления и версию формата узла.
  • Ошибка при получении — исправлять у отправителя: битые данные сформировала другая база.
  • Законно пустое поле — подставить значение в обработчике правил.

Обработчик типового обмена дорабатывают в расширении, без снятия с поддержки: заимствуют общий модуль МенеджерОбменаЧерезУниверсальныйФормат и добавляют обработчик после типового «ПриОтправкеДанных» (в УТ 11.4 и КА 2.5 для номенклатуры — ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных). Там данные ещё лежат структурой ДанныеXDTO с вложенной «КлючевыеСвойства», и значение попадает в объект до проверки схемы. Пример — в статье Конвертация данных 1С.

Типичные ошибки

  • Теряют текст ошибки. Исключение Сообщить("Ошибка XDTO") выбрасывает путь, свойство и фасет. Сохраняйте ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) или результат ОшибкиПроверкиXDTO().
  • Собирают дату или число строкой. Для xs:dateTime нужен вид 2026-10-10T00:00:00, для xs:decimal — точка без пробелов. Строка из Формат() схеме не подходит: в тексте будет «не соответствует простому типу» с dateTime или decimal.
  • Режут ключевые свойства. По ним база-получатель ищет объект, если не сопоставила его по ссылке, и обрезанное значение ведёт к дублям.
  • Правят XDTO-пакет EnterpriseData. Схема общая для двух баз: длина, увеличенная в одной, не поможет второй.
  • Включают пропуск и не смотрят предупреждения. Обмен проходит, а объект при каждом сеансе снова не уходит.

Частые вопросы

Можно ли отключить проверку XDTO при синхронизации?

Нет: объект, который не соответствует схеме, вторая база не прочитает. Максимум — режим пропуска: остальные данные уходят, проблемные ждут исправления в списке предупреждений.

Почему ошибка появилась после обновления одной из баз?

Обновление меняет правила конвертации и список версий формата; версия обмена хранится в узле (реквизит ВерсияФорматаОбмена). Новые правила заполняют свойства иначе, и первыми падают объекты с нестандартными данными. Обновите обе программы и разберите оставшиеся предупреждения.

Где посмотреть ограничения конкретного поля?

В конфигураторе: Общие → XDTO-пакеты → пакет версии формата → тип, например КлючевыеСвойстваКонтрагент → свойство. Из кода — ЗначенияФасетаXDTO(): тип через ФабрикаXDTO.Тип(URI, "КлючевыеСвойстваКонтрагент"), свойство через Свойства.Получить("ИНН").

Ошибка при получении — исправлять в своей базе?

Как правило, нет: неверные данные сформировал отправитель. Найдите объект по типу и ключевым свойствам из журнала получателя, исправьте у отправителя и повторите синхронизацию. Исключение — ваши обработчики получения: в их тексте стоит «Направление: Получение».

Когда проще заказать

Если ошибки идут потоком после обновления или в обмене много доработанных правил, разбор журнала и правку обработчиков в расширении быстрее сделает программист, который уже чинил такие обмены. Для интеграций с сайтом и внешними сервисами посмотрите услугу обмен 1С с сайтом, для синхронизации между базами разместите задачу на площадке: оценка бесплатная, ответ в течение рабочего дня.

По теме

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.


1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.