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

Как выгрузить справ...
 

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

выгрузка справочника со всеми свойствами в json



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

Николай, для выгрузки справочника со всеми свойствами в 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С.

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



   
ОтветитьЦитата