Имя: Пароль:
1C
 
Ошибка выгрузки документов В JSON.
, ,
0 NaRaz
 
24.01.21
18:42
Всем привет.

В общем задача: Есть список документов поступление на РС, которые надо выгрузить в JSON, но не получается.

Как делаю:


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

Ошибка:
{ВнешняяОбработка.ВыгрузкаДокументовНаСайт.Форма.Форма.Форма(298)}: Ошибка при вызове метода контекста (ЗаписатьJSON)
        ЗаписатьJSON(ЗаписиJSON, СтруктураДокумента, НастройкиСериал);
по причине:
Неверный порядок записи JSON

по причине:
Неверный порядок записи JSON


И да, получаю Структуру Так:

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

КонецФункции
1 ДенисЧ
 
24.01.21
19:10
https://forum.infostart.ru/forum9/topic158775/

ЗЫ. 15 секунд гугла, первая ссылка... ((
2 NaRaz
 
24.01.21
19:12
(1) Ваши 15 секунд не просто потрачены зря, они просто выкинуты на помойку.

    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("json");
    
    ЗаписиJSON = Новый ЗаписьJSON;
    ЗаписиJSON.ОткрытьФайл(ИмяВременногоФайла,,, Новый ПараметрыЗаписиJSON(, Символы.Таб));
    НастройкиСериал = Новый НастройкиСериализацииJSON;
    НастройкиСериал.ВариантЗаписиДаты  = ВариантЗаписиДатыJSON.ЛокальнаяДата;
    НастройкиСериал.ФорматСериализацииДаты  = ФорматДатыJSON.ISO;
    
    Для Каждого СтрСписокДокументов Из СписокДокументов Цикл
        
        Если Не СтрСписокДокументов.Обрабатывать Тогда
            Продолжить;
        КонецЕсли;
        
        СтруктураДокумента = ПолучитьСтруктуру(СтрСписокДокументов.Ссылка);
        //ЗаписатьJSON(ЗаписиJSON, СтруктураДокумента, НастройкиСериал);
        МассивОбъектов = Новый Массив;
        //МассивОбъектов.Добавить(СтрСписокДокументов.Ссылка.ПолучитьОбъект());
        МассивОбъектов.Добавить(СтруктураДокумента);
    КонецЦикла;
    
    
    Попытка
        
        СериализаторXDTO.ЗаписатьJSON(ЗаписиJSON, МассивОбъектов, НазначениеТипаXML.Явное);
        ЗаписиJSON.Закрыть();
        
        //ФайлJSON = Новый ЗаписьТекста(ИмяВременногоФайла, КодировкаТекста.UTF8);
        //ФайлJSON.Закрыть();
        АдресДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла), Новый УникальныйИдентификатор);
        УдалитьФайлы(ИмяВременногоФайла);
        Возврат АдресДанных;
    Исключение
        ЗаписьЖурналаРегистрацииСервер("Web-обмен. Ошибка записи временного файла на сервере.","Ошибка",,, "Ошибка записи временного файла ("+ИмяВременногоФайла+"). Описание ошибки: " + ОписаниеОшибки());
    КонецПопытки;
3 ДенисЧ
 
24.01.21
19:14
И что, сработало?
И чем это _принципиально_ отличается от того, что по ссылке?
Двойным циклом?
4 NaRaz
 
24.01.21
19:15
(3) Ну ты не газуй в чате, а сравни, потрать еще минуту и мозг включи. Второй вариант из (2) работает)
5 NaRaz
 
24.01.21
19:16
Не рабочий вариант:
Для Каждого СтрСписокДокументов Из СписокДокументов Цикл
        
        Если Не СтрСписокДокументов.Обрабатывать Тогда
            Продолжить;
        КонецЕсли;
        
        ЗаписиJSON.ЗаписатьНачалоОбъекта();
        СтруктураДокумента = ПолучитьСтруктуру(СтрСписокДокументов.Ссылка);
        ЗаписатьJSON(ЗаписиJSON, СтруктураДокумента, НастройкиСериал);
        МассивОбъектов = Новый Массив;
        МассивОбъектов.Добавить(СтрСписокДокументов.Ссылка.ПолучитьОбъект());
        ЗаписиJSON.ЗаписатьКонецОбъекта();
    КонецЦикла;

Рабочий вариант:

   Для Каждого СтрСписокДокументов Из СписокДокументов Цикл
        
        Если Не СтрСписокДокументов.Обрабатывать Тогда
            Продолжить;
        КонецЕсли;
        
        СтруктураДокумента = ПолучитьСтруктуру(СтрСписокДокументов.Ссылка);
        //ЗаписатьJSON(ЗаписиJSON, СтруктураДокумента, НастройкиСериал);

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

        МассивОбъектов.Добавить(СтруктураДокумента);
    КонецЦикла;
