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

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

1С 8.3 Сортировать список значений или массив (универсальная функция)

Данные > Примеры кода 1С > 1С 8.3 Список значений
Сортировка Массива или Списка значений в 1С 8.3 (от подписчика):
// СортироватьСсылкиПоРеквизитам  —  сортирует массив или список значений (ссылок одного типа) по реквизитам соответствующих объектов
//
// Параметры:
// КоллекцияСсылок — Массив, СписокЗначений — сортируемая коллекция однотипных ссылок
// РеквизитыСортировки — Строка — Список имен реквизитов, разделенных запятыми, по которым производится сортировка коллекции.
//                                  После каждого имени колонки через пробел может быть указано направление сортировки.
//                                  Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию.
//                                  По умолчанию сортировка производится по возрастанию. Порядок указания имен реквизитов определяет порядок сортировки.
//                                  При пустом значении производится автоупорядычивание ссылок.
// Возвращаемое значение:
//      — Массив —
//      — СписокЗначений —
// Пример:
//     СЗ = СортироватьСсылкиПоРеквизитам(СЗ, "Код УБЫВ");

Функция СортироватьСсылкиПоРеквизитам(Знач КоллекцияСсылок, Знач РеквизитыСортировки = Неопределено) Экспорт

   ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ОбщегоНазначения.СортироватьСсылкиПоРеквизитам"
   , "КоллекцияСсылок", КоллекцияСсылок, Новый ОписаниеТипов("Массив, СписокЗначений"));

   Если Не ЗначениеЗаполнено(КоллекцияСсылок) Тогда
       Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
           Возврат Новый Массив;
       ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда
           Возврат Новый СписокЗначений();
       КонецЕсли;
   КонецЕсли;

   Если НЕ ЗначениеЗаполнено(РеквизитыСортировки) Тогда
       РеквизитыСортировки = "Ссылка";
   КонецЕсли;

   Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
       МассивСсылок = КоллекцияСсылок;
   ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда
       МассивСсылок = КоллекцияСсылок.ВыгрузитьЗначения();
   КонецЕсли;

   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
    |    Ссылка КАК Ссылка
    |ИЗ
    |    " + МассивСсылок[0].Метаданные().ПолноеИмя() + " КАК Таблица
    |ГДЕ
    |    Таблица.Ссылка В (&МассивСсылок)
    |УПОРЯДОЧИТЬ ПО
    |    " + РеквизитыСортировки + "
    |АВТОУПОРЯДОЧИВАНИЕ";

   Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
   ОтсортированныеСсылки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);
   Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
       Возврат ОтсортированныеСсылки;
   ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда
       СЗ = Новый СписокЗначений();
       Для Каждого Ссылка Из ОтсортированныеСсылки Цикл
           Для Каждого элСписка Из КоллекцияСсылок Цикл
               Если элСписка.Значение = Ссылка Тогда
                   СЗ.Добавить(элСписка.Значение, элСписка.Представление, элСписка.Пометка, элСписка.Картинка);
               КонецЕсли;
           КонецЦикла;
       КонецЦикла;
       Возврат СЗ;
   КонецЕсли;

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