Массив 1С – это простой набор значений. В один массив 1С можно добавить значения разных типов. После добавления наличие в массиве 1С значения можно проверить встроенным поиском.
Массив 1С часто используется:
А) Для отборов
Б) Для сохранения списка значений, чтобы далее использовать его, например, передать как параметр в функцию/процедуру.
Работа с массивами 1С
Создадим массив 1С из 2 значений:
Массив = Новый Массив(); //массив без фиксированного кол-ва значений
ГСЧ = Новый ГенераторСлучайныхЧисел(); //будем заполнять случайными числами
Массив.Добавить( ГСЧ.СлучайноеЧисло(0, 1000) );
Массив.Добавить( ГСЧ.СлучайноеЧисло(0, 1000) );
//цикл прохода каждого значения массива 1С, сколько бы их ни было
Для каждого Знч из Массив Цикл
Сообщить(Знч);
КонецЦикла;
Создадим массив 1С из 10 значений:
Массив = Новый Массив(10); //массив с фиксированным кол-вом значений
ГСЧ = Новый ГенераторСлучайныхЧисел(); //будем заполнять случайными числами
//индекс массива начинается с нуля, а не с единицы
//10 шт - это от 0 до 9
Для Сч = 0 по 9 Цикл
//обращение к массиву ИмяМассива[Индекс]
Массив[Сч] = ГСЧ.СлучайноеЧисло(0, 1000); //случайное число от 0 до 1000
КонецЦикла;
//цикл прохода каждого значения массива, сколько бы их ни было
Для каждого Знч из Массив Цикл
Сообщить(Знч);
КонецЦикла;
//обратите внимание - 10 значений массива, это значит что их по умолчанию 10 шт и каждое значение равно НЕОПРЕДЕЛЕНО, пока мы не установили другое
//это не значит, что мы не можем добавить еще одно значение, 11е, с помощью ИмяМассива.Добавить();
Многомерный массив
Создадим многомерный массив 1С 2х2. Многомерный массив 1С, значит каждая ячейка массива 1С содержит не значение, а тоже массив 1С.
[VIP_CONTENT]
Массив = Новый Массив(2,2); //массив с фиксированным кол-вом значений
ГСЧ = Новый ГенераторСлучайныхЧисел(); //будем заполнять случайными числами
Массив[0][0] = ГСЧ.СлучайноеЧисло(0, 1000);
Массив[0][1] = ГСЧ.СлучайноеЧисло(0, 1000);
Массив[1][0] = ГСЧ.СлучайноеЧисло(0, 1000);
Массив[1][1] = ГСЧ.СлучайноеЧисло(0, 1000);
//цикл прохода каждого значения массива, сколько бы их ни было
Для каждого X из Массив Цикл
Для каждого Y из X Цикл
Сообщить(Y);
КонецЦикла;
КонецЦикла;
//количество измерений можно увеличить, например:
//Массив = Новый Массив(2,2,2);
//Массив[0][0][0] = 0;
[/VIP_CONTENT]
Многомерный массив 1С не обязательно должен быть фиксированным. Сделаем многомерный массив 1С 2х2 без указания фиксированного количества значений:
[VIP_CONTENT]
Массив = Новый Массив();
ГСЧ = Новый ГенераторСлучайныхЧисел(); //будем заполнять случайными числами
Массив.Добавить(Новый Массив()); //добавили второе измерение
Массив[0].Добавить(ГСЧ.СлучайноеЧисло(0, 1000));
Массив[0].Добавить(ГСЧ.СлучайноеЧисло(0, 1000));
Массив.Добавить(Новый Массив()); //во второе измерение добавили вторую «строчку»
Массив[1].Добавить(ГСЧ.СлучайноеЧисло(0, 1000));
Массив[1].Добавить(ГСЧ.СлучайноеЧисло(0, 1000));
//цикл прохода каждого значения массива, сколько бы их ни было
Для каждого X из Массив Цикл
Для каждого Y из X Цикл
Сообщить(Y);
КонецЦикла;
КонецЦикла;
[/VIP_CONTENT]
Создание массива 1С с нуля
Получение данных – затратная по времени и ресурсам процедура. Поэтому, если требуется с полученными данными работать неоднократно – имеет смысл получить их единожды и сохранить в массив 1С, чтобы далее работать с уже полученными и сохраненными данными.
Например – строка версии программы выглядит следующим образом «11.0.9.5» — четыре числа, разделенные точками. Мы можем перевести версию в «компьютерный» формат – массив из четырех числовых значений. Тогда далее мы можем сравнивать версии друг с другом:
[VIP_CONTENT]
Версия = "11.0.9.5";
мВерсияКонфигурации = Новый Массив(); //создаем массив с нуля
Позиция = Найти(Версия, "."); //ищем первую точку
Пока Позиция > 0 Цикл //цикл, пока точки не кончатся (см. в конце цикла повторный поиск точки)
Попытка
//вырезаем левую часть строки до точки, пытаемся ее привести к числу, попытка/исключения на случай, если вместо цифр там буквы
мВерсияКонфигурации.Добавить( Число(Лев(Версия, Позиция - 1)) );
Исключение
//сюда мы попадем, если не удалось преобразовать к числу, генерируем сообщение об ошибке
ВызватьИсключение "Ошибка: неверные символы в версии на позиции " + Строка(мВерсияКонфигурации.Количество() + 1);
КонецПопытки;
//из строки версии вырезаем правую часть начиная с точки, так как левую часть до точки мы уже обработали
Версия = Прав( Версия, СтрДлина(Версия) - Позиция );
Позиция = Найти(Версия, "."); //продолжаем поиск, чтобы работал цикл
КонецЦикла;
//так как в конце версии точки нет - осталось последнее число
Попытка
мВерсияКонфигурации.Добавить( Число(Версия) );
Исключение
ВызватьИсключение "Ошибка: неверные символы в версии на позиции " + Строка(мВерсияКонфигурации.Количество() + 1);
КонецПопытки;
//проверяем, что количество чисел в версии = 4
Если мВерсияКонфигурации.Количество() <> 4 Тогда
ВызватьИсключение "Ошибка: в версии должно содержаться 4 числа разделенных точками";
КонецЕсли;
//обратите внимание - индекс массива начинается с нуля, а не с единицы
Сообщить("Версия, число 1: " + Строка( мВерсияКонфигурации[0] ));
Сообщить("Версия, число 2: " + Строка( мВерсияКонфигурации[1] ));
Сообщить("Версия, число 3: " + Строка( мВерсияКонфигурации[2] ));
Сообщить("Версия, число 4: " + Строка( мВерсияКонфигурации[3] ));
[/VIP_CONTENT]
Получение готового массива 1С с данными
Массив 1С можно получить из списка значений с помощью метода спСписок.ВыгрузитьЗначения() и из таблицы значений с помощью метода тТаблица.ВыгрузитьКолонку().
В примере ниже мы делаем запрос – выбираем все ссылки документов из базы данных.
Далее:
РезультатЗапроса = Запрос.Выполнить() //выполняет запростзРезультат = РезультатЗапроса.Выгрузить() //выгружает результат в таблицу значениймМассивСсылок = тзРезультат.ВыгрузитьКолонку("ИмяКолонки") //выгружает колонку таблицы в массив
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Документ.ПоступлениеТоваров");
МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Получение массива 1С из других объектов и использование в качестве отбора в запросе
Когда на форме расположен список документов (или таблица значений) – пользователь может выделить курсором одну строку. Также можно разрешить выделять несколько строк одновременно. Чтобы выделить несколько строк (если не форме это разрешено) нужно зажать клавишу CTRL или SHIFT.
Добавьте на форму толстого клиента таблицу значений и в качестве ее типа выберите ДокументСписок.ИмяДокумента. В его свойствах выберите режим выделения – множественный.

