Новый массив: Массивы в языке 1С 8.3, 8.2 (в примерах)
/// Как создать массив (сразу нужного размера) в 1с 8.3, 8.2 &НаКлиенте Процедура Пример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, 8.2 &НаКлиенте Процедура Пример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, 8.2 &НаКлиенте Функция Метод5(массивПереданныйПоСсылке) массивПереданныйПоСсылке[0] = 10; Возврат массивПереданныйПоСсылке[0] * 2; КонецФункции &НаКлиенте Процедура Пример5(Команда) // инициализация массива из одного элемента: (13) Массив = Новый Массив(1); Массив[0] = 13; // значение первого элемента до вызова функции Сообщить(Массив[0]); // 13 // массив ВСЕГДА передается в функцию ПО ССЫЛКЕ, значит, // изменяя массив внутри функции, мы меняем его снаружи Сообщить(Метод5(Массив)); // 20 // значение первого элемента после вызова функции изменилось Сообщить(Массив[0]); // 10 КонецПроцедуры /// Как вернуть массив в качестве результата работы функции /// в 1с 8.3, 8.2 &НаКлиенте Функция Метод6() // инициализация массива (СПАСИБО, ВАМ) массив = Новый Массив(2); массив[0] = "СПАСИБО"; массив[1] = "ВАМ"; Возврат массив; КонецФункции &НаКлиенте Процедура Пример6(Команда) // инициализация переменной массивом, который возвращает и формирует // функция Метод6 Массив = Метод6(); // вывод на печать Для Каждого ЭлементМассива из Массив Цикл Сообщить(ЭлементМассива); // СПАСИБО ВАМ КонецЦикла; КонецПроцедуры /// Ещё пример на передачу массива в качестве параметра процедуры /// в 1с 8.3, 8.2 &НаКлиенте Процедура Метод7(Массив) Если Массив <> Неопределено И Массив.Количество() > 0 Тогда Сообщить(Массив[0]); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Пример7(Команда) // инициализация массива: (10, 20) Массив = Новый Массив(2); Массив[0] = 10; Массив[1] = 20; // печать первого элемента, переданного массива Метод7(Массив); // 10 Метод7(Неопределено); // ничего Метод7(Новый Массив); // ничего КонецПроцедуры /// Как получить последний элемент массива в 1с 8.3, 8.2 &НаКлиенте Процедура Пример8(Команда) // инициализация массива: ("Кошка", "Собака", "Пантера", "Тигр") Массив = Новый Массив; Массив.Добавить("Кошка"); Массив.Добавить("Собака"); Массив.Добавить("Пантера"); Массив.Добавить("Тигр"); Сообщить(Массив[Массив.Количество() - 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, 8.2 &НаКлиенте Процедура Пример11(Команда) Числа = Новый Массив; Числа.Добавить(1); Числа.Добавить(2); Числа.Добавить(3); ФиксированныеЧисла = Новый ФиксированныйМассив(Числа); // Получился константный массив на основе обычного: // нельзя менять значения имеющихся элементов // нельзя добавлять новые элементы // нельзя удалять имеющиеся элементы КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере |
Работа с массивом в 1С 8.3 на примерах
Объекты типа массив в 1С 8.3 представляют собой совокупность упорядоченных значений любого типа, в том числе и типа «массив», что в свою очередь позволяет организовывать многомерные массивы. Идентификация значений осуществляется по индексам, нумерация которых начинается с «0».
Создание массива
Синтаксис:
Новый Массив(<КоличествоЭлементов1>,…,<КоличествоЭлементовN>)
Примеры:
//Одномерный массив ПустойМассив = Новый Массив();//Пустой массив Массив2 = Новый Массив(2);//массив из двух элементов //Двумерный массив в 1С 8.3 ДвумерныйМассив = Новый Массив(2,3);//Каждый из двух элементов // двумерного массива является массивом // из трёх элементов //Фиксированный (неизменный) массив ФиксМассив = Новый ФиксированныйМассив(Массив2);
Добавление элементов в массив
Примеры:
Массив = Новый Массив();//Создадим массив для примера //Метод Добавить().Добавляет элемент в конец массива Массив.Добавить("знач1");//Добавили элемент с типом строка Массив.Добавить();//Добавили пустой элемент в массив
Результат:
//Метод Вставить().Вставляет значение в массив по индексу. Массив.Вставить(0);//Вставили пустой элемент в начало массива. Тем самым //произошла переиндексация всего массива. Элемент с индексом //[0] стал [1], [1] стал [2]
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Результат:
Массив.Вставить(5,"знач6");//Вставили элемент со значением "знач6" по индексу [5]. //По недостающим индексам [3] и [4], произошло добавление //пустых элементов
Результат:
Получение значения элемента по индексу
Массив.Получить(5);//В скобках указываем индекс (число) желаемого элемента ДвумерныйМассив.Получить(0).Получить(0);
Поиск в массиве 1С
Массив.Найти("знач6");//В скобках указываем значение искомого элемента
Присвоение значений элементам массива
Примеры:
Массив.Установить(0,10);//Присвоили ранее созданному элементу с // индексом [0] значение "10", тип число Массив[2] = "знач3";//Присвоили ранее созданному элементу с индексом [2] //значение "знач3", тип строка ДвумерныйМассив[0][0] = "ЗНАЧ";//Присвоили ранее созданному элементу //с индексом [0][0] значение "ЗНАЧ", тип строка
Как узнать количество элементов массива (размер массива)
Массив.ВГраница();//Получаем наибольший индекс элемента массива (число) Массив.Количество();//Получаем количество элементов в массиве (число)
Перебор массива 1С
Примеры:
//По индексу Для Индекс = 0 по Массив.ВГраница() Цикл Сообщить(Индекс); КонецЦикла; //По элементам Для Каждого Элемент Из Массив Цикл Сообщить(Элемент); КонецЦикла;
Перебор всех элементов двумерного массива
Примеры:
//По индексу Для ИндексСтр = 0 По ДвумерныйМассив.ВГраница() Цикл Для ИндексСтолбец = 0 По ДвумерныйМассив[ИндексСтр].ВГраница() Цикл Сообщить(ДвумерныйМассив[ИндексСтр][ИндексСтолбец]); КонецЦикла; КонецЦикла; //По элементам Для Каждого Строка Из ДвумерныйМассив Цикл Для Каждого Элемент Из Строка Цикл Сообщить(Элемент); КонецЦикла; КонецЦикла;
Удаление элементов из массива
Примеры:
//Удаление элемента из массива по индексу Массив.Удалить(3);//В скобках указываем индекс (число) удаляемого элемента //Удаление всех элементов из массива Массив.Очистить();
Как разложить строку в массив
&НаКлиенте Процедура СтрокуВ_Массив(Команда) МассивСтрок = Новый Массив; Строка = "Строку в массив"; МассивСтрок = СтрРазделить(Строка, " "); КонецПроцедуры
Результат:
Пример преобразования массива в список значений
&НаКлиенте Процедура МассивВ_СписокЗначений(Команда) Массив = Новый Массив(); Массив.Добавить("знач1"); Массив.Добавить("знач2"); Массив.Добавить("знач3"); СЗ = Новый СписокЗначений;//Создаём список значений СЗ.ЗагрузитьЗначения(Массив);//Загрузка значений элементов массива в СЗ КонецПроцедуры
Результат:
Пример преобразования массива в таблицу значений
&НаКлиенте Процедура МассивВ_ТЗ(Команда) Массив = Новый Массив(); Массив.Добавить(1); Массив.Добавить(2); Массив.Добавить(3); МассивВ_ТЗ_Сервер (Массив); КонецПроцедуры &НаСервере Процедура МассивВ_ТЗ_Сервер (Массив) ТЗ = Новый ТаблицаЗначений;//Создаём таблицу значений ТЗ.Колонки.Добавить("НаборЧисел"); //Добавляем строки в ТЗ Для Индекс = 0 по Массив.ВГраница() Цикл НовСтрока = ТЗ.Добавить(); КонецЦикла; ТЗ.ЗагрузитьКолонку(Массив,"НаборЧисел");//преобразуем в таблицу значений ТЗизМассива = ТЗ;//результат КонецПроцедуры
Результат:
Сортировка массива 1С разными способами
Примеры:
//Через список значений &НаКлиенте Процедура СортироватьМассивЧерезСЗ(Команда) Массив = Новый Массив(); Массив.Добавить("знач1"); Массив.Добавить("знач2"); Массив.Добавить("знач3"); СЗ = Новый СписокЗначений;//Создаём список значений СЗ.ЗагрузитьЗначения(Массив);//Загрузка значений элементов массива в СЗ СЗ.СортироватьПоЗначению(НаправлениеСортировки.Убыв);//Сортируем по убыванию СЗ.СортироватьПоЗначению(НаправлениеСортировки.Возр);//Сортируем по возрастанию Массив = СЗ.ВыгрузитьЗначения();//В массив КонецПроцедуры //Через таблицу значений &НаКлиенте Процедура СортироватьМассивЧерезТЗ(Команда) Массив = Новый Массив(); Массив.Добавить(1); Массив.Добавить(2); Массив.Добавить(3); ОтсортированныйМассив = СортироватьМассивЧерезТЗ_Сервер(Массив); КонецПроцедуры &НаСервере Функция СортироватьМассивЧерезТЗ_Сервер(Массив) ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("НаборЧисел"); //Добавляем строки в ТЗ Для Индекс = 0 по Массив.ВГраница() Цикл НовСтрока = ТЗ.Добавить(); КонецЦикла; ТЗ.ЗагрузитьКолонку(Массив,"НаборЧисел");//Преобразуем в таблицу значений ТЗ.Сортировать("НаборЧисел Убыв");//Сортируем по убыванию ТЗ.Сортировать("НаборЧисел Возр");//Сортируем по возрастанию Массив = ТЗ.ВыгрузитьКолонку("НаборЧисел");//В массив Возврат Массив; КонецФункции
Как свернуть массив в 1С
Пример:
&НаКлиенте Процедура СвернутьМассив(Команда) Массив = Новый Массив(); Массив.Добавить("Яблоко"); Массив.Добавить("Яблоко"); Массив.Добавить("Банан"); Соответствие = Новый Соответствие; Для каждого Элемент Из Массив Цикл Соответствие.Вставить(Элемент); КонецЦикла; Массив.Очистить(); Для каждого КлючИЗначение Из Соответствие Цикл Массив.Добавить(КлючИЗначение.Ключ); КонецЦикла; КонецПроцедуры
Результат:
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Работа с массивами в 1С 8
Массив в 1С — это набор некоторых значений. Значения в одном массиве могут быть различных типов.
Массив может быть получен в результате выполнения различных функций, например, ВыгрузитьКолонку() таблицы значений; в виде массива можно получить выделенные строки динамического списка и т.д. Можно создать массив и «вручную».
Создание массива
1. Как создать массив нужного размера
пМассив = новый Массив(4); //создали массив из 4 элементов
//Внесем значения элементов массива
пМассив[0] = «Мы»;
пМассив[1] = «создали»;
пМассив[2] = «новый»;
пМассив[3] = «массив»;
2. Как создать пустой массив и добавить в него элементы
пМассив = новый Массив; //создали пустой массив
//Внесем значения элементов массива
пМассив.Добавить(«Мы»);
пМассив.Добавить(«создали»);
пМассив.Добавить(«новый»);
пМассив.Добавить(«массив»);
3. Как создать многомерный массив.
Рассмотрим этот вопрос на примере двумерного массива, так как массивы больших размерностей используются значительно реже, а механизм их работы не отличается от двумерного.
пМассив = новый Массив (4, 2); //создали массив 4х2
//Внесем значения элементов массива, пронумеровав каждое слово
пМассив[0][0] = «1. «;
пМассив[0][1] = «Мы»;
пМассив[1][0] = «2. «;
пМассив[1][1] = «создали»;
пМассив[2][0] = «3. «;
пМассив[2][1] = «многомерный»;
пМассив[3][0] = «4. «;
пМассив[3][1] = «массив»;
4. Как создать фиксированный массив
Фиксированный массив отличается от обычного тем, что его нельзя изменять. Нельзя добавлять, удалять или менять значения элементов такого массива.
Фиксированный массив может быть получен из обычного:
пМассив = новый Массив;
пМассив.Добавить(«Мы»);
пМассив.Добавить(«создали»);
пМассив.Добавить(«новый»);
пМассив.Добавить(«массив»);
фМассив = новый ФиксированныйМассив(пМассив); // создали фиксированный массив
Функции работы с массивами
Работу функций будем рассматривать на примере одномерного массива пМассив, созданного выше и состоящего из 4 элементов:
- «Мы»
- «создали»
- «новый»
- «массив».
Функция ВГраница()
Получает наибольший индекс элемента массива. Он всегда на единицу меньше количества элементов массива.
Индекс = пМассив.ВГраница() // 3;
Функция Вставить()
Вставляет какое-то значение в элемент массива с указанным индексом. Последующие элементы массива сдвигаются
пМассив.Вставить(3, «новое значение») //Теперь массив состоит из 5 элементов
Функция Добавить()
Создает новый элемент в конце массива и вставляет туда заданное значение
пМассив.Добавить(«.») // добавили точку пятым элементов массива;
Функция Количество()
Возвращает количество элементов массива.
пМассив.Количество(); // 4
Функция Найти()
Ищет в массиве заданный элемент. Если находит, возвращает его индекс. Если не находит, возвращает Неопределено.
Индекс = пМассив.Найти(«массив»); // 3
Индекс = пМассив.Найти(«строка, которой не было»); // Неопределено
Функция Очистить()
Удаляет все значения из массива.
пМассив.Очистить();
Функция Получить()
Получает значение массива по индексу. Эту же задачу можно решить через [].
Значение=пМассив.Получить(3) // «массив»
Значение=пМассив[3]; // «массив»
Функция Удалить()
Удаляет элемент массива по индексу
пМассив.Удалить(3);
Функция Установить()
Устанавливает значение элемента массива по индексу. Работает аналогично [].
пМассив.Установить(3, «массив!»);
пМассив[3]=»массив!»;
Как обойти массив
Можно обойти все элементы массива без указания индекса:
Для каждого ЭлементМассива из пМассив Цикл
Сообщить(ЭлементМассива);
КонецЦикла;
Можно при обходе использовать индекс:
Для Индекс=0 по пМассив.ВГраница() Цикл
Сообщить(пМассив[Индекс]);
КонецЦикла;
Как обойти многомерный массив
Многомерный массив обходится с помощью тех же циклов (см. выше), но один цикл должен быть вложен в другой.
мМассив=новый массив(3,4);
Для каждого Элемент1 из мМассив Цикл
Для каждого Элемент2 из Элемент1 Цикл
Сообщить(Элемент1);
КонецЦикла;
КонецЦикла;
Или с применением индексов.
мМассив=новый массив(3,4);
Для Индекс1=0 по мМассив.ВГраница() Цикл
Для Индекс2 по мМассив[Индекс1].ВГраница() Цикл
Сообщить(мМассив[Индекс1][Индекс2]);
КонецЦикла;
КонецЦикла;
Сортировка массива
Для сортировки массива нам потребуется вспомогательный объект с типом СписокЗначений.
СписокЗнач = новый СписокЗначений; // создаем список значений
СписокЗнач.ЗагрузитьЗначения(пМассив); // загружаем в список значения из массива
СписокЗнач.СортироватьПоЗначению(НаправлениеСортировки.Возр); //сортируем по возрастанию
СписокЗнач.СортироватьПоЗначению(НаправлениеСортировки.Убыв); //или по убыванию
пМассив=СписокЗнач.Выгрузить(); // выгружаем отсортированные значения обратно в массив
Сравнение двух массивов
Перед тем, как перейти к описанию функции сравнения, договоримся, что массивы считаются идентичными, если имеют одинаковое количество элементов и соответствующие элементы массивов равны. Тогда для сравнения можно использовать следующую функцию (кстати, такая функция уже присутствует в некоторых типовых конфигурациях):
Функция СравнитьМассивы(Массив1, Массив2)
Если Массив1.Количество()<>Массив2.Количество() Тогда
Возврат ЛОЖЬ; // Массивы не равны, сравнивать элементы нет смысла.
КонецЕсли;
Для Индекс=0 по Массив1.ВГраница() Цикл
Если Массив1[Индекс]<>Массив2[Индекс] Тогда
Возврат Ложь; //эти элементы не равны, значит и массивы не равны
КонецЕсли;
КонецЦикла;
Возврат Истина; // Если дошли до сюда, то массивы равны
КонецФункции
В функцию нужно передать 2 сравниваемых массива. Функция возвращает значение Истина, если массивы равны, и Ложь, если не равны.
Внутренний язык программирования 1С 8.3 для начинающих программистов: массивы в 1С
Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.
Войдите на сайт как ученик
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 1С 8.3 для начинающих программистов: массивы в 1С
Автор уроков и преподаватель школы: Владимир Милькин
Сегодня мы познакомимся с новым типом данных языка 1С, который называется Массив.
Массивы в языке 1С
Что такое массивы и зачем они вообще нужны программисту?
Давайте представим, что у нас есть 4 разных числа. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. К примеру: 25, 84, 31 и 96. Если бы мы захотели использовать их в своей программе, то нужно было бы дать имя каждому из чисел. А что если хранить их все вместе, под одним общим именем, к примеру, СлучайныеЧисла. И обращаться к ним как СлучайныеЧисла0, СлучайныеЧисла1, СлучайныеЧисла2 и так далее.
Значений много, а имя одно. И чтобы получить конкретное значение мы бы указывали имя и порядковый номер (начиная с нуля). Это и был бы массив.
Ещё полезно представлять себе массив как шкаф, у которого множество нумерованных ящиков (начиная с нуля). Шкаф — это массив, а ящики — это номера. Содержимое ящиков — элементы массива. Доступ к содержимому конкретного ящика осуществляется по имени шкафа и номеру ящика.
В языке 1С это будет выглядеть так:
СлучайныеЧисла = Новый Массив(4); // завели массив для хранения 4 чисел СлучайныеЧисла[0] = 25; // поместили в ящик №0 первое число СлучайныеЧисла[1] = 84; // поместили в ящик №1 второе число СлучайныеЧисла[2] = 31; // и так далее СлучайныеЧисла[3] = 96; |
Обращаю ваше внимание, что в этом примере я в первый раз использовал пояснения прямо в коде. Такие пояснения называются комментариями. Они отделяются от кода программы двумя косыми чертами и нужны только для программиста — компьютер их игнорирует. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
В массивах можно хранить значения разных типов, а не только числа:
РазличныеЗначения = Новый Массив(3); // массив для хранения 3 значений РазличныеЗначения[0] = 100; // поместили в ящик №0 число РазличныеЗначения[1] = "Солнечный день."; // поместили в ящик №1 строку РазличныеЗначения[2] = '19991231'; // поместили в ящик №2 дату |
В ящики массива значения можно не только класть, но и доставать:
Сообщить(РазличныеЗначения[0]); // выведем содержимое ящика №0 Сообщить(РазличныеЗначения[1]); // выведем содержимое ящика №1 Сообщить(РазличныеЗначения[2]); // выведем содержимое ящика №2 |
Прелесть использования массивов состоит именно в том, что доступ к их значениям осуществляется через числовой номер. А значит мы легко можем перебирать все значения массива в цикле:
Для Шаг = 0 По 2 Цикл // делаем цикл от 0 до 2 Сообщить(РазличныеЗначения[Шаг]); //обращаемся к ящику массива по номеру КонецЦикла; |
Задание №30. Необходимо ввести от пользователя 5 чисел, найти их сумму и вывести результат.
Давайте решим эту задачу двумя способами.
Сначала без использования массива:
Число1 = 0; Число2 = 0; Число3 = 0; Число4 = 0; Число5 = 0; ВвестиЧисло(Число1); ВвестиЧисло(Число2); ВвестиЧисло(Число3); ВвестиЧисло(Число4); ВвестиЧисло(Число5); СуммаЧисел = Число1 + Число2 + Число3 + Число4 + Число5; ОткрытьЗначение("Сумма чисел равна " + СуммаЧисел); |
А теперь с использованием массива:
Числа = Новый Массив(5); // объявили массив с 5 ящиками Для Шаг = 0 По 4 Цикл ВвестиЧисло(Числа[Шаг]); // в каждый ящик вводим число КонецЦикла; СуммаЧисел = 0; // в этом имени будем накапливать сумму чисел Для Шаг = 0 По 4 Цикл // пробегаемся циклом от 0 до 4 СуммаЧисел = СуммаЧисел + Числа[Шаг]; // суммируем числа из массива КонецЦикла; ОткрытьЗначение("Сумма чисел равна " + СуммаЧисел); |
Вроде бы сэкономили всего три строки. А если бы нужно было ввести не 5, а 100 чисел?
Задание №31. Переделайте приведенный выше пример, чтобы вводилось 10 чисел и находилось произведение.
Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся
Войдите на сайт как ученик
Авторизуйтесь, чтобы получить доступ ко всем материалам школы
При помощи массивов можно решать достаточно сложные задачи. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Задание №32. Необходимо ввести от пользователя 5 чисел, найти наименьшее из них и вывести его.
Решение будет таким:
МассивЧисел = Новый Массив(5); // объявим массив на 5 ящиков Для Шаг = 0 По 4 Цикл // пробежимся от 0 до 4 ВвестиЧисло(МассивЧисел[Шаг]); // в каждый ящик положим число КонецЦикла; // изначально будем считать, что первый элемент самый маленький НаименьшееЧисло = МассивЧисел[0]; // пробегаемся по всем значениям массива // кроме нулевого, ведь нулевой элемент // изначально принят нами за наименьший Для Шаг = 1 По 4 Цикл // если в массиве есть число меньшее, чем НаименьшееЧисло Если МассивЧисел[Шаг] < НаименьшееЧисло Тогда // тогда его и делаем новым наименьшим числом НаименьшееЧисло = МассивЧисел[Шаг]; КонецЕсли; КонецЦикла; ОткрытьЗначение("Наименьшее из введенных чисел равно " + НаименьшееЧисло); |
Разберитесь с этим примером и выполните его на компьютере для различных значений.
Идём далее. Обратите внимание на то, что во всех примерах выше мы создаём массив сразу с нужным количеством ящиков. Например:
МассивНа5Ящиков = Новый Массив(5); |
Это означает, что у этого массива есть ящики под номерами 0, 1, 2, 3, 4.
А, что если мы бы захотели объявить пустой массив? Это делается вот так:
ДругойМассив = Новый Массив; // мы не указали никакого числа в скобках |
Если мы сразу после объявления пустого массива попытаемся обратиться к одному из его ящиков, то получим ошибку:
Сообщить(ДругойМассив[0]); // ОШИБКА!!! Массив пока не содержит ящиков! |
В пустой массив ящики нужно сначала добавить, причём сразу указывая их значения:
ДругойМассив.Добавить(123); // первый ящик ДругойМассив.Добавить(456); // второй ящик ДругойМассив.Добавить(789); // третий ящик |
И вот теперь мы можем обращаться к этим ящикам по их номерам (помните, что в 1С массивы нумеруются с нуля):
Сообщить(ДругойМассив[0]); // выведет 123 Сообщить(ДругойМассив[1]); // выведет 456 Сообщить(ДругойМассив[2]); // выведет 789 |
Кстати, чтобы в любой момент узнать количество ящиков в массиве, воспользуемся командой Количество. Её нужно вызывать через точку после имени массива:
Сообщить(ДругойМассив.Количество()); // выведет 3 |
Пройдите тест
Задание №33. Необходимо ввести от пользователя 7 чисел, найти наибольшее из них и вывести его. Задание решается по аналогии с предыдущим. Это первая по-настоящему серьезная задача, которую вам предстоит решить. Не жалейте времени и усилий, чтобы справиться самостоятельно.
Работаем с массивами в 1с 8 программно
Массив — это программная коллекция (объект встроенного языка), содержащая пронумерованную последовательность значений произвольного типа. Каждому элементу присваивается последовательный целочисленный номер — индекс, начинающийся с нуля. По индексу можно получить или установить значение элемента массива.
В 1С:Предприятие 8 существует два типа массивов:
- фиксированный массив — такой массив имеет фиксированный размер, заданный при его создании. Для фиксированного массива недоступно программное изменение размера, количества и последовательности элементов;
- обычный массив — такой массив имеет динамический размер и его верхний предел практически неограничен. Таким массивом можно произвольно оперировать из встроенного языка;
Сейчас мы рассмотрим обычные массивы.
Создание и инициализация элементов массива
Создание пустого массива выполняется с помощью оператора Новый
:
Массив = Новый Массив;
Для добавления элементов в массив используется одноименный метод Массив.Добавить():
Массив.Добавить(10); Массив.Добавить(Дата(2018, 1, 1)); Массив.Добавить("Просто строка");
Каждый новый элемент помещается в конец массива. Чтобы создать массив с заданным размером, можно воспользоваться конструктором массива. Например, так:
Массив = Новый Массив(3);
Для доступа к отдельным элементам массива применяется операция разыменования: указывается имя переменной, объявленной как массив, а затем, в квадратных скобках, указывается индекс элемента: ИмяМассива[Индекс]
. Такие конструкции можно указывать как слева от оператора присваивания:
Массив[0] = 10; Массив[1] = Дата(2018, 1, 1); Массив[2] = "Просто строка";
Так и справа: в выражениях и в качестве параметров процедур и функций:
Сообщить("Массив[0] = " + Массив[0]);
Границы массивов
Как было сказано выше, левая граница массива постоянна и всегда равно нулю (0). Верхняя граница напрямую связана с количеством элементов в массиве. Получить ее можно двумя способами:
Давайте рассмотрим распространенные операции с массивами
Перебор элементов массива
Для перебора (обхода) всех элементов массива обычно используется оператор цикла Для
:
Для Инд = 0 По Массив.ВГраница() Цикл Сообщить("Массив[" + Инд + "] = " + Массив[Инд]); КонецЦикла;
Либо оператор цикла Для Каждого
:
Для Каждого Элт Из Массив Цикл Сообщить("Массив[" + Массив.Найти(Элт) + "] = " + Элт); КонецЦикла;
Первый способ лучше использовать, если Вам необходимо получить одновременно и индекс, и значение массива. Второй способ больше подходит для ситуации, когда нужно только последовательно перебрать все значения массива. Использование второго способа повышает «читабельность кода».
Поиск в массиве
Для поиска значений в массиве можно воспользоваться одноименным методом Массив.Найти(). Он возвращает индекс найденного элемента или Неопределено
, если таковой не был найден:
НайдЭлт = Массив.Найти(10); Если НЕ НайдЭлт = Неопределено Тогда Сообщить("Массив[" + НайдЭлт + "] = " + Массив[НайдЭлт]) КонецЕсли;
Методы объекта Массив
ВГраница() | Возвращает старший индекс массива |
Вставить() | Добавляет значение в произвольное место массива |
Добавить() | Добавляет значение в конец массива |
Количество() | Возвращает количество элементов в массиве |
Найти() | Возвращает индекс значения в массиве |
Очистить() | Удаляет все элементы массива |
Получить() | Возвращает значение элемента массива по его индексу |
Удалить() | Удаляет значение из массива по его индексу |
Установить() | Устанавливает значение элемента массива |
Читайте также:
- Как создавать двумерные и многомерные массивы?
- Как скопировать массив?
- Как отсортировать элементы массива?
- Как свернуть массив в строку?
- Как создать массив структур?
Массив 1с (Примеры работы) | e-1c.ru
О массивах
Это программный набор элементов. Он служит для:
- Отбора значений.
- Сортировки. Каждой позиции в массиве присваивается индекс. Это облегчает поиск. И вы можете сослаться на объект, написав его номер.
- Объединения и сохранения записей.
- Разделения групп, создания подстрок.
- Массив — сам по себе объект. К нему будет привязана переменная. Можно обратиться к отдельным его частям или использовать его целиком в процедурах. Например, можно объединить группу значений «Сотрудники отдела N» и внести туда имена и фамилии работников.
Проведём аналогию. Представьте книжный шкаф. Книги в нём расставлены по разным «ячейкам». Если вести учёт, вы будете знать, где находится каждый объект. И без труда его достанете. Но если книги, журналы и газеты хаотично разбросаны на столе, поиск нужной вещи затянется. Хотя это не отражает все возможности уникальных коллекций.
//Как создать массив? СозданныйМассив = Новый Массив (); СозданныйМассив = Новый Массив (10); Как создать многомерный массив? ДвумерныйМассив = Новый Массив (2, 8); ДвумерныйМассив = Новый Массив; МассивВторогоПорядка = Новый Массив(8); ДвумерныйМассив.Добавить(МассивВторогоПорядка); ДвумерныйМассив.Добавить(МассивВторогоПорядка); Значение = ДвумерныйМассив[2][5]; Значение = ДвумерныйМассив.Получить(2).Получить(5); //Как добавить элементы в массив? НашМассив.Добавить(НовоеЗначение); Массив = Новый Массив; Массив.Вставить(5, "ООО ""Лабан"""); //Как определить размер массива? Размер = НашМассив.Количество(); //Как обратиться к элементу массива? ПервоеЗначение = НашМассив[0]; НашМассив[9] = ДесятоеЗначение; ПервоеЗначение = НашМассив.Получить(0); НашМассив.Установить(9, ДесятоеЗначение); //Как перебрать элементы массива? Для Каждого ЭлементМассива Из МассивЭлементов Цикл Если ТипЗнч(ЭлементМассива) = Тип("Число") Тогда Сообщить(ЭлементМассива); КонецЕсли; КонецЦикла; Для Сч = 0 по МассивЭлементов.ВГраница() Цикл Если ТипЗнч(МассивЭлементов[Сч]) = Тип("Число") Тогда МассивЭлементов[Сч] = 0; КонецЕсли; КонецЦикла; //Как удалить элемент массива? МассивЭлементов.Удалить(0); Индекс = МассивЭлементов.ВГраница(); Пока Индекс >= 0 Цикл Если ТипЗнч(МассивЭлементов[Индекс]) = Тип("Число") Тогда МассивЭлементов.Удалить(Индекс); КонецЕсли; Индекс = Индекс - 1; КонецЦикла; //Как удалить все элементы массива? Массив.Очистить(); //Как удалить повторяющиеся элементы массива? Процедура УдалитьПовторяющиесяЭлементы(Массив) ТекущийИндекс = 0; ВсегоЭлементов = Массив.Количество(); Пока ТекущийИндекс < ВсегоЭлементов Цикл Индекс2 = ТекущийИндекс + 1; Пока Индекс2 < ВсегоЭлементов Цикл Если Массив[Индекс2] = Массив[ТекущийИндекс] Тогда Массив.Удалить(Индекс2); ВсегоЭлементов = ВсегоЭлементов - 1; Иначе Индекс2 = Индекс2 + 1; КонецЕсли; КонецЦикла; ТекущийИндекс = ТекущийИндекс + 1; КонецЦикла; КонецПроцедуры //Как скопировать массив? Функция СкопироватьМассив(ИсходныйМассив) МассивКопия = Новый Массив; Для Каждого Элемент Из ИсходныйМассив Цикл МассивКопия.Добавить(Элемент); КонецЦикла; Возврат МассивКопия; КонецФункции //Как проверить, что два массива идентичны? Функция ПроверитьИдентичностьМассивов(ПервыйМассив, ВторойМассив) НаибольшийИндекс = ПервыйМассив.ВГраница(); Если НаибольшийИндекс > ВторойМассив.ВГраница () Тогда Возврат Ложь; КонецЕсли; Для Счетчик = 0 По НаибольшийИндекс Цикл Если ПервыйМассив[Счетчик] <> ВторойМассив[Счетчик] Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции //В массив выгружены данные, содержащие наименования контрагентов. Как их отсортировать? СписокЗначений = Новый СписокЗначений; СписокЗначений.ЗагрузитьЗначения(МассивНаименований); СписокЗначений.СортироватьПоЗначению(); МассивНаименований = СписокЗначений.ВыгрузитьЗначения(); СписокЗначений.СортироватьПоЗначению(НаправлениеСортировки.Убыв); //Есть массив, в который выгружены значения типа СправочникСсылка.Номенклатура. //Как удалить все пустые значения массива? Процедура УдалитьПустыеЭлементы(МассивНоменклатуры) Счетчик = 0; КоличествоЭлементов = МассивНоменклатуры.Количество(); Пока Счетчик < КоличествоЭлементов Цикл Если МассивНоменклатуры [Счетчик].Пустая() Тогда МассивНоменклатуры.Удалить(Счетчик); КоличествоЭлементов = КоличествоЭлементов - 1; Иначе Счетчик = Счетчик + 1; КонецЕсли; КонецЦикла; КонецПроцедуры //Как получить массив номенклатурных позиций, использованных в табличных частях //"Номенклатура" и "Тара" накладной? МассивНоменклатуры = СсылкаНаДокумент.Номенклатура.ВыгрузитьКолонку("Номенклатура"); МассивНоменклатурыТара = СсылкаНаДокумент.ВозвратнаяТара.ВыгрузитьКолонку("Номенклатура"); Для Каждого ЭлементМассиваТара Из МассивНоменклатурыТара Цикл МассивНоменклатуры.Добавить(ЭлементМассиваТара); КонецЦикла; //Есть две таблицы значений. Как получить массив совпадающих имен колонок? МассивСовпадающихКолонок = Новый Массив(); Для Каждого Колонка Из ТаблицаПриемник.Колонки Цикл ИмяКолонкиПриемника = Колонка.Имя; Если ТаблицаИсточник.Колонки.Найти(ИмяКолонкиПриемника) <> Неопределено Тогда МассивСовпадающихКолонок.Добавить(ИмяКолонкиПриемника); КонецЕсли; КонецЦикла; //Как из регистра сведений "РасчетчикиЗарплатыОрганизации" получить в виде //массива всех расчетчиков зарплаты определенного подразделения организации? Функция ПолучитьМассивРасчетчиков(Подразделение) НаборЗаписей = РегистрыСведений.РасчетчикиЗарплатыОрганизации.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ПодразделениеОрганизации.Установить(Подразделение); НаборЗаписей.Прочитать(); МассивРасчетчиков = НаборЗаписей.ВыгрузитьКолонку("Пользователь"); Возврат МассивРасчетчиков; КонецФункции Функция ПолучитьМассивРасчетчиков(Подразделение) Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | РасчетчикиЗарплатыОрганизации.Пользователь КАК Расчетчик |ИЗ | РегистрСведений.РасчетчикиЗарплатыОрганизации КАК РасчетчикиЗарплатыОрганизации |ГДЕ | РасчетчикиЗарплатыОрганизации.ПодразделениеОрганизации = &Подразделение"; Запрос.УстановитьПараметр("Подразделение", Подразделение); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); МассивРасчетчиков = Новый Массив; Пока Выборка.Следующий() Цикл МассивРасчетчиков.Добавить(Выборка.Расчетчик); КонецЦикла; Возврат МассивРасчетчиков; КонецФункции
Работаем с массивом: двумерные и многомерные массивы в 1с 8
Встроенный язык платформы 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 По МассивМ.ВГраница() Цикл Сообщить("ММ[" + ИндМ + "][" + ИндН + "] = " + ММ[ИндМ][ИндН]); КонецЦикла; КонецЦикла;
Многомерный массив
На практике мне еще не приходилось сталкиваться с задачами, которые решаются с использованием многомерного массива. Хотя в теории программирования это одна из распространенных задач. Давайте рассмотрим работу с многомерными массивами на базе трехмерного массива. Итак, создание и инициализация массива:
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 + "] = " + MNL[ИндM][ИндN][ИндL]); КонецЦикла;//ИндL КонецЦикла;//ИндN КонецЦикла;//ИндM
Думаю, изучив эти примеры вы сможете самостоятельно построить более сложные многомерные массивы. Желаю удачи!
Читайте также:
Как я могу добавить новые элементы массива в начало массива в Javascript?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.
JavaScript «новый массив (n)» и «Array.prototype.map» странность
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
- Авторизоваться
зарегистрироваться текущее сообщество
Переполнение стека
Помогите
болтать
.
новых вопросов по массивам — qaru Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответы
Переполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегами
Вакансии
Программирование и связанные с ним технические возможности карьерного роста
Талант
Нанимайте технических специалистов и создавайте свой бренд работодателя
Реклама
Обратитесь к разработчикам и технологам со всего мира
.
javascript — Как удалить определенный элемент из массива?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответы
Переполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегами
Вакансии
Программирование и связанные с ним технические возможности карьерного роста
Талант
Нанимайте технических специалистов и создавайте свой бренд работодателя
Реклама
Обратитесь к разработчикам и технологам со всего мира
- О компании
.
Продукты
Переполнение стека
Общественные вопросы и ответы
Переполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегами
Вакансии
Программирование и связанные с ним технические возможности карьерного роста
Талант
Нанимайте технических специалистов и создавайте свой бренд работодателя
Реклама
Обратитесь к разработчикам и технологам со всего мира
Продукты
Переполнение стека
Общественные вопросы и ответы
Переполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегами
Вакансии
Программирование и связанные с ним технические возможности карьерного роста
Талант
Нанимайте технических специалистов и создавайте свой бренд работодателя
Реклама
Обратитесь к разработчикам и технологам со всего мира