Формат JSON стал стандартом де-факто для обмена данными между системами — от веб-сервисов до мобильных приложений. В 1С:Предприятие 8.3 работа с JSON реализована на уровне платформы, но многие пользователи до сих пор сталкиваются с трудностями при создании файлов в этом формате. Проблема не в сложности технологии, а в разнообразии подходов: можно формировать JSON вручную через конструктор, писать код на встроенном языке или использовать внешние обработки.

Эта статья закрывает все ключевые вопросы: от базового создания JSON-файла из справочника Номенклатура до автоматизации выгрузки больших объемов данных с учетом кодировок и структуры. Мы разберем три принципиально разных метода (без программирования, с минимальным кодом и полноценным скриптом), а также типичные ошибки, из-за которых выдает пустые файлы или некорректные данные. Особое внимание уделим нюансам работы с кириллицей, датами и вложенными объектами — это 80% проблем при интеграции с внешними системами.

1. Что такое JSON и зачем он нужен в 1С

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

  • 📤 Выгрузки данных в внешние системы (сайты, CRM, ERP, мобильные приложения)
  • 📥 Загрузки данных из API банков, маркетплейсов (Озон, Wildberries), сервисов аналитики
  • 🔄 Обмена между базами 1С (альтернатива XML, особенно для REST-сервисов)
  • 📊 Формирования отчетов для визуализации во внешних инструментах (Power BI, Tableau)

Преимущества JSON перед XML в :

КритерийJSONXML
Размер файлаКомпактнее на 30-50%Более громоздкий
ЧитаемостьЛегче анализировать визуальноСложная вложенность тегов
Скорость обработкиБыстрее парсится в кодеТребует больше ресурсов
Поддержка в 1СНативно с версии 8.3.10Требует дополнительных библиотек

Важно понимать, что JSON в — это не просто "текстовый файл", а структурированный объект с четкими правилами. Например, все строки должны быть в двойных кавычках ("наименование"), а даты необходимо конвертировать в строковый формат ("2026-12-31"). Пропуск этих нюансов приводит к тому, что внешние системы отказываются принимать файлы, хотя визуально они выглядят корректно.

📊 Для чего вам нужен JSON в 1С?
Интеграция с сайтом
Обмен с маркетплейсами
Автоматизация отчетности
Другое

2. Способ 1: Создание JSON без программирования (через конструктор)

Если вам нужно единоразово экспортировать данные из справочника или документа в JSON, можно обойтись без кода. Этот метод подходит для бухгалтеров и пользователей без навыков программирования. Используем встроенную функциональность 1С:Предприятие 8.3:

  1. Откройте нужный справочник (например, Номенклатура) или документ (например, Реализация товаров и услуг).

  2. Выделите необходимые записи (можно использовать отбор по дате, контрагенту и т.д.).

  3. Перейдите в меню Файл → Сохранить как....

  4. В поле Тип файла выберите JSON (*.json).

  5. Укажите путь для сохранения и нажмите Сохранить.

Система автоматически сгенерирует файл с базовой структурой. Например, для справочника Номенклатура JSON будет содержать поля Ссылка, Наименование, Артикул и другие реквизиты, заполненные в карточке товара.

☑️ Проверка экспортированного JSON

Выполнено: 0 / 4
💡

Если в JSON попали лишние поля (например, служебные реквизиты 1С), откройте файл в текстовом редакторе и удалите ненужные строки вручную. Для массовой очистки используйте регулярные выражения по шаблону "НенужноеПоле":.*?

Ограничения этого метода:

  • 🚫 Нет контроля над структурой JSON (все поля экспортируются "как есть")
  • 🚫 Нельзя добавить вычисляемые поля (например, остатки на складе)
  • 🚫 Даты сохраняются в формате 1С (ДД.ММ.ГГГГ), что не всегда подходит для внешних систем
Как изменить формат даты в экспортированном JSON?

По умолчанию 1С сохраняет даты в виде "Дата": "01.01.2026". Чтобы привести их к стандарту ISO 8601 ("2026-01-01"), потребуется либо редактировать файл вручную, либо использовать скрипт на Python/JavaScript. Для автоматизации в 1С нужно писать код (см. Способ 3).

3. Способ 2: Получаем JSON через запрос и минимальный код

Если вам нужно больше контроля над структурой JSON, но писать сложные скрипты нет желания, можно использовать комбинацию запроса 1С и встроенной функции ЗаписатьJSON(). Этот метод подходит для выгрузки данных из регистров, документов с отбором или группировкой.

