Имя: Пароль:
1C
 
Как Загнать Структуры в список значений?
0 Vovik
 
23.08.05
18:37
Есть определенное количество структур, загоняю их в список значений.
Потом читаю список значений и получаю просто слово:

Структура
Структура...

Вопрос: Как загнать структуры в список значений, чтобы потом прочитать эти структуры?
1 Волшебник
 
модератор
23.08.05
18:39
не путай объект и его строковое представление
2 Vovik
 
23.08.05
18:45
(1)Направь пожалуйста на путь истиный!

Для Каждого Элемент из Доки Цикл
//как получить структуру из списка значений?
КонецЦикла;

Спасибо!
3 Волшебник
 
модератор
23.08.05
18:46
(2) Структура = ЭлементСписка.Значение;
4 Vovik
 
23.08.05
18:49
//(4) Результат тот же. Может я добавляю в СЗ неправильно?

СписокЗначений.Добавить(Структура);
5 Волшебник
 
модератор
23.08.05
18:51
А почему ты думаешь, что твой результат неправильный?
6 Vovik
 
23.08.05
18:52
Смотрю по Отладчику!
1.Перед тем как внести в СЗ - вижу всю структуру(поля и значения)
2.Когда получаю ее из СЗ - Просто слово "структура"
7 Волшебник
 
модератор
23.08.05
18:55
(6) Может не туда смотришь? F2 нажимал?
8 Asmody
 
23.08.05
18:56
ТипЗнч?
9 Волшебник
 
модератор
23.08.05
19:00
В типовой конфигурации я встречал такую конструкцию:

Реквизит отчета типа строка, которая...
 содержит структуру, преобразованную в строку, которая...
   впоследствии оказалась не структурой, а соответствием, которая...
      содержит массив, который
          содержит ссылки на объекты, до которых...
              мне надо было добраться.
10 Vovik
 
23.08.05
19:00
(8)Только он и есть. В нем 3 различных квалификатора, а в них нет ничнего общего с моей структурой
11 Волшебник
 
модератор
23.08.05
19:03
(10) ты скажи, что он возвращает - Тип("Строка") или Тип("Структура")?
12 Vovik
 
23.08.05
19:06
(11) Я не внимателен, тип Структура!!!
А как дальше то ее выжать из переменной????
13 Asmody
 
23.08.05
19:08
мдя... домой ходи. утро вечера мудренее. :)
14 Волшебник
 
модератор
23.08.05
19:12
(12) что сделать?
15 Vovik
 
24.08.05
11:59
//Конструкция не работатет:(

КлючСтруктуры="СЕКЦИЯДОКУМЕНТ";
ВидДокумента=СтрокаСЗ[КлючСтруктуры];

//То есть когда структура загоняется в СЗ она херится:(
//Где выход?
16 Asmody
 
24.08.05
12:02
можешь кратенько код показать, т.е., как чего куда загоняешь и как достаешь. (но только ключевые моменты, не надо показывать свою гениальность, выкладывая на форум простыню на два экрана) :)
17 Vovik
 
24.08.05
12:07
...                ДокументыСтассив.Вставить(Имя, Значение);
           КонецЦикла;
       ДокументыВСЗ.Добавить(ДокументыМассив); //в отладчике видно всю структуру ("ДокументыМассив")

Обрабатываем(ДокументыВСЗ)//вызываем другую процедуру и пкередаем СЗ

...
//Далее в другой процедуре
Процедура Обрабатываем(ДокументыВСЗ)
Для Каждого Элемент из Доки Цикл        
   СтрокаСЗ=ДокументыВСЗ.Значение;
КонецЦикла;
18 Vovik
 
24.08.05
12:11
В "СтрокаСЗ" нет нихера, просто пишет Тип структура, а ни одного поля из нее не достать:(

Думаю массив чтоли попробовать поюзать?
19 Asmody
 
24.08.05
12:11
ДокументыВСЗ - СписокЗначений?
а где у тебя при извлечении берется _элемент_ этого списка?
20 Vovik
 
24.08.05
12:13
Для Каждого Элемент из Доки Цикл        
  СтрокаСЗ=ДокументыВСЗ.Значение;//вывбираем элемент СЗ
  КлючСтруктуры="СЕКЦИЯДОКУМЕНТ";
  ВидДокумента=СтрокаСЗ[КлючСтруктуры];//Ищем поле из структуры
КонецЦикла;
21 Asmody
 
24.08.05
12:20
если ДокументыВСЗ - список значений, то вот это:
СтрокаСЗ=ДокументыВСЗ.Значение;//вывбираем элемент СЗ - чушь полная.

нет у списка значений свойства Значение!
22 Vovik
 
24.08.05
12:22
См(3).Есть в отладчике видел.
И без него таже херь получается. Щас использовал массив вместо СЗ и то же облом :(
23 Asmody
 
24.08.05
12:26
(22) в (3) _элемент_ списка значений! ЭЛЕМЕНТ! блин, как бы это тебе по-проще объяснить? ну это как рота (СписокЗначений) и один служащий этой роты (ЭлементСпискаЗначений). бестолку выяснять, что лежит в кармане у роты!
24 Vovik
 
24.08.05
12:27
Так как правильно вытащить элемент из СЗ(структуру в данном случае во всех ее проявлениях)?
25 Asmody
 
24.08.05
12:32
СписокЗначений (ValueList)
Элементы коллекции:
ЭлементСпискаЗначений
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс элемента.

т.е. что-то типа:

Для каждого ЭлементСпискаЗначений из СписокЗначений Цикл
  ЗначениеЭлементаCпискаЗначений=ЭлементСпискаЗначений.Значение; //<- вот тут твоя структура!
  КлючСтруктуры="СЕКЦИЯДОКУМЕНТ";
  ВидДокумента=ЗначениеЭлементаCпискаЗначений[КлючСтруктуры];
КонецЦикла;
26 Волшебник
 
24.08.05
12:36
(25) Я это уже говорил в (3)
27 Vovik
 
24.08.05
12:40
(15) я же написал про это
28 Vovik
 
24.08.05
12:40
Всмысле см 15
29 Vovik
 
24.08.05
12:42
Причем эта же конструкция работает до внесения в СЗ. То есть ключ правильный полюбому
30 Asmody
 
24.08.05
12:52
(29) еще раз, я не пока не увидел, где из списка значений ты получаешь его элемент.
31 Vovik
 
24.08.05
12:54
Процедура ЗагрузитьДокументы(Доки)  //доки это сз
   Для Каждого Элемент из Доки Цикл        
       СтрокаСЗ=Элемент.Значение;
       КлючСтруктуры="СЕКЦИЯДОКУМЕНТ"; //пишет ключ не найден
       ВидДокумента=СтрокаСЗ[КлючСтруктуры];
   КонецЦикла;
КонецПроцедуры
32 Asmody
 
24.08.05
13:02
вот код, который работает 100%

Процедура КнопкаВыполнитьНажатие(Кнопка)
   СписокЗначений=Новый СписокЗначений;
   
   Для ии=1 по 10 Цикл
       Структура=Новый Структура;
       Структура.Вставить("КлючСтруктуры", "Значение"+ии);
       СписокЗначений.Добавить(Структура);
   КонецЦикла;
   
   ТипаПроцедура(СписокЗначений);
   
КонецПроцедуры

Процедура ТипаПроцедура(СписокЗначений)
   Для Каждого ЭлементСпискаЗначений из СписокЗначений Цикл
       ЗначениеЭлементаСпискаЗначений=ЭлементСпискаЗначений.Значение;
       Если ТипЗнч(ЗначениеЭлементаСпискаЗначений)=Тип("Структура") Тогда
           КлючСтруктуры="КлючСтруктуры";
           Значение=ЗначениеЭлементаСпискаЗначений[КлючСтруктуры];
           Сообщить(""+Значение);
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры
33 Vovik
 
24.08.05
13:11
//а вот эта дрянь не хочет ни в какую:

Процедура ВыбратьСекцииДокументов(Файл) Экспорт
   Текст = Новый ТекстовыйДокумент();
   Текст.Прочитать(Файл);    
   //ищем документы
   ДокументыСтруктура=Новый Структура();
   ДокументыВСЗ=Новый СписокЗначений();
   Для Ном=2 По Текст.КоличествоСтрок() Цикл
       ДокументыСтруктура.Очистить();
       Стр=Текст.ПолучитьСтроку(Ном);
       Если Лев(Врег(СокрЛП(Стр)),14)="СЕКЦИЯДОКУМЕНТ" Тогда
           Для Ном1=Ном По Текст.КоличествоСтрок() Цикл
               Стр1=Текст.ПолучитьСтроку(Ном1);
               Если Лев(Врег(СокрЛП(Стр1)),14)="КОНЕЦДОКУМЕНТА" Тогда
                   Прервать;
               КонецЕсли;                    
               ЕстьЗнакРавно=Найти(Стр1, "=");
               Имя=Врег(СокрЛП(Лев(Стр1, ЕстьЗнакРавно-1))); //имя в структуре
               Значение=Сред(Стр1, ЕстьЗнакРавно+1);         //значение в структуре
               ДокументыСтруктура.Вставить(Имя, Значение);
           КонецЦикла;
           ДокументыВСЗ.Добавить(ДокументыСтруктура);            
       КонецЕсли;
   КонецЦикла;    
ЗагрузитьДокументы(ДокументыВСЗ);    
КонецПроцедуры

Процедура ЗагрузитьДокументы(Доки)
   Для Каждого Элемент из Доки Цикл        
       СтрокаСЗ=Элемент.Значение;
       КлючСтруктуры="СЕКЦИЯДОКУМЕНТ";
       ВидДокумента=СтрокаСЗ[КлючСтруктуры];
   КонецЦикла;
КонецПроцедуры
34 Vovik
 
24.08.05
13:45
Меня это уже бесит, нашел в конфе аналогичные процедуры все как адо, а у меня не идет. Щас буду бить компьютер табуреткой
35 Vovik
 
24.08.05
13:57
Сделал блин :)) Пойду напьюсь
36 Vovik
 
24.08.05
13:57
Сделал блин :)) Пойду напьюсь