При интеграции 1С с внешними системами через формат JSON разработчики часто сталкиваются с неожиданным визуальным искажением данных. Например, артикул, который в источнике записан как 25478, при чтении в 1С превращается в 25 478. Разберем, почему это происходит и как гарантированно избавиться от этой «магии» платформы.
Основная причина кроется в механизме автоматического определения типов при использовании функции ПрочитатьJSON. Когда 1С получает данные, она анализирует структуру JSON. Если значение поля (например, article) передано как число (без кавычек), парсер 1С автоматически присваивает этому полю тип Число.
В дальнейшем, когда вы выводите это значение в Сообщить или записываете в реквизит формы, платформа применяет встроенное форматирование для чисел. В настройках пользователя 1С обычно включено отображение разделителей групп разрядов (пробелов). Таким образом, пробел не приходит из JSON, он «рисуется» платформой 1С при попытке отобразить число.
Чтобы избежать зависимости от автоматического форматирования, необходимо принудительно преобразовывать полученные данные к строковому типу. Артикулы почти всегда должны храниться как строки, так как они могут содержать префиксы, буквы или иметь ведущие нули, которые числовой тип неизбежно удалит.
Для решения задачи мы будем использовать функцию Строка() непосредственно в момент присваивания значения из объекта, полученного через ПрочитатьJSON.
Рассмотрим пример правильного кода для обработки данных:
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьПоток(Результат.ПолучитьТелоКакПоток);
ДанныеJSON = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Для Каждого ЭлементСписка Из ДанныеJSON Цикл
// Принудительно приводим к строке, чтобы избежать форматирования числа
Артикул = Строка(ЭлементСписка.article);
Наименование = ЭлементСписка.name;
// ... дальнейшая логика обработки
КонецЦикла;
Помимо решения основной проблемы с пробелами, проанализируем ошибки, которые часто допускают при работе с циклами в 1С:
Для Каждого Товар из Товар. Это плохая практика, так как имя переменной цикла перекрывает имя коллекции. Рекомендуем использовать разные имена, например Для Каждого Элемент Из Коллекция.Строка() является универсальным инструментом, который защитит вашу логику от падения при смене формата данных на стороне отправителя.Мы выяснили, что появление пробелов в артикулах — это не ошибка парсинга JSON, а особенность представления чисел в интерфейсе 1С. Чтобы данные всегда оставались в исходном виде, необходимо:
Строка() к результатам чтения JSON.Следуя этим простым правилам, вы обеспечите корректную загрузку номенклатуры и избавитесь от проблем с неверными форматами артикулов раз и навсегда.