6 ДенисЧ
 
24.01.21
19:18
А теперь так

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

Тоже не работает?
7 NaRaz
 
24.01.21
19:23
Нет, так не работает
8 NaRaz
 
24.01.21
19:24
(6) Неверный порядок записи JSON
{ВнешняяОбработка.ВыгрузкаДокументовНаСайт.Форма.Форма.Форма(299)}:        ЗаписатьJSON(ЗаписиJSON, СтруктураДокумента, НастройкиСериал);
{ВнешняяОбработка.ВыгрузкаДокументовНаСайт.Форма.Форма.Форма(163)}:    АдресФайла = ВыгрузитьДокументыСервер();

по причине:
Неверный порядок записи JSON
9 NaRaz
 
24.01.21
19:30
Кто нибуждь может подсказать, если название тегов отстуствует, куда смотреть?


    "#value": [
        {
            "#type": "jv8:Structure",
            "#value": [
                {
                    "name": {
                        "#type": "jxs:string",
                        "#value": "GUID"
                    },
                    "Value": {
                        "#type": "jv8:UUID",
                        "#value": "96c83bb0-a663-11ea-bc5e-00155d011002"
                    }
                },
                {
                    "name": {
                        "#type": "jxs:string",
                        "#value": "Проведен"
                    },
                    "Value": {
                        "#type": "jxs:boolean",
                        "#value": true
                    }
                },
                {
                    "name": {
                        "#type": "jxs:string",
                        "#value": "Ссылка"
                    },
                    "Value": {
                        "#type": "jxs:string",
                        "#value": "Поступление на расчетный счет АГ000000008 от 04.06.2020 17:31:52"
                    }

это пример файла
10 Йохохо
 
24.01.21
19:34
(9) работает же
11 NaRaz
 
24.01.21
19:35
(10) Теперь я исправил работает, я теперь не понимаю, почему через структуру нет названия тега, нужно ссылку что ли добавить везде в структуру?
12 Йохохо
 
24.01.21
19:37
(11) есть оно
13 NaRaz
 
24.01.21
19:50
(12) Возможно, как теги сделать ?
14 Fram
 
24.01.21
19:51
(11) какого тэга? В json либо пара ключ:значение, либо массив
15 Йохохо
 
24.01.21
19:51
(13) перепиши код)
16 NaRaz
 
24.01.21
20:24
(14) А если я выгружаю массив, то нельзя выгрузить Ключ-Значение?
17 acht
 
24.01.21
20:40
(16) Ну ты не газуй в чате, а сравни, потрать еще минуту и мозг включи.
18 Fram
 
24.01.21
20:53
(16) я не понимаю твой вопрос
19 NaRaz
 
24.01.21
21:19
(17) А я и не газую, я спрашиваю:
Мне нужно получить вот такую структуру:

Пример результата через получение структуры документа


{
    "Проведен": true,
    "Ссылка": "Заказ клиента ТД00-000028 от 13.07.2017 18:46:57",
    "ПометкаУдаления": false,
    "Дата": "2017-07-13T18:46:57",
    "Номер": "ТД00-000028",
    "Партнер": "Альфа",
    "ПартнерКод": "ЦУ-00000002",

Я сейчас получаю вот такую:


{
    "#value": [
        {
            "#type": "jv8:Structure",
            "#value": [
                {
                    "name": {
                        "#type": "jxs:string",
                        "#value": "GUID"
                    },
                    "Value": {
                        "#type": "jxs:string",
                        "#value": "96c83bb0-a663-11ea-bc5e-00155d011002"
                    }
                },
                {
                    "name": {
                        "#type": "jxs:string",
                        "#value": "Ссылка"
                    },
                    "Value": {
                        "#type": "jxs:string",
                        "#value": "Поступление на расчетный счет АГ000000008 от 04.06.2020 17:31:52"
                    }
                },
                {
                    "name": {
                        "#type": "jxs:string",
                        "#value": "Проведен"
                    },
                    "Value": {
                        "#type": "jxs:boolean",
                        "#value": true
20 palsergeich
 
24.01.21
21:24
(19) Не пользуйся платформенным сериализатором XDTO.
Собери структуру.
А потом методом ЗаписатьJson получи то, что ты хочешь.
для обработки несериализуемых типов (например ссылки), есть удобный обработчик.
https://wonderland.v8.1c.ru/blog/sredstva-raboty-s-json/
Здесь очень хорошо описано
21 NaRaz
 
24.01.21
21:38
(20) Спасибо за толковую ссыль
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс