Как найти значение в списке значений 1с

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

2017-12-18T22:27:10+00:00Дата Если Массивы Математика Процедуры Строки Циклы
Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие
СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат

ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

См. урок для начинающих по списку значений в 1С
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Полный синтаксис (нажмите, чтобы раскрыть)

Оглавление (нажмите, чтобы раскрыть)

&НаКлиенте
Процедура ВыполнитьКод(Команда)
 
    /// Как создать список значений в 1с 8.3, 8.2
 
    Список = Новый СписокЗначений;
 
    /// Как добавить элемент в список значений в 1с 8.3, 8.2
 
    // параметры метода добавить:
    // - значение
    // - представление
    // - отметка (необ.)
    // - картинка (необ.)
    Список.Добавить(
        1980, // значение элемента
        "Год рождения Васи" // представление        
    );
    Список.Добавить(1985, "Год рождения Юли");
    // значения могут быть разных типов
    Список.Добавить("Полина", "Имя ребёнка");
 
    /// Как вставить элемент в список значений в 1с 8.3, 8.2
 
    // вставляем в позицию №2 (элементы нумеруются с 0)
    // элемент со значением 2010 и представлением
    // "Год рождения их совместной дочки"
    Список.Вставить(2, 2010, "Год рождения их совместной дочки");
 
    /// Как обойти элементы списка значений в 1с 8.3, 8.2
 
    Для Каждого Элемент Из Список Цикл
        Сообщить(
            Элемент.Представление + ": " +
            Строка(Элемент.Значение)
        );
    КонецЦикла;
 
    /// Как очистить список значений в 1с 8.3, 8.2
 
    Список.Очистить();
 
    Список.Добавить("Понедельник");
    Список.Добавить("Вторник");
    Список.Добавить("Среда");
 
    /// Как узнать количество элементов списка значений, а также
    /// получить элемент списка по его индексу в 1с 8.3, 8.2
 
    // нумерация с нуля
    Для Индекс = 0 По Список.Количество() - 1 Цикл
        Сообщить(Список[Индекс]);
    КонецЦикла;
 
    /// Как найти элемент списка по его значению в 1с 8.3, 8.2
 
    ЗначВторник = Список.НайтиПоЗначению("Вторник");
 
    /// Как узнать индекс элемента в списке в 1с 8.3, 8.2
 
    Сообщить(Список.Индекс(ЗначВторник)); // 1, так как нумерация с нуля
 
    /// Как отсортировать список по его значениям в 1с 8.3, 8.2
 
    // было: понедельник, вторник, среда
    Список.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
    // стало: среда, понедельник, вторник
 
    /// Как удалить элемент из списка значений в 1с 8.3, 8.2
 
    // удаляем первый элемент
    // параметр: элемент списка
    // или индекс элемента
    // можно так
    Список.Удалить(Список[0]);
    // или так
    // Список.Удалить(0);
 
    /// Как сдвинуть элемент списка значений в 1с 8.3, 8.2
 
    // сдвигаем нулевой элемент на одну позицию вперёд
    // было: понедельник вторник    
    Список.Сдвинуть(0, 1);
    // стало: вторник понедельник 
 
    /// Как сделать копию списка в 1с 8
    КопияСписка = Список.Скопировать();
 
    Цвета = Новый СписокЗначений;
    Цвета.Добавить("Красный");
    Цвета.Добавить("Зелёный");
    Цвета.Добавить("Синий");
 
    /// Как выгрузить значения списка в массив в 1с 8.3, 8.2
 
    МассивЦветов = Цвета.ВыгрузитьЗначения();
 
    /// Как загрузить значения списка из массива в 1с 8.3, 8.2
 
    Цвета.ЗагрузитьЗначения(МассивЦветов);
 
КонецПроцедуры 
 
