База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как выгрузить справочник с реквизитами в JSON используя 1С? › RE: Как выгрузить справочник с реквизитами в JSON используя 1С?
Николай, для выгрузки справочника со всеми свойствами в JSON в 1С:Предприятии можно использовать встроенные механизмы сериализации XDTO с записью в JSON. Вот пример процедуры, которая выгружает все элементы справочника с их реквизитами в JSON-файл:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
&НаСервереБезКонтекста Процедура ВыгрузитьСправочникВJSON(ИмяСправочника, ИмяФайла) // Получаем справочник по имени Справочник = Справочники[ИмяСправочника]; // Создаем объект записи JSON Запись = Новый ЗаписьJSON; ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); Запись.ОткрытьФайл(ИмяФайла,,, ПараметрыЗаписиJSON); // Начинаем запись корневого объекта Запись.ЗаписатьНачалоОбъекта(); // Получаем выборку по справочнику Выборка = Справочник.Выбрать(); Пока Выборка.Следующий() Цикл // Получаем объект элемента справочника Объект = Выборка.ПолучитьОбъект(); // Записываем элемент справочника с указанием типа (для корректной десериализации) СериализаторXDTO.ЗаписатьJSON(Запись, Объект, НазначениеТипаXML.Явное); // Если нужно, можно добавить разделитель между элементами (например, запятую), // но в JSON это нужно делать аккуратно, поэтому лучше формировать массив (см. ниже) КонецЦикла; // Завершаем корневой объект Запись.ЗаписатьКонецОбъекта(); // Закрываем файл Запись.Закрыть(); Сообщить("Выгрузка справочника " + ИмяСправочника + " в JSON завершена."); КонецПроцедуры |
Однако такой подход создаст JSON с набором объектов без массива, что не всегда удобно. Лучше формировать JSON-массив, где каждый элемент — это объект справочника. Вот пример с формированием массива:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
&НаСервереБезКонтекста Процедура ВыгрузитьСправочникВJSON_Массив(ИмяСправочника, ИмяФайла) Справочник = Справочники[ИмяСправочника]; Запись = Новый ЗаписьJSON; ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); Запись.ОткрытьФайл(ИмяФайла,,, ПараметрыЗаписиJSON); // Записываем начало массива Запись.ЗаписатьНачалоМассива(); Выборка = Справочник.Выбрать(); Пока Выборка.Следующий() Цикл Объект = Выборка.ПолучитьОбъект(); // Записываем объект с явным указанием типа СериализаторXDTO.ЗаписатьJSON(Запись, Объект, НазначениеТипаXML.Явное); КонецЦикла; // Записываем конец массива Запись.ЗаписатьКонецМассива(); Запись.Закрыть(); Сообщить("Выгрузка справочника " + ИмяСправочника + " в JSON завершена."); КонецПроцедуры |
В результате вы получите JSON-массив, где каждый элемент — это полный объект справочника со всеми реквизитами и типами.
Если нужно выгрузить конкретный справочник, например «Сотрудники», вызов будет таким:
|
1 |
ВыгрузитьСправочникВJSON_Массив("Сотрудники", "C:tempSotrudniki.json"); |
—
Если требуется более компактный JSON без служебных данных типа #type, можно сериализовать объекты вручную, формируя структуру и записывая ее через ЗаписатьJSON или используя Объект.Выгрузить() с последующей конвертацией.
—
Рекомендую посмотреть здесь: https://infostart.ru/public/1153191/ — там подробно описаны техники сериализации и примеры работы с JSON в 1С.
Если нужна помощь с конкретным кодом или форматом — обращайтесь!