Пример: экспорт остатков товаров по складам в JSON.

  1. Создайте новый запрос в Конфигураторе или через Новый Запрос в режиме предприятия:

    ВЫБРАТЬ
    

    Номенклатура.Наименование КАК Товар,

    ОстаткиНоменклатуры.КоличествоОстаток КАК Остаток,

    Склады.Наименование КАК Склад

    ИЗ

    РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатуры

    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура

    ПО ОстаткиНоменклатуры.Номенклатура = Номенклатура.Ссылка

    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады

    ПО ОстаткиНоменклатуры.Склад = Склады.Ссылка

    ГДЕ

    ОстаткиНоменклатуры.КоличествоОстаток > 0

  2. Выполните запрос и получите результат в таблицу значений:

    РезультатЗапроса = Запрос.Выполнить();
    

    ТаблицаДанных = РезультатЗапроса.Выгрузить();

  3. Сохраните таблицу в JSON:

    ЗаписьJSON = Новый ЗаписьJSON;
    

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

    ЗаписатьJSON(ЗаписьJSON, ТаблицаДанных);

    Результат = ЗаписьJSON.Закрыть();

    ЗаписьФайла = Новый ЗаписьТекста("C:\export\остатки.json", КодировкаТекста.UTF8);

    ЗаписьФайла.Записать(Результат);

    ЗаписьФайла.Закрыть();

В результате получится файл со структурой:

[

{

"Товар": "Стул офисный",

"Остаток": 15,

"Склад": "Основной склад"

},

{

"Товар": "Стол письменный",

"Остаток": 8,

"Склад": "Основной склад"

}

]

💡

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

Нюансы этого подхода:

  • ⚠️ Кодировка: Всегда указывайте КодировкаТекста.UTF8, иначе кириллица превратятся в кракозябры.
  • ⚠️ Даты: В результатах запроса даты приводятся к строковому виду автоматически, но формат зависит от региональных настроек 1С.
  • ⚠️ Производительность: Для таблиц с >10 000 строк лучше использовать потоковую запись (см. Способ 3).

4. Способ 3: Полноценное формирование JSON через код (для программистов)

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

Рассмотрим пример выгрузки документа РеализацияТоваровУслуг с детализацией по строкам и дополнительными вычисляемыми полями (например, сумма НДС в валюте документа):

Процедура ЭкспортироватьДокументВJSON(СсылкаНаДокумент, ПутьКФайлу)

Документ = СсылкаНаДокумент.ПолучитьОбъект();

ЗаписьJSON = Новый ЗаписьJSON;

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

// Начинаем корневой объект

ЗаписьJSON.ЗаписатьНачалоОбъекта();

// Записываем заголовок документа

ЗаписьJSON.ЗаписатьИмяСвойства("Номер");

ЗаписьJSON.ЗаписатьЗначение(Документ.Номер);

ЗаписьJSON.ЗаписатьИмяСвойства("Дата");

ЗаписьJSON.ЗаписатьЗначение(Формат(Документ.Дата, "ДФ=yyyy-MM-dd")); // Приводим к ISO-формату

ЗаписьJSON.ЗаписатьИмяСвойства("Контрагент");

ЗаписьJSON.ЗаписатьЗначение(Документ.Контрагент.Наименование);

// Начинаем массив строк документа

ЗаписьJSON.ЗаписатьИмяСвойства("Строки");

ЗаписьJSON.ЗаписатьНачалоМассива();

Для Каждого Строка Из Документ.Товары Цикл

ЗаписьJSON.ЗаписатьНачалоОбъекта();

ЗаписьJSON.ЗаписатьИмяСвойства("Номенклатура");

ЗаписьJSON.ЗаписатьЗначение(Строка.Номенклатура.Наименование);

ЗаписьJSON.ЗаписатьИмяСвойства("Количество");

ЗаписьJSON.ЗаписатьЗначение(Строка.Количество);

ЗаписьJSON.ЗаписатьИмяСвойства("Цена");

ЗаписьJSON.ЗаписатьЗначение(Строка.Цена);

ЗаписьJSON.ЗаписатьИмяСвойства("СуммаНДС");

ЗаписьJSON.ЗаписатьЗначение(Строка.СуммаНДС);

ЗаписьJSON.ЗаписатьКонецОбъекта();

КонецЦикла;

ЗаписьJSON.ЗаписатьКонецМассива();

ЗаписьJSON.ЗаписатьКонецОбъекта();

Результат = ЗаписьJSON.Закрыть();

// Сохраняем в файл

ЗаписьФайла = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);

ЗаписьФайла.Записать(Результат);

ЗаписьФайла.Закрыть();

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

Особенности этого кода:

  • 🔹 Явное управление структурой: вы сами определяете, какие поля и в каком формате попадут в JSON.
  • 🔹 Контроль над датами: функция Формат() приводит дату к стандарту YYYY-MM-DD.
  • 🔹 Вложенные объекты: строки документа записываются как массив объектов внутри корневого объекта.
