|   |   | 
| 
 | Сериализация и десериализация JSON нескольких документов | ☑ | ||
|---|---|---|---|---|
| 0
    
        KemerovIvan 25.09.20✎ 14:56 | 
        Вопрос вот в чем. 
 В интернете нашел статью как делать сериализацию одного документа. Но когда пытаюсь сделать на несколько документов, выдает ошибку. Каким образом сделать это?! //Сериализация Процедура ЗаписьJSON() ЗаписьJSON = Новый ЗаписьJSON; //Или в строку ЗаписьJSON.УстановитьСтроку(); //Или в файл ЗаписьJSON.ОткрытьФайл("C:\test.txt"); Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00000000001").ПолучитьОбъект(); СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Номенклатура, НазначениеТипаXML.Явное); СериализованнаяСтрока = ЗаписьJSON.Закрыть(); КонецПроцедуры //Десериализация Процедура ЧтениеJSON() ЧтениеJSON = Новый ЧтениеJSON; //Или из строки ЧтениеJSON.УстановитьСтроку(""); //Или из файла ЧтениеJSON.ОткрытьФайл("C:\test.txt"); Номенклатура = СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); КонецПроцедуры | |||
| 1
    
        KemerovIvan 25.09.20✎ 14:57 | 
        Хоть справочники, хоть документы. Везде выдает ошибку     | |||
| 2
    
        Ёпрст гуру 25.09.20✎ 14:58 | 
        (0) в этом коде нет записи документа в жсон.     | |||
| 3
    
        KemerovIvan 25.09.20✎ 14:59 | 
        (2) разве?     | |||
| 4
    
        Ёпрст гуру 25.09.20✎ 15:00 | 
        (3) железобетонно     | |||
| 5
    
        KemerovIvan 25.09.20✎ 15:00 | 
        Вот создание: ЗаписьJSON = Новый ЗаписьJSON;
 Вот в какой файл: ЗаписьJSON.ОткрытьФайл("C:\test.txt"); Вот запись: СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Номенклатура, НазначениеТипаXML.Явное); Вот закрытие: СериализованнаяСтрока = ЗаписьJSON.Закрыть(); | |||
| 6
    
        KemerovIvan 25.09.20✎ 15:01 | 
        (4) каким образом тогда должен быть создан JSON?     | |||
| 7
    
        Ёпрст гуру 25.09.20✎ 15:01 | 
        (5) Где в этом коде ДОКУМЕНТ ?     | |||
| 8
    
        Ёпрст гуру 25.09.20✎ 15:02 | 
        И где в этом коде твои НЕСКОЛЬКО документов, которые не работают ?     | |||
| 9
    
        KemerovIvan 25.09.20✎ 15:02 | 
        (7) Так ясно
 Придиры приперли | |||
| 10
    
        KemerovIvan 25.09.20✎ 15:02 | 
        это код из статьи     | |||
| 11
    
        tan76 25.09.20✎ 15:03 | 
        (0) Документы в массив, массив в JSON, и получать объект не нужно     | |||
| 12
    
        KemerovIvan 25.09.20✎ 15:03 | 
        ЗаписьJSON = Новый ЗаписьJSON;
 ПараметрыЗаписиJSON = новый ПараметрыЗаписиJSON(, Символы.Таб); ЗаписьJSON.ОткрытьФайл("c:\1\1.json",,,ПараметрыЗаписиJSON); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Обмен.Ссылка КАК Ссылка |ИЗ | Документ.Обмен КАК Обмен"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(),НазначениеТипаXML.Явное); ЗаписьJSON.УстановитьСтроку(); КонецЦикла; ЗаписьJSON.Закрыть(); | |||
| 13
    
        KemerovIvan 25.09.20✎ 15:04 | 
        Из массива он потом не читает (11)     | |||
| 14
    
        KemerovIvan 25.09.20✎ 15:04 | 
        пробовал через массив     | |||
| 15
    
        Ёпрст гуру 25.09.20✎ 15:08 | 
        (12) выкинь ПолучитьОбъект() из кода, для начала     | |||
| 16
    
        Ёпрст гуру 25.09.20✎ 15:08 | 
        и установитьСтроку после записи     | |||
| 17
    
        Ёпрст гуру 25.09.20✎ 15:10 | 
 | |||
| 18
    
        KemerovIvan 25.09.20✎ 15:14 | 
        Ошибка при вызове метода контекста (ЗаписатьJSON) (17)     | |||
| 19
    
        KemerovIvan 25.09.20✎ 15:14 | 
        Такую ошибку выдает     | |||
| 20
    
        KemerovIvan 25.09.20✎ 15:22 | 
        Больше вариантов ни у кого нет?     | |||
| 21
    
        Ёпрст гуру 25.09.20✎ 15:32 | 
        Точное описание ошибки какое?     | |||
| 22
    
        Ёпрст гуру 25.09.20✎ 15:32 | 
        Этот код выполняется где?     | |||
| 23
    
        KemerovIvan 25.09.20✎ 15:35 | 
        в http Сервисе (22)     | |||
