Массивы в языке 1С 8.3, 8.2 (в примерах)

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

Дата Если Массивы Математика Процедуры Строки Циклы
Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие
СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат

ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

См. урок для начинающих по массивам в 1С
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Смотреть видео с демонстрацией выполнения кода

Полный синтаксис (нажмите, чтобы раскрыть)

/// Как создать массив (сразу нужного размера) в 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, 8.2 (в примерах)

Дата Если Массивы Математика Процедуры Строки Циклы
Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие
СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат

ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

С уважением, (преподаватель школы 1С программистов и разработчик обновлятора).



Владимир Милькин
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться: