1с статьи | Курс-репетитор программиста 1С
Список значений

Создание и обход

СписокЗначений = Новый СписокЗначений;
// добавить элемент в конец списка
СписокЗначений.Добавить(
   "УстановитьФлажки", // Значение
   "Установить флажки", // Представление
   Истина, // Пометка
   БиблиотекаКартинок.УстановитьФлажки // Картинка
);
// вставить в позицию с индексом 0
// возвращается значение с типом "ЭлементСпискаЗначений"
ЭлементСпискаЗначений = СписокЗначений.Вставить(0, "СнятьФлажки", 
   "Снять флажки", 
   Ложь, БиблиотекаКартинок.СнятьФлажки);
   
// сдвинуть элемент списка на 1 позицию вниз
// отрицательное значение сдвигает вверх
СписокЗначений.Сдвинуть(ЭлементСпискаЗначений, 1);   

// вывод элементов списка
Для Каждого Элемент Из СписокЗначений Цикл
   ТекстСообщения = СтрШаблон("Значение: %1, Представление: %2",
      Элемент.Значение, Элемент.Представление);
   Сообщить(ТекстСообщения);
КонецЦикла;

// Что будет выведено?

Показать решение

Получение и поиск элементов списка

// создаем массив значений
МассивЗначений = Новый Массив;
МассивЗначений.Добавить("УстановитьФлажки");
МассивЗначений.Добавить("СнятьФлажки");
СписокЗначений = Новый СписокЗначений;
// загрузка значений из массива
СписокЗначений.ЗагрузитьЗначения(МассивЗначений);

// поиск по значению
Элемент = СписокЗначений.НайтиПоЗначению("Значение");
Если Элемент=Неопределено Тогда
   // значение не найдено
КонецЕсли;

// значение будет найдено, тип ЭлементСнятьФлажки - ЭлементСпискаЗначений
ЭлементСнятьФлажки = СписокЗначений.НайтиПоЗначению("СнятьФлажки");
// идентификатор элемента списка
// не привязан к позиции элемента в списке
ИдентификаторЭлемента = ЭлементСнятьФлажки.ПолучитьИдентификатор();

// поиск по идентификатору
ЭлементСписка = СписокЗначений.НайтиПоИдентификатору(ИдентификаторЭлемента);

// изменим позицию элемента
СписокЗначений.Сдвинуть(ЭлементСнятьФлажки, -1);

// индекс элемента списка  
// определяет позицию элемента в списке
ИндексЭлемента = СписокЗначений.Индекс(ЭлементСнятьФлажки);

// тернарный оператор ?
ТекстСообщения = ?(ИдентификаторЭлемента = ИндексЭлемента,
   "идентификатор совпадает с индексом",
   "идентификатор не совпадает с индексом");

Сообщить(ТекстСообщения);

// Что будет выведено?

Показать решение

Сортировка и выбор элементов списка

// создаем массив значений
МассивЗначений = Новый Массив;
МассивЗначений.Добавить("УстановитьФлажки");
МассивЗначений.Добавить("СнятьФлажки");
МассивЗначений.Добавить("ЗатемнитьФлажки");
СписокЗначений = Новый СписокЗначений;
// загрузка значений из массива
СписокЗначений.ЗагрузитьЗначения(МассивЗначений);                
// сортируем по значению
СписокЗначений.СортироватьПоЗначению(НаправлениеСортировки.Убыв);

// выгружаем значения в массив
СортированныйМассив = СписокЗначений.ВыгрузитьЗначения();        

// можно скопировать список в новый
НовыйСписокЗначений = СписокЗначений.Скопировать();
// очистить элементы старого списка
СписокЗначений.Очистить();         
// добавили новый список в старый
СписокЗначений.Добавить(НовыйСписокЗначений, 
	"Значение элемента - список значений");

// вызвали диалог выбора элементов списка
// процедура, в которой выполняется этот код должна
// быть клиентской и отмечена модификатором Асинх 
// например:
// &НаКлиенте
// Асинх Процедура СортировкаИВыборЭлементовСпискаЗначений()
РезультатВыбора = Ждать СписокЗначений.ВыбратьЭлементАсинх(
	"Выберите элемент списка");