| 24
    
        Ёпрст гуру 25.09.20✎ 15:39 | 
        (23) ну пробуй заменить строку отурытия файла на просто установитьстроку(), для начала     | |||
| 25
    
        KemerovIvan 25.09.20✎ 15:45 | 
        (24) Ничего не поменялось, все так же висит ошибка     | |||
| 26
    
        Ёпрст гуру 25.09.20✎ 15:59 | 
        Если подсунуть простой тип, строку "вася", например, работает? Заместо ссылки дока     | |||
| 27
    
        KemerovIvan 25.09.20✎ 16:01 | 
        (26) Если отправить только один документ, все работает. Но как только начинаю отправлять несколько документов то все ломается     | |||
| 28
    
        zuza 25.09.20✎ 16:35 | 
        (18) очепятка в (17), поэтому и ошибка
 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, ВыборкаДетальныеЗаписи.Ссылка,НазначениеТипаXML.Явное); КонецЦикла; сообщить(ЗаписьJSON.Закрыть()); | |||
| 29
    
        KemerovIvan 25.09.20✎ 17:08 | 
        (28) Какая опечатка? Я вписал то что вы отправили, все равно такая же ошибка.     | |||
| 30
    
        Ёпрст гуру 25.09.20✎ 18:22 | 
        (27) так, не работает ?
 
 | |||
| 31
    
        KemerovIvan 28.09.20✎ 09:11 | 
        (30) Ооо работает. 
 Но возникла новая проблема. Когда внутри одной базы я Сериализую, а потом считываю, он все показывает. Но когда передаю в другую базу через HTTP сервис то там не пишется ссылка не найдена Соединение = Новый HTTPСоединение("localhost/test/hs/js/json"); Запрос = Новый HTTPЗапрос("/"); Ответ = Соединение.Получить(Запрос); Данные = Ответ.ПолучитьТелоКакСтроку(); Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(Данные); ДанныеJSON = СериализаторXDTO.ПрочитатьJSON(Чтение); Чтение.Закрыть(); | |||
| 32
    
        KemerovIvan 28.09.20✎ 09:11 | 
        Вот такой код что бы прочитать     | |||
| 33
    
        KemerovIvan 28.09.20✎ 09:12 | 
        Может я что то не так делаю?     | |||
| 34
    
        KemerovIvan 28.09.20✎ 09:15 | 
        Пишет на каждой строке объект не найден     | |||
| 35
    
        Garykom гуру 28.09.20✎ 09:22 | 
        (33) Угу задачку слишком сложную взял пока не по силам.     | |||
| 36
    
        Garykom гуру 28.09.20✎ 09:23 | 
        (34) Дык объекта (в другой базе) нет по ссылке которая в JSON фуй ли шотишь?     | |||
| 37
    
        KemerovIvan 28.09.20✎ 09:34 | 
        ну а как мне передать тогда через json все на другую базу?     | |||
| 38
    
        KemerovIvan 28.09.20✎ 09:35 | 
        я сделал это через структуры, но мне сказали что можно и делать сериализацию и так сразу документы передавать целиком     | |||
| 39
    
        KemerovIvan 28.09.20✎ 09:36 | 
        Запрос = Новый Запрос;
 Запрос.Текст = "ВЫБРАТЬ | ОбменВопросы.Ссылка КАК Ссылка, | ОбменВопросы.НомерСтроки КАК НомерСтроки, | ОбменВопросы.Товар КАК Товар, | ОбменВопросы.Цена КАК Цена, | Обмен.Номер КАК Номер |ИЗ | Документ.Обмен.Вопросы КАК ОбменВопросы | ПОЛНОЕ СОЕДИНЕНИЕ Документ.Обмен КАК Обмен | ПО ОбменВопросы.Ссылка = Обмен.Ссылка |ГДЕ | Обмен.Номер = &Номер"; //Формируем массив оборудования Обмен = Документы.Обмен.Выбрать(); Колл = Документы.Обмен.Выбрать(); Количество = 0; Пока Колл.Следующий() Цикл Количество = Количество + 1; КонецЦикла; МассивОбмен = Новый Массив; Пока Обмен.Следующий() Цикл НомерДокумента = Обмен.Номер; Запрос.УстановитьПараметр("Номер", НомерДокумента); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); СуммаТаб = 0; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл СуммаТаб = СуммаТаб + 1; КонецЦикла; НазваниеДокумента = Документы.Обмен.НайтиПоНомеру(НомерДокумента).Название; ДанныеОбмен = Новый Структура; ДанныеОбмен.Вставить("Название", НазваниеДокумента); ДанныеОбмен.Вставить("Дата", Дата(Обмен.Дата)); тНастройкиСериализации = Новый НастройкиСериализацииJSON; тНастройкиСериализации.ФорматСериализацииДаты = ФорматДатыJSON.ISO; тНастройкиСериализации.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.УниверсальнаяДата; ДанныеОбменТЧ = Новый Массив; Для Индекс = 0 по СуммаТаб - 1 Цикл НазваниеТовара = Документы.Обмен.НайтиПоНомеру(НомерДокумента).Вопросы[Индекс].Товар; ЦенаТовара = Документы.Обмен.НайтиПоНомеру(НомерДокумента).Вопросы[Индекс].Цена; ДанныеОбменТЧСтрока = Новый Структура; ДанныеОбменТЧСтрока.Вставить("Товар", НазваниеТовара); ДанныеОбменТЧСтрока.Вставить("Цена", ЦенаТовара); НомерСтроки = Индекс + 1; ДанныеОбменТЧ.Добавить(ДанныеОбменТЧСтрока); КонецЦикла; ДанныеОбмен.Вставить("ТабЧасть", ДанныеОбменТЧ); МассивОбмен.Добавить(ДанныеОбмен); КонецЦикла; //Сериализуем массив в JSON ЗаписьJOIN = Новый ЗаписьJSON; ЗаписьJOIN.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJOIN, МассивОбмен, тНастройкиСериализации); СтрокаДляОтвета = ЗаписьJOIN.Закрыть(); //Сообщить (СтрокаДляОтвета); //Формируем ответ веб-клиенту Ответ = Новый HTTPСервисОтвет(200); Ответ.Заголовки.Вставить("Content-type","application/JOIN; charset=utf-8"); Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); Возврат Ответ; | |||
