Вход | Регистрация
 

Ошибка выгрузки документов В JSON.

Ошибка выгрузки документов В JSON.
Я
   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 секунд гугла, первая ссылка... ((
   NaRaz
 
2 - 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
И что, сработало?
И чем это _принципиально_ отличается от того, что по ссылке?
Двойным циклом?
   NaRaz
 
4 - 24.01.21 - 19:15
(3) Ну ты не газуй в чате, а сравни, потрать еще минуту и мозг включи. Второй вариант из (2) работает)
   NaRaz
 
5 - 24.01.21 - 19:16
Не рабочий вариант:
 Для Каждого СтрСписокДокументов Из СписокДокументов Цикл
        
        Если Не СтрСписокДокументов.Обрабатывать Тогда
            Продолжить;
        КонецЕсли;
        
        ЗаписиJSON.ЗаписатьНачалоОбъекта();
        СтруктураДокумента = ПолучитьСтруктуру(СтрСписокДокументов.Ссылка);
        ЗаписатьJSON(ЗаписиJSON, СтруктураДокумента, НастройкиСериал);
        МассивОбъектов = Новый Массив;
        МассивОбъектов.Добавить(СтрСписокДокументов.Ссылка.ПолучитьОбъект());
        ЗаписиJSON.ЗаписатьКонецОбъекта();
    КонецЦикла;

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


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


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

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

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

по причине:
Неверный порядок записи JSON
   NaRaz
 
9 - 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) работает же
   NaRaz
 
11 - 24.01.21 - 19:35
(10) Теперь я исправил работает, я теперь не понимаю, почему через структуру нет названия тега, нужно ссылку что ли добавить везде в структуру?
   Йохохо
 
12 - 24.01.21 - 19:37
(11) есть оно
   NaRaz
 
13 - 24.01.21 - 19:50
(12) Возможно, как теги сделать ?
   Fram
 
14 - 24.01.21 - 19:51
(11) какого тэга? В json либо пара ключ:значение, либо массив
   Йохохо
 
15 - 24.01.21 - 19:51
(13) перепиши код)
   NaRaz
 
16 - 24.01.21 - 20:24
(14) А если я выгружаю массив, то нельзя выгрузить Ключ-Значение?
   acht
 
17 - 24.01.21 - 20:40
(16) Ну ты не газуй в чате, а сравни, потрать еще минуту и мозг включи.
   Fram
 
18 - 24.01.21 - 20:53
(16) я не понимаю твой вопрос
   NaRaz
 
19 - 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
   palsergeich
 
20 - 24.01.21 - 21:24
(19) Не пользуйся платформенным сериализатором XDTO.
Собери структуру.
А потом методом ЗаписатьJson получи то, что ты хочешь.
для обработки несериализуемых типов (например ссылки), есть удобный обработчик.
https://wonderland.v8.1c.ru/blog/sredstva-raboty-s-json/
Здесь очень хорошо описано
   NaRaz
 
21 - 24.01.21 - 21:38
(20) Спасибо за толковую ссыль


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.