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

вот код:

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

 ЗаписиJSON.Закрыть();
КонецПроцедуры
---
да подготовить структуру масивов, в котором структура с данными документа и массив со структурой строк ТЧ. И уже полученную структуру выгрузить в json.
---
до сих пор не ясна структура выходных данных.
Но вот как вариант:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 10
    | ЗаказКлиента.Ссылка КАК Ссылка,
    | ЗаказКлиента.Номер КАК Номер,
    | ЗаказКлиента.Дата КАК Дата,
    | ЗаказКлиента.Товары.(
    | НомерСтроки КАК НомерСтроки,
    | ДатаОтгрузки КАК ДатаОтгрузки,
    | Номенклатура КАК Номенклатура,
    | КоличествоУпаковок КАК КоличествоУпаковок,
    | Цена КАК Цена,
    | Сумма КАК Сумма
    | ) КАК Товары
    |ИЗ
    | Документ.ЗаказКлиента КАК ЗаказКлиента";

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

    Выборка = РезультатЗапроса.Выбрать();
    Запись = Новый ЗаписьJSON;
    Запись.ОткрытьФайл("d:\temp\docs.json");
    СтрукураВыгрузки = Новый Структура;
    МассивДокументов = Новый Массив;
    Пока Выборка.Следующий() Цикл
    ДанныеДокумента = Новый Структура;
    ДанныеДокумента.Вставить("Ссылка", Выборка.Ссылка);
    ДанныеДокумента.Вставить("Номер", Выборка.Номер);
    ДанныеДокумента.Вставить("Дата", Выборка.Дата);
    МассивТЧ = Новый Массив;
    ВыборкаТовары = Выборка.Товары.Выбрать();
    Пока ВыборкаТовары.Следующий() Цикл
    СтрТовары = Новый Структура;
    СтрТовары.Вставить("НомерСтроки", ВыборкаТовары.НомерСтроки);
    СтрТовары.Вставить("ДатаОтгрузки", ВыборкаТовары.ДатаОтгрузки);
    СтрТовары.Вставить("Номенклатура", ВыборкаТовары.Номенклатура);
    СтрТовары.Вставить("КоличествоУпаковок", ВыборкаТовары.КоличествоУпаковок);
    СтрТовары.Вставить("Цена", ВыборкаТовары.Цена);
    СтрТовары.Вставить("Сумма", ВыборкаТовары.Сумма);
    МассивТЧ.Добавить(СтрТовары);
    КонецЦикла;
    ДанныеДокумента.Вставить("ТЧ",МассивТЧ);
    МассивДокументов.Добавить(ДанныеДокумента);
    КонецЦикла;
    СтрукураВыгрузки.Вставить("Данные", МассивДокументов);
    СериализаторXDTO.ЗаписатьJSON(Запись, СтрукураВыгрузки);
    Запись.Закрыть();
