[Alimir_BootModal_Login]

Внутренний язык программирования 1С 8.3 для начинающих программистов: список значений в 1С

Автор уроков и преподаватель школы: Владимир Милькин

Сегодня мы познакомимся с новым типом данных языка 1С, который называется СписокЗначений.

Список значений в языке 1С

Похож на массив

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

Раз список значений - это некоторый аналог массива, то он тоже является коллекцией данных. И мы смело можем поместить в него набор чисел:

Список = Новый СписокЗначений; // создали список значений
Список.Добавить(10); // добавили в список число 10
Список.Добавить(0); // добавили в список число 0
Список.Добавить(-5);
Список.Добавить(23);

Пока всё очень похоже на массив, не правда ли? Но идём дальше.

Его элементы не просто значения

Чтобы теперь вывести эти числа пользователю напишем:

// пробежимся циклом по каждому элементу списка
Для Каждого Элемент Из Список Цикл
    Сообщить(Элемент.Значение); // выводим значение элемента
КонецЦикла;

А вот и первое отличие. Если элементами обычного массива у нас являлись бы сами числа, то в случае со списком значений это не совсем так. Элементами списка являются некоторые структуры и, чтобы добраться до положенного в список числа нам нужно через точку обратиться к полю Значение.

А теперь переходим к "бонусам" списка значений.

Умеет сортировать

К, примеру, мы легко можем отсортировать список значений. Список это умеет делать сам:

Список.СортироватьПоЗначению(НаправлениеСортировки.Возр);

В случае с обычным массивом нам пришлось бы реализовывать один из алгоритмов сортировки (например, "пузырёк").

Умеет искать

Список значений умеет сам искать свои элементы. Пусть мы хотим выяснить, присутствует ли введённое пользователем число в нашем списке:

Число = 0;
ВвестиЧисло(Число); // ввели число от пользователя
 
НайденныйЭлемент = Список.НайтиПоЗначению(Число);
 
Если НайденныйЭлемент = Неопределено Тогда
    ОткрытьЗначение("Число " + Число + " в списке не найдено!");
Иначе
    ОткрытьЗначение("Число " + Число + " присутствует в списке. Вот оно: "
        + НайденныйЭлемент.Значение);
КонецЕсли;

Поддерживает вставку и удаление

Список значений, также как и массив, поддерживает вставку и удаление элементов (этим нас не удивишь):

Список.Вставить(0, 1000); // вставляем тысячу в самое начало списка
Список.Удалить(0); // и тут же удаляем её из списка
Список.Вставить(Список.Количество(), 13); // вставляем 13 в конец списка
Сообщить(Список[Список.Количество() - 1]); // выводим последний элемент списка (13)

Поддерживает квадратные скобки

Как вы уже поняли, нумерация элементов списка также идёт с нуля и мы можем обратиться к любому элементу по его индексу используя квадратные скобки:

Сообщить(Список[1].Значение); // вывели второй элемент списка

Таким образом, мы можем пробежаться по всем элементам списка ещё и так:

Для А = 0 По Список.Количество() - 1 Цикл
    Сообщить(Список[А].Значение);
КонецЦикла;

Умеет создавать свою копию

У списка значений есть просто шикарная возможность - он умеет сам создавать свою копию:

КопияСписка = Список.Скопировать(); // сделали копию списка
 
// теперь можем смело менять КопияСписка
// при этом исходный список меняться не будет
КопияСписка[0].Значение = 123456;

Умеет превращаться в массив

Ну и, наконец, вы можете в любой момент легко выгрузить все элементы списка в массив:

МассивЧисел = Список.ВыгрузитьЗначения(); // выгрузили в массив
 
Для А = 0 По МассивЧисел.Количество() - 1 Цикл
    Сообщить(МассивЧисел[А]); // не нужно указывать поле Значение
КонецЦикла;

Пройдите тест

Начать тест

Домашнее задание

а) Необходимо ввести от пользователя 5 чисел, найти наибольшее и наименьшее из них и вывести их пользователю. В решении должен использоваться список значений.

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

Дополнение

Данный материал рассчитан на начинающих разработчиков. Если он показался вам слишком лёгким - рассмотрите другие примеры использования списка значений в 1С (ссылка).

Мы отлично поработали, пора отдохнуть!

Продолжить обучение в школе программирования в 1С

Для учеников

Уровень сложности уроков идёт снизу вверх. Поэтому старайтесь заниматься последовательно, ничего не пропуская и не откладывая на потом.

Обязательно выполняйте все тесты и домашние задания, старайтесь улучшить свои результаты. Сверяйтесь с эталонными решениями только после самостоятельного выполнения задач.

На вопросы учеников — отвечаю по почте,  но прежде загляните в ЧАВО (ссылка) .

С уважением, Владимир Милькин