Формат 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-схемы.
2. Встроенные инструменты 1С для работы с JSON
Платформа 1С:Предприятие 8.3 предоставляет несколько встроенных механизмов для работы с JSON, которые покрывают 90% типичных задач. Рассмотрим их подробно:
| Метод/Функция | Назначение | Пример использования | Особенности |
|---|---|---|---|
ПрочитатьJSON() |
Парсинг JSON-строки или файла в объект 1С | |
Автоматически преобразует JSON-типы в типы 1С (например, null → Неопределён) |
ЗаписатьJSON() |
Сериализация объекта 1С в 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Массив);