Мы можем программно получить список выделенных строк:
[VIP_CONTENT]
//"ЭлементыФормы" - обращение к полям и элементам управления, расположенным на форме
//"Документы" - имя элемента формы "список документов" на форме
//"ВыделенныеСтроки" - массив строк, выделенных пользователем курсором (может быть одна строка или несколько)
Если ЭлементыФормы.Документы.ВыделенныеСтроки.Количество() = 0 Тогда
ВызватьИсключение "Выделите одну или несколько строк (зажав CTRL или SHIFT)";
КонецЕсли;
//Создаем текст запроса
Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоступлениеТоваров.Организация
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
|ГДЕ
//Если нам нужно сравнивать одно значение с одним в тексте запроса, ты мы пишем "Ссылка = &ПараметрЗапроса"
//Если нужно сравнить одно значение со многими, то мы пишем "Ссылка В (&МассивПараметров)"
| ПоступлениеТоваров.Ссылка В(&мСсылкиВыделенныеПользователем)");
//Установка параметра с тем же именем, которое мы указали в тексте запроса
//В качестве параметра используем массив выделенных строк
Запрос.УстановитьПараметр("мСсылкиВыделенныеПользователем", ЭлементыФормы.Документы.ВыделенныеСтроки);
Сообщить("Список организаций из выделенных документов:");
//Идем по списку результатов запроса, последовательно
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Организация);
КонецЦикла;
[/VIP_CONTENT]
Если Вы используете управляемую форму, то нужно сначала добавить реквизит формы с типом ДинамическийСписок, а в его свойствах выберите основную таблицу – нужный документ. Перетащите реквизит на форму. В свойствах элемента формы (!) выберите также – режим выделения – множественный (установлен так по умолчанию).

Обращение к массиву 1С выделенных строк будет выглядеть как:
Элементы.ИмяРеквизитаФормы. ВыделенныеСтроки