/// Как сделать немодальный выбор значения из списка
/// значений в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакСделатьНемодальныйВыборЗначения(Команда)
 
    Цвета = Новый СписокЗначений;
    Цвета.Добавить("Красный");
    Цвета.Добавить("Зелёный");
    Цвета.Добавить("Синий");
 
    // процедура ПослеВыбораЭлемента определена чуть ниже
    ОповещениеПослеВыбораЭлемента = Новый ОписаниеОповещения(
        "ПослеВыбораЭлемента", ЭтотОбъект
    );
 
    Цвета.ПоказатьВыборЭлемента(
        ОповещениеПослеВыбораЭлемента,
        "Выберите любимый цвет"
    );
 
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеВыбораЭлемента(Элемент, Параметры) Экспорт
 
    Если Элемент <> Неопределено Тогда
        Сообщить(Элемент.Значение);
    КонецЕсли;
 
КонецПроцедуры
 
/// Как сделать немодальную отметку значений из списка 
/// значений в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакСделатьНемодальнуюОтметкуЗначений(Команда)
 
    Цвета = Новый СписокЗначений;
    Цвета.Добавить("Красный");
    Цвета.Добавить("Зелёный");
    Цвета.Добавить("Синий");    
 
    // процедура ПослеОтметкиЭлементов определена чуть ниже
    ОповещениеПослеОтметкиЭлементов = Новый ОписаниеОповещения(
        "ПослеОтметкиЭлементов", ЭтотОбъект
    );	
 
    Цвета.ПоказатьОтметкуЭлементов(
        ОповещениеПослеОтметкиЭлементов,
        "Выберите любимые цвета"
    );
 
   // а вот так можно разом установить все отметки
   // списка в определенное значение
   Цвета.ЗаполнитьПометки(Истина);
 
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеОтметкиЭлементов(Элементы, Параметры) Экспорт
 
    Если Элементы <> Неопределено Тогда
        Для Каждого Цвет Из Элементы Цикл
            Если Цвет.Пометка Тогда
                Сообщить(Цвет.Значение);
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
 
КонецПроцедуры
 
/// Как сделать модальный выбор значения из списка в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакСделатьМодальныйВыборЗначения(Команда)
 
    Цвета = Новый СписокЗначений;
    Цвета.Добавить("Красный");
    Цвета.Добавить("Зелёный");
    Цвета.Добавить("Синий");    
 
    ВыбЦвет = Цвета.ВыбратьЭлемент("Выберите любимый цвет");
    Если ВыбЦвет <> Неопределено Тогда
        Сообщить(ВыбЦвет.Значение);
    КонецЕсли;
 
КонецПроцедуры
 
/// Как сделать модальную отметку значений из списка 
/// значений в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакСделатьМодальнуюОтметкуЗначений(Команда)    
 
    Цвета = Новый СписокЗначений;
    Цвета.Добавить("Красный");
    Цвета.Добавить("Зелёный");
    Цвета.Добавить("Синий");
 
    Если Цвета.ОтметитьЭлементы("Выберите любимые цвета") Тогда
        Для Каждого Цвет Из Цвета Цикл
            Если Цвет.Пометка Тогда
                Сообщить(Цвет.Значение);
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
 
   // а вот так можно разом установить все отметки
   // списка в определенное значение
   Цвета.ЗаполнитьПометки(Истина);    
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Список значений в языке 1С 8.3, 8.2 (в примерах)

Дата Если Массивы Математика Процедуры Строки Циклы
Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие
СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат

ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

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

Владимир Милькин

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

Нажмите одну из кнопок, чтобы поделиться:

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

Как создать список значений

СписокМесяцев = Новый СписокЗначений;

Как добавить элементы в список значений

СписокМесяцев.Добавить(“Ян”,”Январь”);

СписокМесяцев.Добавить(“Фв”,”Февраль”);

СписокМесяцев.Добавить(“Мр”,”Март”);

СписокМесяцев.Добавить(“Ап”,”Апрель”);

СписокМесяцев.Добавить(“Ма”,”Май”);

СписокМесяцев.Добавить(“Ин”,”Июнь”);

