Добрый день, сегодня хочу предоставить вам самый простейший способ реализации JSON в 1С.
Разберу его на примере выгрузки документа в жсон строку с последующей конвертацией ее в файл, а также его чтения и выгрузки из файла
Для начала разберем чтение, мы добавляем интересующие нас документы в табличную часть
После чего начинаем читать данные документа и записываем их в массив, дабы перевести эти данные в строку JSON:
Функция ВыгрузитьНесколькоНаСервере()
//Создание массива куда будут грузится структуры с данными
МассивJSON = Новый Массив;
СтрокаJSON = "";
//Цикл для выбора нужного дока/справочника из ТЧ
Для Каждого СтрокаТЧ Из МетаданныеТЧ Цикл
ДокументТЧМета = СтрокаТЧ.СсылкаНаДокументы.Метаданные();
//Вытаскивание переменных из выбранного документа/справочника
ДокументТЧМета.ПолноеИмя();
Попытка
Наименование = СтрокаТЧ.СсылкаНаДокументы.Наименование;
Исключение
Наименование = "";
КонецПопытки;
ГУИД = СтрокаТЧ.СсылкаНаДокументы.УникальныйИдентификатор();
ГУИДСтрока = Строка(ГУИД);
ПолноеИмяСтроки = ДокументТЧМета.ПолноеИмя();
ИмяОбъекта = СтрРазделить(ПолноеИмяСтроки, ".")[1];
ТипОбъекта = СтрРазделить(ПолноеИмяСтроки, ".")[0];
//Создание переменных в структуре
Структура = Новый Структура();
Структура.Вставить("ТипОбъекта", ТипОбъекта);
Структура.Вставить("ИмяОбъекта", ИмяОбъекта);
Структура.Вставить("УИДСсылки", ГУИДСтрока);
Структура.Вставить("Наименование", Наименование);
//Записываем все отработанные структуры в массив
МассивJSON.Добавить(Структура);
КонецЦикла;
//Запись в формат Джисон
ПараметрыJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, МассивJSON, Новый НастройкиСериализацииJSON);
СтрокаJSON = СтрокаJSON + ЗаписьJSON.Закрыть();
КонецФункции
Таким образом, мы получили строку со следующим видом:
В дальнейшем, даже если мы полностью очистим ТЧ, то при нажатии на кнопку Найти документ, будет выполнен следующий код:
Процедура НайтиДокНаСервере()
МетаданныеТЧ.Очистить();
//Читаем текст, что было выгружено
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ЭтотОбъект.СтрокаJSON);
МассивJSON = ПрочитатьJSON(Чтение, Ложь);
//Получаем данные каждой структуры входящей в массив
Для Каждого Строка из МассивJSON Цикл
УИДJSON = Строка.УИДСсылки;
ТИПJSON = Строка.ТипОбъекта;
ИМЯJSON = Строка.ИмяОбъекта;
ГУИД = Новый УникальныйИдентификатор(УИДJSON);
//Получение полного пути до файла путем соединения реквизитов структуры
ПолноеИмя = ТИПJSON+"."+ИМЯJSON;
//Обращение к методам БСП который самостоятельно по полному имени находит тип к примеру "Документ.Номенклатура"
ПутьЧерезТипИИмя = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
//Получаем конкретный документ который ищем по ГУИДУ к примеру "Деликатес №2 С.НАР запеч(180г)"
ОбьектСсылка = ПутьЧерезТипИИмя.ПолучитьСсылку(ГУИД);
//Строка ТЧ из массива
стрТч = МетаданныеТЧ.Добавить();
//Ссылка на ТЧ на форме и погружение в ТЧ Дока который мы нашли
стрТч.СсылкаНаДокументы = ОбьектСсылка;
КонецЦикла;
КонецПроцедуры
И таким образом мы заполним нашу табличную часть данными, которые мы получили, прочитав строку жсон.
Если же вас заинтересовал процесс асинхронной выгрузки строки в файл, то вот данные:
&НаКлиенте
Процедура Команда1(Команда)
// Вставить содержимое обработчика.
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогВыбораФайла.Фильтр = "jsn(*.json)|*.json";
ПараметрыСценария = Новый Структура;
Оповещение = Новый ОписаниеОповещения("КаталогНачалоВыбораЗавершение", ЭтаФорма);
ПараметрыСценария.Вставить("Оповещение_ПослеЗакрытияДиалогаВыбораФайла", Оповещение);
ПараметрыСценария.Вставить("ДиалогВыбораФайла", ДиалогВыбораФайла);
ДиалогВыбораФайла.Показать(Оповещение);
КонецПроцедуры
Таким образом делается сохранение объектов, а вот их выгрузка:
&НаКлиенте
Процедура ОткрытьФайл(Команда)
//Часть отвечающая за выбор файла
ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Заголовок = "Выберите файл";
Если ДиалогВыбора.Выбрать() Тогда
ИмяФайла = ДиалогВыбора.ПолноеИмяФайла; //Выбор файла из диалогового окна
КонецЕсли;
//Условия для чтения файла JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл(ИмяФайла);
Пока ЧтениеJSON.Прочитать()Цикл
ТипJSON = ЧтениеJSON.ТипТекущегоЗначения;
Если ТипJSON = ТипЗначенияJSON.Число Или ТипJSON = ТипЗначенияJSON.Строка Или
ТипJSON = ТипЗначенияJSON.Булево Или ТипJSON = ТипЗначенияJSON.Null Тогда
Значение = ЧтениеJSON.ТекущееЗначение;
ИначеЕсли ТипJSON = ТипЗначенияJSON.Комментарий Тогда
Комментарий = ЧтениеJSON.ТекущееЗначение;
ИначеЕсли ТипJSON = ТипЗначенияJSON.ИмяСвойства Тогда
ИмяСвойства = ЧтениеJSON.ТекущееЗначение;
ИначеЕсли ТипJSON = ТипЗначенияJSON.НачалоМассива Или ТипJSON = ТипЗначенияJSON.КонецМассива ИЛИ
ТипJSON = ТипЗначенияJSON.НачалоОбъекта Или ТипJSON = ТипЗначенияJSON.КонецОбъекта ИЛИ
ТипJSON = ТипЗначенияJSON.Ничего Тогда
КонецЕсли;
КонецЦикла;
ЧтениеJSON.Закрыть();
//Вывод результата в строку на форме
ЭтотОбъект.СтрокаJSON = Значение;
КонецПроцедуры
И на этом у меня все )
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.23.66
Вступайте в нашу телеграмм-группу Инфостарт