```
---
В чем проблема? Если можно один выгрузить, то в цикле можно вызывать процедуры выгрузки по одному
---
Нет вылазит ошибка. Я уже кучу вариантов перепробовал
---
Неверный порядок записи JSON
---
зачем объект получать? Ссылка тоже ошибку выдает?
---
Нет не выдает, предлагаете просто:
СериализаторXDTO.ЗаписатьJSON(ЗаписиJSON, Строка, НазначениеТипаXML.Явное) так?
---
Если так то тоже не работает( я пробовал
---
уточнили бы что конкретно нужно выгрузить. А то вроде только ссылки, то уже и ТЧ.
Ссылка обычно выгружаются как ГУИД документа.
---
Так я написал, вроде, массив с документами у которых есть ТЧ, просто ссылки на документы я могу выгрузить, реквизиты тоже могу выгрузить, но если есть ТЧ в Документе, а она есть , я не могу допетрить как выгрузить, когда самих документов много(они в массиве)
---
исходить нужно из того кто и как это будет читать.
А так как вариант: Струкутра в ней массив. В этом массиве структура такого содержимого:
"Ссылка" - гуид документа
"ИмяРеквизита" - данные реквизита
"ТЧ" - массив. В ней структура с данными каждой строки
---
Беда в том, что мне нужно в файл это выплюнуть)))
---
это вообще не проблема.
---
ТАк вот как???))))) Не могу допетрить))
---
Могу более точно, вытягиваю запросом ссылки на Документы с ТЧ "Товары", Вытягиваю все это в массив, возвращаю его, и возникает вопрос, каким образом можно выгрузить этот список документов в цикле в JSON&
---
да подготовить структуру масивов, в котором структура с данными документа и массив со структурой строк ТЧ. И уже полученную структуру выгрузить в json.
---
Можно более подробно , пожалуйста?
---
ТАК? Накатал быстренько:

```1c
    МассивДокументов = Новый Массив;

    СтрукСпискаДоков = Новый Структура;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЧекККМ.Ссылка
    |ИЗ
    | Документ.ЧекККМ КАК ЧекККМ
    |ГДЕ
    | НЕ ЧекККМ.ПометкаУдаления
    | И ЧекККМ.Дата МЕЖДУ &ДатаОт И &ДатаДо";

    Запрос.УстановитьПараметр("ДатаОт", ДатаДокОт);
    Запрос.УстановитьПараметр("ДатаДо", ДатаДокДо);
    РезультатЗапроса = Запрос.Выполнить();

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

    СтруктСпискаДокументов = Новый Структура("МассивДокументов");
    МассивСпискаДокументов = Новый Массив;

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

    СтрукДокмента = Новый Структура("Ссылка, Номер, Дата, Товары, Оплата")

    СтрукДокмента.Вставить("Ссылка", ВыборкаДетальныеЗаписи.Ссылка);
    СтрукДокмента.Вставить("Номер", ВыборкаДетальныеЗаписи.Ссылка.Номер);
    СтрукДокмента.Вставить("Дата", ВыборкаДетальныеЗаписи.Ссылка.Дата);

    МассивТЧТовары = Новый Массив;
    МассивТЧОплата = Новый Массив;

    Для Каждого ИндТовары ИЗ ВыборкаДетальныеЗаписи.Ссылка.Товары Цикл

    СтрукТЧТовары = Новый Структура("Номенклатура, Количество, Сумма, СуммаНДС, Цена");
    СтрукТовары.Номенклатура = ИндТовары.Номенклатура;
    СтрукТовары.Количество = ИндТовары.Количество;
    СтрукТовары.Сумма = ИндТовары.Сумма;
    СтрукТовары.СуммаНДС = ИндТовары.СуммаНДС;
    СтрукТовары.Цена = ИндТовары.Цена;
    МассивТЧТовары.Добавить(СтрукТовары);

    КонецЦикла;

    Для Каждого ИндОплата ИЗ ВыборкаДетальныеЗаписи.Ссылка.Оплата Цикл

    СтрукТЧОплата = Новый Структура("ВидОплаты, СуммаОплаты");
    СтрукТЧОплата.ВидОплаты = ИндОплата.Номенклатура;
    СтрукТЧОплата.СуммаОплаты = ИндОплата.Сумма;
    МассивТЧОплата.Добавить(СтрукТЧОплата);

    КонецЦикла;

    СтрукДокмента.Вставить("Товары", МассивТЧТовары);
    СтрукДокмента.Вставить("Товары", МассивТЧТовары);
    МассивСпискаДокументов.Добавить(СтрукДокмента);
    КонецЦикла;

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

    Возврат СтруктСпискаДокументов;
