Добрый день, сегодня хочу предоставить вам самый простейший способ реализации JSON в 1С.
Разберу его на примере выгрузки документа в жсон строку с последующей конвертацией ее в файл, а также его чтения и выгрузки из файла
Для начала разберем чтение, мы добавляем интересующие нас документы в табличную часть
После чего начинаем читать данные документа и записываем их в массив, дабы перевести эти данные в строку JSON:
Процедура НайтиДокНаСервере()
МетаданныеТЧ.Очистить();
//Читаем текст, что было выгружено
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ЭтотОбъект.СтрокаJSON);
МассивJSON = ПрочитатьJSON(Чтение, Ложь);
//Получаем данные каждой структуры входящей в массив
Для Каждого Строка из МассивJSON Цикл
УИДJSON = Строка.УИДСсылки;
ТИПJSON = Строка.ТипОбъекта;
ИМЯJSON = Строка.ИмяОбъекта;
ГУИД = Новый УникальныйИдентификатор(УИДJSON);
//Получение полного пути до файла путем соединения реквизитов структуры
ПолноеИмя = ТИПJSON+"."+ИМЯJSON;
//Обращение к методам БСП который самостоятельно по полному имени находит тип к примеру "Документ.Номенклатура"
ПутьЧерезТипИИмя = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
//Получаем конкретный документ который ищем по ГУИДУ к примеру "Деликатес №2 С.НАР запеч(180г)"
ОбьектСсылка = ПутьЧерезТипИИмя.ПолучитьСсылку(ГУИД);
//Строка ТЧ из массива
стрТч = МетаданныеТЧ.Добавить();
//Ссылка на ТЧ на форме и погружение в ТЧ Дока который мы нашли
стрТч.СсылкаНаДокументы = ОбьектСсылка;
КонецЦикла;
КонецПроцедуры
Таким образом, мы получили строку со следующим видом:
В дальнейшем, даже если мы полностью очистим ТЧ, то при нажатии на кнопку Найти документ, будет выполнен следующий код:
Процедура НайтиДокНаСервере()
МетаданныеТЧ.Очистить();
//Читаем текст, что было выгружено
Чтение = Новый Чтение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
Вступайте в нашу телеграмм-группу Инфостарт