Массив документов выгрузить в JSON

1. user655090_metis19 19.02.21 14:40 Сейчас в теме
Люди добрые, помогите! Подскажите кодом, как можно, выгрузить массив с ссылками документов в json гуглил, нифига не нашел как можно выгрузить один , знаю, а как много??? Документы с ТЧ , естественно . Спасибо , заранее

вот код:

Процедура ВыполнитьСериализацию(ИмяФайлаОтправки,ДатаДокОт, ДатаДокДо)
ЗаписиJSON = Новый ЗаписьJSON;
ЗаписиJSON.ОткрытьФайл(ИмяФайлаОтправки,,, Новый ПараметрыЗаписиJSON(, Символы.Таб));
НастройкиСериал = Новый НастройкиСериализацииJSON;
НастройкиСериал.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.ЛокальнаяДата;
НастройкиСериал.ФорматСериализацииДаты = ФорматДатыJSON.ISO;
МассивДокументов = ПолучитьЗапросомМассивСсылокДокументов(ДатаДокОт, ДатаДокДо);
Для Каждого Строка ИЗ МассивДокументов Цикл
Значение = Строка.ПолучитьОбъект();
СериализаторXDTO.ЗаписатьJSON(ЗаписиJSON, Значение, НазначениеТипаXML.Явное);
КонецЦикла;

ЗаписиJSON.Закрыть();
КонецПроцедуры
По теме из базы знаний
Найденные решения
19. spacecraft 19.02.21 15:21 Сейчас в теме
(17) да подготовить структуру масивов, в котором структура с данными документа и массив со структурой строк ТЧ. И уже полученную структуру выгрузить в json.
29. spacecraft 19.02.21 15:59 Сейчас в теме
(22) до сих пор не ясна структура выходных данных.
Но вот как вариант:
Запрос = Новый Запрос;
Запрос.Текст = 
	"ВЫБРАТЬ ПЕРВЫЕ 10
	|	ЗаказКлиента.Ссылка КАК Ссылка,
	|	ЗаказКлиента.Номер КАК Номер,
	|	ЗаказКлиента.Дата КАК Дата,
	|	ЗаказКлиента.Товары.(
	|		НомерСтроки КАК НомерСтроки,
	|		ДатаОтгрузки КАК ДатаОтгрузки,
	|		Номенклатура КАК Номенклатура,
	|		КоличествоУпаковок КАК КоличествоУпаковок,
	|		Цена КАК Цена,
	|		Сумма КАК Сумма
	|	) КАК Товары
	|ИЗ
	|	Документ.ЗаказКлиента КАК ЗаказКлиента";

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();
Запись = Новый ЗаписьJSON;
Запись.ОткрытьФайл("d:\temp\docs.json");
СтрукураВыгрузки = Новый Структура;
МассивДокументов = Новый Массив;
Пока Выборка.Следующий() Цикл
	ДанныеДокумента = Новый Структура;
	ДанныеДокумента.Вставить("Ссылка", Выборка.Ссылка);
	ДанныеДокумента.Вставить("Номер", Выборка.Номер);
	ДанныеДокумента.Вставить("Дата", Выборка.Дата);
	МассивТЧ = Новый Массив;
	ВыборкаТовары = Выборка.Товары.Выбрать();
	Пока ВыборкаТовары.Следующий() Цикл
		СтрТовары = Новый Структура;
		СтрТовары.Вставить("НомерСтроки", ВыборкаТовары.НомерСтроки);
		СтрТовары.Вставить("ДатаОтгрузки", ВыборкаТовары.ДатаОтгрузки);
		СтрТовары.Вставить("Номенклатура", ВыборкаТовары.Номенклатура);
		СтрТовары.Вставить("КоличествоУпаковок", ВыборкаТовары.КоличествоУпаковок);
		СтрТовары.Вставить("Цена", ВыборкаТовары.Цена);
		СтрТовары.Вставить("Сумма", ВыборкаТовары.Сумма);
		МассивТЧ.Добавить(СтрТовары);
	КонецЦикла;
	ДанныеДокумента.Вставить("ТЧ",МассивТЧ);
	МассивДокументов.Добавить(ДанныеДокумента);