⚠️ Внимание: При работе с большими документами (>1000 строк) разбейте запись на части. Объект ЗаписьJSON хранит данные в памяти, и при превышении лимита (зависит от версии 1С) возникнет ошибка "Недостаточно памяти". Используйте потоковую запись через ЗаписьJSON.ЗаписатьФрагмент().

5. Типичные ошибки и их решение

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

ОшибкаПричинаРешение
Файл пустой или весит 0 КБНе закрыт объект ЗаписьJSON или ЗаписьТекстаПроверьте вызов методов .Закрыть() для обоих объектов
Кракозябры вместо кириллицыНе указана кодировка UTF-8Явно передавайте КодировкаТекста.UTF8 при записи файла
Ошибка "Некорректный JSON"Пропущены кавычки или запятыеИспользуйте ЗаписатьJSON() вместо ручного формирования строки
Даты в формате 1С (ДД.ММ.ГГГГ)Автоматическое преобразование без форматированияПрименяйте Формат(Дата, "ДФ=yyyy-MM-dd")
Отсутствуют вложенные объектыНе вызваны ЗаписатьНачалоОбъекта()/ЗаписатьКонецОбъекта()Проверьте баланс вызовов начальных и конечных методов

Еще одна распространенная проблема — превышение лимитов памяти при работе с большими объемами данных. Если вам нужно экспортировать >50 000 записей, используйте следующий подход:

  1. Разбейте данные на пакеты по 10 000 записей.

  2. Для каждого пакета формируйте отдельный JSON-массив.

  3. Объедините массивы в один файл через запятую (убедившись, что нет лишних скобок).

// Пример потоковой записи для больших данных

ЗаписьJSON = Новый ЗаписьJSON;

ЗаписьФайла = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);

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

ЗаписьJSON.ЗаписатьНачалоМассива();

Пока ПолучитьПачкуДанных(10000, ТекущаяПозиция) Цикл

Для Каждого Строка Из ПачкаДанных Цикл

ЗаписатьСтрокуВJSON(ЗаписьJSON, Строка);

КонецЦикла;

ЗаписьФайла.Записать(ЗаписьJSON.Закрыть());

ЗаписьJSON.УстановитьСтроку(); // Сбрасываем буфер

КонецЦикла;

ЗаписьJSON.ЗаписатьКонецМассива();

ЗаписьФайла.Записать(ЗаписьJSON.Закрыть());

ЗаписьФайла.Закрыть();

6. Продвинутые приемы: работа с вложенными структурами

Часто требуется формировать JSON с сложной вложенностью — например, заказы покупателей с детализацией по товарам, характеристикам и серийным номерам. В таких случаях удобно использовать рекурсивные функции или объекты Структура и Массив для предварительного формирования данных.

Пример: экспорт заказа с вложенными товарами и их характеристиками:

Функция ПолучитьJSONЗаказа(Заказ)

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

ДанныеЗаказа.Вставить("Номер", Заказ.Номер);

ДанныеЗаказа.Вставить("Дата", Формат(Заказ.Дата, "ДФ=yyyy-MM-dd"));

ДанныеЗаказа.Вставить("Контрагент", Заказ.Контрагент.Наименование);

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

Для Каждого СтрокаТовара Из Заказ.Товары Цикл

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

Товар.Вставить("Наименование", СтрокаТовара.Номенклатура.Наименование);

Товар.Вставить("Количество", СтрокаТовара.Количество);

// Вложенный массив характеристик

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

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

Характеристики.Добавить(Хар.Значение);

КонецЦикла;

Товар.Вставить("Характеристики", Характеристики);

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

КонецЦикла;

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

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

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

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

Данные = ПолучитьJSONЗаказа(ТекущийДокумент);

ЗаписьJSON = Новый ЗаписьJSON;

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

Результат = ЗаписьJSON.Закрыть();

Преимущества этого подхода:

  • 🔹 Читаемость кода: Логика формирования данных отделена от записи в JSON.
  • 🔹 Гибкость: Легко добавлять новые уровни вложенности.
  • 🔹 Отладка: Можно вывести Структуру в отладочное окно для проверки.
⚠️ Внимание: При работе с Структура и Массив следите за типами данных. Например, если в JSON должно попасть число, а в структуре хранится строка ("100" вместо 100), внешняя система может не распознать поле. Используйте явное приведение типов: Число(СтрокаТовара.Количество).

7. Автоматизация: выгрузка JSON по расписанию

