1С 8.3 Список значений - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

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

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

   
// Добавляем элемент в список значений
    // Элемент списка значений может хранить в себе следующие данные:
    //  - значение (любого типа),
    //  - представление (тип строка),
    //  - пометка(тип булево),
    //  - картинка (тип картинка).
    //Значения характеризуются позицией в списке (индексом).

   
СЗ.Добавить("Минск", "Столица Беларуси"); // значение,   представление,   отметка (необ.),  картинка (необ.)
   
СЗ.Добавить("Москва", "Столица России");

   
СЗ.Добавить("1067", "Год основания Минска"); // значения в списке могут быть разных типов
   
СЗ.Добавить("1147", "Год основания Москвы");

   
// Вставляем элемент в список значений в позицию №2 (элементы нумеруются с 0).
    // Элемент со значением "Нур-Султан" и представлением "Столица Казахстана"
   
СЗ.Вставить(2, "Нур-Султан", "Столица Казахстана");

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

   
// Очистим список значений - удалим все строки
   
СЗ.Очистить();

   
СЗ.Добавить("Август");
   
СЗ.Добавить("Сентябрь");
   
СЗ.Добавить("Октябрь");

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

   
// Находим элемент списка по его значению
   
ЗначСентябрь = СЗ.НайтиПоЗначению("Сентябрь");

   
// Узнаем индекс элемента в списке
   
Сообщить(СЗ.Индекс(ЗначСентябрь)); // 1,   так как нумерация с нуля

    // Сортируем список по его значениям
    // было: Август, Сентябрь, Октябрь
   
СЗ.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
   
// стало: Сентябрь, Октябрь, Август

    /// Удаляем элемент из списка значений
   
СЗ.Удалить(СЗ[0]);// удаляем первый элемент,  параметр: элемент списка
   
СЗ.Удалить(0);// удаляем по индексу элемента

    //Выборочно удаляем элемент из списка значений по индексу - этот вариант замечательно подходит для Цикла
   
Индекс = СЗ.Количество() - 1;
    Пока
Индекс >= 0 Цикл
        Если
ТипЗнч(СЗ[Индекс].Значение) = Тип("Число") Тогда
           
СЗ.Удалить(Индекс);
        КонецЕсли;
       
Индекс = Индекс - 1;
    КонецЦикла;

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

   
// Сдвигаем нулевой элемент списка значений на одну позицию вперёд
    // было: Сентябрь, Октябрь
   
СЗ.Сдвинуть(0,   1);
   
// стало: Октябрь, Сентябрь

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

   
Металлы = Новый СписокЗначений;
   
Металлы.Добавить("Золото");
   
Металлы.Добавить("Серебро");
   
Металлы.Добавить("Медь");

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

   
// Загружаем значения списка значений из массива
   
Металлы.ЗагрузитьЗначения(МассивМеталлов);
Немодальный выбор значения из списка значений в 1С 8.3:
&НаКлиенте
Процедура НемодальныйВыборЗначения(Команда)

   
Металлы = Новый СписокЗначений;
   
Металлы.Добавить("Золото");
   
Металлы.Добавить("Серебро");
   
Металлы.Добавить("Медь");

   
// Процедура ПослеВыбораЭлемента определена чуть ниже
   
ОповещениеПослеВыбораЭлемента = Новый ОписаниеОповещения("ПослеВыбораЭлемента"ЭтотОбъект);

   
Металлы.ПоказатьВыборЭлемента(ОповещениеПослеВыбораЭлемента, "Выберите металл");

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

&НаКлиенте
Процедура ПослеВыбораЭлемента(ЭлементПараметры)

    Если
Элемент <> Неопределено Тогда
       
Сообщить(Элемент.Значение);
    КонецЕсли;

КонецПроцедуры
Примечание: Модальные окна 1С - блокируют работу с другими окнами 1С до своего закрытия. Обычно с их помощью реализуется диалог, требующий от пользователя принятия некоторого решения. Соответственно немодальные окна могут параллельно отрываться и работать одновременно с другими окнами
Модальный выбор значения из списка значений в 1С 8.3:
&НаКлиенте
Процедура МодальныйВыборЗначения(Команда)

   
Металлы = Новый СписокЗначений;
   
Металлы.Добавить("Золото");
   
Металлы.Добавить("Серебро");
   
Металлы.Добавить("Медь");

   
ВыбМеталл = Металлы.ВыбратьЭлемент("Выберите  металл");
    Если
ВыбМеталл <> Неопределено Тогда
       
Сообщить(ВыбМеталл.Значение);
    КонецЕсли;

КонецПроцедуры
Модальная отметка значений из списка значений в 1С 8.3:
&НаКлиенте
Процедура МодальнаяОтметкаЗначений(Команда)

   
Металлы = Новый СписокЗначений;
   
Металлы.Добавить("Золото");
   
Металлы.Добавить("Серебро");
   
Металлы.Добавить("Медь");

    Если
Металлы.ОтметитьЭлементы("Выберите металлы") Тогда
        Для Каждого
Металл Из Металлы Цикл
            Если
Металл.Пометка Тогда
               
Сообщить(Металл.Значение);
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;

  
// можно также разом установить все отметки списка в определенное значение
  
Металлы.ЗаполнитьПометки(Истина);

КонецПроцедуры
Выбор из Списка Значений в Таблице Значений на УФ в 1С 8.3:
&НаКлиенте
Процедура ТЗОбъектыЗакрепленияСчетНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

   
СтандартнаяОбработка=Ложь;

   
СписокСчет = Новый СписокЗначений;
   
МассивВсехФайлов = НайтиФайлы("D:\SUBK""*.*");
    Для Каждого
Файл Из МассивВсехФайлов Цикл

       
ИмяОдногоИзФайлов=СокрЛП(Файл.Имя);
       
ИмяФайлаДо_="";//Например 41_1
       
Для Счетчик = 1 По СтрДлина(ИмяОдногоИзФайлов) Цикл

           
ПолученныйСимвол=Сред(ИмяОдногоИзФайлов,Счетчик,1); //Сред(<Строка>, <НачальныйНомер>, <ЧислоСимволов>)

           
Если ПолученныйСимвол<>"_" Тогда
               
ИмяФайлаДо_=ИмяФайлаДо_+ПолученныйСимвол;
            Иначе
               
НашеИмя=ИмяФайлаДо_;
               
СписокСчет.Добавить(НашеИмя, НашеИмя); // значение элемента  // представление

               
ИмяФайлаДо_="";
            Конецесли;

        КонецЦикла;

    КонецЦикла;

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

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

&НаКлиенте
Процедура ТЗОбъектыЗакрепленияСчетОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

   
СтандартнаяОбработка = Ложь;

   
Строка = Элементы.ТЗОбъектыЗакрепления.ТекущиеДанные;
   
// Счет - реквизит ТаблицыЗначений с типом Строка
   
Строка.Счет = ВыбранноеЗначение// в этом случаи значение сразу будет сохраняться/обновляться в поле
    //у реквизита Счет (ТЗОбъектыЗакрепления.Счет) галка "РежимВыбораИзСписка" = Ложь
    //у реквизита Счет (ТЗОбъектыЗакрепления.Счет) галка "КнопкаВыбора" = Истина

КонецПроцедуры
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 18.03.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому