Имя: Пароль:
1C
1С v8
Что я не понимаю в массивах?
, ,
0 Nik_nik_nik
 
15.04.13
11:43
Есть вот такой код:

   ТаблицаЗагрузки = Новый Массив;
   
   Строка = Новый Структура;
   
   Пока СтрДлина(НазваниеМагазина) <> 0 Цикл
       
       НазваниеМагазина = Лист.Cells(НомерСтроки,1).Value;
       Строка.Вставить("НазваниеМагазина", НазваниеМагазина);
       Строка.Вставить("КодМагазина", Лист.Cells(НомерСтроки,2).Value);
       Строка.Вставить("Бренд", Лист.Cells(НомерСтроки,3).Value);
       Строка.Вставить("РегионДоставки", Лист.Cells(НомерСтроки,4).Value);
       Строка.Вставить("Наименование", Лист.Cells(НомерСтроки,5).Value);
       Строка.Вставить("ТипГруза", Лист.Cells(НомерСтроки,6).Value);
       Строка.Вставить("Отдел", Лист.Cells(НомерСтроки,7).Value);
       Строка.Вставить("Инвойс", Лист.Cells(НомерСтроки,8).Value);
       Строка.Вставить("Количество", Лист.Cells(НомерСтроки,9).Value);
       Строка.Вставить("ОбъемГруза", Лист.Cells(НомерСтроки,10).Value);
       
       
       ТаблицаЗагрузки.Добавить(Строка);
       Состояние("Читается строка Excel " + (НомерСтроки-4));
       ////ДОБАВЛЯЕМ СТРОКУ
       //ДобавитьСтрокуТоваров(Строка);
       
       //Сообщить(""+НазваниеМагазина+" "+КодМагазина+" "+Бренд+" "+РегионДоставки+" "+Наименование+" "+ТипГруза+" "+Отдел+" "+Инвойс+" "+Количество+" "+ОбъемГруза);
       
       НомерСтроки = НомерСтроки + 1;
   КонецЦикла;    
   
   ЗаполнитьТаблицу(ТаблицаЗагрузки);


Беда в том, что внутри цикла массив читается нормально, а как только выходит из цикла, массив все превращает в "неопределено".
Это управляемые формы на стороне клиента.
Что я делаю не так?
1 rutony
 
15.04.13
11:48
(0) зачем вообще тут массив, передавай структуру функции
2 rutony
 
15.04.13
11:49
(1) ааа.. тупанул, попробуй список значений, зачем тебе именно массив
3 Нуф-Нуф
 
15.04.13
11:50
(2) Какая разница какая коллекция используется, есть где-то глюк
4 cw014
 
15.04.13
11:51
За переменную с именем "Строка" - расстреливать нужно
5 Нуф-Нуф
 
15.04.13
11:51
а ты что делаешь вообще? на клиенте пытаешься считать файл и испровизированной таблице значений закинуть на сервер? не проще ли сразу на сервер передать файл?
6 Нуф-Нуф
 
15.04.13
11:51
(4)+1
7 mistеr
 
15.04.13
11:51
(2) Тупанул дважды
8 mikecool
 
15.04.13
11:52
где то массив затирается
9 ilkoder
 
15.04.13
11:52
мне кажется структуру надо в цикле создавать,а не один раз
10 ilkoder
 
15.04.13
11:52
(4) - это точно
11 Нуф-Нуф
 
15.04.13
11:53
(9) +1
12 cw014
 
15.04.13
11:53
(9) Ну тут ты прав. А во вторых - у екселя есть метод, позволяющий узнать высоту таблицы
13 Nik_nik_nik
 
15.04.13
11:54
(4) уже поправил... это в порыве испытаний родилось. На результат не повлияло.
(5) да, наверное так и буду пытаться, но пока интересна сама ошибка.
(8) количество строк и структура остается, теряются только данные.
14 cw014
 
15.04.13
11:54
(9) Так что тут ты не в массивах не понимаешь, а в ссылочной целостности
15 Киборг
 
15.04.13
11:55
назовем массив - таблицей, структуру - строкой, чтобы код легко читался и воспринимался, ага
16 Nik_nik_nik
 
15.04.13
11:55
(9) - может быть, но внутри цикла (до самого последнего пробега) массив читается нормально. Исходя из этого, дело явно не в объявлении структуры. Но попробую.
17 cw014
 
