Документы и Справочники в JSON

0. Teut_Vlad 20.06.19 19:05 Сейчас в теме
Пример выгрузки всех данных Документа или Справочника в JSON

Перейти к публикации

Лучшие комментарии
1. ArchLord42 71 21.06.19 09:44 Сейчас в теме
На что готовы люди, только лишь бы не читать справку, вот же давно (с 8.3.7) имеется из коробки это вот все.

http://v8.1c.ru/o7/201501json/index.htm
Dmitri93; RFP; rozer; CyberCerber; wowik; Yashazz; BESL; mnemchinov; Xershi; DarkAn; Rustig; Поручик; Teut_Vlad; awk; magvay_k; +15 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ArchLord42 71 21.06.19 09:44 Сейчас в теме
На что готовы люди, только лишь бы не читать справку, вот же давно (с 8.3.7) имеется из коробки это вот все.

http://v8.1c.ru/o7/201501json/index.htm
Dmitri93; RFP; rozer; CyberCerber; wowik; Yashazz; BESL; mnemchinov; Xershi; DarkAn; Rustig; Поручик; Teut_Vlad; awk; magvay_k; +15 Ответить
2. Teut_Vlad 21.06.19 10:21 Сейчас в теме
(1) обновил)
только возможностей для манипуляций стало меньше
3. Rustig 1609 21.06.19 11:08 Сейчас в теме
(1)"читать справку" ?
а сами прислали заметки из зазеркалья....

за ссылку спасибо!
4. ArchLord42 71 21.06.19 11:55 Сейчас в теме
(3) если что урл зазеркалья https://wonderland.v8.1c.ru/

Upd: это старое зазеркалье да, но в справке тоже есть это, только не так обширнл описано
Teut_Vlad; +1 Ответить
5. 🅵🅾️🆇 473 21.06.19 12:46 Сейчас в теме
Если что, СериализаторXDTO - не то что от вас будут ожидать в большинстве случаев.

Если с кемт интегрируетесь, лучше действовать через стандартную сериализацию, а для ссылок и сложных объектов там в конструкторе можно указать функцию преобразования в примитивы.
6. Teut_Vlad 21.06.19 12:57 Сейчас в теме
7. 🅵🅾️🆇 473 21.06.19 12:59 Сейчас в теме
(6)
Вот вам пример)

Функция СериализоватьJSON(Данные, ФункцияПреобразования = "БыстроJSON") Экспорт
    ЗаписьJSON                                              = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    НастройкиСериализации                                   = Новый НастройкиСериализацииJSON();
    НастройкиСериализации.СериализовыватьМассивыКакОбъекты  = Ложь;
	НастройкиСериализации.ФорматСериализацииДаты            = ФорматДатыJSON.ISO;
	НастройкиСериализации.ВариантЗаписиДаты                 = ВариантЗаписиДатыJSON.ЛокальнаяДата; // ВариантЗаписиДатыJSON.ЛокальнаяДатаСоСмещением;	
    ЗаписатьJSON(ЗаписьJSON, Данные, НастройкиСериализации, ФункцияПреобразования, веб_сериализация);
    Возврат ЗаписьJSON.Закрыть();
КонецФункции // СериализоватьJSON()
//************************************************************
Функция БыстроJSON(Знач Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт
	
	// Таблица значений
	Если ТипЗнч(Значение) = Тип("ТаблицаЗначений") Тогда
		/// TODO: преобразовывать ссылки из таблицы значений одним запросом, чтоб снизить количество обращений к базе данных.
		/// ...
			
		// Переведем названия колонок на латиницу
		Для Каждого Колонка Из Значение.Колонки Цикл
			matchingFieldNames  = веб_заявки_повт.matchingFieldNames(, Истина);
			ИмяЛат              = matchingFieldNames[НРег(Колонка.Имя)]; 
			Колонка.Имя         = ?(ИмяЛат=Неопределено, Колонка.Имя, ИмяЛат);			
		КонецЦикла;
		
		// Преобразуем в массив структур
		Возврат ОбщегоНазначения.ТаблицаЗначенийВМассив(Значение);		
	КонецЕсли;
	
	Возврат XMLСтрока(Значение);
КонецФункции // БыстроJSON()
Показать
CyberCerber; AlexBober78; mvxyz; Teut_Vlad; +4 Ответить
8. 🅵🅾️🆇 473 21.06.19 15:26 Сейчас в теме
(7)
Ссылки, например, можете отдавать в виде структур, в которых фигурируют данные из XMLСтрока() и Метаданные()

Для справочников, дополнительно код, для документов - номер и дату.

Ну и тд и тп.
9. Yashazz 3576 23.06.19 18:34 Сейчас в теме
Мда, ценность публикации ниже плинтуса.

А ещё есть CommerceML )))

