Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 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С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Как создать список значений
СписокМесяцев = Новый СписокЗначений;
Как добавить элементы в список значений
СписокМесяцев.Добавить(“Ян”,”Январь”);
СписокМесяцев.Добавить(“Фв”,”Февраль”);
СписокМесяцев.Добавить(“Мр”,”Март”);
СписокМесяцев.Добавить(“Ап”,”Апрель”);
СписокМесяцев.Добавить(“Ма”,”Май”);
СписокМесяцев.Добавить(“Ин”,”Июнь”);
СписокМесяцев.Добавить(“Ил”,”Июдь”);
СписокМесяцев.Добавить(“Ав”,”Август”);
СписокМесяцев.Добавить(“Сн”,”Сентябрь”);
СписокМесяцев.Добавить(“Ок”,”Октябрь”);
СписокМесяцев.Добавить(“Нб”,”Ноябрь”);
СписокМесяцев.Добавить(“Дк”,”Декабрь”);
Как получить количество элементов в списке значений
КоличествоЭлементов = СписокМесяцев.Количество();
Как найти значение в списке значений
Март = СписокМесяцев.НайтиПоЗначению(“Мр”);
Апрель = СписокМесяцев.НайтиПоИдентификатору(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С СписокЗначений.НайтиПоЗначению(Значение) и 1С СписокЗначений.НайтиПоИдентификатору(Значение) возвращает элемент («ячейку») списка значений, у которого значение (или идентификатор) с нужным значением.
Обратите внимание – идентификатор это не то же самое, что и индекс. Индекс – это порядковый номер (число), которым пронумерованы все ячейки с начала и до конца списка значений. Идентификатор — это уникальный номер (число), который имеет каждая ячейка.
Поиск по идентификатору используется в тонком клиенте, при работе со списком значений на сервере. Имея идентификатор элемента списка значений, который расположен на форме (Элементы.ИмяСпискаЗначенийНаФорме.ТекущаяСтрока), Вы можете найти элемент в списке значений, вне зависимости от его текущего индекса и значения.
Поиска по «представлению» значения – в списке значений нет.
В отличие от поиска в массиве, который возвращает индекс найденного элемента или -1, если не найдено, поиск в списке значений возвращает сам элемент списка или НЕОПРЕДЕЛЕНО, если не найдено.
Пример поиска по значению с помощью 1С СписокЗначений.НайтиПоЗначению:
спРазрешенныхСтатусов = Новый СписокЗначений();
//добавляем в пустой список значений – все значения перечисления
//добавляем их «строковые пользовательские наименования» – которые при добавлении значений в конфигураторе записываются в свойствах значения перечисления в свойство «Синоним»
//Перечисления.СтатусыДокументов – это путь к нашему перечислению
//.ПустаяСсылка() – позволяет вызывать методы этого перечисления
//.Метаданные() – метод, который возвращает метаданные в том виде, как они заданы в конфигураторе и позволяет считывать свойства, заданные в метаданных
//.ЗначенияПеречисления – список значений у перечисления, заданные в конфигураторе, каждое значение, полученное через .Метаданные() содержит кроме значения свойства значения, заданные в конфигураторе
Для каждого Знч из Перечисления.СтатусыДокументов.ПустаяСсылка().Метаданные().ЗначенияПеречисления Цикл
спРазрешенныхСтатусов.Добавить(Знч.Синоним);
КонецЦикла;
Если спРазрешенныхСтатусов.НайтиПоЗначению(СтатусДокументаСтрокой) = Неопределено Тогда //Если поиск вернул Неопределено, то элемент с таким значением не найден
Сообщить("Ошибка: статус документа '" + СтатусДокументаСтрокой + "' не найден");
КонецЕсли;
Пример поиска по индексу с помощью 1С СписокЗначений.НайтиПоИдентификатору:
Проголосовать за этот пост:
Загрузка…
Posted in Язык 1С