База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как правильно сериализовать структуру в JSON в 1С без СериализаторXDTO?
- В этой теме 1 ответ, 2 участника, последнее обновление 11 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
26 августа 2026 в 16:15 #38482
Правильно реши задачу
Процедура Кнопка2Нажатие(Элемент)
ПолучениеДанныхИзДокумента =Новый Структура;
ПолучениеДанныхИзДокумента.Вставить(«ДокументРеализации»,Строка(СсылкаНаДокумент));
ПолучениеДанныхИзДокумента.Вставить(«ПолеОрганизация»,Строка(Организация) );
ПолучениеДанныхИзДокумента.Вставить(«ПолеОргИНН»,Строка(ОрганизацияИНН) );
ПолучениеДанныхИзДокумента.Вставить(«ПолеСклад»,Строка(Склад) );
ПолучениеДанныхИзДокумента.Вставить(«ПолеБанкСчет»,Строка(БанкСчет) );
ПолучениеДанныхИзДокумента.Вставить(«ПолеКонтрагент»,Строка(Контрагент) );
ПолучениеДанныхИзДокумента.Вставить(«ПолеДоговор», Строка(Договор) );
ПолучениеДанныхИзДокумента.Вставить(«ПолеОснование»,Строка(Основание) );
ПолучениеДанныхИзДокумента.Вставить(«ПолеПолучатель», Строка(Получатель));
ПолучениеДанныхИзДокумента.Вставить(«ПолеВсегоДокумент»,Строка(ВсегоДокумент) );
ПолучениеДанныхИзДокумента.Вставить(«ПолеНДСДокумент»,Строка(НдсДокумент));
ПолучениеДанныхИзДокумента.Вставить(«ПолеТипЦен»,Строка(ТипЦен));
ПолучениеДанныхИзДокумента.Вставить(«ПолеДатаДокумента»,Строка(ДатаДокумента));
ПолучениеДанныхИзДокумента.Вставить(«ПолеНомерДокумента»,Строка(НомерДокумента));МассивТаблицы = Новый Массив;
Для каждого СтрТаблицы Из ТабличнаяЧасть Цикл
СтруктураСтроки = Новый Структура;
СтруктураСтроки.Вставить(«Артикул»,СтрТаблицы.Артикул);
СтруктураСтроки.Вставить(«Номенклатура»,СтрТаблицы.Номенклатура);
СтруктураСтроки.Вставить(«Количество»,СтрТаблицы.Количество);
СтруктураСтроки.Вставить(«ЕдИзмерения»,СтрТаблицы.ЕдИзмерения);
СтруктураСтроки.Вставить(«Коэффицент»,СтрТаблицы.Коэффицент);
СтруктураСтроки.Вставить(«Цена»,СтрТаблицы.Цена);
СтруктураСтроки.Вставить(«СуммаБезСкидок»,СтрТаблицы.СуммаБезСкидок);
СтруктураСтроки.Вставить(«ПроцентРучнойСкидки»,СтрТаблицы.ПроцентРучнойСкидки);
СтруктураСтроки.Вставить(«Сумма»,СтрТаблицы.Сумма);
СтруктураСтроки.Вставить(«НДС»,СтрТаблицы.НДС);
СтруктураСтроки.Вставить(«СуммаНДС»,СтрТаблицы.СуммаНДС);
СтруктураСтроки.Вставить(«Всего»,СтрТаблицы.Всего);
СтруктураСтроки.Вставить(«Качество»,СтрТаблицы.Качество);
СтруктураСтроки.Вставить(«Склад»,СтрТаблицы.Склад);
СтруктураСтроки.Вставить(«ТиповаяОперация»,СтрТаблицы.ТиповаяОперация);
СтруктураСтроки.Вставить(«ДатаВыработки»,СтрТаблицы.ДатаВыработки);МассивТаблицы.Добавить(СтруктураСтроки);
КонецЦикла;
ПолучениеДанныхИзДокумента.Вставить(«Массив»,МассивТаблицы);Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Фильтр = «Файлы JSON (.json)|.json»;
Если НЕ Диалог.Выбрать() Тогда
Возврат;
КонецЕсли;
Путь = Диалог.ПолноеИмяФайла;
// Сериализация структуры в JSON
ПолучениеФайла = ПолучениеФайла(ПолучениеДанныхИзДокумента, Путь);
//СтрокаJSON = СериализаторXDTO.ЗаписатьJSON(ПолучениеДанныхИзДокумента);
//
//Файл = Новый Файл(Путь);
//
//Поток = Файл.ОткрытьДляЗаписи();
//
//Поток.ЗаписатьСтроку(СтрокаJSON);
//
//Поток.Закрыть();//
// ЗаписьJSON = Новый ЗаписьJSON;
// ЗаписьJSON.ОткрытьФайл();//ЗаписьJSON = Новый ЗаписьJSON;
//ПараметрыЗаписиJson = Новый ПараметрыЗаписиJSON(,Символы.Таб);
//ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJson);
//
//ЗаписатьJSON(ЗаписьJSON, ПолучениеДанныхИзДокумента);
//
//СтрокаJSON = ЗаписьJSON.Закрыть();
//ИмяФайла = «C:Usersuser-31DesktopОбработкиПроверкаДжисона.json»;//jsonстрока =ПолучениеДанныхИзДокумента.
//Макет = ОбработкаОбъект.ПолучитьМакет(«Макет»);
//ОбластьШапки = Макет.ПолучитьОбласть(«ШапкаДанных»);
//ОбластьШапкиКонецПроцедуры
Функция ПолучениеФайла(ПолучениеДанныхИзДокумента, Путь)
ПотокСтроки = Новый ЗаписьСтроки();Сериализатор = Новый СериализаторXDTO();
Сериализатор.ЗаписатьJSON(ПотокСтроки, ПолучениеДанныхИзДокумента);
СтрокаJSON = ПотокСтроки.Закрыть();
Файл = Новый Файл(Путь);
Поток = Файл.ОткрытьДляЗаписи();
Поток.ЗаписатьСтроку(СтрокаJSON);
Поток.Закрыть();
//СтрокаJSON = СериализаторXDTO.ЗаписатьJSON(ПолучениеДанныхИзДокумента);
//
// Файл = Новый Файл(Путь);
//
// Поток = Файл.ОткрытьДляЗаписи();
//
// Поток.ЗаписатьСтроку(СтрокаJSON);
//
// Поток.Закрыть();Переменая= 1;
Возврат Переменая ;
КонецФункции // ПолучениеФайла(){ВнешняяОбработка.СохранениеРеализацииДляАльфы.Форма.Форма.Форма(151,22)}: Тип не определен (ЗаписьСтроки)
ПотокСтроки = Новый <<?>>ЗаписьСтроки(); (Проверка: Толстый клиент (обычное приложение))
{ВнешняяОбработка.СохранениеРеализацииДляАльфы.Форма.Форма.Форма(153,23)}: Конструктор не найден
Сериализатор = Новый <<?>>СериализаторXDTO(); (Проверка: Толстый клиент (обычное приложение)) -
26 августа 2026 в 16:15 #38483
Ваша ошибка связана с тем, что объекты
ЗаписьСтрокииСериализаторXDTOотсутствуют в вашей версии платформы 1С (толстый клиент, обычное приложение). Эти объекты появились в более новых версиях платформы (8.3.7+).Для решения задачи сериализации структуры в JSON с выбором файла в более старых версиях 1С (до 8.3.7) используйте стандартные методы
ПрочитатьJSON()иЗаписатьJSON()из глобального контекста, либо реализуйте сериализацию вручную.Вот рабочий пример для версии 8.3.6 и ниже, без использования
СериализаторXDTO:1С (Код)123456789101112131415161718192021222324252627282930313233343536373839Процедура Кнопка2Нажатие(Элемент)// Формируем структуру с даннымиПолучениеДанныхИзДокумента = Новый Структура;ПолучениеДанныхИзДокумента.Вставить("ДокументРеализации", Строка(СсылкаНаДокумент));// ... вставьте остальные поля как у вас ...МассивТаблицы = Новый Массив;Для каждого СтрТаблицы Из ТабличнаяЧасть ЦиклСтруктураСтроки = Новый Структура;СтруктураСтроки.Вставить("Артикул", СтрТаблицы.Артикул);// ... остальные поля ...МассивТаблицы.Добавить(СтруктураСтроки);КонецЦикла;ПолучениеДанныхИзДокумента.Вставить("Массив", МассивТаблицы);// Диалог выбора файлаДиалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);Диалог.Фильтр = "Файлы JSON (*.json)|*.json";Если НЕ Диалог.Выбрать() ТогдаВозврат;КонецЕсли;Путь = Диалог.ПолноеИмяФайла;// Сериализация и запись в файлЗаписатьJSONВФайл(ПолучениеДанныхИзДокумента, Путь);КонецПроцедурыПроцедура ЗаписатьJSONВФайл(Данные, Путь)// Создаем объект записи JSONЗаписьJSON = Новый ЗаписьJSON;ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб);ЗаписьJSON.ОткрытьФайл(Путь, , , ПараметрыЗаписи);// Записываем структуру в JSONЗаписатьJSON(ЗаписьJSON, Данные);// Закрываем поток записиЗаписьJSON.Закрыть();КонецПроцедурыОбъяснения:
—
ЗаписьJSONиПараметрыЗаписиJSON— стандартные объекты платформы 1С для записи JSON.
—ЗаписатьJSON(ЗаписьJSON, Данные)— глобальная процедура, которая сериализует структуру/массив в JSON.
—ЗаписьJSON.ОткрытьФайлоткрывает файл для записи.
—ЗаписьJSON.Закрыть()закрывает файл.Такой код работает в версиях 8.3.6 и ниже, где нет
СериализаторXDTO.Если у вас версия платформы ниже 8.3.6, то придется использовать сторонние библиотеки или писать собственную сериализацию.
—
Если хотите проверить версию платформы, используйте:
1С (Код)1Сообщить(ВерсияПлатформы());—
Рекомендации:
— Используйте
ЗаписатьJSONиЧитатьJSONиз стандартных средств платформы.
— Не используйтеСериализаторXDTOв старых версиях.
— Для чтения/записи JSON в файл используйтеЗаписьJSONиЧтениеJSON.—
Рекомендую посмотреть здесь — пример работы с JSON в 1С:
https://helpf.pro/faq/view/1664.html
https://infostart.ru/public/1043459/
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.