КонецЦикла;
СтрукураВыгрузки.Вставить("Данные", МассивДокументов);
СериализаторXDTO.ЗаписатьJSON(Запись, СтрукураВыгрузки);
Запись.Закрыть();
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. tolyan_ekb 80 19.02.21 14:53 Сейчас в теме
(1) В чем проблема? Если можно один выгрузить, то в цикле можно вызывать процедуры выгрузки по одному
4. user655090_metis19 19.02.21 14:55 Сейчас в теме
(3)Нет вылазит ошибка. Я уже кучу вариантов перепробовал
5. user655090_metis19 19.02.21 14:56 Сейчас в теме
(3)Неверный порядок записи JSON
8. tolyan_ekb 80 19.02.21 15:03 Сейчас в теме
(1) зачем объект получать? Ссылка тоже ошибку выдает?
9. user655090_metis19 19.02.21 15:06 Сейчас в теме
(8)Нет не выдает, предлагаете просто:
СериализаторXDTO.ЗаписатьJSON(ЗаписиJSON, Строка, НазначениеТипаXML.Явное) так?
10. user655090_metis19 19.02.21 15:08 Сейчас в теме
(9)Если так то тоже не работает( я пробовал
12. spacecraft 19.02.21 15:11 Сейчас в теме
(1) уточнили бы что конкретно нужно выгрузить. А то вроде только ссылки, то уже и ТЧ.
Ссылка обычно выгружаются как ГУИД документа.
13. user655090_metis19 19.02.21 15:13 Сейчас в теме
(12) Так я написал, вроде, массив с документами у которых есть ТЧ, просто ссылки на документы я могу выгрузить, реквизиты тоже могу выгрузить, но если есть ТЧ в Документе, а она есть , я не могу допетрить как выгрузить, когда самих документов много(они в массиве)
16. spacecraft 19.02.21 15:18 Сейчас в теме
(13) исходить нужно из того кто и как это будет читать.
А так как вариант: Струкутра в ней массив. В этом массиве структура такого содержимого:
"Ссылка" - гуид документа
"ИмяРеквизита" - данные реквизита
"ТЧ" - массив. В ней структура с данными каждой строки
18. user655090_metis19 19.02.21 15:20 Сейчас в теме
(16) Беда в том, что мне нужно в файл это выплюнуть)))
20. spacecraft 19.02.21 15:21 Сейчас в теме
(18) это вообще не проблема.
23. user655090_metis19 19.02.21 15:24 Сейчас в теме
(20)ТАк вот как???))))) Не могу допетрить))
17. user655090_metis19 19.02.21 15:18 Сейчас в теме
(12) Могу более точно, вытягиваю запросом ссылки на Документы с ТЧ "Товары", Вытягиваю все это в массив, возвращаю его, и возникает вопрос, каким образом можно выгрузить этот список документов в цикле в JSON&
19. spacecraft 19.02.21 15:21 Сейчас в теме
(17) да подготовить структуру масивов, в котором структура с данными документа и массив со структурой строк ТЧ. И уже полученную структуру выгрузить в json.
22. user655090_metis19 19.02.21 15:23 Сейчас в теме
(19)Можно более подробно , пожалуйста?
27. user655090_metis19 19.02.21 15:43 Сейчас в теме
(19) ТАК? Накатал быстренько:

МассивДокументов = Новый Массив;
	
	СтрукСпискаДоков = Новый Структура; 
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ЧекККМ.Ссылка
		|ИЗ
		|	Документ.ЧекККМ КАК ЧекККМ
		|ГДЕ
		|	НЕ ЧекККМ.ПометкаУдаления
		|	И ЧекККМ.Дата МЕЖДУ &ДатаОт И &ДатаДо";
	
	Запрос.УстановитьПараметр("ДатаОт", ДатаДокОт);
	Запрос.УстановитьПараметр("ДатаДо", ДатаДокДо);
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	СтруктСпискаДокументов = Новый Структура("МассивДокументов");
	МассивСпискаДокументов = Новый Массив;
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
		СтрукДокмента = Новый Структура("Ссылка, Номер, Дата, Товары, Оплата"")
		
		СтрукДокмента.Вставить("Ссылка", ВыборкаДетальныеЗаписи.Ссылка);
		СтрукДокмента.Вставить("Номер", ВыборкаДетальныеЗаписи.Ссылка.Номер);
        СтрукДокмента.Вставить("Дата", ВыборкаДетальныеЗаписи.Ссылка.Дата);
		
		МассивТЧТовары = Новый Массив;
		МассивТЧОплата = Новый Массив;
		
		Для Каждого ИндТовары ИЗ ВыборкаДетальныеЗаписи.Ссылка.Товары Цикл
			
			СтрукТЧТовары = Новый Структура("Номенклатура, Количество, Сумма, СуммаНДС, Цена");
			СтрукТовары.Номенклатура = ИндТовары.Номенклатура;
			СтрукТовары.Количество   = ИндТовары.Количество;
			СтрукТовары.Сумма        = ИндТовары.Сумма;
			СтрукТовары.СуммаНДС     = ИндТовары.СуммаНДС;
			СтрукТовары.Цена         = ИндТовары.Цена;
			МассивТЧТовары.Добавить(СтрукТовары);
			
		КонецЦикла;	
		
		Для Каждого ИндОплата ИЗ ВыборкаДетальныеЗаписи.Ссылка.Оплата Цикл
			
			СтрукТЧОплата = Новый Структура("ВидОплаты, СуммаОплаты");
			СтрукТЧОплата.ВидОплаты   = ИндОплата.Номенклатура;
			СтрукТЧОплата.СуммаОплаты = ИндОплата.Сумма;
			МассивТЧОплата.Добавить(СтрукТЧОплата);
			
		КонецЦикла;
		
		СтрукДокмента.Вставить("Товары", МассивТЧТовары);
		СтрукДокмента.Вставить("Товары", МассивТЧТовары);
		МассивСпискаДокументов.Добавить(СтрукДокмента);
	КонецЦикла;

	    СтруктСпискаДокументов.Вставить("МассивДокументов", МассивСпискаДокументов);
	 
	 Возврат СтруктСпискаДокументов;
Показать
28. user655090_metis19 19.02.21 15:56 Сейчас в теме
(19)
 МассивДокументов = Новый Массив;
	
	СтрукСпискаДоков = Новый Структура; 
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ЧекККМ.Ссылка
		|ИЗ
		|	Документ.ЧекККМ КАК ЧекККМ
		|ГДЕ
		|	НЕ ЧекККМ.ПометкаУдаления
		|	И ЧекККМ.Дата МЕЖДУ &ДатаОт И &ДатаДо";
	
	Запрос.УстановитьПараметр("ДатаОт", ДатаДокОт);
	Запрос.УстановитьПараметр("ДатаДо", ДатаДокДо);
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	СтруктСпискаДокументов = Новый Структура("МассивДокументов");
	МассивСпискаДокументов = Новый Массив;
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
		СтрукДокмента = Новый Структура("Ссылка, Номер, Дата, Товары, Оплата");
		
		СтрукДокмента.Вставить("Ссылка", Строка(ВыборкаДетальныеЗаписи.Ссылка));
		СтрукДокмента.Вставить("Номер", ВыборкаДетальныеЗаписи.Ссылка.Номер);
        СтрукДокмента.Вставить("Дата", ВыборкаДетальныеЗаписи.Ссылка.Дата);
		
		МассивТЧТовары = Новый Массив;
		МассивТЧОплата = Новый Массив;
		
		Для Каждого ИндТовары ИЗ ВыборкаДетальныеЗаписи.Ссылка.Товары Цикл
			
			СтрукТЧТовары = Новый Структура("Номенклатура, Количество, Сумма, СуммаНДС, Цена");
			СтрукТЧТовары.Номенклатура = Строка(ИндТовары.Номенклатура);
			СтрукТЧТовары.Количество   = ИндТовары.Количество;
			СтрукТЧТовары.Сумма        = ИндТовары.Сумма;
			СтрукТЧТовары.СуммаНДС     = ИндТовары.СуммаНДС;
			СтрукТЧТовары.Цена         = ИндТовары.Цена;
			МассивТЧТовары.Добавить(СтрукТЧТовары);
			
		КонецЦикла;	
		
		Для Каждого ИндОплата ИЗ ВыборкаДетальныеЗаписи.Ссылка.Оплата Цикл
			
			СтрукТЧОплата = Новый Структура("ВидОплаты, СуммаОплаты");
			СтрукТЧОплата.ВидОплаты   = ИндОплата.ВидОплаты;
			СтрукТЧОплата.СуммаОплаты = ИндОплата.Сумма;
			МассивТЧОплата.Добавить(СтрукТЧОплата);
			
		КонецЦикла;
		
		СтрукДокмента.Вставить("Товары", МассивТЧТовары);
		СтрукДокмента.Вставить("Оплата", МассивТЧОплата);
		МассивСпискаДокументов.Добавить(СтрукДокмента);
	КонецЦикла;

	    СтруктСпискаДокументов.Вставить("МассивДокументов", МассивСпискаДокументов);
	 
	 Возврат СтруктСпискаДокументов;
Показать

ВОТ ТАКОЙ КОД РАБОТАЕТ, СПАСИБО ВАМ ОГРОМНОЕ!!!
30. spacecraft 19.02.21 16:04 Сейчас в теме
(28) никому больше это не показывайте.
31. user655090_metis19 19.02.21 16:16 Сейчас в теме
32. spacecraft 19.02.21 16:19 Сейчас в теме
(31) в запросе только ссылку получаете, а потом все данные объекта тащите через точку. Не правильно так делать. При этом загружается весь объект. Причем получается запрос в цикле. Нужно сразу все необходимые данные получить в запросе и оперировать только ими.
34. user655090_metis19 19.02.21 16:26 Сейчас в теме
(32) Да я уже обратил на это внимание, но если честно к запросу я бы потом все равно вернулся, мне важно было, чтоб данные выгрузились, но все равно , поклон вам)
33. user655090_metis19 19.02.21 16:19 Сейчас в теме
2. glek 119 19.02.21 14:53 Сейчас в теме
Массив = Новый Массив;
Для Каждого Из Цикл
Массив.Добавить(новый Структура);
КонецЦикла
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Массив);
СтрокаДляОтвета = ЗаписьJSON.Закрыть();
6. user655090_metis19 19.02.21 15:00 Сейчас в теме
(2) Не подскажете , как именно втолкать ваш вариант в мой код?
7. user655090_metis19 19.02.21 15:01 Сейчас в теме
(2)Дело в том, что массив структур я пробовал всунуть, и эска меня обломала
11. vadim.semyonov.rzn 19.02.21 15:10 Сейчас в теме
(7)
Дело в том, что массив структур я пробовал всунуть, и эска меня обломала
Я обходил такую ошибку, оборачивая массив в структуру.
14. user655090_metis19 19.02.21 15:13 Сейчас в теме
(11)Подскажите кодом , пожалуйста)
15. user655090_metis19 19.02.21 15:16 Сейчас в теме
(11) ТАК? Струк = НОвый Структура("МассивДокументов");
Струк .Вставить("МассивДокументов", МассивДокументов);
21. vadim.semyonov.rzn 19.02.21 15:22 Сейчас в теме
24. user655090_metis19 19.02.21 15:25 Сейчас в теме
(21) Разве прям массви ссылок запихать и все??? А ТЧ в них как интерпретироваться будет?
25. vadim.semyonov.rzn 19.02.21 15:34 Сейчас в теме
(24)
Разве прям массви ссылок запихать и все?
А кто говорил про массив ссылок?!?!? Каждый документ в таком массиве - структура, подготовленная описанным выше методом.
26. soft_wind 19.02.21 15:40 Сейчас в теме
надо разбить на две операции
1.получить Джинсовую строку объекта
2.поместить их в массив
3.вывести массив в Джинс