Если JSON-файлы нужны регулярно (например, для ежедневной выгрузки остатков на сайт), имеет смысл автоматизировать процесс. В 1С:Предприятие это можно сделать двумя способами:

  1. Регламентные задания: Настройте задание в конфигураторе (Администрирование → Регламентные задания), которое будет запускать процедуру экспорта по расписанию.

  2. Внешние обработки: Создайте обработку с интерфейсом для гибкой настройки параметров выгрузки (путь, отборы, формат дат) и запускайте ее вручную или через планировщик задач Windows.

Пример кода для регламентного задания:

Процедура ВыгрузитьОстаткиВJSON() Экспорт

ПутьКФайлу = "C:\Exchange\остатки_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd") + ".json";

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Артикул КАК Артикул,

| Номенклатура.Наименование КАК Наименование,

| СУММА(ОстаткиНоменклатуры.КоличествоОстаток) КАК Остаток

|ИЗ

| РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатуры

| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура

| ПО ОстаткиНоменклатуры.Номенклатура = Номенклатура.Ссылка

|ГДЕ

| Номенклатура.ПометкаУдаления = ЛОЖЬ

|СГРУППИРОВАТЬ ПО

| Номенклатура.Артикул,

| Номенклатура.Наименование";

Результат = Запрос.Выполнить().Выгрузить();

ЗаписьJSON = Новый ЗаписьJSON;

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

ЗаписатьJSON(ЗаписьJSON, Результат);

ЗаписьФайла = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);

ЗаписьФайла.Записать(ЗаписьJSON.Закрыть());

ЗаписьФайла.Закрыть();

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

Для настройки регламентного задания:

  1. Откройте конфигуратор и перейдите в Общие → Регламентные задания.
  2. Создайте новое задание, укажите процедуру ВыгрузитьОстаткиВJSON.
  3. Настройте расписание (например, ежедневно в 23:00).
  4. Установите флаг Использовать и сохраните конфигурацию.
⚠️ Внимание: При выгрузке по расписанию убедитесь, что:

— У пользователя, от имени которого запускается задание, есть права на чтение данных и запись в указанную папку.

— Папка для экспорта существует и доступна для записи (проверьте права Windows).

— В имени файла нет запрещенных символов (например, : или ?).

8. Проверка и валидация JSON

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

  • 🌐 Online-валидаторы:
    • 🔗 JSONLint — проверяет синтаксис и форматирует код.
    • 🔗 JSON Formatter — визуализирует структуру.
  • 💻 Локальные инструменты:
    • 📝 Notepad++ с плагином JSON Viewer.
    • 🦊 Visual Studio Code (встроенная поддержка JSON).
  • 🤖 Библиотеки для 1С:
    • Используйте функцию ПрочитатьJSON() для проверки, что файл корректно читается обратно в 1С.

Пример кода для проверки JSON в 1С:

Процедура ПроверитьJSON(ПутьКФайлу)

ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8);

Содержимое = ЧтениеТекста.Прочитать();

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

Попытка

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

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

Результат = ПрочитатьJSON(ЧтениеJSON);

Сообщить("JSON корректен! Прочитано объектов: " + ТипЗнч(Результат));

Исключение

Сообщить("Ошибка в JSON: " + ОписаниеОшибки());

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

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

Типичные ошибки, которые находит валидация:

  • 🔸 Пропущенные кавычки: {наименование: "Товар"} → должно быть {"наименование": "Товар"}.
  • 🔸 Лишние запятые: ["item1", "item2",] → убрать запятую после последнего элемента.
  • 🔸 Неэкранированные символы: "текст с "кавычками" → заменить на "текст с \"кавычками\"".
  • 🔸 Несоответствие типов: {"цена": "100"} вместо {"цена": 100}.
💡

Всегда проверяйте JSON на валидность перед отправкой во внешнюю систему. Ошибки формата — самая частая причина отказов при интеграции.

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

Как экспортировать в JSON данные с отбором по дате?

Используйте запрос с условием по дате. Пример:

ТекстЗапроса = "ВЫБРАТЬ ...

|ГДЕ ДатаДокумента >= &НачалоПериода

| И ДатаДокумента <= &КонецПериода";

Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(ТекущаяДата()));

Запрос.УстановитьПараметр("КонецПериода", КонецДня(ТекущаяДата()));

Для динамического отбора добавьте в обработку поля ввода для дат.

Можно ли в JSON сохранить картинки (из справочника номенклатуры)?

JSON — текстовый формат, поэтому картинки сохраняются как:

  1. Ссылки: в JSON пишется путь к файлу (например, "image": "/upload/123.jpg").
  2. Base64: картинка кодируется в строку (увеличивает размер файла в 1.3-1.5 раза). Пример кода:
КартинкаBase64 = Base64Строка(ДвоичныеДанные.ПолучитьИзФайла(ПутьККартинке));

ДанныеJSON.Вставить("Изображение", КартинкаBase64);

<