СписокМесяцев.Добавить(“Ил”,”Июдь”);

СписокМесяцев.Добавить(“Ав”,”Август”);

СписокМесяцев.Добавить(“Сн”,”Сентябрь”);

СписокМесяцев.Добавить(“Ок”,”Октябрь”);

СписокМесяцев.Добавить(“Нб”,”Ноябрь”);

СписокМесяцев.Добавить(“Дк”,”Декабрь”);

Как получить количество элементов в списке значений

КоличествоЭлементов = СписокМесяцев.Количество();

Как найти значение в списке значений

Март = СписокМесяцев.НайтиПоЗначению(“Мр”);

Апрель = СписокМесяцев.НайтиПоИдентификатору(3);

Как получить значение в списке значений (2 способа)

1 способ

Май = СписокМесяцев.Получить(4);

2 способ

Май = СписокМесяцев[4];

Обход всех элементов списка значений

Для каждого ЭлементСписка Из СписокМесяцев Цикл

Значение = ЭлементСписка.Значение;

Представление = ЭлементСписка.Представление;

Картинка = ЭлементСписка.Картинка;

Пометка = ЭлементСписка.Пометка;

Сообщить(“” + Значение + “, ” + Представление + “, ” + Картинка + “, ” + Пометка);

КонецЦикла;

Показать список значений пользователю для выбора одного значения

ПослеВыбора = Новый ОписаниеОповещения(“ПослеВыбораЗначений”,ЭтотОбъект);

СписокМесяцев.ПоказатьВыборЭлемента(ПослеВыбора, “Выбирите месяц отпуска”);

Показать список значений пользователю для отметки нескольких значений

ПослеОтметки = Новый ОписаниеОповещения(“ПослеОтметкиЗначений”,ЭтотОбъект);

СписокМесяцев.ПоказатьОтметкуЭлементов(ПослеОтметки, “Выбирите месяца работы”);

Как удалить элемент из списка значений

СписокМесяцев.Удалить(0);

Как очистить список значений

СписокМесяцев.Очистить();

&НаКлиенте

Процедура ПослеВыбораЗначений(ВыбранныйЭлемент,ДополнительныеПараметры) Экспорт

Если ВыбранныйЭлемент = Неопределено Тогда

Возврат;

КонецЕсли;

Сообщить(“Вы пойдете в отпуск в ” + ВыбранныйЭлемент.Представление);

КонецПроцедуры

&НаКлиенте

Процедура ПослеОтметкиЗначений(Список,ДополнительныеПараметры)Экспорт

Если Список = Неопределено Тогда

Возврат;

КонецЕсли;

МесяцыРаботы = “”;

Для каждого МесяцГода Из Список Цикл

Если МесяцГода.Пометка Тогда

МесяцыРаботы = МесяцыРаботы + ?(МесяцыРаботы <> “”, “, “,””) + МесяцГода.Представление;

КонецЕсли;

КонецЦикла;

Сообщить(“Вы будете работать в ” + МесяцыРаботы);

КонецПроцедуры

Шпаргалка по массиву

Шпаргалка по структуре

Шпаргалка по соответствию

Шпаргалка по списку значений

Шпаргалка по таблице значений

Шпаргалка по дереву значений

Обработка с универсальными коллекциями

  • АКТУАЛЬНЫЕ РЕЛИЗЫ 1С
  • ПРИМЕРЫ КОДА НА ПЛАТФОРМЕ 1С
Работа со списком значений в 1С 8.x
  • Как создать список значений?
  • Как добавить элементы в список значений?
  • Как найти элемент списка значений?
  • Как обратиться к элементу списка значений?
  • Как перебрать элементы списка значений?
  • Как удалить элемент списка значений?

Как создать список значений?

СозданныйСписок = Новый СписокЗначений;          
Как добавить элементы в список значений?

СписокСотрудников.Добавить(ТекущийСотрудник, ТекущийСотрудник.ФИО, , Фото); 