| 40
    
        KemerovIvan 28.09.20✎ 09:36 | 
        Вот как передаю с помощью структур     | |||
| 41
    
        KemerovIvan 28.09.20✎ 09:37 | 
        возможно есть вариант передать все таки по проще?!     | |||
| 42
    
        KemerovIvan 28.09.20✎ 09:38 | 
        (36) Может подскажете как сделать вместо сарказма?     | |||
| 43
    
        hhhh 28.09.20✎ 10:48 | 
        (42) вот тут у тебя невероятная хрень
 Документы.Обмен.НайтиПоНомеру(НомерДокумента) у метода НайтиПоНомеру должно быть 2 парметра. | |||
| 44
    
        hhhh 28.09.20✎ 10:53 | 
        (42) и вообще, откуда эти номера какие-то? Пиши нормально
 |ГДЕ | Обмен.Ссылка = &Ссылка"; | |||
| 45
    
        hhhh 28.09.20✎ 10:57 | 
        (42) и вот это
 Документы.Обмен.НайтиПоНомеру(НомерДокумента).Название дебилизм какой-то Пиши в запросе | Обмен.Название КАК Название, и НазваниеДокумента = Обмен.Название; | |||
| 46
    
        KemerovIvan 28.09.20✎ 11:53 | 
        (45) Друг, спасибо конечно, но мне не это нужно, а нужно то что бы все документы из одной базы отправить в другую базу. И надо сделать это через http сервис. Спасибо за исправления, учту.     | |||
| 47
    
        KemerovIvan 28.09.20✎ 11:56 | 
        Или если есть варианты, как проще это реализовать     | |||
| 48
    
        KemerovIvan 28.09.20✎ 11:57 | 
        Но желательно именно через HTTP сервисы     | |||
| 49
    
        KemerovIvan 28.09.20✎ 11:57 | 
        Буду очень признателен     | |||
| 50
    
        DexterMorgan 28.09.20✎ 12:46 | 
        конфигурации баз одинковые или разные?     | |||
| 51
    
        KemerovIvan 28.09.20✎ 14:10 | 
        (50) одинаковые     | |||
| 52
    
        MadJhey 28.09.20✎ 14:40 | 
        Документы.Обмен.НайтиПоНомеру(НомерДокумента).Название - это конечно сильно.
 Разбить json на блоки по видам документов, для каждого вида документа отдельно написать разбор. Отдельно выгружать ключевые справочники. Передавать примитивные типы (число, строка). Недавно делал тоже самое (согласовывал номенклатуру, цены, приходы), но через xml. За все документы я бы не взялся, там куча работы по согласованию данных. | |||
| 53
    
        MadJhey 28.09.20✎ 14:43 | 
        Для Индекс = 0 по СуммаТаб - 1 Цикл 
 НазваниеТовара = Документы.Обмен.НайтиПоНомеру(НомерДокумента).Вопросы[Индекс].Товар; ЦенаТовара = Документы.Обмен.НайтиПоНомеру(НомерДокумента).Вопросы[Индекс].Цена; страшно приставить, что покажет парсер SQL на такое, а через запрос сделать не судьба? | |||
| 54
    
        KemerovIvan 28.09.20✎ 15:11 | 
        (53) Я не прошу исправлять тот код, это был первый вариант     | |||
| 55
    
        KemerovIvan 28.09.20✎ 15:11 | 
        по HTTP сервисам если есть что добавить, тогда пишите     | |||
| 56
    
        MadJhey 28.09.20✎ 15:23 | 
        По думай об верификации переданной информации. Например номенклатура передана успешно - возвращаешь какой - нибудь параметр.  Мне пришлось разбить данные на пакеты, иначе выдавал ошибку по таймингу.
 https://xn----1-bedvffifm4g.xn--p1ai/articles/2017-09-07-exchange-with-internet-services/ - вот целая статья по http | |||
| 57
    
        KemerovIvan 29.09.20✎ 07:52 | 
        (56) Спасибо     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |