Массив документов выгрузить в 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 104 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 104 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(Запись, СтрукураВыгрузки);
Запись.Закрыть();
Показать
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день