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