получение объектов в обратом поряде

вот пример, выполняется в Консоли произвольного кода

МассивДокументов = Новый Массив; //для теста 2 элемента Валюты
МассивДокументов.Добавить(Справочники.Валюты.НайтиПоКоду("643"));
МассивДокументов.Добавить(Справочники.Валюты.НайтиПоКоду("978"));


//МассивДокументов = ПолучитьЗапросомМассивСсылокДокументов(ДатаДокОт, ДатаДокДо);
МассивДжинс = Новый Массив;

Для Каждого Строка ИЗ МассивДокументов Цикл

лкЗаписьДжинс = Новый ЗаписьJSON;
лкЗаписьДжинс.УстановитьСтроку();
Значение = Строка.ПолучитьОбъект();
СериализаторXDTO.ЗаписатьJSON(лкЗаписьДжинс, Значение, НазначениеТипаXML.Явное);

лкТекст = лкЗаписьДжинс.Закрыть();
МассивДжинс.Добавить(лкТекст);

КонецЦикла;

лкЗаписьДжинс = Новый ЗаписьJSON;
лкЗаписьДжинс.УстановитьСтроку();
ЗаписатьJSON(лкЗаписьДжинс,МассивДжинс);
лкТекст = лкЗаписьДжинс.Закрыть();

Сообщить(лкТекст);

Показать


вот строка результата:

