Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Сохранение/загрузка списка значений (http://forums.kuban.ru/f1040/sohranenie_zagruzka_spiska_znachenij-3629472.html)

Marlboro 30.01.2013 22:05

Сохранение/загрузка списка значений
 
Чего переклинило меня.
Надо в текстовом файле сохранить список значений, а потом его загрузить оттуда.
Сохраняю
Текст.ДобавитьСтроку(ЗначениеВСтрокуВнутр(Список))
А вот как восстановить не воткну никак.
Список=ЗначениеИзСтрокиВнутр(Текст.ПолучитьСтроку(N)) ругается

VZ 30.01.2013 22:13

Первая строка - ересь. Читаем ЖКК (или СП), ищем описание [em]ЗначениеИзСтрокиВнутр()[/em]
Заодно [em]ЗначениеВСтрокиВнутр()[/em]
Заодно [em]ЗначениеВСтроку()[/em] и[em] ЗначениеИзСтроки()[/em].

VZ 30.01.2013 22:15

+1 А так же [em]ЗначениеВфайл()[/em] и [em]ЗначениеИзФайла()[/em].

Marlboro 30.01.2013 22:16

1-VZ >Та я уже ЖКК на пепел искурил.
Ну не въеду.

VZ 30.01.2013 22:28

3-Marlboro > Въезжай. в (1), а особенно (2) есть въезд.
P.S. Объект [em]Текст[/em] не является внутренним объеком, который можно читать поперек как глазками. Этот объект - строковый. А значит, в случае сабжа, его надо записать, а потом (в другом месте), открыть для чтения, а потом уже считывать.
Но это (в случае сабжа) совершенно лишние телодвижения.
Смотрим (2) и не выеживаемся. ;)

Marlboro 30.01.2013 22:42

4-VZ >Не-не, не надо уж совсем плохо про меня думать.
1) ЗначениеВФайл() не подойдет потому, что в файле сохраняется не только список, но и ряд других параметров.
2) Естественно, объект Текст у меня используется сначала для записи файла, а потом для его чтения.
(Типа все настройки обработки пишутся в ini-файл, а при открытии оттуда читаются)
Все нормально работает, только со списком значений бьюсь.

VZ 30.01.2013 22:59

5-Marlboro > Вот тебе два кусочечка колбаски:
1. Записываем:
[em] Параметры.ДобавитьЗначение(НачДата,"НачДата");
Параметры.ДобавитьЗначение(КонДата,"КонДата");
Параметры.ДобавитьЗначение("Документ.ПеречислениеНДФЛвБюджет","Описание");
Параметры.ДобавитьЗначение(ЗначениеВСтрокуВнутр(ТДоков),"Таблица");
ЗначениеВФайл(СокрП(ФайлВыгрузки),Параметры);[/em]

2. Читаем:
[em] Параметры = СоздатьОбъект("СписокЗначений");

ТДоков = СоздатьОбъект("ТаблицаЗначений");

ИмяФайла = СокрЛП(ФайлВыгрузки);
Если ПустоеЗначение(ИмяФайла)=1 Тогда
Предупреждение("Не указан файл выгрузки!");
Возврат;
Иначе
Если ФС.СуществуетФайл(ИмяФайла)=0 Тогда
Предупреждение("Указанный файл выгрузки не найден!");
Возврат;
КонецЕсли;

Параметры = ЗначениеИзФайла(СокрП(ФайлВыгрузки));
НачДата = Параметры.Получить("НачДата");
КонДата = Параметры.Получить("КонДата");
Описание = Параметры.Получить("Описание");
Если ПустаяСтрока(Описание)=1 Тогда
Предупреждение("Неверный формат файла загрузки!",30);
Возврат;
ИначеЕсли Найти(ВРЕГ(Описание),"ДОКУМЕНТ.")=0 Тогда
Предупреждение("Файл выгрузки не содержит описания документов.",30);
Возврат;
КонецЕсли;
ВидДокумента = СокрП(Сред(Описание,10));
Если Метаданные.Документ(ВидДокумента).Выбран()=0 Тогда
Предупреждение("В данной конфигурации нет документа """+ВидДокумента+"""");
Возврат;
КонецЕсли;
ПредставлениеДока = Метаданные.Документ(ВидДокумента).Представление();

ТДоков = ЗначениеИзСтрокиВнутр(Параметры.Получить("Таблица"));
Если ТипЗначенияСтр(ТДоков)="ТаблицаЗначений" Тогда
Если ТДоков.КоличествоКолонок()=0 Тогда
Предупреждение("Переданный файл содержит пустую таблицу!",30);
Возврат;
ИначеЕсли ТДоков.КоличествоСтрок()=0 Тогда
Предупреждение("Переданный файл не содержит документов для переноса!",30);
Возврат;
КонецЕсли;
Иначе
сообщить("тДоков имеет значение """+ТипЗначенияСтр(ТДоков)+"""");
Возврат;
КонецЕсли;
КонецЕсли;[/em]

Marlboro 30.01.2013 23:12

6-VZ >Принимается. Спасибо. Возможно, использую как вариант.
Но мне все таки интересно - можно ли сохранить/прочитать список значений через текстовый файл с использованием ЗначениеВСтрокиВнутр/ЗначениеИзСтрокиВнутр ?

VZ 30.01.2013 23:29

7-Marlboro > Можно. Но это плохое кунфу. Лучшее - как в (6). Можно загрузить/выгрузить дерево с ветками СЗ и ТЗ одним бабахом. Причем любой СЗ может содержать внутри СЗ и ТЗ. А любая ТЗ может включать в своих ячейках и СЗ, и ТЗ.
И это - более универсально для [рекурсивной] распаковки.

Marlboro 31.01.2013 00:01

8-VZ >Убедил.
Я завсегда за правильный подход к любому делу.

VZ 31.01.2013 00:32

9-Marlboro > Еще обрати внимание на первый фрагмент: там параметры записываются в стиле, принятом в типовых конфах для передачи в любые формы. Это позволяет экономить время при разработке, применяя рутинный код. И зазобрать рутинный код легче, зная заранее общую схему ;)
Например:
[em]ОткрытьФорму("Отчет", ЗначениеИзФайла(ИмяВнФайла), ИмяВнОбработки);[/em]
О_о


Текущее время: 12:57. Часовой пояс GMT +3.