Шаблоны Joomla 2.5 здесь: http://joomla25.ru/shablony/

Работа с массивами в 1C8.3

Работа с массивами в 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);  

   ФиксированныеЧисла = Новый ФиксированныйМассив(Числа); // Получился константный массив на основе обычного:

   // нельзя менять значения имеющихся элементов

   // нельзя добавлять новые элементы

   // нельзя удалять имеющиеся элементы  

КонецПроцедуры