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

Apr 03, 2022 13:45

Список значений - это универсальная коллекция для хранения некого списка значений. Список значений может хранить значения разных типов. ЭлементСпискаЗначений имеет 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-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

программирование

Previous post Next post
Up