// обработали выбор
Если РезультатВыбора = Неопределено Тогда
   Сообщить("Элемент не был выбран");   
   Возврат;
КонецЕсли; 

ТекстСообщения = СтрШаблон("Тип 1: %1, Тип 2: %2",
      ТипЗнч(РезультатВыбора), 
      ТипЗнч(РезультатВыбора.Значение));
      
Сообщить(ТекстСообщения);

Показать решение

Использование в диалоге

// используем список как набор кнопок
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить("УстановитьФлажки", "Установить флажки");
СписокКнопок.Добавить("СнятьФлажки", "Снять флажки");
СписокКнопок.Добавить("ЗатемнитьФлажки", "Затемнить флажки");

ТекстВопроса = "Вопрос со своими кнопками";
Ответ = Ждать ВопросАсинх(ТекстВопроса, 
   СписокКнопок, // кнопки в диалоге
   5, // таймаут в секундах, по истечению 
   //вернется значение КодВозвратаДиалога.Таймаут
   "СнятьФлажки" // кнопка по умолчанию
);

Если Ответ = "СнятьФлажки" Тогда
   // нажата кнопка "Снять флажки"
КонецЕсли;

СписокКнопок.ЗаполнитьПометки(Истина); // установим все пометки в Истина
// сбросим пометку у первого и второго элементов
СписокКнопок.Получить(0).Пометка = Ложь; 
СписокКнопок.Получить(1).Пометка = Ложь;

// вызов диалога отметки элементов списка
ОтмеченныеЭлементыСписка = Ждать СписокКнопок.ОтметитьЭлементыАсинх();

Если ОтмеченныеЭлементыСписка=Неопределено Тогда
   // нажата кнопка "Отмена" 
   Возврат;
КонецЕсли;

// обход списка по индексу
Для Индекс = 0 По ОтмеченныеЭлементыСписка.Количество()-1 Цикл
   // для получения элемента используем оператор [...]
   ЭлементСписка = ОтмеченныеЭлементыСписка[Индекс];
   Если ЭлементСписка.Пометка Тогда
      Сообщить(ЭлементСписка.Представление);
   КонецЕсли;
КонецЦикла;

// Что будет выведено?

Показать решение

Использование в форме

// опишем реквизит формы с типом "СписокЗначений"
РеквизитСписка = Новый РеквизитФормы("Список", 
   Новый ОписаниеТипов("СписокЗначений"));

// создадим реквизит
Массив = Новый Массив;
Массив.Добавить(РеквизитСписка);
ИзменитьРеквизиты(Массив);

// создадим связанный элемент ПолеВвода
ПолеФормы = Элементы.Добавить("Список", Тип("ПолеФормы"));
ПолеФормы.Вид = ВидПоляФормы.ПолеВвода; // вид поля формы
ПолеФормы.ПутьКДанным = "Список"; // связь с реквизитом формы            

// установим ограничение на тип значений списка - только строка
ЭтаФорма.Список.ТипЗначения = Новый ОписаниеТипов("Строка");

// подготовим список ограничений 
ДоступныеЗначения = Новый СписокЗначений;
ДоступныеЗначения.Добавить("УстановитьФлажки", "Установить флажки");
ДоступныеЗначения.Добавить("СнятьФлажки", "Снять флажки");
// установим ограничение на значения списка
ЭтаФорма.Список.ДоступныеЗначения = ДоступныеЗначения;

// добавим в список два элемента, 
// один допустимый, а второй - нет
ЭтаФорма.Список.Добавить("ЗатемнитьФлажки", "Затемнить флажки"); 
ЭтаФорма.Список.Добавить("СнятьФлажки", "Снять флажки"); 

// выгрузим значения в массив
Массив = ЭтаФорма.Список.ВыгрузитьЗначения();
// сообщим массив
ТекстСообщения = СтрСоединить(Массив, ",");
Сообщить(ТекстСообщения);

// Что будет выведено?

Показать решение

Слишком маленькое разрешение экрана.