Формат JSON (JavaScript Object Notation) давно стал стандартом обмена данными между системами, и 1С:Предприятие не исключение. Если вы работаете с интеграциями, API или просто хотите оптимизировать обмен данными между базой 1С и внешними сервисами, понимание JSON станет вашим ключевым инструментом. В этой статье мы разберём не только теоретические основы, но и конкретные примеры использования JSON в типовых и нетиповых конфигурациях 1С — от простого чтения файлов до сложных HTTP-запросов.

Многие ошибочно считают, что JSON в 1С нужен только программистам. На самом деле даже аналитики и бухгалтеры сталкиваются с ним при выгрузке отчётов в внешние системы или загрузке данных из банк-клиентов. Мы покажем, как работать с JSON без глубоких знаний программирования — через встроенные механизмы платформы и популярные обработки.

Важно понимать: JSON в 1С — это не просто "ещё один формат файлов", а мостик между вашей учётной системой и современными веб-сервисами. От корректной работы с ним зависит скорость интеграций, надёжность обменов и даже безопасность данных. Далее вы узнаете, как избежать типичных ошибок при парсинге JSON, какие инструменты 1С для этого предусмотрены, и почему иногда проще использовать ЧтениеJSON, а не писать свой парсер.

1. Что такое JSON и почему он важен для 1С

JSON (JavaScript Object Notation) — это текстовый формат обмена данными, построенный на синтаксисе JavaScript, но при этом независимый от языка программирования. В контексте 1С его можно сравнить с более гибкой и современной альтернативой XML или TXT-файлам. Главные преимущества JSON для 1С:

  • 📜 Лёгкость чтения: структура данных визуально понятна даже без специальных инструментов. Например, JSON-файл с данными контрагента выглядит как простой список пар "ключ-значение".
  • 🔄 Универсальность: поддерживается практически всеми современными API (от банков до маркетплейсов), что упрощает интеграцию 1С с внешними системами.
  • Высокая скорость обработки: парсинг JSON в 1С занимает меньше ресурсов, чем работа с XML, особенно при больших объёмах данных.
  • 🔧 Встроенная поддержка: начиная с версии 8.3.10, платформа 1С включает специализированные методы для работы с JSON (ПрочитатьJSON, ЗаписатьJSON).

В отличие от XML, где данные обёрнуты в теги, JSON использует фигурные скобки {} для объектов и квадратные [] для массивов. Например, информация о товаре в JSON может выглядеть так:

{

"Наименование": "Смартфон X",

"Артикул": "SM-X100",

"Цена": 29990,

"Характеристики": {

"Цвет": "Чёрный",

"Память": 128

},

"НаСкладе": true

}

Для 1С это означает, что вы можете легко конвертировать такие данные в привычные объекты платформы — СправочникОбъект.Номенклатура, ДокументОбъект.ПоступлениеТоваров и т.д. Без необходимости разбирать сложные XML-схемы.

📊 Как часто вы работаете с JSON в 1С?
Ежедневно
Несколько раз в неделю
Редко, по необходимости
Никогда не использовал

2. Встроенные инструменты 1С для работы с JSON

Платформа 1С:Предприятие 8.3 предоставляет несколько встроенных механизмов для работы с JSON, которые покрывают 90% типичных задач. Рассмотрим их подробно:

Метод/Функция Назначение Пример использования Особенности
ПрочитатьJSON() Парсинг JSON-строки или файла в объект 1С
Данные = ПрочитатьJSON(Новый ЧтениеJSON;

ФайлJSON.Прочитать());

Автоматически преобразует JSON-типы в типы 1С (например, nullНеопределён)
ЗаписатьJSON() Сериализация объекта 1С в JSON-строку
ЗаписьJSON.УстановитьСтроку();

ЗаписатьJSON(ЗаписьJSON, Данные1С);

Поддерживает настройки форматирования (отступы, переносы строк)
ЧтениеJSON/ЗаписьJSON Объекты для потокового чтения/записи
Чтение = Новый ЧтениеJSON;

Чтение.УстановитьСтроку(JSONСтрока);

Позволяют обрабатывать большие файлы без полной загрузки в память
ТипЗначенияJSON Определение типа данных в JSON
Тип = ТипЗначенияJSON(Значение);

Если Тип = ТипJSON.Объект Тогда...

Помогает избежать ошибок при разборе динамических структур

Важный нюанс: встроенные методы 1С автоматически преобразуют типы данных между JSON и 1С по следующим правилам:

  • 🔢 JSON-число → Число (если целая часть) или Дробь (если дробная)
  • 📝 JSON-строка → Строка (с учётом кодировки UTF-8)
  • 🗃️ JSON-объект → Структура или Соответствие
  • 📋 JSON-массив → Массив или СписокЗначений
  • nullНеопределён

Пример практического использования:

// Чтение JSON из файла и преобразование в структуру 1С

ПутьКФайлу = "C:\Обмен\data.json";

Чтение = Новый ЧтениеJSON;

Чтение.ОткрытьФайл(ПутьКФайлу);

Данные = ПрочитатьJSON(Чтение);

Чтение.Закрыть();

// Теперь можно работать с данными как со структурой

Сообщить(Данные.Наименование); // Выведет "Смартфон X"

Данные = ПрочитатьJSON(Новый ЧтениеJSON(Ответ.ПолучитьТелоКакСтроку()));-->

3. Типичные ошибки при работе с JSON в 1С и как их избежать

Даже опытные разработчики 1С сталкиваются с проблемами при работе с JSON. Вот наиболее распространённые ошибки и способы их решения:

⚠️ Внимание: Если вы получаете JSON из внешнего API, всегда проверяйте кодировку ответа. Многие сервисы отдают данные в UTF-8, а 1С по умолчанию может пытаться интерпретировать их как Windows-1251, что приводит к "кракозябрам" в русских буквах.
  • 🔴 "Ошибка при чтении JSON: недопустимый символ"

    Причина: обычно связано с некорректной кодировкой файла или наличием BOM (метки порядка байтов). Решение:

    // Удаляем BOM в начале файла, если он есть
    

    ТекстJSON = СокрЛП(СтрЗаменить(ТекстJSON, Символ(65279), ""));

  • 🔴 "Тип не совпадает: ожидался Массив, получено Null"

    Причина: в JSON поле может быть пустым (null), а ваш код ожидает массив. Решение:

    Если ТипЗначенияJSON(Данные.СписокТоваров) = ТипJSON.Null Тогда
    

    Данные.СписокТоваров = Новый Массив;

    КонецЕсли;

  • 🔴 "Ошибка сериализации: циклические ссылки"

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

    ЗаписьJSON.УстановитьСтроку();
    

    ЗаписатьJSON(ЗаписьJSON, Объект, Ложь); // Ложь - не сериализовать полностью

Ещё одна частая проблема — несоответствие типов данных. Например, в JSON число может быть записано как строка (например, "1000" вместо 1000). В этом случае 1С прочитает его как строку, и последующие арифметические операции вызовут ошибку. Всегда проверяйте типы:

Если ТипЗначения(Данные.Цена) = Тип("Строка") Тогда

Данные.Цена = Число(Данные.Цена);

КонецЕсли;

Как отладить JSON-ошибку в 1С?

1. Сохраните проблемный JSON в файл и откройте в любом валидаторе (например, JSONLint).

2. Проверьте, нет ли в данных символов, недопустимых для JSON (например, неэкранированных кавычек).

3. Используйте Попытка...Исключение для пошагового анализа:

Попытка

Данные = ПрочитатьJSON(Чтение);

Исключение

Сообщить(ОписаниеОшибки());

Сообщить(ТекстJSON); // Посмотрите, какой фрагмент вызывает ошибку

КонецПопытки;

4. Практические примеры использования JSON в 1С

Рассмотрим реальные сценарии, где JSON становится незаменимым инструментом в 1С.

4.1 Обмен данными с сайтом на WordPress

Допустим, вам нужно выгружать каталог товаров из 1С на сайт, работающий на WordPress с плагином WooCommerce. Типовый алгоритм:

Подключиться к API сайта (используя HTTPСоединение)

Получить токен авторизации (обычно через OAuth 2.0)

Сформировать JSON с данными товаров по структуре WooCommerce

Отправить POST-запрос на /wp-json/wc/v3/products

Обработать ответ сервера (успех/ошибка)

-->

Пример кода для формирования JSON-данных о товаре:

Функция ПодготовитьДанныеТовараДляWooCommerce(Товар1С)

