При разработке или выполнении кода мобильного приложения 1С на стороне сервера (директива &НаСервере) может возникнуть ошибка синтаксического контроля или времени выполнения: «Тип не определен (ЧтениеJson)» или «Тип не определен (ЧтениеJSON)». При этом на десктопной платформе аналогичный код отлаживается без замечаний и успешно компилируется.
Разберем ситуацию подробно. Данное исключение указывает на то, что исполняемый контекст мобильной платформы не видит системный объект ЧтениеJSON. Проанализируем основные причины, почему мобильная платформа не распознает данный тип данных:
ЧтениеJSON и ЗаписьJSON была внедрена начиная с версии 8.3.6. Однако в мобильной платформе поддержка встроенных объектов работы с JSON появилась только начиная с версии 8.3.9. Если мобильное приложение развернуто или собрано на базе платформы версии 8.3.8 или ниже, данный тип данных отсутствует на уровне мобильного платформенного движка.РежимСовместимости установлено значение с версией ниже 8.3.6, платформа программно ограничивает доступ к новым типам данных, даже если физическая версия установленной мобильной платформы выше.ЧтениеJSON и ЗаписьJSON недоступны в веб-клиенте. Если мобильный клиент выполняет код в неподдерживаемом контексте, система также выдаст ошибку определения типа.Рассмотрим по шагам основные действия, необходимые для устранения ошибки и корректной работы с форматом JSON в мобильном приложении.
Обновление мобильной платформы и сборщика приложений:
Выясним главную причину проблемы: если в мобильном клиенте используется версия платформы 8.3.8.70, а разработка ведется под целевую платформу 8.3.9 или выше, необходимо обновить дистрибутив мобильной платформы. Загрузите и установите дистрибутив мобильной платформы версии 8.3.9 или более свежую. После этого пересоберите мобильное приложение в Сборщике мобильных приложений с использованием обновленной платформы.
Проверка режимов совместимости:
Проанализируем настройки конфигурации. В дереве конфигурации откройте свойства корневого элемента и найдите свойство РежимСовместимости. Убедитесь, что установлено значение Не использовать или версия не ниже 8.3.6 (а для использования возможностей мобильной платформы — с учетом требований используемого мобильного релиза).
Проверка контекста исполнения и синтаксиса:
Проверим доступность типа в Синтаксис-Помощнике. Для типа ЧтениеJSON доступными контекстами выполнения являются: Тонкий клиент, Сервер, Толстый клиент, Внешнее соединение, Мобильное приложение (клиент) и Мобильное приложение (сервер).
Пример корректного создания и использования объекта ЧтениеJSON на сервере мобильного приложения:
&НаСервере
Процедура ПрочитатьДанныеJSONOnServer(СтрокаJSON)
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
// Дальнейшая обработка полученной структуры или массива
КонецПроцедуры
Рассмотрим дополнительные сценарии и альтернативные решения, если немедленное обновление мобильной платформы невозможно или требуется обеспечить кросс-платформенную совместимость.
1. Использование универсальных функций в платформе 8.3.23 и выше:
Начиная с версии платформы 8.3.23, в глобальный контекст были добавлены функции ПрочитатьЗначениеJSON() и ЗаписатьЗначениеJSON(). Главное преимущество данных функций состоит в том, что они доступны во всех контекстах (включая Веб-клиент и мобильные клиенты) и не требуют явного создания объектов ЧтениеJSON или ЗаписьJSON.
2. Делегирование обработки JSON центральному серверу:
Если мобильное приложение вынуждено работать на устаревшей мобильной платформе (ниже 8.3.9), прямое использование типа ЧтениеJSON невозможно. В таком случае разберем архитектурный обходной путь: мобильное приложение отправляет сырую строку JSON на центральный сервер 1С через HTTPСоединение и HTTPЗапрос. Сервер десктопной платформы производит парсинг с помощью ЧтениеJSON и ПрочитатьJSON() и возвращает результат мобильному клиенту в доступном формате.
3. Ручной парсинг простых JSON-строк:
Для простых текстовых структур без глубокой вложенности можно применить встроенные строковые функции 1С, такие как СтрРазделить(), СтрНайти() и СтрЗаменить(), либо обработать текст с помощью регулярных выражений, исключив вызов несуществующего типа данных.
Подводя итог: первопричиной ошибки «Тип не определен (ЧтениеJSON)» на мобильном устройстве является несовместимость версий. Обновление мобильной платформы до версии 8.3.9 и выше полностью устраняет проблему и открывает доступ к штатным механизмам работы с JSON в 1С.