1С 8.3 Массив
Данные > Примеры кода 1С > 1С 8.3 Массив
Массив в 1С 8.3 - это набор значений, которые могут быть разных типов. Значения массива можно добавлять, получать, вставлять, удалять и очищать. Массивы бывают одномерными и двумерными. В 1С 8.3 используются для отборов или для сохранения списка значений, чтобы потом передать как параметр в функцию/процедуру.
Массив можно получить из списка значений с помощью метода ВыгрузитьЗначения() и из таблицы значений с помощью метода ВыгрузитьКолонку(). В виде массива также можно получить выделенные строки динамического списка. Можно создать массив и программно.
Оглавление:
Создание массива (определенного размера) в 1С 8.3:
&НаКлиенте
Процедура СозданиеМассиваОпределенногоРазмера(Команда)
// Массив состоит из 3-х элементов
МассивОпрРазмера = Новый Массив(3);
// Определяем значения элементов
МассивОпрРазмера[0] = 3;
МассивОпрРазмера[1] = МассивОпрРазмера[0] * 2; // 6
МассивОпрРазмера[2] = МассивОпрРазмера[1] * 3; // 18
Для Каждого ЭлементМассива из МассивОпрРазмера Цикл
Сообщить(ЭлементМассива); // 3 6 18
КонецЦикла;
КонецПроцедуры
Процедура СозданиеМассиваОпределенногоРазмера(Команда)
// Массив состоит из 3-х элементов
МассивОпрРазмера = Новый Массив(3);
// Определяем значения элементов
МассивОпрРазмера[0] = 3;
МассивОпрРазмера[1] = МассивОпрРазмера[0] * 2; // 6
МассивОпрРазмера[2] = МассивОпрРазмера[1] * 3; // 18
Для Каждого ЭлементМассива из МассивОпрРазмера Цикл
Сообщить(ЭлементМассива); // 3 6 18
КонецЦикла;
КонецПроцедуры
Создание массива (без размера) с последующим добавлением элементов в 1С 8.3:
&НаКлиенте
Процедура СозданиеМассиваБезРазмера(Команда)
// В массиве пока нет элементов
МассивБезРазмера = Новый Массив;
// Добавляем последовательно 3 элемента
МассивБезРазмера.Добавить(20); // Массив: (20)
МассивБезРазмера.Добавить(40); // Массив: (20, 40)
МассивБезРазмера.Добавить(70); // Массив: (20, 40, 70)
Для Каждого ЭлементМассива из МассивБезРазмера Цикл
Сообщить(ЭлементМассива); // 20 40 70
КонецЦикла;
КонецПроцедуры
Процедура СозданиеМассиваБезРазмера(Команда)
// В массиве пока нет элементов
МассивБезРазмера = Новый Массив;
// Добавляем последовательно 3 элемента
МассивБезРазмера.Добавить(20); // Массив: (20)
МассивБезРазмера.Добавить(40); // Массив: (20, 40)
МассивБезРазмера.Добавить(70); // Массив: (20, 40, 70)
Для Каждого ЭлементМассива из МассивБезРазмера Цикл
Сообщить(ЭлементМассива); // 20 40 70
КонецЦикла;
КонецПроцедуры
Создание массива с элементами разных типов: числа, даты, строки и т.д. в 1С 8.3:
&НаКлиенте
Процедура СозданиеМассиваСЭлементамиРазныхТипов(Команда)
Массив = Новый Массив(5);
Массив[0] = "1Cnik.BY"; // ("1Cnik.BY")
Массив[1] = 36; // ("1Cnik.BY", 36)
Массив[2] = "@"; // ("1Cnik.BY", 36, "@")
Массив[3] = Формат(2007, "ЧГ=0"); // ("1Cnik.BY", 36, "@", 2007)
Массив[4] = Дата("20200330"); // ("1Cnik.BY", 36, "@", 2007, 30.03.2020)
Для Каждого ЭлементМассива из Массив Цикл
Сообщить(ЭлементМассива); // 1Cnik.BY 36 @ 2007 30.03.2020
КонецЦикла;
КонецПроцедуры
Процедура СозданиеМассиваСЭлементамиРазныхТипов(Команда)
Массив = Новый Массив(5);
Массив[0] = "1Cnik.BY"; // ("1Cnik.BY")
Массив[1] = 36; // ("1Cnik.BY", 36)
Массив[2] = "@"; // ("1Cnik.BY", 36, "@")
Массив[3] = Формат(2007, "ЧГ=0"); // ("1Cnik.BY", 36, "@", 2007)
Массив[4] = Дата("20200330"); // ("1Cnik.BY", 36, "@", 2007, 30.03.2020)
Для Каждого ЭлементМассива из Массив Цикл
Сообщить(ЭлементМассива); // 1Cnik.BY 36 @ 2007 30.03.2020
КонецЦикла;
КонецПроцедуры
Обход всех элементов массива по индексу в 1С 8.3:
&НаКлиенте
Процедура ОбходВсехЭлементовМассиваПоИндексу(Команда)
// Инициализируем массив: (20, 40, 70)
МассивИндекс = Новый Массив;
МассивИндекс.Добавить(20);
МассивИндекс.Добавить(40);
МассивИндекс.Добавить(70);
// Цикл от первого (с индексом 0) до последнего элемента.
Для Индекс = 0 По МассивИндекс.Количество() - 1 Цикл
Сообщить(МассивИндекс[Индекс]);
КонецЦикла;
КонецПроцедуры
Процедура ОбходВсехЭлементовМассиваПоИндексу(Команда)
// Инициализируем массив: (20, 40, 70)
МассивИндекс = Новый Массив;
МассивИндекс.Добавить(20);
МассивИндекс.Добавить(40);
МассивИндекс.Добавить(70);
// Цикл от первого (с индексом 0) до последнего элемента.
Для Индекс = 0 По МассивИндекс.Количество() - 1 Цикл
Сообщить(МассивИндекс[Индекс]);
КонецЦикла;
КонецПроцедуры
Вставка, удаление одного элемента и очистка всего массива в 1С 8.3:
&НаКлиенте
Процедура РаботаСМассивом(Команда)
// Создание (инициализация) пустого массива
Массив = Новый Массив;
// Вставка трёх элементов; каждый элемент вставляется в начало
Массив.Вставить(0, "А"); // (А)
Массив.Вставить(0, "Б"); // (Б, А)
Массив.Вставить(0, "В"); // (В, Б, А)
Массив.Вставить(0, "Г"); // (Г, В, Б, А)
// Определение последнего индекса
Сообщить(Массив.ВГраница()); // 3
// Перебор массива в цикле
Для Индекс = 0 по Массив.ВГраница() Цикл
Сообщить(Массив[Индекс]); // Г В Б А
КонецЦикла;
// Находим индекс элемента
Индекс = Массив.Найти("А"); // 1
// Удаляем элемент по найденному индексу
Массив.Удалить(Индекс); // Остаётся массив (Г, В, Б)
// Определение последнего индекса - теперь он уменьшился
Сообщить(Массив.ВГраница()); // 2
// Удаление всех элементов из массива
Массив.Очистить();
КонецПроцедуры
Процедура РаботаСМассивом(Команда)
// Создание (инициализация) пустого массива
Массив = Новый Массив;
// Вставка трёх элементов; каждый элемент вставляется в начало
Массив.Вставить(0, "А"); // (А)
Массив.Вставить(0, "Б"); // (Б, А)
Массив.Вставить(0, "В"); // (В, Б, А)
Массив.Вставить(0, "Г"); // (Г, В, Б, А)
// Определение последнего индекса
Сообщить(Массив.ВГраница()); // 3
// Перебор массива в цикле
Для Индекс = 0 по Массив.ВГраница() Цикл
Сообщить(Массив[Индекс]); // Г В Б А
КонецЦикла;
// Находим индекс элемента
Индекс = Массив.Найти("А"); // 1
// Удаляем элемент по найденному индексу
Массив.Удалить(Индекс); // Остаётся массив (Г, В, Б)
// Определение последнего индекса - теперь он уменьшился
Сообщить(Массив.ВГраница()); // 2
// Удаление всех элементов из массива
Массив.Очистить();
КонецПроцедуры
Передача массива в качестве параметра функции в 1С 8.3:
&НаКлиенте
Функция ПередачаМассиваВКачествеПараметраФункции(СсылкаНаМассив)
СсылкаНаМассив[0] = 50;
Возврат СсылкаНаМассив[0] * 5;
КонецФункции
&НаКлиенте
Процедура ПередачаМассива(Команда)
Массив = Новый Массив(1); // Инициализация массива из одного элемента
Массив[0] = 70; // Значение элемента до вызова функции = 70
// Передача массива в функцию для изменения
Сообщить(ПередачаМассиваВКачествеПараметраФункции(Массив)); // 250
// Значение первого элемента после функции изменилось
Сообщить(Массив[0]); // 50
КонецПроцедуры
Функция ПередачаМассиваВКачествеПараметраФункции(СсылкаНаМассив)
СсылкаНаМассив[0] = 50;
Возврат СсылкаНаМассив[0] * 5;
КонецФункции
&НаКлиенте
Процедура ПередачаМассива(Команда)
Массив = Новый Массив(1); // Инициализация массива из одного элемента
Массив[0] = 70; // Значение элемента до вызова функции = 70
// Передача массива в функцию для изменения
Сообщить(ПередачаМассиваВКачествеПараметраФункции(Массив)); // 250
// Значение первого элемента после функции изменилось
Сообщить(Массив[0]); // 50
КонецПроцедуры
Возврат массива в результате выполнения функции в 1С 8.3:
&НаКлиенте
Функция СозданиеМассива()
Массив = Новый Массив(3);
Массив[0] = "Добро";
Массив[1] = "пожаловать";
Массив[2] = "в Беларусь!";
Возврат Массив;
КонецФункции
&НаКлиенте
Процедура МассивВРезультатеВыполненияФункции(Команда)
// Возврат массива из функции
МассивИзФункции = СозданиеМассива();
Для Каждого ЭлементМассива из МассивИзФункции Цикл
Сообщить(ЭлементМассива); // Добро пожаловать в Беларусь!
КонецЦикла;
КонецПроцедуры
Функция СозданиеМассива()
Массив = Новый Массив(3);
Массив[0] = "Добро";
Массив[1] = "пожаловать";
Массив[2] = "в Беларусь!";
Возврат Массив;
КонецФункции
&НаКлиенте
Процедура МассивВРезультатеВыполненияФункции(Команда)
// Возврат массива из функции
МассивИзФункции = СозданиеМассива();
Для Каждого ЭлементМассива из МассивИзФункции Цикл
Сообщить(ЭлементМассива); // Добро пожаловать в Беларусь!
КонецЦикла;
КонецПроцедуры
Передача массива в качестве параметра процедуры в 1С 8.3:
&НаКлиенте
Процедура ПроверкаМассива(СсылкаНаМассив)
Если СсылкаНаМассив <> Неопределено И СсылкаНаМассив.Количество() > 0 Тогда
Сообщить(СсылкаНаМассив[0]);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередачаМассиваВКачествеПараметраПроцедуры(Команда)
// Инициализация массива: (20, 40, 70)
Массив = Новый Массив(3);
Массив[0] = 20;
Массив[1] = 40;
Массив[2] = 70;
// печать первого элемента, переданного массива
ПроверкаМассива(Массив); // 20
ПроверкаМассива(Неопределено); // пусто
ПроверкаМассива(Новый Массив); // пусто
КонецПроцедуры
Процедура ПроверкаМассива(СсылкаНаМассив)
Если СсылкаНаМассив <> Неопределено И СсылкаНаМассив.Количество() > 0 Тогда
Сообщить(СсылкаНаМассив[0]);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередачаМассиваВКачествеПараметраПроцедуры(Команда)
// Инициализация массива: (20, 40, 70)
Массив = Новый Массив(3);
Массив[0] = 20;
Массив[1] = 40;
Массив[2] = 70;
// печать первого элемента, переданного массива
ПроверкаМассива(Массив); // 20
ПроверкаМассива(Неопределено); // пусто
ПроверкаМассива(Новый Массив); // пусто
КонецПроцедуры
Работа с многомерным массивом в 1С 8.3:
&НаКлиенте
Процедура РаботаСМногомернымМассивом(Команда)
// <<>,<>,<>> <<>,<>,<>>
Массив = Новый Массив(2, 3);// два столбца, три строки
// <<А>,<Б>,<В>> <<>,<>,<>>
Массив[0][0] = "А";
Массив[0][1] = "Б";
Массив[0][2] = "В";
// <<А>,<Б>,<В>> <<1>,<2>,<3>>
Массив[1][0] = "1";
Массив[1][1] = "2";
Массив[1][2] = "3";
// Обход элементов многомерного массива через простой цикл
Для Каждого СтрокаМассива Из Массив Цикл
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
Сообщить(ЭлементМассива);
КонецЦикла;
КонецЦикла;
// Обход элементов многомерного массива через индекс
Для ИндексСтрока = 0 По Массив.Количество() - 1 Цикл
Для ИндексСтолбец = 0 По Массив[ИндексСтрока].Количество() - 1 Цикл
Сообщить(Массив[ИндексСтрока][ИндексСтолбец]);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура РаботаСМногомернымМассивом(Команда)
// <<>,<>,<>> <<>,<>,<>>
Массив = Новый Массив(2, 3);// два столбца, три строки
// <<А>,<Б>,<В>> <<>,<>,<>>
Массив[0][0] = "А";
Массив[0][1] = "Б";
Массив[0][2] = "В";
// <<А>,<Б>,<В>> <<1>,<2>,<3>>
Массив[1][0] = "1";
Массив[1][1] = "2";
Массив[1][2] = "3";
// Обход элементов многомерного массива через простой цикл
Для Каждого СтрокаМассива Из Массив Цикл
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
Сообщить(ЭлементМассива);
КонецЦикла;
КонецЦикла;
// Обход элементов многомерного массива через индекс
Для ИндексСтрока = 0 По Массив.Количество() - 1 Цикл
Для ИндексСтолбец = 0 По Массив[ИндексСтрока].Количество() - 1 Цикл
Сообщить(Массив[ИндексСтрока][ИндексСтолбец]);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Получение фиксированного массива из обычного в 1С 8.3:
&НаКлиенте
Процедура ПолучениеФиксированногоМассиваИзОбычного(Команда)
Алфавит = Новый Массив;
Алфавит.Добавить("А");
Алфавит.Добавить("Б");
Алфавит.Добавить("В");
Алфавит.Добавить("Г");
Алфавит.Добавить("Д");
ФиксированныйМассив = Новый ФиксированныйМассив(Алфавит);
// Нельзя изменять значения элементов, добавлять новые и удалять имеющиеся
КонецПроцедуры
Процедура ПолучениеФиксированногоМассиваИзОбычного(Команда)
Алфавит = Новый Массив;
Алфавит.Добавить("А");
Алфавит.Добавить("Б");
Алфавит.Добавить("В");
Алфавит.Добавить("Г");
Алфавит.Добавить("Д");
ФиксированныйМассив = Новый ФиксированныйМассив(Алфавит);
// Нельзя изменять значения элементов, добавлять новые и удалять имеющиеся
КонецПроцедуры
Получение последнего элемента массива в 1С 8.3:
&НаКлиенте
Процедура ПолучениеПоследнегоЭлементаМассива(Команда)
// Инициализация массива: ("Москва", "Санкт-Петербург", "Новосибирск", "Екатеринбург", "Казань")
МассивСтран = Новый Массив;
МассивСтран.Добавить("Москва");// 0
МассивСтран.Добавить("Санкт-Петербург");
МассивСтран.Добавить("Новосибирск");
МассивСтран.Добавить("Екатеринбург");
МассивСтран.Добавить("Казань");
Сообщить(МассивСтран[МассивСтран.Количество() - 1]); // Казань
КонецПроцедуры
Процедура ПолучениеПоследнегоЭлементаМассива(Команда)
// Инициализация массива: ("Москва", "Санкт-Петербург", "Новосибирск", "Екатеринбург", "Казань")
МассивСтран = Новый Массив;
МассивСтран.Добавить("Москва");// 0
МассивСтран.Добавить("Санкт-Петербург");
МассивСтран.Добавить("Новосибирск");
МассивСтран.Добавить("Екатеринбург");
МассивСтран.Добавить("Казань");
Сообщить(МассивСтран[МассивСтран.Количество() - 1]); // Казань
КонецПроцедуры
💡 Готовые модели кода (шаблоны) с "Массив" 1С:
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник