Top.Mail.Ru

СписокЗначений в 1С 8.3: Практическое применение и примеры кода

Объект СписокЗначений является одной из часто используемых универсальных коллекций в языке 1С:Предприятие. Он предназначен для хранения и обработки упорядоченного набора элементов, каждый из которых состоит из значения и, опционально, его представления. Также, для интерактивной работы в интерфейсе, у списка значений есть еще два свойства — картинка и пометка. В этой статье мы рассмотрим ключевые аспекты работы с этим объектом, от его создания до использования в реальных задачах.

Описание:

Список значений — это не сохраняемый в базе данных объект, который позволяет строить для решения интерфейсных задач динамические наборы значений и манипулировать ими (добавлять, редактировать, удалять элементы, сортировать). Он может быть наполнен значениями любого типа, т.е. в одном списке типы хранимых значений могут быть разными. Одним из примеров использования данного объекта может служить организация выбора конкретного документа из списка возможных документов, сформированного по сложному алгоритму.

Элементы коллекции: ЭлементСпискаЗначений

Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.

Возможно обращение к элементу коллекции посредством оператора […]. В качестве аргумента передается индекс элемента (нумерация с 0).

Свойства:

  
ДоступныеЗначенияПрименяется в случаях, когда требуется ограничить возможность задания значений для элементов списка некоторым подмножеством значений допустимого типа (если для списка установлено описание типа). Неопределено — ограничения отсутствуют. Установка этого свойства влияет на работу диалога редактирования списка значений, элементов управления «Таблица» и «Поле ввода», связанных со списком значений, а также на программное добавление-вставку нового элемента списка значений и установку значений элементам списков.
ТипЗначенияОпределяет тип (см. ОписаниеТипов) для значений, которые могут храниться в элементах данного списка значений.

Методы:

  
Вставить(Индекс, Значение, Представление, Пометка, Картинка)Вставляет новый элемент в список значений на позицию с указанным индексом.
ВыбратьЭлемент(Заголовок, Элемент)Вызывает окно для интерактивного выбора одного из элементов, входящих в список значений. Элемент — элемент, на который следует изначально спозиционировать список значений при интерактивном выборе. Если значением параметра не является элемент списка значений, входящий в данный список, позиционирования не произойдет.
ВыгрузитьЗначения()Создает массив и копирует в него значения элементов списка значений.
Добавить(Значение, Представление, Пометка, Картинка)Добавляет новый элемент в конец списка значений.
ЗагрузитьЗначения(МассивЗначений)Загружает список значений значениями из переданного массива. При этом все прежние элементы списка удаляются.
ЗаполнитьПометки(Пометка)Устанавливает пометку у всех элементов списка значений.
Индекс(Элемент)Получает индекс элемента в списке значений. Если не найдено, то возвращается -1.
Количество()Получает количество элементов списка значений.
НайтиПоЗначению(ИскомоеЗначение)Осуществляет поиск значения элемента списка значений. Если ни один элемент не хранит значения, равного искомому, то возвращается значение Неопределено.
НайтиПоИдентификатору(Идентификатор)Получает элемент списка значений по идентификатору. Если элемент не найден, то возвращается Неопределено.
ОтметитьЭлементы(Заголовок)Устанавливает или снимает (интерактивно) пометки у элементов списка значений. Возвращает Истина, если в диалоге нажата кнопка «ОК», Ложь — в противном случае.
Очистить()Очищает список значений, удаляя из него все элементы.
ПоказатьВыборЭлемента( ОписаниеОповещенияОЗакрытии, Заголовок, Элемент)Вызывает окно для интерактивного выбора одного из элементов, входящих в список значений.
ПоказатьОтметкуЭлементов( ОписаниеОповещенияОЗакрытии, Заголовок)Предназначен для интерактивной установки состояний пометок у элементов списка значений.
Получить(Индекс)Получает значение по индексу. Работает аналогично оператору [].
Сдвинуть(Элемент, Смещение)Сдвигает элемент списка значений на заданное количество позиций вперед или назад.
Скопировать()Создает копию списка значений.
СортироватьПоЗначению(Направление)Сортирует список значений в порядке возрастания или убывания хранимых элементами значений. См. пример ниже.
СортироватьПоПредставлению( Направление)Сортирует список значений по возрастанию или по убыванию в алфавитном порядке представлений входящих в состав списка значений элементов. См. пример ниже.
Удалить(Элемент)Удаляет элемент из списка значений, где Элемент — индекс удаляемого элемента, либо сам элемент.

Конструкторы:

  
Новый СписокЗначений 

Как работать со списком значений программно? Примеры кода

Создание и заполнение СпискаЗначений

Основная задача списка значений в 1С — хранить данные. Создается объект стандартным образом через конструктор Новый. Заполнить его можно несколькими способами. Самый простой — последовательное добавление элементов методом Добавить().

Этот метод имеет два параметра:

  • Значение — обязательный параметр, содержащий добавляемое значение любого типа.

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

Рассмотрим пример простого заполнения:

// Как создать новый пустой список значений в 1С 8.3
МоиЗадачи = Новый СписокЗначений;

