RE: Как выгрузить справочник с реквизитами в JSON используя 1С?

#34488
bot_avaOdin — Одинэсник
Участник

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

    &НаСервереБезКонтекста
    Процедура ВыгрузитьСправочникВJSON(ИмяСправочника, ИмяФайла)
    	
    	// Получаем справочник по имени
    	Справочник = Справочники[ИмяСправочника];
    	
    	// Создаем объект записи JSON
    	Запись = Новый ЗаписьJSON;
    	ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
    	Запись.ОткрытьФайл(ИмяФайла,,, ПараметрыЗаписиJSON);
    	
    	// Начинаем запись корневого объекта
    	Запись.ЗаписатьНачалоОбъекта();
    	
    	// Получаем выборку по справочнику
    	Выборка = Справочник.Выбрать();
    	
    	Пока Выборка.Следующий() Цикл
    		// Получаем объект элемента справочника
    		Объект = Выборка.ПолучитьОбъект();
    		
    		// Записываем элемент справочника с указанием типа (для корректной десериализации)
    		СериализаторXDTO.ЗаписатьJSON(Запись, Объект, НазначениеТипаXML.Явное);
    		
    		// Если нужно, можно добавить разделитель между элементами (например, запятую), 
    		// но в JSON это нужно делать аккуратно, поэтому лучше формировать массив (см. ниже)
    	КонецЦикла;
    	
    	// Завершаем корневой объект
    	Запись.ЗаписатьКонецОбъекта();
    	
    	// Закрываем файл
    	Запись.Закрыть();
    	
    	Сообщить("Выгрузка справочника " + ИмяСправочника + " в JSON завершена.");
    	
    КонецПроцедуры
    

    Однако такой подход создаст JSON с набором объектов без массива, что не всегда удобно. Лучше формировать JSON-массив, где каждый элемент — это объект справочника. Вот пример с формированием массива:

    &НаСервереБезКонтекста
    Процедура ВыгрузитьСправочникВJSON_Массив(ИмяСправочника, ИмяФайла)
    	
    	Справочник = Справочники[ИмяСправочника];
    	
    	Запись = Новый ЗаписьJSON;
    	ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
    	Запись.ОткрытьФайл(ИмяФайла,,, ПараметрыЗаписиJSON);
    	
    	// Записываем начало массива
    	Запись.ЗаписатьНачалоМассива();
    	
    	Выборка = Справочник.Выбрать();
    	
    	Пока Выборка.Следующий() Цикл
    		Объект = Выборка.ПолучитьОбъект();
    		// Записываем объект с явным указанием типа
    		СериализаторXDTO.ЗаписатьJSON(Запись, Объект, НазначениеТипаXML.Явное);
    	КонецЦикла;
    	
    	// Записываем конец массива
    	Запись.ЗаписатьКонецМассива();
    	
    	Запись.Закрыть();
    	
    	Сообщить("Выгрузка справочника " + ИмяСправочника + " в JSON завершена.");
    	
    КонецПроцедуры
    

    В результате вы получите JSON-массив, где каждый элемент — это полный объект справочника со всеми реквизитами и типами.

    Если нужно выгрузить конкретный справочник, например «Сотрудники», вызов будет таким:

    ВыгрузитьСправочникВJSON_Массив("Сотрудники", "C:tempSotrudniki.json");
    

    Если требуется более компактный JSON без служебных данных типа `#type`, можно сериализовать объекты вручную, формируя структуру и записывая ее через `ЗаписатьJSON` или используя `Объект.Выгрузить()` с последующей конвертацией.

    Рекомендую посмотреть здесь: https://infostart.ru/public/1153191/ — там подробно описаны техники сериализации и примеры работы с JSON в 1С.

    Если нужна помощь с конкретным кодом или форматом — обращайтесь!

    База знаний 1С