15.04.13
11:56
(15) Прямо стихи
18 Nik_nik_nik
 
15.04.13
11:58
Приз получает (9).
Дело было в объявлении структуры.

Кто объяснит почему норм читалось внутри цикла?
19 Лефмихалыч
 
15.04.13
11:58
(0)  проблема в функции ЗаполнитьТаблицу() и в том, что (9)
20 Жан Пердежон
 
15.04.13
11:59
(18) разве не очевидно?
21 Nik_nik_nik
 
15.04.13
12:00
(20) - согласен на счет почему не читалась дальше, вопрос в том, почему читалась в цикле. Что меняется на границе "в цикле|вне цикла"?
22 cw014
 
15.04.13
12:00
(18) Ну легко.
Ты создал экземпляр объекта "Структура" - допустим внутренний ид у нее по меркам 1С - "01"

Далее ты ее заполняешь, потом кладешь в массив. В массив кладется (на уровне платформы) - "01".

Бежишь дальше, перезаполняешь структуру. Кладешь в массив, в массив кладется "01"...

В итоге у тебя массив из одинаковых структур
23 ilkoder
 
15.04.13
12:01
(18) - просто много раз ошибки были, теперь просто привычка в цикле переменные создавать, которые перезаписываются
24 Nik_nik_nik
 
15.04.13
12:03
(22) это ответ на вопрос - почему не читается дальше.... но почему читается внутри цикла? Если все так, то должно быть или все одинаковые строки или (с учетом того что все это превращается в неопределено) все неопределено уже внутри цикла.
25 cw014
 
15.04.13
12:03
(24) Ты в цикле как "читаешь"?
26 Жан Пердежон
 
15.04.13
12:05
(24) у тебя во всех элементах массива ссылка на один и тот же объект в памяти, который в этом же цикле изменяется
27 cw014
 
15.04.13
12:05
(26) Красиво сказано
28 fisher
 
15.04.13
12:06
(24) Внутри цикла читается текущие значения структуры. Тут всё ОК. А вот почему за пределами цикла ссылка на структуру заменяется на Неопределено - непонятно.
29 В тылу врага
 
15.04.13
12:06
(22) не одинаковых, а одной и той же
30 Галахад
 
гуру
15.04.13
12:08
(28) Что непонятно?

1 1
2 2
3 3
пусто пусто

Вот последние данные в структуру и записались.
31 fisher
 
15.04.13
12:10
(30) Я из (0) решил, что массив ссылок на структуру превратился в массив Неопределено.
32 Nik_nik_nik
 
15.04.13
12:11
(25) - отладчиком.
(26) - стоп. Если у меня записываются ссылки - тогда они что в цикле ссылки, что за пределами цикла - ссылки и результат чтения массива что внутри цикла, что снаружи - должно быть фиолетово. Если пишутся значения - в принципе тоже разницы быть не должно. Только в первом случае везде должен быть глюк, а во втором - везде должно читаться. А получается что пока мы внутри цикла - в массиве значения, а как выходим из цикла в массиве уже получаются ссылки (которые кривые и не могут быть нормально прочитаны).
33 Бледно Золотистый
 
15.04.13
12:14
(30) Вообще должно быть в этом случае:

3 3
3 3
3 3

И Неопределено тут не должно быть, ТС что-то мутит.
34 cw014
 
15.04.13
12:14
(33) А крик души в (32) я вообще не понял
35 Nik_nik_nik
 
15.04.13
12:15
(33) скрины выложить?
36 fisher
 
15.04.13
12:16
(32) Еще раз. В массиве были не ссылкИ. В массиве была ссылкА. Одна и та же. И отладчиком ты видел текущие значения структуры по этой ссылке. Которые менялись в каждой итерации. Глянь в отладчике значения предыдущих элементов массива. Данные в их структурах менялись на каждой итерации. Потому, что это была одна и та же структура.
37 Галахад
 
гуру
15.04.13
12:17
(33) Неа. Он же название считывает. И если его нет,
заполняет все пустыми значениями, а потом выходит из цикла.
38 Nik_nik_nik
 
15.04.13
12:19
Спасибо всем за помощь. Ошибка решена.
Сейчас больше нет времени разбираться.
В чем была ошибка - понял.
39 Бледно Золотистый
 
15.04.13
12:21
(37) Согласен