Имя: Пароль:
1C
 
Список значений в таблице значений
0 ander139
 
21.05.04
10:09
Есть таблица значений. В каждой строке такой таблицы я делаю одну ячейку, содержащую список значений. Потом считываю эти списки, а они все такие же, как и последний введенный.
Может быть кто-нибудь встречался с похожей ситуёвиной?
1 Bzzzzz
 
21.05.04
10:17
Код как ты их туда запихиваешь
2 ander139
 
21.05.04
10:20
(1) Да написал-бы, если б не стёр :)
3 SnarkHunter
 
21.05.04
10:25
Ты их не присваиванием, а через выгрузить()...
4 SiMazx
 
21.05.04
10:27
(0)Стопудово накосячил при формировании ТЗ...
5 ander139
 
21.05.04
10:31
(3) А почему ж так?
6 SnarkHunter
 
21.05.04
10:36
А потому что ссылка...
7 Bzzzzz
 
21.05.04
10:39
(5) Смотри ТиС. Работа с ТаблицаМФ.
8 mike
 
21.05.04
13:15
правильно работает такой вариант :

ТЗ.НоваяСтрока();
спис = СоздатьОбъект("СписокЗначений");
// заполняем список
.....
ТЗ.спис = спис;
9 SnarkHunter
 
21.05.04
13:17
Сам-то пробовал?
10 Bzzzzz
 
21.05.04
13:24
(9) а думаешь так как в (8) не получится?
11 mike
 
21.05.04
13:27
пробовал и списки и таблицы значений туда засовывал , все прекрасно работает.
12 SnarkHunter
 
21.05.04
13:30
(10)Не думаю - знаю...
13 Bzzzzz
 
21.05.04
13:31
(12) Я так же помещал Таблицы.
Причем можно обращаться тз.Табл.ВывестиСекцию(..)
14 SnarkHunter
 
21.05.04
13:37
(11)Научи...
(13)Таблицы - это несколько другое...
15 lexa
 
21.05.04
13:42
(13) со списком присваивание точно не пройдет, я так сделал, а потом долго удивлялся, прада я просто переменную использовал. Но SnarkHunter прав - при присваивании создается ссылка на список.
16 lexa
 
21.05.04
13:44
ТЗ.НоваяСтрока();
спис = СоздатьОбъект("СписокЗначений");
// заполняем список
.....
спис.Выгрузить(ТЗ.спис) ;
17 Bzzzzz
 
21.05.04
13:48
тз=СоздатьОбъект("ТаблицаЗначений");
   тз.НоваяКолонка("сз");
   
   
   Для Ном=1 По 5 Цикл
       сз=СоздатьОбъект("СписокЗначений");
           сз.ДобавитьЗначение(""+Ном+" = 1");
           сз.ДобавитьЗначение(""+Ном+" = 2");
       тз.НоваяСтрока();
           тз.сз=сз;
   КонецЦикла;
   
   тз.ВыбратьСтроки();
   Пока тз.ПолучитьСтроку() = 1 Цикл
       Для Ном=1 По тз.сз.РазмерСписка() Цикл
           Сообщить(тз.сз.ПолучитьЗначение(Ном));
       КонецЦикла;
   КонецЦикла;
18 lexa
 
21.05.04
13:52
ТЗ.НоваяСтрока();
спис = СоздатьОбъект("СписокЗначений");
// заполняем список
.....
ТЗ.спис = СоздатьОбъект("СписокЗначений");
спис.Выгрузить(ТЗ.спис) ;
19 SnarkHunter
 
21.05.04
13:52
И что?
Ты сделай в ТЗ хотя бы 2 строки, в которых разные списки...
20 SnarkHunter
 
21.05.04
13:53
(19) для (17)
21 Bzzzzz
 
21.05.04
13:57
(20) не понял тебя?
в ТЗ 5 строк, в каждой свой СЗ, со своими значениями
22 Bzzzzz
 
21.05.04
14:03
Результат работы кода (17)
1 = 1
1 = 2
2 = 1
2 = 2
3 = 1
3 = 2
4 = 1
4 = 2
5 = 1
5 = 2
23 SnarkHunter
 
21.05.04
14:04
Недоглядел... Строк действительно 5, вот только значения в Сз одинаковые для всех строк... Попробуй сделать разные...
24 SnarkHunter
 
21.05.04
14:06
Результат тебя удивит...
25 Bzzzzz
 
21.05.04
14:09
(24) Что значит "Попробуй сделать разные... ".
Результат в (22). Разве значения одинаковы ?
26 SnarkHunter
 
21.05.04
14:12
А разве нет?
27 Bzzzzz
 
21.05.04
14:14
(26) кто-то из нас глючит :-)
где в (17) хотя бы 2 одинаковых значения?
28 lexa
 
21.05.04
14:26
(25) Да все правильно
тз=СоздатьОбъект("ТаблицаЗначений");
  тз.НоваяКолонка("сз");
   
   
  Для Ном=1 По 5 Цикл
      сз=СоздатьОбъект("СписокЗначений");
          сз.ДобавитьЗначение(""+Ном+" = 1");
          сз.ДобавитьЗначение(""+Ном+" = 2");
      тз.НоваяСтрока();
          тз.сз=сз;
  КонецЦикла;
   
  тз.ВыбратьСтроки();
  Пока тз.ПолучитьСтроку() = 1 Цикл
      Для Ном=1 По тз.сз.РазмерСписка() Цикл
             Сообщ =Строка(тз.НомерСтроки) + " " +Строка(Ном)+ " " + тз.сз.ПолучитьЗначение(Ном);
          Сообщить(Сообщ);
      КонецЦикла;
  КонецЦикла;