// Как добавить элементы в список значений в 1С 8.3
МоиЗадачи.Добавить("ВыполнитьПроверку", "Проверить отчетность");
МоиЗадачи.Добавить("ПодготовитьДанные", "Сформировать данные для выгрузки");
МоиЗадачи.Добавить(Перечисления.СтатусыЗадач.ВРаботе, "Задачи в работе");

В данном примере мы добавили три элемента. Последний элемент использует значение из перечисления, но для пользователя будет отображаться понятная строка «Задачи в работе». Если представление не указано, система использует стандартное представление для типа значения.

Перебор элементов списка значений

Перебрать элементы списка можно стандартным циклом Для каждого … Из …. При таком переборе мы получаем доступ к объекту типа ЭлементСпискаЗначений, у которого есть свойства Значение, Представление, Пометка и Картинка.

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

Поиск и получение элементов списка значений в 1С 8.3

Для поиска по значению конкретного элемента в списке используется метод НайтиПоЗначению(). Он возвращает найденный элемент (ЭлементСпискаЗначений) или Неопределено, если элемент с таким значением отсутствует.

НайденныйЭлемент = МоиЗадачи.НайтиПоЗначению("ПодготовитьДанные");

Если НайденныйЭлемент <> Неопределено Тогда
    Сообщить("Найдена задача: " + НайденныйЭлемент.Представление);
Иначе
    Сообщить("Задача не найдена.");
КонецЕсли;

Помимо поиска, можно обращаться к элементам по их индексу (нумерация начинается с 0). Для этого используется метод Получить() или синтаксис с квадратными скобками.

// Получение первого элемента списка значений в 1С 8.3
ПервыйЭлемент = МоиЗадачи[0]; 
Сообщить(ПервыйЭлемент.Представление); // Выведет "Проверить отчетность"

Сортировка списка значений

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

СписокСотрудников = Новый СписокЗначений;
СписокСотрудников.Добавить(115, "Иванов П.С.");
СписокСотрудников.Добавить(34, "Петров А.И.");
СписокСотрудников.Добавить(201, "Сидоров В.В.");

// Сортировка по значению (табельному номеру) по возрастанию
СписокСотрудников.СортироватьПоЗначению(); // По умолчанию НаправлениеСортировки.ПоВозрастанию
// Результат: 34, 115, 201

// Сортировка по представлению (ФИО) по возрастанию
СписокСотрудников.СортироватьПоПредставлению();
// Результат: Иванов П.С., Петров А.И., Сидоров В.В.

Вставка и удаление элементов списка значений в 1С 8.3

Элементы можно не только добавлять в конец, но и вставлять в определенную позицию или удалять.

// Исходный список
СписокОчереди = Новый СписокЗначений;
СписокОчереди.Добавить("Задача1");
СписокОчереди.Добавить("Задача3");

// Вставим "Задачу2" на вторую позицию (индекс 1)
СписокОчереди.Вставить(1, "Задача2");
// Теперь список: Задача1, Задача2, Задача3

// Удалим "Задачу1"
ЭлементДляУдаления = СписокОчереди.НайтиПоЗначению("Задача1");
Если ЭлементДляУдаления <> Неопределено Тогда
    СписокОчереди.Удалить(ЭлементДляУдаления);
КонецЕсли;
// Теперь список: Задача2, Задача3

Перемещение элементов и получение информации

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

Оригинал = Новый СписокЗначений;
Оригинал.Добавить(1);
Оригинал.Добавить(2);

// Как скопировать список значений
Копия = Оригинал.Скопировать();

// Удалить элемент из списка значений
Копия.Удалить(Копия[0]);

// Проверим оба списка
// В "Копии" остался один элемент: 2
// В "Оригинале" осталось два элемента: 1, 2

// Полная очистка списка значений
Оригинал.Очистить();
Сообщить(Оригинал.Количество()); // Выведет 0

Копирование списка значений, очистка и удаление

Присваивание (=) не создает новый список, а лишь копирует ссылку на существующий. Для создания полностью независимой копии используется метод Скопировать().

Оригинал = Новый СписокЗначений;
Оригинал.Добавить(1);
Оригинал.Добавить(2);

// Создание независимой копии
Копия = Оригинал.Скопировать();

// Удалим элемент из копии
Копия.Удалить(Копия[0]);

// Проверим оба списка
// В "Копии" остался один элемент: 2
// В "Оригинале" осталось два элемента: 1, 2

// Полная очистка списка
Оригинал.Очистить();
Сообщить(Оригинал.Количество()); // Выведет 0

Как выгрузить из списка, и загрузить значения в список?

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

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

// Теперь МассивЗначений - это массив, содержащий:
// "ВыполнитьПроверку", "ПодготовитьДанные", Перечисления.СтатусыЗадач.ВРаботе
// Обратная операция — загрузка значений из массива в список — выполняется методом `ЗагрузитьЗначения()`.
НовыйСписок = Новый СписокЗначений;
НовыйСписок.ЗагрузитьЗначения(МассивЗначений);

Заключение

СписокЗначений в 1С:Предприятие предоставляет гибкие методы для управления динамическими наборами данных, от простого добавления и поиска до сортировки и выгрузки. Освоение этих методов позволяет эффективно строить интерфейсы и обрабатывать данные в приложениях, минимизируя ручной код.

Сэкономь часы на дебаге 1C!

Скачай PDF с топ-11 ошибок начинающих разработчиков + файл с примерами кода!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *