Имя: Пароль:
1C
1С v8
Двумерный динамический массив
0 aceaces
 
19.04.18
11:21
Может кто-нибудь рассказать эту "чудесную" 1сную систему работы с массивами

Создаю двумерный массив
Для i=1 По ВсегоСтрок Цикл
        ДанныеИзЭкселевскогоФайлаЯчейка.Добавить(i);
КонецЦикла;


Для i=1 По ВсегоКолонок Цикл
    ДанныеИзЭкселевскогоФайла.Добавить(ДанныеИзЭкселевскогоФайлаЯчейка);    
КонецЦикла;

Но при присваивании например
ДанныеИзЭкселевскогоФайла[0][0] = "не важно что"; Сообщить(ДанныеИзЭкселевскогоФайла[0][0]);                   Сообщить(ДанныеИзЭкселевскогоФайла[1][0]);                   Сообщить(ДанныеИзЭкселевскогоФайла[2][0]);

результат будет 3 строки "не важно что"

Может кто-нибудь объяснить почему?
1 ptiz
 
19.04.18
11:26
(0) А где тут двумерный массив? Больше похоже на вложенный. Причем в ДанныеИзЭкселевскогоФайла вставляется одна и та же ссылка.
2 Cool_Profi
 
19.04.18
11:26
Потому что строки нумеруются  с 0?
3 aceaces
 
19.04.18
11:36
ptiz
Насколько я понял, чтобы создать двумерный массив в 1с надо сделать массив массива, я не прав? Вложенный как раз.

Пример с этого форума из книжки
Листинг 2.3. Создание многомерного массива

    ДвумерныйМассив = Новый Массив (2, 8);

    Листинг 2.4. Создание многомерного массива добавлением элементов

    ДвумерныйМассив = Новый Массив;
    МассивВторогоПорядка = Новый Массив (8);
    ДвумерныйМассив.Добавить(МассивВторогоПорядка);
    ДвумерныйМассив.Добавить(МассивВторогоПорядка);

По-моему у меня тоже самое??




Cool_Profi
Что?
4 Ненавижу 1С
 
гуру
19.04.18
11:39
Для i=1 По ВсегоКолонок Цикл
    ДанныеИзЭкселевскогоФайла.Добавить(ДанныеИзЭкселевскогоФайлаЯчейка);    
КонецЦикла;


ты все время добавляешь один и тот же массив
5 Вафель
 
19.04.18
11:39
у тебя во всех 3х ячейках ссылка на один и тот же массив
6 ptiz
 
19.04.18
11:41
(3) Листинг 2.3 - настоящий "двумерный"
2.4 - эмуляция двумерного через одномерный вложенный, причем код - с ошибкой
7 ptiz
 
19.04.18
11:46
Ну и главный вопрос - зачем тебе двумерный массив, когда таблица значений удобнее? :)
8 Вафель
 
19.04.18
11:52
(7) может он с клиента на сервер гоняет
9 Eiffil123
 
19.04.18
11:56
(7) удобно обращаться по индексам, например так: [i][j]. Наверно можно использовать для решения каких-нибудь СЛУ.
10 aceaces
 
19.04.18
11:56
Народ я понял что создал массив где в каждом элементе ссылка на один и тотже массив2, может я туплю, но как тогда создать двумерный массив? Потому как на мой взгляд мой пример от листинга 2.4 ничем не отличается, там также присваивается две одинаковых ссылки
11 Вафель
 
19.04.18
11:57
(10) Массив[0] = Новый Массив(n)
12 VladZ
 
19.04.18
11:58
(0) Зачем тебе? Многомерные массивы в 1с не используются.
13 Вафель
 
19.04.18
12:00
(12) в смысле не используются?
14 VladZ
 
19.04.18
12:05
(13) Обычно используется одномерный массив. Если нужно больше информации: таблица значений или структура.
15 aceaces
 
19.04.18
12:07
Вафель
Значит листинг 2.4 неправильный? Чем он отличается от моего?
16 aceaces
 
19.04.18
12:08
VladZ
С таблицами структурами и деревьями мне неудобно работать очень
17 ptiz
 
19.04.18
12:09
(15) Если хочешь именно вариант 2.4, то пиши так: ДвумерныйМассив.Добавить(Новый Массив(8));
18 VladZ
 
19.04.18
12:10
(0) "Может кто-нибудь рассказать эту "чудесную" 1сную систему работы с массивами"

Создаю двумерный массив
Для i=1 По ВсегоСтрок Цикл
        ДанныеИзЭкселевскогоФайлаЯчейка.Добавить(i);
КонецЦикла;


Для i=1 По ВсегоКолонок Цикл
    ДанныеИзЭкселевскогоФайла.Добавить(ДанныеИзЭкселевскогоФайлаЯчейка);    
КонецЦикла;

Чудесная программа сделала ровным счетом то, что ты ее просил. Ты просил чушь - она сделала чушь.
19 hhhh
 
19.04.18
12:11
(15) вот так должно быть

  МассивВторогоПорядка = Новый Массив (8);
    ДвумерныйМассив.Добавить(МассивВторогоПорядка);
  МассивВторогоПорядка = Новый Массив (8);
    ДвумерныйМассив.Добавить(МассивВторогоПорядка);
20 VladZ
 
19.04.18
12:11
(16) "мне неудобно работать очень" - это твоя проблема.
Сделай так, чтобы было удобно.
21 VladZ
 
19.04.18
12:11
(0) "мне неудобно работать очень" - расскажи нам, что у тебя за задача такая?
22 aceaces
 
19.04.18
12:14
Всем спасибо получилось, правда не понятно как это следовало из 2.4 на да бог с ним)

VladZ
В таком тоне общайся с кем нибудь другим
23 FIXXXL
 
19.04.18
13:09
сделай уже массив структур
ключ - имя колонки, значение - значение колонки
и пиши в цикле эти структуры в массив
24 Сияющий в темноте
 
19.04.18
22:14
двумерный массив,это ComSafeArray может быть,а то,что здесь создают,это массив,содержащий обьекты,каждый из которых массив,но просто еще кто то запихал несколькт раз ссылку на один и тот же обьект,забыв что здесь не визуал басик и массив в 1с это обьект
25 Мимохожий Однако
 
19.04.18
22:32
(22) ))
26 vde69
 
19.04.18
22:41
в 1с массив это совсем не массив, а настоящий массив это фиксированный массив. Ну а двухмерных массивов в 1с массово нет и массу маслать без масла не масляво :)
27 Сияющий в темноте
 
20.04.18
09:16
В 1с массив,это обьект,содержащий коллекцию
самое главное,что ОБЬЕКТ
а нормальные массивы,передаваемые в переменной Variant,это значения,при копировании переменной массив копируется,в отличие от обьекта,у которого копируется ссылка
28 MM
 
20.04.18
09:30
(26) Вообще-то, есть и называются COMSafeArray, хотя это и не совсем 1совский объект.