Список значений - это универсальная коллекция для хранения некого списка значений. Список значений может хранить значения разных типов. ЭлементСпискаЗначений имеет 4 свойства: Значение, Представление, Пометка, Картинка. Список значений можно использовать для интерактивных действий с пользователем, например выбор документа из списка. Можно использовать и на клиенте и на сервере, а также передавать с клиента на сервер. В обычном приложении нельзя передавать на сервер.
Создание списка значений
Конструктор для создания пустого списка значений:
//в списке нет элементов
СписокДокументов = Новый СписокЗначений;
Как добавить значение в список значений
Добавление новых элементов список значений возможно двумя способами: методом Добавить и методом Вставить. У метода Вставить можно указать индекс куда будет вставлено новое значение.
//1 параметр - само значение
//2 параметр - представление. Будет отображаться при интерактивном выборе
//3 параметр - пометка. Если Истина, то при интерактивном выборе рядом будет
//установлена галочка
//4 параметр - картинка
СписокДокументов = Новый СписокЗначений;
СписокДокументов.Добавить("Док1", "Документ №1", Ложь,
БиблиотекаКартинок.Документ);
//можно сразу вставить в нужный индекс
СписокДокументов.Вставить(1, "Док2", "Документ №2", Ложь,
БиблиотекаКартинок.Документ);
Удаление элемента из списка значений
Для удаления значения из списка применяется метод Удалить. Он удаляет конкретный элемент по его индексу. Чтобы удалить все элементы из списка применяется метод Очистить.
//удаление восьмого элемента из списка
СписокДокументов.Удалить(7);
//полностью очищает список значений
СписокДокументов.Очистить();
Как получить значение списка значений по индексу
Для получения значения списка значений можно воспользоваться методом Получить или оператором индексации [ ], указав нужный индекс элемента. Стоит отметить, что таким образом будет получен элемент списка значений, а не само значение. Для получения значения нужно обратиться к свойству Значение:
//получит значение первого элемента
ЗначениеСписка = СписокДокументов.Получить(0).Значение;
//можно так:
ЗначениеСписка = СписокДокументов[0].Значение;
//а это элемент списка значений:
ЭлементСписка1 = СписокДокументов[0];
ЭлементСписка2 = СписокДокументов.Получить(0);
Список значений и массив
Метод ЗагрузитьЗначения позволяет загрузить все значения из массива в список значений. Если в списке значений уже что-то было, то все элементы будут удалены из него. Метод ВыгрузитьЗначения создает массив и выгружает в него все значения из списка значений:
МассивДоков1 = Новый Массив;
МассивДоков1.Добавить(СсылкаНаДокумент1);
МассивДоков1.Добавить(СсылкаНаДокумент2);
МассивДоков1.Добавить(СсылкаНаДокумент3);
//все значения массива будут загружены в список значений
//если в списке значений уже были какие-то значения, то
//они все будут удалены
СписокДокументов.ЗагрузитьЗначения(МассивДоков1);
//в переменной МассивДоков2 будет массив всех значений списка
МассивДоков2 = СписокДокументов.ВыгрузитьЗначения();
Сортировка списка значений
Списка значений можно отсортировать как по значению, так и по представлению. Для сортировки по значению используется метод СортироватьПоЗначению. Для сортировки по представлению - метод СортироватьПоПредставлению.
СписокДокументов = Новый СписокЗначений;
СписокДокументов.Добавить(2, "два");
СписокДокументов.Добавить(1, "один");
СписокДокументов.Добавить(4, "четыре");
СписокДокументов.Добавить(3, "три");
СписокДокументов.СортироватьПоЗначению();
//в результате будет следующий порядок: 1,2,3,4
СписокДокументов.СортироватьПоПредставлению();
//в результате будет следующий порядок: 2,1,3,4
//можно указать направление сортировки
СписокДокументов.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
//в результате будет следующий порядок: 4,3,2,1
Количество элементов списка значений
Чтобы узнать сколько в списке значений элементов применяется метод Количество.
СписокДокументов = Новый СписокЗначений;
СписокДокументов.Добавить(2, "два");
СписокДокументов.Добавить(1, "один");
СписокДокументов.Добавить(4, "четыре");
СписокДокументов.Добавить(3, "три");
КолвоЭлементов = СписокДокументов.Количество(); //4
Поиск в списке значений
Метод НайтиПоЗначению позволяет найти элемент списка значений. Параметром передается значение, которое нужно найти в списке. Данный метод вернет элемент списка, если есть элемент с таким значением, и Неопределено, если такого элемента нет.
НайдЗнач = СписокДокументов.НайтиПоЗначению(3);
//если в списке нет такого значения, то НайдЗнач = Неопределено
Если Не НайдЗнач = Неопределено Тогда
//в НайдЗнач будет элемент списка, а не значение
Сообщить(НайдЗнач.Значение);
КонецЕсли;
Как создать копию списка значений
Для создания полной копии списка значений удобно использовать метод Скопировать:
КопияСписка = СписокДокументов.Скопировать();
Выбор из списка значений
Список значений позволяет интерактивно выбрать из него значение. Для этого используется метод ПоказатьВыборЭлемента. При этом в форме выбора будет отображаться именно представление элемента списка значений, а не значение:
&НаКлиенте
Процедура Команда1(Команда)
СписокДокументов = Новый СписокЗначений;
СписокДокументов.Добавить(1, "один");
СписокДокументов.Добавить(2, "два");
СписокДокументов.Добавить(3, "три");
СписокДокументов.Добавить(4, "четыре");
//в списке для выбора будут представления, а не значения
ОбратныйВызов = Новый ОписаниеОповещения("ОбратныйВызов", ЭтотОбъект);
СписокДокументов.ПоказатьВыборЭлемента(ОбратныйВызов, "Выберите элемент");
КонецПроцедуры
&НаКлиенте
Процедура ОбратныйВызов(ВыбрЭлСписка, ДопПараметры) Экспорт
Если Не ВыбрЭлСписка = Неопределено Тогда
Сообщить("Вы выбрали " + ВыбрЭлСписка.Значение);
КонецЕсли;
КонецПроцедуры
В результате на экран будет выведена форма для выбора значения:
После выбора программа сообщит какой элемент был выбран:
Для возможности выбора нескольких элементов используется метод ПоказатьОтметкуЭлементов. В этом случае на форме выбора, помимо представлений элементов, будет возможность отметить флажком выбранные элементы.
&НаКлиенте
Процедура Команда1(Команда)
//БиблиотекаКартинок.Справочник - картинка в списке для выбора
СписокДокументов = Новый СписокЗначений;
СписокДокументов.Добавить(1, "один",, БиблиотекаКартинок.Справочник);
СписокДокументов.Добавить(2, "два",, БиблиотекаКартинок.Справочник);
СписокДокументов.Добавить(3, "три",, БиблиотекаКартинок.Справочник);
СписокДокументов.Добавить(4, "четыре",, БиблиотекаКартинок.Справочник);
//в списке для выбора будут представления и поле для установки галочки
ОбратныйВызов = Новый ОписаниеОповещения("ОбратныйВызов", ЭтотОбъект);
СписокДокументов.ПоказатьОтметкуЭлементов(ОбратныйВызов,
"Отметьте нужные элементы");
КонецПроцедуры
&НаКлиенте
Процедура ОбратныйВызов(Список, ДопПараметры) Экспорт
Для Каждого ЭлементСписка Из Список Цикл
Если ЭлементСписка.Пометка Тогда
Сообщить(ЭлементСписка.Значение);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
В результате будет открыта форма с возможностью установки галочки возле каждого значения списка:
После выбора программа сообщит какие элементы были выбраны:
Перебор списка значений
Перебрать список значений можно как с помощью цикла Для Каждого, так и с помощью цикла Для. В обоих случаях при изменении значения в элементе списка, в самом списке значений значение тоже будет изменено.
//1 способ
Для Каждого Док Из СписокДокументов Цикл
Док.Значение = Док.Значение * 2;
КонецЦикла;
//2 способ
Для Счетчик = 0 По СписокДокументов.Количество()-1 Цикл
СписокДокументов[0].Значение = СписокДокументов[0].Значение/2;
КонецЦикла;
Как типизировать список значений
Для ограничения возможных типов списка значений нужно заполнить его свойство ТипЗначения:
СписокДокументов = Новый СписокЗначений;
СписокДокументов.ТипЗначения = Новый ОписаниеТипов("Число");
//теперь будет выполняться преобразование в тип Число
СписокДокументов.Добавить(1);
СписокДокументов.Добавить("один");
СписокДокументов.Добавить(Истина);
СписокДокументов.Добавить(Дата(2020,1,1));
//в списке:
//1
//0
//1 - так как истина преобразуется в 1
//0
Как ограничить возможные значения в списке значений
Также можно ограничить список возможных добавляемых значений в список значений. Для этого в свойстве ДоступныеЗначения нужно указать ссылку на другой список значений. Тогда в список значений можно будет добавлять значения только из списка в свойстве ДоступныеЗначения, все остальные значения будут преобразованы в Неопределено:
Ограничения = Новый СписокЗначений;
Ограничения.Добавить(2);
Ограничения.Добавить(4);
СписокДокументов = Новый СписокЗначений;
СписокДокументов.ДоступныеЗначения = Ограничения;
//в список можно добавить только значения 2 и 4
//все остальные будут добавляться как Неопределено
СписокДокументов.Добавить(1);
СписокДокументов.Добавить(2);
СписокДокументов.Добавить(3);
СписокДокументов.Добавить(4);
//в списке:
//Неопределено
//2
//Неопределено
//4
Смотрите также:
Электронный учебник по по программированию в 1С Рекомендации по изучению программирования 1С с нуля Программное решение для сдачи и подготовки к экзаменам Программирование в 1С 8.3 с нуля - краткий самоучитель Комплексная подготовка программистов 1С:Предприятие 8.2 Сайты с уроками программирования и со справочниками Youtube-каналы с уроками программирования Сайты для обучения программированию Лекции и уроки