А автору советую поизучать десериализацию дат, там неслабые грабли на самом деле спрятаны.
CyberCerber; acanta; +2 Ответить
11. Teut_Vlad 24.06.19 10:54 Сейчас в теме
(9) нужна была выгрузка на сайт.
1) Принимающая сторона из всех вариантов выбрала мой. Через получение структуры документов и сериализации каждого реквизита отдельно. Да в 99% случаев такой способ менее подходит чем типовые.

2) В процессе гуглинга и поиске на инфостарте про JSON маловато информации. Хотелось запустить тему, устроить holywar. Что бы новички натыкались на эту тему, и черпали для себя новую полезную информацию, в т. ч. и я.
10. Светлый ум 261 24.06.19 09:34 Сейчас в теме
Зато комментарии про сериализацию, дадут пищу для размышления многим. Польза есть всегда.
Bene_Valete; Eleepod; ErshKUS; CyberCerber; Teut_Vlad; +5 Ответить
12. Yashazz 3576 26.06.19 17:13 Сейчас в теме
(10) Следуя вашей логике, я могу замутить любой срач, опубликовав любую хрень, и потом отмазываться полезностью комментов, написанных более квалифицированными специалистами. Не смешно.
13. Teut_Vlad 26.06.19 17:20 Сейчас в теме
(12) вы всех так достаете, или я чем то выделился?)
моя публикация попадет в топ 10 на инфостарте, по бессмысленности?)
14. Yashazz 3576 26.06.19 18:40 Сейчас в теме
(13) Не переводите на личности. По сути моего вопроса есть что ответить? Что делать публикации только ради комментов - это правильно?
15. e.budaev 10.07.19 11:22 Сейчас в теме
Табличную часть структуры по другому лучше формировать, н-р:

ТаблицаЗнач = Объект[ТабличнаяЧасть.Имя].Выгрузить();
		МассивТабЧасти = Новый Массив;
		Для Каждого СтрТЗ Из ТаблицаЗнач Цикл
			СтруктураСтр = Новый Структура;
			Для Каждого Колонка Из ТаблицаЗнач.Колонки Цикл
				Если ТипЗнч(СтрТЗ[Колонка.Имя]) = тип("Число") ИЛИ ТипЗнч(СтрТЗ[Колонка.Имя]) = тип("Дата") ИЛИ ТипЗнч(СтрТЗ[Колонка.Имя]) = тип("Булево") тогда
					СтруктураСтр.Вставить(Колонка.Имя, СтрТЗ[Колонка.Имя]);
				Иначе
					СтруктураСтр.Вставить(Колонка.Имя, Строка(СтрТЗ[Колонка.Имя]));
				КонецЕсли;
				
				Если НЕ СтрТЗ[Колонка.Имя] = Неопределено и Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(СтрТЗ[Колонка.Имя])) тогда
					СтруктураСтр.Вставить(Колонка.Имя+"Код", СтрТЗ[Колонка.Имя].Код);
				ИначеЕсли НЕ СтрТЗ[Колонка.Имя] = Неопределено и Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(СтрТЗ[Колонка.Имя])) тогда
					СтруктураСтр.Вставить(Колонка.Имя+"Номер", СтрТЗ[Колонка.Имя].Номер);
				КонецЕсли;
			КонецЦикла;
			МассивТабЧасти.Добавить(СтруктураСтр);
		КонецЦикла;
		Структура.Вставить(ТабличнаяЧасть.Имя, МассивТабЧасти);
Показать
Teut_Vlad; +1 Ответить
Оставьте свое сообщение
Вопросы с вознаграждением