Работа с массивами в 1C8.3
Исходное размещение статьи: https://helpme1s.ru/massivy-v-yazyke-1s-8-v-primerax
Описание:
Предназначен для доступа к элементам массива, его методам и конструктору.
Элементы коллекции: Произвольный
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются значения элементов массива.
Возможно обращение к значению элемента посредством оператора [...]. В качестве аргумента передается индекс значения (нумерация с 0).
Методы:
ВГраница() | Получает наибольший индекс элемента массива. |
Вставить(Индекс, Значение) | Вставляет значение в массив по указанному индексу. |
Добавить(Значение) | Добавляет элемент в конец массива. |
Количество() | Получает количество элементов в массиве. |
Найти(Значение) | Выполняет поиск элемента в массиве. Если элемент найден, возвращается его индекс. Если элемент не найден, возвращается Неопределено. |
Очистить() | Удаляет все значения из массива. |
Получить(Индекс) | Получает значение по индексу. Работает аналогично оператору []. |
Удалить(Индекс) | Удаляет значение из массива по указанному индексу. |
Установить(Индекс, Значение) | Устанавливает значение по индексу. Работает аналогично оператору []. |
Конструкторы:
Новый Массив(ФиксированныйМассив) | На основании фиксированного массива. |
Новый Массив(КоличествоЭлементов1, ... , КоличествоЭлементовN) | По количеству элементов. Создает массив из указанного количества элементов. Если задано несколько параметров, то будет создан массив, элементами которого являются массивы (и так далее в зависимости от количества параметров). Фактически конструктор позволяет создать массивы массивов, которые могут являться аналогом многомерного массива. |
&НаКлиенте
Процедура Пример1(Команда) // в массиве сразу 3 элемента
Числа = Новый Массив(3); // инициализируем их значениями
Числа[0] = 5;
Числа[1] = Числа[0] * 2; // 10
Числа[2] = Числа[1] * 2; // 20 // выводим на печать
Для Каждого ЭлементМассива из Числа Цикл
Сообщить(ЭлементМассива); // 5 10 20
КонецЦикла;
КонецПроцедуры
Как создать пустой массив (с последующим добавлением /// элементов) в 1с 8.3, 8.2
&НаКлиенте
Процедура Пример2(Команда) // в массиве 0 элементов
Числа = Новый Массив; // добавляем последовательно три элемента
Числа.Добавить(100); // (100)
Числа.Добавить(300); // (100, 300)
Числа.Добавить(500); // (100, 300, 500) // выводим на печать
Для Каждого ЭлементМассива из Числа Цикл
Сообщить(ЭлементМассива); // 100 300 500
КонецЦикла;
КонецПроцедуры
Как обойти все элементы массива по индексу в 1с 8.3
&НаКлиенте
Процедура Пример3(Команда) // инициализируем массив: (100, 300, 500)
Числа = Новый Массив;
Числа.Добавить(100);
Числа.Добавить(300);
Числа.Добавить(500);
// пробегаемся от первого (с индексом 0) до последнего // элемента (с индексом Количество - 1).
Для Индекс = 0 По Числа.Количество() - 1 Цикл
Сообщить(Числа[Индекс]);
КонецЦикла;
КонецПроцедуры
Массив может содержать элементы различных типов: числа, строки и т.д.
&НаКлиенте
Процедура Пример4(Команда)
Значения = Новый Массив(4);
Значения[0] = "HELP"; // ("HELP")
Значения[1] = "ME"; // ("HELP", "ME")
Значения[2] = "1C"; // ("HELP", "ME", "1C")
Значения[3] = Формат(2013, "ЧГ=0"); // ("HELP", "ME", "1C", 2013)
Для Каждого ЭлементМассива из Значения Цикл Сообщить(ЭлементМассива); // HELP ME 1C 2013
КонецЦикла;
КонецПроцедуры
Как передать массив в качестве параметра функции в 1с 8.3
&НаКлиенте
Функция Метод5(МассивПереданныйПоСсылке)
МассивПереданныйПоСсылке[0] = 10;
Возврат МассивПереданныйПоСсылке[0] * 2;
КонецФункции
&НаКлиенте
Процедура Пример5(Команда) // инициализация массива из одного элемента: (13)
Числа = Новый Массив(1);
Числа[0] = 13; // значение первого элемента до вызова функции
Сообщить(Числа[0]); // 13
// массив ВСЕГДА передается в функцию ПО ССЫЛКЕ, значит, изменяя массив внутри функции, мы меняем его снаружи
Сообщить(Метод5(Числа)); // 20
// значение первого элемента после вызова функции изменилось
Сообщить(Числа[0]); // 10
КонецПроцедуры
Как вернуть массив в качестве результата работы функции /// в 1с 8.3
&НаКлиенте
Функция Метод6() // инициализация массива (СПАСИБО, ВАМ)
Слова = Новый Массив(2);
Слова[0] = "СПАСИБО";
Слова[1] = "ВАМ"; Возврат Слова;
КонецФункции
&НаКлиенте
Процедура Пример6(Команда) // инициализация переменной массивом, который возвращает и формирует // функция Метод6
Слова = Метод6();
// вывод на печать
Для Каждого ЭлементМассива из Слова Цикл Сообщить(ЭлементМассива); // СПАСИБО ВАМ
КонецЦикла;
КонецПроцедуры
Ещё пример на передачу массива в качестве параметра процедуры /// в 1с 8.3
&НаКлиенте
Процедура Метод7(МойМассив)
Если МойМассив <> Неопределено И МойМассив.Количество() > 0 Тогда
Сообщить(МойМассив[0]);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Пример7(Команда)
// инициализация массива: (10, 20)
Числа = Новый Массив(2);
Числа[0] = 10;
Числа[1] = 20;
// печать первого элемента, переданного массива
Метод7(Числа); // 10
Метод7(Неопределено); // ничего
Метод7(Новый Массив); // ничего
КонецПроцедуры
Как получить последний элемент массива в 1с 8.3
&НаКлиенте
Процедура Пример8(Команда)
// инициализация массива: ("Кошка", "Собака", "Пантера", "Тигр")
Слова = Новый Массив;
Слова.Добавить("Кошка");
Слова.Добавить("Собака");
Слова.Добавить("Пантера");
Слова.Добавить("Тигр");
Сообщить(Слова[Слова.Количество() - 1]); // Тигр (количество минус один, потому что индекс массива начинается с 0, а не с 1)
КонецПроцедуры
Использование многомерных массивов в 1с 8.3, 8.2
&НаКлиенте
Процедура Пример9(Команда)
// ( ( (), () ), ( (), () ), ( (), () ) )
Слова = Новый Массив(3, 2);
// ( ( "Юрий", "Гагарин" ), ( (), () ), ( (), () ) )
Слова[0][0] = "Юрий";
Слова[0][1] = "Гагарин";
// ( ( "Юрий", "Гагарин" ), ( "Герман", "Титов" ), ( (), () ) )
Слова[1][0] = "Герман";
Слова[1][1] = "Титов";
// ( ( "Юрий", "Гагарин" ), ( "Герман", "Титов" ), // ( "Валентина", "Терешкова" ) )
Слова[2][0] = "Валентина";
Слова[2][1] = "Терешкова";
// обход всех элементов через конструкцию Для Каждого
Для Каждого Строка Из Слова Цикл
Для Каждого Элемент Из Строка Цикл
Сообщить(Элемент);
КонецЦикла; Сообщить(" ");
КонецЦикла;
Сообщить(" ");
// обход всех элементов через индекс
Для ИндексСтрока = 0 По Слова.Количество() - 1 Цикл
Для ИндексСтолбец = 0 По Слова[ИндексСтрока].Количество() - 1 Цикл
Сообщить(Слова[ИндексСтрока][ИндексСтолбец]);
КонецЦикла;
Сообщить(" ");
КонецЦикла;
КонецПроцедуры
Вставка, удаление и очистка массива в 1с 8.3, 8.2
&НаКлиенте
Процедура Пример10(Команда)
// инициализация пустого массива
Числа = Новый Массив;
// вставка трёх элементов; каждый элемент вставляется в начало
Числа.Вставить(0, 10); // (10)
Числа.Вставить(0, 100); // (100, 10)
Числа.Вставить(0, 1000); // (1000, 100, 10)
// определение последнего индекса
Сообщить(Числа.ВГраница()); // 2
// вывод на печать
Для Индекс = 0 по Числа.ВГраница() Цикл
Сообщить(Числа[Индекс]); // 1000 100 10
КонецЦикла;
// удаление элемента со значением 100, для этого сначала находим индекс элемента. Если не находим возвращаем Неопределено
Индекс = Числа.Найти(100); // 1
// и удаляем элемент по найденному индексу
Числа.Удалить(Индекс); // (1000, 10)
Сообщить(Числа.ВГраница()); // 1
// удаление всех элементов из массива
Числа.Очистить();
КонецПроцедуры
Как из обычного получить фиксированный (неизменяемый) массив в 1с 8.3
&НаКлиенте
Процедура Пример11(Команда)
Числа = Новый Массив;
Числа.Добавить(1);
Числа.Добавить(2);
Числа.Добавить(3);
ФиксированныеЧисла = Новый ФиксированныйМассив(Числа); // Получился константный массив на основе обычного:
// нельзя менять значения имеющихся элементов
// нельзя добавлять новые элементы
// нельзя удалять имеющиеся элементы
КонецПроцедуры