Имя: Пароль:
1C
 
Как упаковать весь объект (справочник) в JSON?
0 1сПупс
 
24.02.26
13:34
Коллеги, доброго дня!
Есть элемент справочника ФизическиеЛица который нужно весь (со всеми реквизитами упаковать в JSON)

Нашел метод глобального контекста ЗаписатьJSON:


Выборка = ПланыОбмена.ВыбратьИзменения(Узел, Узел.НомерОтправленного);

Пока Выборка.Следующий() Цикл
	
	Источник = Выборка.Получить();        //Спр ФизЛица
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON,Источник);    //ошибка: обнаружены несовместимые типы
	СтрокаJSON=ЗаписьJSON.Закрыть();
	
КонецЦикла;


Читаю СП, понимаю что передаю пустые ссылки (Родитель) и мне нужно преобразовывать это. Куда копать?
1 craxx
 
24.02.26
13:41
(0) ну сначала в структуру потом структуру в json.
Алгоритм предлагаю самому написать.
2 ass1c
 
24.02.26
13:52
3 p-soft
 
24.02.26
13:47
(0) ссылочные типы нельзя, преобразовывать надо. например, через XMLСтрока(). выгружаем уид справочника/документа или код перечисления, а получатель уже сам определяет алгоритм поиска.
если весь объект, то формируем пакет из его атрибутов.
такой способ позволяет не привязываться к конкретным метаданным
4 Маленький Вопросик
 
24.02.26
13:56
сериализатор шляпа... тянет не значения, гуиды.... у меня есть где-то обработки под твою задачу (0) - найду выложу где надо....
5 1сПупс
 
24.02.26
14:32
(2) теперь кажется понял, у меня на входе метода была ссылка справочника, и СериализаторXDTO.ЗаписатьJSON выводило JSON только с гуидом, когда передал тип Объект, вернулся JSON со всеми реквизитами, благодарю!

СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON,Источник.ПолучитьОбъект(),НазначениеТипаXML.Явное);
6 ass1c
 
24.02.26
14:40
(5) +. Да, иногда такие нюансы можно упустить и потратить из-за того кучу времени.
7 craxx
 
24.02.26
14:41
(5) так ссылочные реквизиты он тебе ГУИДами сериализует.
Надо таки в структуру.
Или хотя бы цель сериализации напиши
8 Маленький Вопросик
 
24.02.26
15:04
(7) обмен пишет... с
9 Stepashkin
 
24.02.26
15:09
(2) 👍
10 ProxyInspector
 
24.02.26
15:14
У меня есть сериализатор любого объекта 1с типа ДокументСсылка, СправочникСсылка, ДокументОбъект, СправочникОбъект, Массив, Структура, Соответствие, Дата, ТаблизаЗначений, Перечисление, ХранилищеЗначения.
  Там примерно 500 строк кода.
Как это описать я не знаю.
11 ProxyInspector
 
24.02.26
15:16
Примерно так :)
Функция СформироватьСтрокаJSON(Элемент, ПараметрыОбработки = Неопределено) Экспорт
    
    
    ЕСЛИ ПараметрыОбработки = Неопределено ТОГДА ПараметрыОбработки = Новый Соответствие; КОНЕЦЕСЛИ;
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина);
    ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
    ЗаписьJSON.ПроверятьСтруктуру = Истина;
    
    ЗначениеJSON(ЗаписьJSON,Элемент, ПараметрыОбработки);
    
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    Возврат СтрокаJSON;
КонецФункции
12 ProxyInspector
 
24.02.26
15:17
Осталось только функция ЗначениеJSON()
на 500 строк кода
13 ProxyInspector
 
24.02.26
15:20
Самое интересное это не Сериализатор в JSON, а Десериализатор из JSON.
14 ProxyInspector
 
24.02.26
15:25
Процедура ЗначениеJSON(ЗаписьJSON, ТекДанные, ПараметрыОбработки = Неопределено) Экспорт
    
    Значение = ТекДанные;
...
    ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗначения) Тогда
        ЗаписьJSON.ЗаписатьНачалоОбъекта();
        
        МД = Значение.Метаданные();
        ИмяСправочника = МД.Имя;
        
        ЗаписьJSON.ЗаписатьИмяСвойства("Тип");
        ЗаписьJSON.ЗаписатьЗначение("СправочникСсылка."+ИмяСправочника );

        ЗаписьJSON.ЗаписатьИмяСвойства("GUID");
        ЗаписьJSON.ЗаписатьЗначение(Строка(Значение.УникальныйИдентификатор()) );
        
        ЭтоГруппа = Значение.ЭтоГруппа;
        ЗаписьJSON.ЗаписатьИмяСвойства("ЭтоГруппа");
        ЗаписьJSON.ЗаписатьЗначение(ЭтоГруппа );
        
        ЗаписьJSON.ЗаписатьИмяСвойства("Код");
        ЗаписьJSON.ЗаписатьЗначение(Значение.Код );
        
        ЗаписьJSON.ЗаписатьИмяСвойства("Наименование");
        ЗаписьJSON.ЗаписатьЗначение(Строка(Значение.Наименование) );
        
        ЗаписьJSON.ЗаписатьИмяСвойства("Представление");
        ЗаписьJSON.ЗаписатьЗначение(СокрЛП(Значение) );

            ТекИмяРеквизита = "Владелец";
            ТекЗначениеРеквизита = Значение[ТекИмяРеквизита];
            ЗаписьJSON.ЗаписатьИмяСвойства(ТекИмяРеквизита);
            ЗначениеJSON(ЗаписьJSON, ТекЗначениеРеквизита, ПараметрыОбработки);

   ...
КонецПроцедуры

Где то так
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.