[
"{\r\n\"#type\": \"jcfg:CatalogObject.Валюты\",\r\n\"#value\": {\r\n\"Ref\": \"518c7fc9-1d47-11e8-af3e-00259035bb67\",\r\n\"DeletionMark\": false,\r\n\"Code\": \"643\",\r\n\"Description\": \"руб.\",\r\n\"ЗагружаетсяИзИнтернета\": false,\r\n\"НаименованиеПолное\": \"Российский рубль\",\r\n\"Наценка\": 0,\r\n\"ОсновнаяВалюта\": \"00000000-0000-0000-0000-000000000000\",\r\n\"ПараметрыПрописи\": \"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2 знака\",\r\n\"ФормулаРасчетаКурса\": \"\",\r\n\"СпособУстановкиКурса\": \"РучнойВвод\",\r\n\"Б_Идентификатор\": \"\",\r\n\"Б_НомерВерсии\": \"\"\r\n}\r\n}",
"{\r\n\"#type\": \"jcfg:CatalogObject.Валюты\",\r\n\"#value\": {\r\n\"Ref\": \"c243f49f-6023-11e8-b3e3-ac1f6b01a151\",\r\n\"DeletionMark\": false,\r\n\"Code\": \"978\",\r\n\"Description\": \"EUR\",\r\n\"ЗагружаетсяИзИнтернета\": false,\r\n\"НаименованиеПолное\": \"Евро\",\r\n\"Наценка\": 0,\r\n\"ОсновнаяВалюта\": \"00000000-0000-0000-0000-000000000000\",\r\n\"ПараметрыПрописи\": \"\",\r\n\"ФормулаРасчетаКурса\": \"\",\r\n\"СпособУстановкиКурса\": \"ЗагрузкаИзИнтернета\",\r\n\"Б_Идентификатор\": \"\",\r\n\"Б_НомерВерсии\": \"\"\r\n}\r\n}"
]
29. spacecraft 19.02.21 15:59 Сейчас в теме
(22) до сих пор не ясна структура выходных данных.
Но вот как вариант:
Запрос = Новый Запрос;
Запрос.Текст = 
	"ВЫБРАТЬ ПЕРВЫЕ 10
	|	ЗаказКлиента.Ссылка КАК Ссылка,
	|	ЗаказКлиента.Номер КАК Номер,
	|	ЗаказКлиента.Дата КАК Дата,
	|	ЗаказКлиента.Товары.(
	|		НомерСтроки КАК НомерСтроки,
	|		ДатаОтгрузки КАК ДатаОтгрузки,
	|		Номенклатура КАК Номенклатура,
	|		КоличествоУпаковок КАК КоличествоУпаковок,
	|		Цена КАК Цена,
	|		Сумма КАК Сумма
	|	) КАК Товары
	|ИЗ
	|	Документ.ЗаказКлиента КАК ЗаказКлиента";

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();
Запись = Новый ЗаписьJSON;
Запись.ОткрытьФайл("d:\temp\docs.json");
СтрукураВыгрузки = Новый Структура;
МассивДокументов = Новый Массив;
Пока Выборка.Следующий() Цикл
	ДанныеДокумента = Новый Структура;
	ДанныеДокумента.Вставить("Ссылка", Выборка.Ссылка);
	ДанныеДокумента.Вставить("Номер", Выборка.Номер);
	ДанныеДокумента.Вставить("Дата", Выборка.Дата);
	МассивТЧ = Новый Массив;
	ВыборкаТовары = Выборка.Товары.Выбрать();
	Пока ВыборкаТовары.Следующий() Цикл
		СтрТовары = Новый Структура;
		СтрТовары.Вставить("НомерСтроки", ВыборкаТовары.НомерСтроки);
		СтрТовары.Вставить("ДатаОтгрузки", ВыборкаТовары.ДатаОтгрузки);
		СтрТовары.Вставить("Номенклатура", ВыборкаТовары.Номенклатура);
		СтрТовары.Вставить("КоличествоУпаковок", ВыборкаТовары.КоличествоУпаковок);
		СтрТовары.Вставить("Цена", ВыборкаТовары.Цена);
		СтрТовары.Вставить("Сумма", ВыборкаТовары.Сумма);
		МассивТЧ.Добавить(СтрТовары);
	КонецЦикла;
	ДанныеДокумента.Вставить("ТЧ",МассивТЧ);
	МассивДокументов.Добавить(ДанныеДокумента);
КонецЦикла;
СтрукураВыгрузки.Вставить("Данные", МассивДокументов);
СериализаторXDTO.ЗаписатьJSON(Запись, СтрукураВыгрузки);
Запись.Закрыть();
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот