Заполнение двумерного массива в 1с 8.3 : Бэк-офисы платформы 1С
Но этот вариант — как говорится — не наш метод.
Во-первых — надо заранее знать «количество пар», во-вторых — можно ошибиться в указании индекса (что я и сделал первоначально ).
Вариант 2 //Используем второй массив из двух элементов
ДвумМассив = Новый Массив; ОднмМассив = Новый Массив(2); //И дальше - заполнять ОднмМассив[0] = "1-й индекс"; ОднмМассив[1] = "1-е значение"; ДвумМассив.Добавить(ОднмМассив); ОднмМассив[0] = "2-й индекс"; ОднмМассив[1] = "2-е значение"; ДвумМассив.Добавить(ОднмМассив); //И так далее.
И получил удивительный (для меня) результат.
ДвумМассив[0][0] равен «2-й индекс»
ДвумМассив[0][1] равен «2-е значение»
ДвумМассив[1][0] равен «2-й индекс»
ДвумМассив[1][1] равен «2-е значение»
вместо ожидаемых
ДвумМассив[0][0] равен «1-й индекс»
ДвумМассив[0][1] равен «1-е значение»
ДвумМассив[1][0] равен «2-й индекс»
ДвумМассив[1][1] равен «2-е значение»
При этом — если после первой итерации передать массив &НаСервер (к примеру, для вывода) — то результат становится правильным. Но не будешь же постоянно гонять данные между клиентом и сервером?
В результате заработал Вариант 3
ДвумМассив = Новый Массив; ОднмМассив = Новый Массив(2); //И дальше - заполнять ОднмМассив[0] = "1-й индекс"; ОднмМассив[1] = "1-е значение"; ДвумМассив.Добавить(ОднмМассив); ОднмМассив = Новый Массив(2); //Заново объявил одномерный массив "новым". ОднмМассив[0] = "2-й индекс"; ОднмМассив[1] = "2-е значение"; ДвумМассив.Добавить(ОднмМассив); //И так далее.
и только тогда уже получил правильный результат
ДвумМассив[0][0] равен «1-й индекс»
ДвумМассив[0][1] равен «1-е значение»
ДвумМассив[1][0] равен «2-й индекс»
ДвумМассив[1][1] равен «2-е значение»
Попробовал заново объявлять «новый» одномерный массив — уже от безысходности. Но логики — всё равно не понял.
Поэтому — для памяти — оставлю здесь.
| KirillHome |
| Посмотреть профиль |
| Где был? |
| Найти ещё сообщения от KirillHome |
Как создавать двумерные и многомерные массивы?
Встроенный язык платформы 1С:Предприятие 8.3 позволяет создавать двумерные и многомерные массивы. По своей сути — это массивы массивов (ведь никто не запрещал задавать в качестве элементов массива другие массивы). Давайте на примерах разберемся, как создавать и работать с такими многомерными массивами.
Двумерный массив
Ниже приведен пример программного создания двумерного массива размером M строк на N столбцов:
М = 2;//количество строк N = 3;//количество столбцов //создаем основной массив ММ = Новый Массив(M); //элементы массива тоже массивы ММ[0] = Новый Массив(N); ММ[1] = Новый Массив(N);
Такой массив может хранить M * N элементов. В нашем случае это 6. Для программного обращения к элементам двумерного массива необходимо указывать имя массива, а также два индекса: первый — индекс строки, второй — индекс колонки:
ММ[0][0] = 0; ММ[0][1] = 1; ММ[0][2] = 2; ММ[1][0] = 10; ММ[1][1] = 11; ММ[1][2] = 12;
Для программного перебора элементов двумерного массива нам понадобится двойной цикл: первый по элементам основного массива и второй цикл по элементам вложенного массива:
Для ИндМ = 0 По ММ.ВГраница() Цикл МассивМ = ММ[ИндМ]; Для ИндН = 0 По МассивМ.ВГраница() Цикл Сообщить("ММ[" + ИндМ + "][" + ИндН + "] color: red;">+ ММ[ИндМ][ИндН]); КонецЦикла; КонецЦикла;
Многомерный массив
На практике мне еще не приходилось сталкиваться с задачами, которые решаются с использованием многомерного массива. Хотя в теории программирования это одна из распространенных задач. Давайте рассмотрим работу с многомерными массивами на базе трехмерного массива. Итак, создание и инициализация массива:
M = 2;//количество строк N = 3;//количество столбцов L = 5;//глубина ячейки //инициализация основного массива MNL = Новый Массив(M); Для ИндM = 0 По MNL.ВГраница() Цикл //иницаилизация вложенного массива уровня N MNL[ИндM] = Новый Массив(N); Для ИндN = 0 По MNL[ИндM].ВГраница() Цикл //инициализация вложенного массива уровня L MNL[ИндM][ИндN] = Новый Массив(L); Для ИндL = 0 По MNL[ИндM][ИндN].ВГраница() Цикл MNL[ИндM][ИндN][ИндL] = "" + ИндM + ИндN + ИндL; КонецЦикла;//ИндL КонецЦикла;//ИндN КонецЦикла;//ИндM
Такой массив может хранить M * N * L элементов. В нашем случае это 30. Для программного обращения к элементам трехмерного массива необходимо указывать имя массива, а также три индекса: первый — индекс строки, второй — индекс колонки, третий — индекс глубины:
MNL[0][0][0] = 000 MNL[0][0][1] = 001 MNL[0][0][2] = 002 MNL[0][0][3] = 003 MNL[0][0][4] = 004 MNL[0][1][0] = 010 MNL[0][1][1] = 011 MNL[0][1][2] = 012 MNL[0][1][3] = 013 MNL[0][1][4] = 014 ...
Для программного перебора элементов трехмерного массива нам понадобится тройной цикл: первый по элементам основного массива, второй — по элементам вложенного массива уровня N и третий — по элементам вложенного массива уровня L:
//вывод элементов массива Для ИндM = 0 По MNL.ВГраница() Цикл Для ИндN = 0 По MNL[ИндM].ВГраница() Цикл Для ИндL = 0 По MNL[ИндM][ИндN].ВГраница() Цикл Сообщить("MNL[" + ИндM + "][" + ИндN + "][" + ИндL + "] color: red;">+ MNL[ИндM][ИндN][ИндL]); КонецЦикла;//ИндL КонецЦикла;//ИндN КонецЦикла;//ИндM
Думаю, изучив эти примеры вы сможете самостоятельно построить более сложные многомерные массивы. Желаю удачи!
Читайте также:
- Массив 1с. Описание и примеры использования
- Как создать массив структур?
1С 8.x : Как создать Двумерный или Многомерный массив?

Google maps : вывод точек на карту и режим панорамы 8
В отличие от яндекс карт в GMaps можно использовать панорамы — за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Google maps, поиск оптимального маршрута 5
В данном посте хочу коснуться основных аспектов построения оптимального маршрута с использованием API Google maps. Исходные данные для построения маршрута: * Географические координаты объектов, которые хранятся в базе; * Координаты начальной и коне Автоматизация обмена данных используя обработку «Универсальный обмен данными в формате XML" 10
Автоматизация обмена между базами используя обработку » Универсальный обмен данными в формате XML» В основу данной публикации положены найденные мною материалы по cозданию обмена между двумя базами с использованием обработки » Универсальный обме Автоматическая установка ширины колонки табличного документа. 0
Процедура, которая » примерно» делает автоширину колонок (навроде, как если бы выделить все колонки и дважды щелкнуть мышкой по границе заголовка колонки). Привожу текст, работает неахти, но лучше чем ничего: Процедура РасчетШириныКолонок(Табличный Быстрая загрузка данных большого размера файла Excel в многомерный Массив 0
// OldthiefXXX Перем СерверExcel; Процедура КнопкаВыполнитьНажатие(Кнопка) ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС); КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count; КоличествоКолонокДанных=ФайлХЛС.ActiveSheet Посмотреть все результаты поиска похожих
Еще в этой же категории
Массив ~ Как удалить повторяющиеся элементы массива? 8
Функция УдалитьПовторяющиесяЭлементыМассива(Массив) Экспорт ТекущийИндекс = 0; ВсегоЭлементов = Массив.Количество(); Пока ТекущийИндекс ВсегоЭлементов Цикл Индекс2 = ТекущийИндекс + 1; Пока Индекс2 ВсегоЭлементов Цикл Если Массив = Сравнение двух структур 8
// Сравнение 2-х стурктур // Возвращает структуру с полями которые отличаются и значением из сравниваемой // Если в стСравнимое нет нужного поля,то в результат добавляется поля = Неопределенно // стОсновная, стСравнимое — сравниваемые структуры Структура ~ Создать структуру и добавить элементы 4
// Создание структуры СозданнаяСтруктура = Новый Структура; // Создание структуры и добавление элементов СтруктураОтбора = Новый Структура; СтруктураОтбора.Вставить(» Качество» , Качество); СтруктураОтбора.Вставить(» Номенклатура» , Номенкла Структура ~ Преобразовании Структуры в Таблицу Значений 4
//Струтура в ТЗ Функция СтруктураВТЗ(Структр) ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить(» Значение» ); ТЗ.Колонки.Добавить(» Описание» ); Для Каждого ТекЭлем из Структр Цикл НовСтр=ТЗ.Добавить(); НовСтр.Значение = ТекЭлем.Ключ; НовСтр Структура ~ Перебор элементов Структуры 3
Для Каждого Элемент из СтруктураПараметров Цикл Сообщить(Элемент.Ключ + » : » + Элемент.Значение); КонецЦикла; Посмотреть все в категории Работа с Массивом, Структурой, Соответствием
Заполнение двумерного массива «змейкой»
ВО. Написать программу для заполнения двумерного массива «змейкой»:
1 2 3
6 5 4
7 8 9.
Не пойму как его вобще делать
Добавлено через 41 минуту
1 2 3 4 5 6
Н=1; а = Значен; массив = новый массив(3,3); Для а=0 по Н цикл массив[а+1][а]=1; // сомнения вот тут ПолеСписка1.Вставить(массив)
Подскажите что не так
бьет ошибку
Форма.Форма.Форма(20)>: Ошибка при вызове метода контекста (Вставить)
ПолеСписка1.Вставить(массив)
по причине:
Несоответствие типов (параметр номер ‘1’)
Добавлено через 24 минуты
1 2 3 4 5 6 7 8 9 10 11 12 13 14
массив = новый массив(3,3); Для каждого Строка из ТабличноеПоле1 Цикл для НомКол = 0 по ТабличноеПоле1.Колонки.Количество()-1 Цикл ИмяКол = ТабличноеПоле1.Колонки.Получить(НомКол).Имя; Массив.Добавить(Строка[ИмяКол]); КонецЦикла; КонецЦикла; а = массив.Количество()-1; Н=1; Для а= Неопределено по Н цикл массив[а+1][а]=1; ПолеСписка1.Вставить(массив[а])
Пробывал и таким макаром бьет ошибку
ма.Форма.Форма(26)>: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
Для а=Неопределено по Н цикл
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Заполнение двумерного массива из табличной части справочника
Подскажите пожалуйста как заполнить двумерный массив из табличной части документа. Имеется.

Заполнение двумерного массива рандомными числами, что не так ?
Масс = Новый Массив(Строки,Столбцы); //значения из реквизитов ГСЧ = Новый.
Заполнение двумерного массива змейкой
заполнение идёт по спирали, в один цикл не получится, можно разбить на 4 цикла и в центр добавить.

Заполнение двумерного массива змейкой
Дан двумерный массив размером 10х10, заполнить змейкой слева-направо, снизу-вверх, таким образом: .
![]()
3768 / 2951 / 586
Регистрация: 10.03.2011
Сообщений: 11,619
Записей в блоге: 1
Самый простой способ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
&НаКлиенте Процедура Команда1(Команда) Массив = Новый Массив(3,3); //1 2 3 //6 5 4 //7 8 9 н=1; Для сч=0 По Массив.ВГраница() Цикл Для с=0 По Массив[сч].Вграница() Цикл Если (сч+1)%2=0 Тогда Массив[сч][Массив[сч].Вграница()-с] = н; Иначе Массив[сч][с] = н; КонецЕсли; н=н+1; КонецЦикла; КонецЦикла; КонецПроцедуры
286 / 186 / 18
Регистрация: 20.02.2012
Сообщений: 925
1 2 3 4 5 6 7
M = Новый Массив(3,3); Для X = 0 по 2 Цикл Для Y = 0 по 2 Цикл M[X][Y] = 1 + X + Y * 3 + (Y % 2) * (1 - X) * 2; КонецЦикла; КонецЦикла;