Получил
1 1 1 = 1
1 2 1 = 2
2 1 2 = 1
2 2 2 = 2
3 1 3 = 1
3 2 3 = 2
4 1 4 = 1
4 2 4 = 2
5 1 5 = 1
5 2 5 = 2
29 SnarkHunter
 
21.05.04
14:27
У тебя в КАЖДОЙ строке ТЗ ОДИН И ТОТ ЖЕ список...
30 Bzzzzz
 
21.05.04
14:34
(29) Хорошо, Снарк, упокойся :-)
Давай выясним чем определяется "одна и та жесть списка" ;-)
31 SnarkHunter
 
21.05.04
14:36
Одинаковым размером и одинаковыми размерами, расположенными в одном и том же порядке...
32 SnarkHunter
 
21.05.04
14:36
Очепятка :-)
Одинаковым размером и одинаковыми значениями, расположенными в одном и том же порядке...
33 Bzzzzz
 
21.05.04
14:38
(32) Сделай так и посмотри значения в списках :-))
   тз.ВыбратьСтроки();
   Пока тз.ПолучитьСтроку() = 1 Цикл
       Зн="";
       тз.сз.ВыбратьЗначение(Зн);
       //Для Ном=1 По тз.сз.РазмерСписка() Цикл
       //    Сообщить(тз.сз.ПолучитьЗначение(Ном));
       //КонецЦикла;
   КонецЦикла;
34 Bzzzzz
 
21.05.04
14:41
Для Ном=1 По 5 Цикл
       сз=СоздатьОбъект("СписокЗначений");
           сз.ДобавитьЗначение(""+Ном+" = 1");
           сз.ДобавитьЗначение(""+Ном+" = 2");
           Если Ном%2=0 Тогда
               сз.ДобавитьЗначение(""+Ном+" = 3");
           КонецЕсли;
       тз.НоваяСтрока();
           тз.сз=сз;
   КонецЦикла;
вот тебе разный размер списков :-))
35 lexa
 
21.05.04
14:41
(29) Для каждой строки ТЗ Bzzzzz создает каждый раз новый список значений.
сз=СоздатьОбъект("СписокЗначений"); - находится внутри цикла заполнения ТЗ.
36 SnarkHunter
 
21.05.04
14:45
Ну да... Каждый раз новый объект создается - тогда срабатывает...
37 SnarkHunter
 
21.05.04
14:46
Эту строчку не заметил, поэтому и начал тупить...
38 lexa
 
21.05.04
14:52
(37) мне самому интересно стало, почему список получается короткий, хотя в него вроде бы добавляют 10 значений
39 ChAlex
 
25.05.04
16:56
Я делаю так (и ни каких проблем нет)!
Т=СоздатьОбъект("ТаблицаЗначений");
Т.НоваяКолонка("Спис");
Для А=1 По ... Цикл
  Т.НоваяСтрока();
  Т.Спис=СоздатьОбъект("СписокЗначений");
  Для К=1 По ... Цикл
      Т.Спис.Добавить(НекоеЗначение);
  КонецЦикла;
КонецЦикла;
40 Рупор абсурда
 
25.05.04
19:47
А первых девяти постов в этой ветке действительно нет? Или мне кажется?
41 spock
 
25.05.04
20:37
Религиозно неверно делать присваивание СпискаЗначений или ТаблицыЗначений. Правильно делать Выгрузить().
А для прикола сделайте коррективы в примере (34):
Для Ном=1 По 5 Цикл
   сз = СоздатьОбъект("СписокЗначений");
   сз.ДобавитьЗначение(""+Ном+" = 1");
   сз.ДобавитьЗначение(""+Ном+" = 2");
   Если Ном%2=0 Тогда
       сз.ДобавитьЗначение(""+Ном+" = 3");
   КонецЕсли;
   тз.НоваяСтрока();
   тз.сз=сз;
   сз = ""; << ====
КонецЦикла;
42 Волшебник
 
25.05.04
20:39
(40) Ты щелкнул пимпочку ">>", а она показывает только последние 30 сообщений.
43 spock
 
25.05.04
20:41
А лично я делал так...кстати, работает 100% и без потенциальных ошибок:
ТЗ.УстановитьЗначение(...);
44 OctoberHammer
 
25.05.04
20:58
42-й я щелкнул имеенно всю ветку, а не вижу 13-ти.. Модераторы смодерировали?
45 OctoberHammer
 
25.05.04
21:04
тю... а сейчас все в порядке.
46 Рупор абсурда
 
25.05.04
21:04
(42) Ага ... Понял ...
Но работает почему то через раз ...
47 OctoberHammer
 
25.05.04
21:11
Похоже опять куки. После того, как отправил пост - показались все реплики, поэтому, потом, по щелкании на ссылку тоже видишь все реплики.
Если щелкнуть на ">>", тогда и при щелкании на ссылку тоже показывает последние 30.
48 Волшебник
 
25.05.04
21:27
Это кеш глючит. Исправляю...
52 Волшебник
 
25.05.04
21:41
(51) Кажется, я все исправил. Все тестовые сообщения будут удалены.
53 NiGMa
 
27.05.04
09:42
Я такую ситуацию обхожу проще:
тз.Список = ЗначениеВСтрокуВнутр(сз);

Ну и соотв. назад:

сз = ЗначениеИзСтрокиВнутр(тз.Список);
54 SnarkHunter
 
27.05.04
09:43
Это вовсе не проще...