СписокСотрудников.Вставить(Инд, ТекущийСотрудник, ТекущийСотрудник.ФИО, , Фото);           
Как найти элемент списка значений?

ЭлементСписка = СписокСотрудников.НайтиПоЗначению(ИскомыйСотрудник); 
Если ЭлементСписка <> Неопределено Тогда 
	Сообщить(СписокСотрудников.Индекс(ЭлементСписка)); 
КонецЕсли;          
Как обратиться к элементу списка значений?

ЭлементСписка = СписокСотрудников[Инд]; 

ЭлементСписка = СписокСотрудников.Получить(Инд);

Сотрудник = ЭлементСписка.Значение; 
Представление = ЭлементСписка.Представление; 
Пометка = ЭлементСписка.Пометка; 
Картинка = ЭлементСписка.Картинка;            
Как перебрать элементы списка значений?

Для Каждого ЭлементСписка Из СписокСотрудников Цикл 
	Сообщить(ЭлементСписка.Значение); 
КонецЦикла; 

СтаршийИндекс = СписокСотрудников.Количество() - 1; 
Для Сч = 0 по СтаршийИндекс Цикл 
	Сообщить(СписокСотрудников[Сч].Значение); 
КонецЦикла;          
Как удалить элемент списка значений?

СписокСотрудников.Удалить(0);
Индекс = СписокОбъектов.Количество() - 1; 
Пока Индекс >= 0 Цикл 
	Если ТипЗнч(СписокОбъектов[Индекс].Значение) = Тип("Число") Тогда 
		СписокОбъектов.Удалить(Индекс); 
	КонецЕсли; 
	Индекс = Индекс - 1; 
КонецЦикла;          

Задайте вопрос программисту 1С

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

Элемент списка значений

Каждый элемент списка является программным объектом ЭлементСпискаЗначений встроенного языка и содержит следующие свойства:

  • Значение (Произвольный тип) — хранимое значение произвольного типа
  • Представление (Строка) — представление элемента списка для пользователя
  • Пометка (Булево) — значение пометки элемента в списке
  • Картинка (Картинка) — картинка элемента списка для пользователя

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

Создание пустого списка значений выполняется с помощью оператора Новый:

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

Для добавления элементов в список значений используется одноименный метод СписокЗначений.Добавить():

сз.Добавить(10);
сз.Добавить(НачалоДня(ТекущаяДата()), "Сегодня");

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

сз[0].Значение = 10;
сз[1].Значение = НачалоДня(ТекущаяДата());
сз[1].Представление = "Сегодня";

Так и справа: в выражениях и в качестве параметров процедур и функций:

Сообщить("сз[0] = " + сз[0].Значение);

Границы списка значений

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

Давайте рассмотрим распространенные операции со списком значений.

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

Для перебора (обхода) всех элементов списка значений обычно используется оператор цикла Для:

Для Инд = 1 По сз.Количество() Цикл
    Сообщить("сз[" + Инд + "] = " + сз[Инд-1].Представление);
КонецЦикла;

Либо оператор цикла Для Каждого:

Для Каждого Элт Из сз Цикл
    Сообщить("сз[" + сз.Индекс(Элт) + "] = " + Элт.Представление);
КонецЦикла;

Второй способ больше подходит для ситуации, когда нужно только последовательно перебрать все значения списка. Его использование повышает «читабельность кода».

Поиск в списке значений

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

НайдЭлт = сз.НайтиПоЗначению(10);
Если НЕ НайдЭлт = Неопределено Тогда
    Сообщить("сз[" + сз.Индекс(НайдЭлт) + "] = " + НайдЭлт.Представление);
КонецЕсли;

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

Сортировка элементов в списке значений может производиться двумя способами:

  • По значению — реализуется методом СписокЗначений.СортироватьПоЗначению()
  • По представлению — реализуется методом СписокЗначений.СортироватьПоПредставлению()
сз = Новый СписокЗначений
сз.Добавить(1, "Первый");
сз.Добавить(3, "Третий");
сз.Добавить(2, "Второй");
сз.СортироватьПоЗначению();

Методы объекта СписокЗначений

Вставить() Добавляет элемент в произвольное место списка
ВыбратьЭлемент() Открывает диалог выбора элемента списка значений
ВыгрузитьЗначения() Выгружает значения списка в массив
Добавить() Добавляет элемент в конец списка
ЗагрузитьЗначения() Загружает значения из массива
ЗаполнитьПометки() Устанавливает значение пометок элементов списка
Индекс() Возвращает индекс элемента списка значений
Количество() Возвращает количество элементов в списке
НайтиПоЗначению() Выполняет поиск элемента в списке по значению
НайтиПоИдентификатору() Выполняет поиск элемента в списке по его идентификатору
ОтметитьЭлементы() Открывает диалог отметки элементов списка значений
Очистить() Очищает список значений
Получить() Возвращает элемент списка по индексу
Сдвинуть() Сдвигает элемент в списке вверх или вниз
Скопировать() Возвращает копию текущего списка значений
СортироватьПоЗначению() Сортирует элементы списка значений по значению
СортироватьПоПредставлению() Сортирует элементы списка значений по представлению
Удалить() Удаляет указанный элемент из списка

Читайте также:

  1. Как загрузить массив в список значений?
  2. Как выгрузить колонку таблицы значений в список значений?
  3. Ошибка «Значение индекса выходит за границы диапазона»

Поделиться страницей в соц.сетях

Методы 1С СписокЗначений.НайтиПоЗначению(Значение) и 1С СписокЗначений.НайтиПоИдентификатору(Значение) возвращает элемент («ячейку») списка значений, у которого значение (или идентификатор) с нужным значением.

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

Поиск по идентификатору используется в тонком клиенте, при работе со списком значений на сервере. Имея идентификатор элемента списка значений, который расположен на форме (Элементы.ИмяСпискаЗначенийНаФорме.ТекущаяСтрока), Вы можете найти элемент в списке значений, вне зависимости от его текущего индекса и значения.

Поиска по «представлению» значения – в списке значений нет.

В отличие от поиска в массиве, который возвращает индекс найденного элемента или -1, если не найдено, поиск в списке значений возвращает сам элемент списка или НЕОПРЕДЕЛЕНО, если не найдено.

Пример поиска по значению с помощью 1С СписокЗначений.НайтиПоЗначению:
спРазрешенныхСтатусов = Новый СписокЗначений();

//добавляем в пустой список значений – все значения перечисления
//добавляем их «строковые пользовательские наименования» – которые при добавлении значений в конфигураторе записываются в свойствах значения перечисления в свойство «Синоним»
//Перечисления.СтатусыДокументов – это путь к нашему перечислению
//.ПустаяСсылка() – позволяет вызывать методы этого перечисления
//.Метаданные() – метод, который возвращает метаданные в том виде, как они заданы в конфигураторе и позволяет считывать свойства, заданные в метаданных
//.ЗначенияПеречисления – список значений у перечисления, заданные в конфигураторе, каждое значение, полученное через .Метаданные() содержит кроме значения свойства значения, заданные в конфигураторе

Для каждого Знч из Перечисления.СтатусыДокументов.ПустаяСсылка().Метаданные().ЗначенияПеречисления Цикл
     спРазрешенныхСтатусов.Добавить(Знч.Синоним);
КонецЦикла;

Если спРазрешенныхСтатусов.НайтиПоЗначению(СтатусДокументаСтрокой) = Неопределено Тогда //Если поиск вернул Неопределено, то элемент с таким значением не найден

     Сообщить("Ошибка: статус документа '" + СтатусДокументаСтрокой + "' не найден");

КонецЕсли;

Пример поиска по индексу с помощью 1С СписокЗначений.НайтиПоИдентификатору:

Проголосовать за этот пост:

Загрузка…

Posted in Язык 1С

Добавить комментарий