Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Сериализовать список значений (число прочтений - 8580 )
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Сериализовать список значений
20. Ноября 2011 :: 14:05
Печать  
Цель: сохранить и потом прочитать список значений в реквизит типа ХранилищеЗначений.

Напрямую это невозможно.
Пробовал по всякому, но результата не добился.
Сохранение списка в файл можно выполнить следующим образом
Код
Выбрать все
//[b]Сохранение:[/b]
Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
МойСписокЗначений=Новый СписокЗначений;
МойСписокЗначений.Добавить("Мало мыла раму мама");
ОбъектXDTO = Сериализатор.ЗаписатьXDTO(МойСписокЗначений);
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\new.xml");
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);
ЗаписьXML.Закрыть();

//[b]Загрузка:[/b]
ЧтениеXML = Новый ЧтениеXML;
ТипОбъектаXDTO=ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core","ValueListType");
ЧтениеXML.ОткрытьФайл("C:\new.xml");
ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипОбъектаXDTO);
ОбъектXDTO.Проверить();
Сериализатор=Новый СериализаторXDTO(ФабрикаXDTO);
МойСписокЗначений2=Сериализатор.ПрочитатьXDTO(ОбъектXDTO); 

Но как можно добиться того же эффекта через ХранилищеЗначений?

Или есть более простой и правильный путь, который я пока не нашел?
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Сериализовать список значений
Ответ #1 - 21. Ноября 2011 :: 06:29
Печать  
Или я туплю, и не понимаю суть вопроса... или...

но вот такой код работает
Код
Выбрать все
СЗ = Новый СписокЗначений;
СЗ.Добавить("Трям");

ХЗ = Новый ХранилищеЗначения(СЗ); 



Ну и, соответственно, потом
ХЗ.Получить() восстанавливает сохраненный список значений.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Сериализовать список значений
Ответ #2 - 21. Ноября 2011 :: 07:12
Печать  
Satans Claws писал(а) 21. Ноября 2011 :: 06:29:
Ну и, соответственно, потом
ХЗ.Получить() восстанавливает сохраненный список значений.
Проблема в том, что потом ХЗ.Получить() = Неопределено!
Именно так я изначально и сделал. Все откомпилилось и .... но потом результат всегда был пустым. Начал отлаживать и пришел к этому выводу - не важно, какой список был сохранен - возвращается всегда Неопределено.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Сериализовать список значений
Ответ #3 - 21. Ноября 2011 :: 08:11
Печать  
o_0

Версия 1Ски какая?

Ибо я дебаггером смотрел ХЗ.Получить() - он мне вернул список
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Сериализовать список значений
Ответ #4 - 21. Ноября 2011 :: 09:16
Печать  
8.2.13.(дальше не помню).

Ты читал список в том же контексте?
Попробуй после сохранения обнулить переменную, в которой был список.
Если сериализация прошла верно, то это не должно испортить список, а если в хранилище попадает только ссылка, то ... это объяснит мою проблему...
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Сериализовать список значений
Ответ #5 - 30. Ноября 2011 :: 01:28
Печать  
Видимо, способа сериализовать список в 1С8.2 не существует?
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сериализовать список значений
Ответ #6 - 30. Ноября 2011 :: 06:40
Печать  
ЗначениеВСтрокуВнутр(СЗ) ?
« Последняя редакция: 30. Ноября 2011 :: 14:19 - Alex_Bob »  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Сериализовать список значений
Ответ #7 - 01. Декабря 2011 :: 01:31
Печать  
Всем спасибо. Вариант с ЗначениеВСтрокуВнутр я попробовал сразу же, но не отработало, хотя теперь разобрался, что ошибка была не здесь ... в общем, ЗначениеВСтрокуВнутр дает именно то, что надо!
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Сериализовать список значений
Ответ #8 - 02. Декабря 2011 :: 04:52
Печать  
капец, только руки дошли микро тест сделать:

8.2.13.219
Толстый клиент
конфа из 1 константы и 1 обработки

модуль формы обработки такой

Код
Выбрать все
Процедура КнопкаВыполнитьНажатие(Кнопка)
	Константы.ХЗ.Установить(Новый ХранилищеЗначения(сзТест));
КонецПроцедуры

Процедура ОсновныеДействияФормыЗаполнить(Кнопка)
	сзТест.Добавить(Новый УникальныйИдентификатор);
	сзТест.Добавить(123);
	сзТест.Добавить("яяя");
КонецПроцедуры

Процедура ОсновныеДействияФормыВосстановить(Кнопка)
	СЗ = Константы.ХЗ.Получить().Получить();

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



все работает (список сохраняется и восстанавливается)


упс, малость опоздал
  
Наверх
 
IP записан
 
paradise
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 24. Февраля 2012
Re: Сериализовать список значений
Ответ #9 - 24. Февраля 2012 :: 10:37
Печать  
Дмитрий, а подробнее можете рассказать где была ошибка?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Сериализовать список значений
Ответ #10 - 27. Февраля 2012 :: 01:34
Печать  
Сейчас уже точно не вспомню, но что-то неверно делал с полем типа ХранилищеЗначений  Круглые глаза.
  
Наверх
 
IP записан
 
paradise
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 24. Февраля 2012
Re: Сериализовать список значений
Ответ #11 - 28. Февраля 2012 :: 11:20
Печать  
Разобрался!
Если кому-то еще понадобится...
Нужно работать не с метаданными "Константы.", а с реквизитом "КонстантыНабор.", который содержит перечень констант из конфигурации.
Установка(Запись) константы:
КонстантыНабор.НашаКонстанта = Новый ХранилищеЗначения(ЗначениеВСтрокуВнутр(СписокЗначений));
Чтение константы:
СписокЗначений = ЗначениеИзСтрокиВнутр(КонстантыНабор.НашаКонстанта.получить());
  
Наверх
 
IP записан
 
Ilerod
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 25
Зарегистрирован: 21. Мая 2025
Re: Сериализовать список значений
Ответ #12 - 26. Мая 2025 :: 08:23
Печать  
интересно
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать