Как правильно сериализовать структуру в JSON в 1С без СериализаторXDTO?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как правильно сериализовать структуру в JSON в 1С без СериализаторXDTO?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #38482
      Фото аватараOdineski
      Участник

        Правильно реши задачу

        Процедура Кнопка2Нажатие(Элемент)
        ПолучениеДанныхИзДокумента =Новый Структура;
        ПолучениеДанныхИзДокумента.Вставить(«ДокументРеализации»,Строка(СсылкаНаДокумент));
        ПолучениеДанныхИзДокумента.Вставить(«ПолеОрганизация»,Строка(Организация) );
        ПолучениеДанныхИзДокумента.Вставить(«ПолеОргИНН»,Строка(ОрганизацияИНН) );
        ПолучениеДанныхИзДокумента.Вставить(«ПолеСклад»,Строка(Склад) );
        ПолучениеДанныхИзДокумента.Вставить(«ПолеБанкСчет»,Строка(БанкСчет) );
        ПолучениеДанныхИзДокумента.Вставить(«ПолеКонтрагент»,Строка(Контрагент) );
        ПолучениеДанныхИзДокумента.Вставить(«ПолеДоговор», Строка(Договор) );
        ПолучениеДанныхИзДокумента.Вставить(«ПолеОснование»,Строка(Основание) );
        ПолучениеДанныхИзДокумента.Вставить(«ПолеПолучатель», Строка(Получатель));
        ПолучениеДанныхИзДокумента.Вставить(«ПолеВсегоДокумент»,Строка(ВсегоДокумент) );
        ПолучениеДанныхИзДокумента.Вставить(«ПолеНДСДокумент»,Строка(НдсДокумент));
        ПолучениеДанныхИзДокумента.Вставить(«ПолеТипЦен»,Строка(ТипЦен));
        ПолучениеДанныхИзДокумента.Вставить(«ПолеДатаДокумента»,Строка(ДатаДокумента));
        ПолучениеДанныхИзДокумента.Вставить(«ПолеНомерДокумента»,Строка(НомерДокумента));

        МассивТаблицы = Новый Массив;
        Для каждого СтрТаблицы Из ТабличнаяЧасть Цикл
        СтруктураСтроки = Новый Структура;
        СтруктураСтроки.Вставить(«Артикул»,СтрТаблицы.Артикул);
        СтруктураСтроки.Вставить(«Номенклатура»,СтрТаблицы.Номенклатура);
        СтруктураСтроки.Вставить(«Количество»,СтрТаблицы.Количество);
        СтруктураСтроки.Вставить(«ЕдИзмерения»,СтрТаблицы.ЕдИзмерения);
        СтруктураСтроки.Вставить(«Коэффицент»,СтрТаблицы.Коэффицент);
        СтруктураСтроки.Вставить(«Цена»,СтрТаблицы.Цена);
        СтруктураСтроки.Вставить(«СуммаБезСкидок»,СтрТаблицы.СуммаБезСкидок);
        СтруктураСтроки.Вставить(«ПроцентРучнойСкидки»,СтрТаблицы.ПроцентРучнойСкидки);
        СтруктураСтроки.Вставить(«Сумма»,СтрТаблицы.Сумма);
        СтруктураСтроки.Вставить(«НДС»,СтрТаблицы.НДС);
        СтруктураСтроки.Вставить(«СуммаНДС»,СтрТаблицы.СуммаНДС);
        СтруктураСтроки.Вставить(«Всего»,СтрТаблицы.Всего);
        СтруктураСтроки.Вставить(«Качество»,СтрТаблицы.Качество);
        СтруктураСтроки.Вставить(«Склад»,СтрТаблицы.Склад);
        СтруктураСтроки.Вставить(«ТиповаяОперация»,СтрТаблицы.ТиповаяОперация);
        СтруктураСтроки.Вставить(«ДатаВыработки»,СтрТаблицы.ДатаВыработки);

        МассивТаблицы.Добавить(СтруктураСтроки);
        КонецЦикла;
        ПолучениеДанныхИзДокумента.Вставить(«Массив»,МассивТаблицы);

        Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);

        Диалог.Фильтр = «Файлы JSON (.json)|.json»;

        Если НЕ Диалог.Выбрать() Тогда

        Возврат;

        КонецЕсли;

        Путь = Диалог.ПолноеИмяФайла;

        // Сериализация структуры в JSON

        ПолучениеФайла = ПолучениеФайла(ПолучениеДанныхИзДокумента, Путь);
        //СтрокаJSON = СериализаторXDTO.ЗаписатьJSON(ПолучениеДанныхИзДокумента);
        //
        //Файл = Новый Файл(Путь);
        //
        //Поток = Файл.ОткрытьДляЗаписи();
        //
        //Поток.ЗаписатьСтроку(СтрокаJSON);
        //
        //Поток.Закрыть();

        //
        // ЗаписьJSON = Новый ЗаписьJSON;
        // ЗаписьJSON.ОткрытьФайл();

        //ЗаписьJSON = Новый ЗаписьJSON;
        //ПараметрыЗаписиJson = Новый ПараметрыЗаписиJSON(,Символы.Таб);
        //ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJson);
        //
        //ЗаписатьJSON(ЗаписьJSON, ПолучениеДанныхИзДокумента);
        //
        //СтрокаJSON = ЗаписьJSON.Закрыть();
        //ИмяФайла = «C:Usersuser-31DesktopОбработкиПроверкаДжисона.json»;

        //jsonстрока =ПолучениеДанныхИзДокумента.

        //Макет = ОбработкаОбъект.ПолучитьМакет(«Макет»);
        //ОбластьШапки = Макет.ПолучитьОбласть(«ШапкаДанных»);
        //ОбластьШапки

        КонецПроцедуры

        Функция ПолучениеФайла(ПолучениеДанныхИзДокумента, Путь)
        ПотокСтроки = Новый ЗаписьСтроки();

        Сериализатор = Новый СериализаторXDTO();

        Сериализатор.ЗаписатьJSON(ПотокСтроки, ПолучениеДанныхИзДокумента);

        СтрокаJSON = ПотокСтроки.Закрыть();

        Файл = Новый Файл(Путь);

        Поток = Файл.ОткрытьДляЗаписи();

        Поток.ЗаписатьСтроку(СтрокаJSON);

        Поток.Закрыть();

        //СтрокаJSON = СериализаторXDTO.ЗаписатьJSON(ПолучениеДанныхИзДокумента);
        //
        // Файл = Новый Файл(Путь);
        //
        // Поток = Файл.ОткрытьДляЗаписи();
        //
        // Поток.ЗаписатьСтроку(СтрокаJSON);
        //
        // Поток.Закрыть();

        Переменая= 1;
        Возврат Переменая ;
        КонецФункции // ПолучениеФайла()

        {ВнешняяОбработка.СохранениеРеализацииДляАльфы.Форма.Форма.Форма(151,22)}: Тип не определен (ЗаписьСтроки)
        ПотокСтроки = Новый <<?>>ЗаписьСтроки(); (Проверка: Толстый клиент (обычное приложение))
        {ВнешняяОбработка.СохранениеРеализацииДляАльфы.Форма.Форма.Форма(153,23)}: Конструктор не найден
        Сериализатор = Новый <<?>>СериализаторXDTO(); (Проверка: Толстый клиент (обычное приложение))

      • #38483
        bot_avaOdin — Одинэсник
        Участник

          Ваша ошибка связана с тем, что объекты ЗаписьСтроки и СериализаторXDTO отсутствуют в вашей версии платформы 1С (толстый клиент, обычное приложение). Эти объекты появились в более новых версиях платформы (8.3.7+).

          Для решения задачи сериализации структуры в JSON с выбором файла в более старых версиях 1С (до 8.3.7) используйте стандартные методы ПрочитатьJSON() и ЗаписатьJSON() из глобального контекста, либо реализуйте сериализацию вручную.

          Вот рабочий пример для версии 8.3.6 и ниже, без использования СериализаторXDTO:

          Объяснения:

          ЗаписьJSON и ПараметрыЗаписиJSON — стандартные объекты платформы 1С для записи JSON.
          ЗаписатьJSON(ЗаписьJSON, Данные) — глобальная процедура, которая сериализует структуру/массив в JSON.
          ЗаписьJSON.ОткрытьФайл открывает файл для записи.
          ЗаписьJSON.Закрыть() закрывает файл.

          Такой код работает в версиях 8.3.6 и ниже, где нет СериализаторXDTO.

          Если у вас версия платформы ниже 8.3.6, то придется использовать сторонние библиотеки или писать собственную сериализацию.

          Если хотите проверить версию платформы, используйте:

          Рекомендации:

          — Используйте ЗаписатьJSON и ЧитатьJSON из стандартных средств платформы.
          — Не используйте СериализаторXDTO в старых версиях.
          — Для чтения/записи JSON в файл используйте ЗаписьJSON и ЧтениеJSON.

          Рекомендую посмотреть здесь — пример работы с JSON в 1С:
          https://helpf.pro/faq/view/1664.html
          https://infostart.ru/public/1043459/

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С