Как правильно программно записать контактную информацию в 1С с использованием JSON?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке в современных конфигурациях на платформе 1С:Предприятие 8.3, использующих Библиотеку стандартных подсистем (БСП), программисты часто сталкиваются с необходимостью программного заполнения контактной информации (адресов, телефонов, Email). Одной из наиболее распространенных проблем является ошибка «Недопустимое состояние потока JSON». В этой статье мы подробно разберем, почему возникает эта ошибка, как правильно формировать данные для контактной информации и какие методы модулей БСП следует использовать для надежной записи данных.

Анализ причины ошибки при работе с JSON

Рассмотрим ситуацию, когда разработчик пытается сформировать строку JSON вручную, используя конкатенацию строк и функции Символ(34). Проанализируем типичный ошибочный код:

ЗначениеСтроки = "{" + Символы.ПС + Символ(34) + Символ(34) + "value" + ...

Выясним причину сбоя. В формате JSON двойные кавычки используются для обрамления ключей и строковых значений. Попытка вручную экранировать кавычки через удвоение или некорректную склейку часто приводит к тому, что парсер 1С не может распознать начало или конец объекта. Ошибка «Недопустимое состояние потока JSON» прямо указывает на то, что структура строки нарушена. Кроме того, ручной ввод структуры крайне трудозатратен и провоцирует опечатки в названиях полей, таких как value, type или comment.

Правильное формирование JSON-строки через системные механизмы

Для того чтобы гарантированно получить валидный JSON, мы крайне рекомендуем отказаться от ручной склейки строк. Вместо этого разберем подход с использованием объекта Структура (или Соответствие) и встроенного объекта ЗаписьJSON. Этот способ автоматически обрабатывает все спецсимволы и кавычки.

Рассмотрим пример формирования данных для адреса электронной почты:


// 1. Создаем структуру с данными контактной информации
ДанныеКИ = Новый Структура;
ДанныеКИ.Вставить("value", "example@mail.ru"); // Само значение
ДанныеКИ.Вставить("comment", "Рабочий адрес"); // Комментарий
ДанныеКИ.Вставить("type", "АдресЭлектроннойПочты"); // Тип КИ

// 2. Сериализуем структуру в строку JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеКИ);
РезультатJSON = ЗаписьJSON.Закрыть();

Такой подход исключает ошибки форматирования. Объект ЗаписьJSON самостоятельно позаботится о том, чтобы все строковые данные были корректно заэкранированы согласно стандартам.

Работа с модулем УправлениеКонтактнойИнформацией

После того как мы подготовили корректную строку данных, нам необходимо записать её в объект (например, в справочник ФизическиеЛица или Контрагенты). В типовых конфигурациях за это отвечает программный интерфейс БСП. Проанализируем ситуацию, в которой нам нужно обновить Email у физического лица.

Для записи следует использовать метод УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию. Посмотрим на пример кода:


// Получаем объект, для которого записываем КИ
ОбъектСсылка = Справочники.ФизическиеЛица.НайтиПоНаименованию("Иванов Иван Иванович");

// Определяем Вид контактной информации (это ссылка на справочник ВидыКонтактнойИнформации)
ВидКИ = Справочники.ВидыКонтактнойИнформации.EmailФизическиеЛица;

// Вызываем метод записи
УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(ОбъектСсылка, РезультатJSON, ВидКИ, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);

Важно помнить: метод ЗаписатьКонтактнуюИнформацию является универсальным. Он сам определяет, где хранятся данные (в табличной части объекта или в регистре сведений СоставныеТипыКонтактнойИнформации), исходя из настроек вашей конфигурации. Если запись производится для нового объекта, который еще не записан в базу, убедитесь, что вы передаете в метод именно ссылку, полученную через УстановитьСсылкуНового(), или сначала запишите сам объект.

Особенности записи сложных типов данных (Адреса)

Если для Email достаточно простой структуры, то для адресов ситуация сложнее. Адрес в формате БСП содержит в JSON не только поле value (представление), но и детальный состав полей: город, улица, дом, индекс, а также коды ФИАС/ГАР.

Разберем, как упростить работу с адресами. Вместо того чтобы пытаться угадать структуру JSON для адреса, мы можем воспользоваться методами преобразования. Посмотрим, какие инструменты предоставляет БСП для работы с адресами:

  1. Использование метода УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставление для генерации красивой строки адреса.
  2. Использование метода УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON, который принимает структуру с полями адреса и возвращает готовую строку для записи.

Проанализируем ситуацию с записью телефона. В структуре JSON для телефона должны присутствовать поля: countryCode, areaCode, number. Если вы передадите просто строку, система может не распознать её как телефонный номер для корректного отображения в форме.

Практические советы по отладке

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

Таким образом, использование системных объектов Структура и ЗаписьJSON в сочетании с методами модуля УправлениеКонтактнойИнформацией позволяет избежать ошибок «недопустимого состояния потока» и гарантирует корректное хранение данных в информационной базе.

← На главную