```
---
```1c
    МассивДокументов = Новый Массив;

    СтрукСпискаДоков = Новый Структура;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЧекККМ.Ссылка
    |ИЗ
    | Документ.ЧекККМ КАК ЧекККМ
    |ГДЕ
    | НЕ ЧекККМ.ПометкаУдаления
    | И ЧекККМ.Дата МЕЖДУ &ДатаОт И &ДатаДо";

    Запрос.УстановитьПараметр("ДатаОт", ДатаДокОт);
    Запрос.УстановитьПараметр("ДатаДо", ДатаДокДо);
    РезультатЗапроса = Запрос.Выполнить();

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

    СтруктСпискаДокументов = Новый Структура("МассивДокументов");
    МассивСпискаДокументов = Новый Массив;

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

    СтрукДокмента = Новый Структура("Ссылка, Номер, Дата, Товары, Оплата");

    СтрукДокмента.Вставить("Ссылка", Строка(ВыборкаДетальныеЗаписи.Ссылка));
    СтрукДокмента.Вставить("Номер", ВыборкаДетальныеЗаписи.Ссылка.Номер);
    СтрукДокмента.Вставить("Дата", ВыборкаДетальныеЗаписи.Ссылка.Дата);

    МассивТЧТовары = Новый Массив;
    МассивТЧОплата = Новый Массив;

    Для Каждого ИндТовары ИЗ ВыборкаДетальныеЗаписи.Ссылка.Товары Цикл

    СтрукТЧТовары = Новый Структура("Номенклатура, Количество, Сумма, СуммаНДС, Цена");
    СтрукТЧТовары.Номенклатура = Строка(ИндТовары.Номенклатура);
    СтрукТЧТовары.Количество = ИндТовары.Количество;
    СтрукТЧТовары.Сумма = ИндТовары.Сумма;
    СтрукТЧТовары.СуммаНДС = ИндТовары.СуммаНДС;
    СтрукТЧТовары.Цена = ИндТовары.Цена;
    МассивТЧТовары.Добавить(СтрукТЧТовары);

    КонецЦикла;

    Для Каждого ИндОплата ИЗ ВыборкаДетальныеЗаписи.Ссылка.Оплата Цикл

    СтрукТЧОплата = Новый Структура("ВидОплаты, СуммаОплаты");
    СтрукТЧОплата.ВидОплаты = ИндОплата.ВидОплаты;
    СтрукТЧОплата.СуммаОплаты = ИндОплата.Сумма;
    МассивТЧОплата.Добавить(СтрукТЧОплата);

    КонецЦикла;

    СтрукДокмента.Вставить("Товары", МассивТЧТовары);
    СтрукДокмента.Вставить("Оплата", МассивТЧОплата);
    МассивСпискаДокументов.Добавить(СтрукДокмента);
    КонецЦикла;

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

    Возврат СтруктСпискаДокументов;
```

ВОТ ТАКОЙ КОД РАБОТАЕТ, СПАСИБО ВАМ ОГРОМНОЕ!!!
---
никому больше это не показывайте.
---
А что сучилось?
---
в запросе только ссылку получаете, а потом все данные объекта тащите через точку. Не правильно так делать. При этом загружается весь объект. Причем получается запрос в цикле. Нужно сразу все необходимые данные получить в запросе и оперировать только ими.
---
Да я уже обратил на это внимание, но если честно к запросу я бы потом все равно вернулся, мне важно было, чтоб данные выгрузились, но все равно , поклон вам)
---
ААА понял)
---
```1c
    Массив = Новый Массив;
    Для Каждого Из Цикл
    Массив.Добавить(новый Структура);
    КонецЦикла
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Массив);
    СтрокаДляОтвета = ЗаписьJSON.Закрыть();
```
---
Не подскажете , как именно втолкать ваш вариант в мой код?
---
Дело в том, что массив структур я пробовал всунуть, и эска меня обломала
---
Дело в том, что массив структур я пробовал всунуть, и эска меня обломала Я обходил такую ошибку, оборачивая массив в структуру.
---
Подскажите кодом , пожалуйста)
---
ТАК? Струк = НОвый Структура("МассивДокументов");
     Струк .Вставить("МассивДокументов", МассивДокументов);
---
Ага, так.
---
Разве прям массви ссылок запихать и все??? А ТЧ в них как интерпретироваться будет?
---
Разве прям массви ссылок запихать и все? А кто говорил про массив ссылок?!?!? Каждый документ в таком массиве - структура, подготовленная описанным выше методом.
---
надо разбить на две операции
1.получить Джинсовую строку объекта
2.поместить их в массив
3.вывести массив в Джинс

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

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

```1c
    МассивДокументов = Новый Массив; //для теста 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}"
]
---
до сих пор не ясна структура выходных данных.
Но вот как вариант:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 10
    | ЗаказКлиента.Ссылка КАК Ссылка,
    | ЗаказКлиента.Номер КАК Номер,
    | ЗаказКлиента.Дата КАК Дата,
    | ЗаказКлиента.Товары.(
    | НомерСтроки КАК НомерСтроки,
    | ДатаОтгрузки КАК ДатаОтгрузки,
    | Номенклатура КАК Номенклатура,
    | КоличествоУпаковок КАК КоличествоУпаковок,
    | Цена КАК Цена,
    | Сумма КАК Сумма
    | ) КАК Товары
    |ИЗ
    | Документ.ЗаказКлиента КАК ЗаказКлиента";

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

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