Описание
В статье рассматривается ошибка, возникающая при использовании стандартной проверки заполненности свойств в механизме КД-3 за особенностей функции ЗначениеЗаполнено() числовой ноль ошибочно считается пустым значением и исключается из выгрузки. Приведено объяснение причины и исправленный фрагмент кода.
Назначение
Статья будет полезна разработчикам 1С, работающим с механизмом конвертации данных КД-3, особенно при интеграциях, где нулевые значения имеют смысл и должны выгружаться.
Проблема
При выгрузке данных через КД-3 часть тегов отсутствовала в результирующем файле. Пропадали именно те свойства, которые содержали нулевые значения (0).
Причина — в стандартной проверке заполненности:
Модуль ОбменДаннымиXDTOСервер
// Проверка на заполненность
Если (ЗначениеСвойства = Null
ИЛИ НЕ ЗначениеЗаполнено(ЗначениеСвойства)) Тогда
Если Свойство.ВозможноПустое Тогда
Приемник[Свойство.Имя] = Неопределено;
КонецЕсли;
Продолжить;
КонецЕсли;
Функция ЗначениеЗаполнено() возвращает Ложь для нуля, поэтому свойство считается пустым и не выгружается.
Причина
ЗначениеЗаполнено(0) → Ложь
Следовательно, ноль воспринимается как отсутствие значения.
Это приводит к тому, что:
- тег не создаётся,
- данные теряются,
- структура выгрузки нарушается.
Решение
Нужно изменить логику проверки, чтобы числовой ноль считался валидным значением.
Исправленный фрагмент:
// Проверка на заполненность
Если (ЗначениеСвойства = Null
ИЛИ НЕ ЗначениеЗаполнено(ЗначениеСвойства))
И НЕ ТипЗнч(ЗначениеСвойства) = Тип("Число") Тогда
Если Свойство.ВозможноПустое Тогда
Приемник[Свойство.Имя] = Неопределено;
КонецЕсли;
Продолжить;
КонецЕсли;
Результат
После исправления:
- нулевые значения корректно выгружаются,
- структура XML/JSON становится полной,
- исчезают «потерянные» теги,
- повышается предсказуемость конвертации.
Вывод
Проблема с нулевыми значениями в КД 3 — распространённая, но легко устранимая. Достаточно скорректировать проверку заполненности, чтобы ноль перестал считаться пустым значением. Это избавляет от множества скрытых ошибок при интеграциях.
Вступайте в нашу телеграмм-группу Инфостарт
