RE: Как сохранить и восстановить СписокЗначений в 1С через строку?

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

    Для сохранения объекта «СписокЗначений» в строку и последующего восстановления из строки в 1С обычно используют сериализацию в формат JSON или XML, либо стандартные методы сериализации встроенного языка.

    ### Вариант 1. Сериализация через JSON (рекомендуется для 1С 8.3 и выше)

    1C
    // Сохранение списка значений в строку
    Функция СписокЗначенийВСтроку(СписокЗначений)
        // Используем стандартный JSON-сериализатор
        СтрокаJSON = ОбщегоНазначения.ПревратитьВJSON(СписокЗначений);
        Возврат СтрокаJSON;
    КонецФункции
    
    // Восстановление списка значений из строки
    Функция СтрокаВСписокЗначений(СтрокаJSON)
        СписокЗначений = ОбщегоНазначения.ПревратитьИзJSON(СтрокаJSON);
        Возврат СписокЗначений;
    КонецФункции
    

    Если в вашей конфигурации нет объекта `ОбщегоНазначения` с методами JSON, можно использовать стандартные методы:

    1C
    // Сериализация в XML
    Функция СписокЗначенийВСтроку(СписокЗначений)
        Поток = Новый ЗаписьXML;
        СписокЗначений.ЗаписатьXML(Поток);
        Возврат Поток.Закрыть();
    КонецФункции
    
    // Десериализация из XML
    Функция СтрокаВСписокЗначений(СтрокаXML)
        Поток = Новый ЧтениеXML(СтрокаXML);
        СписокЗначений = Новый СписокЗначений;
        СписокЗначений.ПрочитатьXML(Поток);
        Возврат СписокЗначений;
    КонецФункции
    

    ### Вариант 2. Сериализация через XML (универсальный)

    1C
    // Сохранение списка значений в строку
    Функция СписокЗначенийВСтроку(СписокЗначений)
        Поток = Новый ЗаписьXML;
        СписокЗначений.ЗаписатьXML(Поток);
        СтрокаXML = Поток.Закрыть();
        Возврат СтрокаXML;
    КонецФункции
    
    // Восстановление списка значений из строки
    Функция СтрокаВСписокЗначений(СтрокаXML)
        Поток = Новый ЧтениеXML(СтрокаXML);
        СписокЗначений = Новый СписокЗначений;
        СписокЗначений.ПрочитатьXML(Поток);
        Возврат СписокЗначений;
    КонецФункции
    

    ### Пример использования:

    1C
    // Создаем список значений
    Список = Новый СписокЗначений;
    Список.Добавить("Первое");
    Список.Добавить("Второе");
    
    // Сохраняем в строку
    Строка = СписокЗначенийВСтроку(Список);
    
    // Восстанавливаем из строки
    ВосстановленныйСписок = СтрокаВСписокЗначений(Строка);
    
    // Проверяем
    Для Каждого Элемент Из ВосстановленныйСписок Цикл
        Сообщить(Элемент);
    КонецЦикла;
    

    Таким образом, для сохранения и восстановления списка значений удобно использовать методы `ЗаписатьXML` и `ПрочитатьXML`, которые позволяют сериализовать объект в строку и обратно без потери данных.

    Рекомендую посмотреть здесь:
    https://its.1c.ru/db/v83doc#bookmark:dev:TI000000113
    https://kuharbogdan.com/programmiruem-v-1s/kak-rabotat-so-spiskom-znachenij-v-1s/

    База знаний 1С