Данные = Новый Структура();

Данные.Вставить("name", Товар1С.Наименование);

Данные.Вставить("sku", Товар1С.Артикул);

Данные.Вставить("regular_price", Формат(Товар1С.Цена, "ЧГ=0.00"));

// Категории товара

Категории = Новый Массив();

Категории.Добавить(Товар1С.Группа.Наименование);

Данные.Вставить("categories", Категории);

// Атрибуты (например, цвет, размер)

Атрибуты = Новый Массив();

Для Каждого Характеристика Из Товар1С.Характеристики Цикл

Атрибут = Новый Структура();

Атрибут.Вставить("name", Характеристика.Наименование);

Атрибут.Вставить("options", Новый Массив(Характеристика.Значение));

Атрибуты.Добавить(Атрибут);

КонецЦикла;

Данные.Вставить("attributes", Атрибуты);

Возврат Данные;

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

4.2 Загрузка курсов валют из ЦБ РФ

Центробанк предоставляет актуальные курсы валют в формате JSON. Вы можете автоматически загружать их в 1С для обновления справочника валют:

// Получаем JSON с курсами валют

URL = "https://www.cbr.ru/scripts/XML_daily.asp?date_req=" + ТекущаяДата();

HTTP = Новый HTTPСоединение(URL);

Ответ = HTTP.Получить();

ЧтениеJSON = Новый ЧтениеJSON;

ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());

ДанныеКурсов = ПрочитатьJSON(ЧтениеJSON);

// Обрабатываем данные и обновляем справочник валют

Для Каждого Валюта Из ДанныеКурсов.Valute Цикл

КодВалюты = Валюта.CharCode;

Курс = Валюта.Value / Валюта.Nominal; // Курс за 1 единицу

СпрВалюты = Справочники.Валюты.НайтиПоКоду(КодВалюты);

Если Не СпрВалюты.Пустая() Тогда

СпрВалюты.Курс = Курс;

СпрВалюты.ДатаКурса = ТекущаяДата();

СпрВалюты.Записать();

КонецЕсли;

КонецЦикла;

💡

При работе с внешними API всегда проверяйте структуру возвращаемых JSON-данных. Многие сервисы меняют формат ответа при обновлениях, что может сломать ваш обмен. Используйте ТипЗначенияJSON() для динамической обработки.

4.3 Интеграция с телеграм-ботом

JSON активно используется при создании ботов для Telegram. Например, вы можете настроить уведомления из 1С о новых заказах:

// Формируем сообщение о новом заказе

Сообщение = Новый Структура();

Сообщение.Вставить("chat_id", ЧатID);

Текст = "📦 Новый заказ #" + Документ.Номер + "%0A";

Текст = Текст + "👤 Клиент: " + Документ.Контрагент.Наименование + "%0A";

Текст = Текст + "💰 Сумма: " + Формат(Документ.СуммаДокумента, "ЧГ=0.00");

Сообщение.Вставить("text", Текст);

// Отправляем через Telegram API

URL = "https://api.telegram.org/bot" + ТокенБота + "/sendMessage";

HTTP = Новый HTTPСоединение(URL);

HTTP.Заголовки.Вставить("Content-Type", "application/json");

Ответ = HTTP.ОтправитьСтроку(ЗаписатьJSON(Сообщение));

5. JSON vs XML в 1С: что выбрать для обмена данными

Хотя JSON становится стандартом де-факто для веб-API, в экосистеме 1С до сих пор широко используется XML. Давайте сравним эти форматы по ключевым критериям:

Критерий JSON XML
Читаемость ⭐⭐⭐⭐⭐ (компактный, понятный) ⭐⭐ (много тегов, избыточный)
Скорость обработки ⭐⭐⭐⭐ (быстрее парсится) ⭐⭐ (медленнее из-за структуры)
Поддержка в 1С ⭐⭐⭐ (с версии 8.3.10) ⭐⭐⭐⭐⭐ (полная поддержка во всех версиях)
Сложные структуры ⭐⭐⭐ (хорошо для вложенных объектов) ⭐⭐⭐⭐ (лучше для иерархических данных)
Интеграция с веб ⭐⭐⭐⭐⭐ (стандарт для REST API) ⭐⭐ (используется реже, обычно в SOAP)

Когда стоит выбрать JSON:

  • 🌐 Обмен с современными веб-сервисами (API банков, маркетплейсов, CRM)
  • ⚡ Необходима высокая скорость обработки больших объёмов данных
  • 📱 Мобильные приложения (1С + мобильный клиент)

Когда лучше использовать XML:

  • 📄 Типовые обмены между конфигурациями 1С (УТ → БП, ЗУП → ЗКГУ)
  • 🏛️ Работа с государственными системами (ФНС, ПФР, Росстат)
  • 🔄 Обмены с устаревшими системами, где JSON не поддерживается
⚠️ Внимание: Если вы разрабатываете обмен между двумя системами 1С, и обе поддерживают JSON, это не всегда означает, что его стоит использовать. Типовые конфигурации (например, 1С:ERP или 1С:УТ) оптимизированы для XML-обменов, и переход на JSON может потребовать доработки механизмов.

6. Оптимизация работы с JSON в 1С

При интенсивной работе с JSON (например, при обмене тысячами документов) важно оптимизировать код, чтобы избежать замедления системы. Вот несколько практических советов:

6.1 Пакетная обработка данных

Вместо отправки каждого документа отдельным запросом группируйте данные в пакеты. Например, при выгрузке товаров на сайт:

// Вместо 1000 отдельных запросов - один пакетный

МассивТоваров = Новый Массив();

Для Каждого Товар Из ВыборкаТоваров Цикл

МассивТоваров.Добавить(ПодготовитьДанныеТовара(Товар));

КонецЦикла;

ДанныеДляОтправки = Новый Структура();

ДанныеДляОтправки.Вставить("products", МассивТоваров);

// Отправляем одним запросом

Ответ = ОтправитьJSONНаСервер("/api/products/batch", ДанныеДляОтправки);

6.2 Кэширование часто используемых данных

Если вы регулярно запрашиваете одни и те же справочники (например, списки контрагентов), кэшируйте их в 1С, чтобы не обращаться к API каждый раз:

Процедура ПолучитьСписокКонтрагентов()

Если Не ЗначениеЗаполнено(КэшКонтрагентов) Тогда

JSONОтвета = ВыполнитьHTTPЗапрос("/api/partners");

КэшКонтрагентов = ПрочитатьJSON(JSONОтвета);

КонецЕсли;

Возврат КэшКонтрагентов;

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

6.3 Асинхронная обработка

Для длительных операций (например, выгрузка большого каталога) используйте фоновые задания, чтобы не блокировать интерфейс:

ФоновоеЗадание = ФоновыеЗадания.Создать("ВыгрузкаКаталогаНаСайт");

ФоновоеЗадание.Параметры.Добавить("Каталог", КаталогДляВыгрузки);

ФоновоеЗадание.ВыполнитьАсинхронно();

6.4 Оптимизация структуры JSON

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

// Вместо отправки всех реквизитов товара

Данные.Вставить("Товар", Товар.ПолучитьОбъектДляЗаписи());

// Отправляем только необходимые поля

Данные = Новый Структура();

Данные.Вставить("Артикул", Товар.Артикул);

Данные.Вставить("Цена", Товар.Цена);

Данные.Вставить("Остаток", Товар.Остатки.Итог("Количество"));

💡

При работе с большими JSON-файлами (>10 МБ) используйте потоковое чтение (ЧтениеJSON.ОткрытьФайл()), чтобы избежать переполнения памяти.

7. Безопасность при работе с JSON в 1С

JSON-данные, особенно полученные из внешних источников, могут содержать угрозы. Основные риски и способы защиты:

  • 🛡️ SQL-инъекции: Если вы формируете SQL-запросы на основе JSON-данных, всегда используйте параметризацию. Никогда не подставляйте значения напрямую в запрос:
    // НЕБЕЗОПАСНО!
    

    Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Контрагенты ГДЕ Наименование = '" + Данные.Наименование + "'");

    // БЕЗОПАСНО

    Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Контрагенты ГДЕ Наименование = &Наименование");

    Запрос.УстановитьПараметр("Наименование", Данные.Наименование);

  • 🛡️ XXE-атаки: Хотя JSON менее подвержен XXE (XML External Entity), чем XML, всё же избегайте парсинга недоверенных данных без валидации.
  • 🛡️ Переполнение памяти: Злоумышленник может отправить огромный JSON-файл, чтобы вызвать сбой 1С. Ограничивайте размер принимаемых данных:
    Если ДлинаJSON > 10000000 Тогда // 10 МБ
    

    ВызватьИсключение "Превышен максимальный размер JSON-данных";

    КонецЕсли;

  • 🛡️ Утечка данных: При отправке JSON на внешние сервисы убедитесь, что в данных нет конфиденциальной информации (паролей, персональных данных).

Всегда валидируйте входящие JSON-данные перед обработкой:

Функция ПроверитьСтруктуруJSON(Данные)

// Проверяем обязательные поля

Если Не Данные.Свойство("Наименование") Тогда

Возврат Ложь;

КонецЕсли;

// Проверяем типы данных

Если ТипЗначенияJSON(Данные.Цена) <> ТипJSON.Число Тогда

Возврат Ложь;

КонецЕсли;

Возврат Истина;

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

⚠️ Внимание: Если вы работаете с API банков или платежных систем, обязательно используйте HTTPS для передачи JSON-данных. Никогда не отправляйте финансовую информацию по незащищённому соединению, даже если это тестовый контур.

8. Полезные обработки и библиотеки для работы с JSON в 1С

Помимо встроенных механизмов, сообщество 1С разработало множество полезных инструментов для работы с JSON. Вот наиболее популярные:

  • 📦 Библиотека "JSONProcessor" (от 1С-Битрикс):

    Расширяет стандартные возможности, добавляя поддержку DateTime, UUID и других сложных типов. Скачать можно на Инфостарте.

  • 📦 Обработка "Универсальный обмен JSON":

    Позволяет настраивать правила конвертации между JSON и объектами 1С через визуальный интерфейс. Полезна для бизнес-пользователей.

  • 📦 "JSON Schema Validator":

    Инструмент для проверки JSON-данных на соответствие заданной схеме. Помогает избежать ошибок при интеграции с внешними системами.

  • 📦 Расширение "RESTClient":

    Упрощает работу с REST API, автоматически конвертируя ответы в JSON и обратно. Включает отладчик запросов.

Пример использования библиотеки JSONProcessor для работы со сложными типами:

// Подключаем библиотеку

JSONProcessor = Новый JSONProcessor;

// Сериализация объекта с датой

Данные = Новый Структура();

Данные.Вставить("ДатаДокумента", ТекущаяДата());

JSONСтрока = JSONProcessor.ЗаписатьJSON(Данные);

// В результате дата будет записана в ISO-формате: "2023-11-15T00:00:00"

Сообщить(JSONСтрока);

Для удобной отладки JSON-обменов рекомендуем использовать:

  • 🔍 Postman — для тестирования API-запросов
  • 🔍 JSONLint — для валидации JSON-структур
  • 🔍 1С:Отладчик — для пошагового анализа кода обмена

FAQ: Частые вопросы по JSON в 1С

Как прочитать JSON-файл в 1С, если он весит несколько гигабайт?

Для больших файлов используйте потоковое чтение с ЧтениеJSON, чтобы не грузить весь файл в память:

Чтение = Новый ЧтениеJSON;

Чтение.ОткрытьФайл("C:\bigfile.json");

Пока Чтение.Прочитать() Цикл

ТекущийОбъект = Чтение.ПолучитьТекущееЗначение();

// Обрабатываем объект

КонецЦикла;

Чтение.Закрыть();

Если файл слишком большой даже для потокового чтения, разбейте его на части с помощью внешних утилит (например, jq для Linux).

Можно ли в 1С преобразовать таблицу значений в JSON?

Да, для этого используйте комбинацию ЗаписьJSON и цикла по строкам таблицы:

Функция ТаблицаВJSON(Таблица)

Результат = Новый Массив();

Для Каждого Строка Из Таблица Цикл

СтрокаJSON = Новый Структура();

Для Каждого Колонка Из Таблица.Колонки Цикл

СтрокаJSON.Вставить(Колонка.Имя, Строка[Колонка.Имя]);

КонецЦикла;

Результат.Добавить(СтрокаJSON);

КонецЦикла;

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

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

// Использование

JSONМассив = ТаблицаВJSON(МояТаблицаЗначений);

JSONСтрока = ЗаписатьJSON(Новый ЗаписьJSON, JSONМассив);