1С 8.3 Сортировать список значений или массив (универсальная функция)
Данные > Примеры кода 1С > 1С 8.3 Список значений
Перейти в раздел примеры кода 1С 8.3:
Сортировка Массива или Списка значений в 1С 8.3 (от подписчика):
// СортироватьСсылкиПоРеквизитам — сортирует массив или список значений (ссылок одного типа) по реквизитам соответствующих объектов
//
// Параметры:
// КоллекцияСсылок — Массив, СписокЗначений — сортируемая коллекция однотипных ссылок
// РеквизитыСортировки — Строка — Список имен реквизитов, разделенных запятыми, по которым производится сортировка коллекции.
// После каждого имени колонки через пробел может быть указано направление сортировки.
// Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию.
// По умолчанию сортировка производится по возрастанию. Порядок указания имен реквизитов определяет порядок сортировки.
// При пустом значении производится автоупорядычивание ссылок.
// Возвращаемое значение:
// — Массив —
// — СписокЗначений —
// Пример:
// СЗ = СортироватьСсылкиПоРеквизитам(СЗ, "Код УБЫВ");
Функция СортироватьСсылкиПоРеквизитам(Знач КоллекцияСсылок, Знач РеквизитыСортировки = Неопределено) Экспорт
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ОбщегоНазначения.СортироватьСсылкиПоРеквизитам"
, "КоллекцияСсылок", КоллекцияСсылок, Новый ОписаниеТипов("Массив, СписокЗначений"));
Если Не ЗначениеЗаполнено(КоллекцияСсылок) Тогда
Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
Возврат Новый Массив;
ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда
Возврат Новый СписокЗначений();
КонецЕсли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(РеквизитыСортировки) Тогда
РеквизитыСортировки = "Ссылка";
КонецЕсли;
Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
МассивСсылок = КоллекцияСсылок;
ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда
МассивСсылок = КоллекцияСсылок.ВыгрузитьЗначения();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка КАК Ссылка
|ИЗ
| " + МассивСсылок[0].Метаданные().ПолноеИмя() + " КАК Таблица
|ГДЕ
| Таблица.Ссылка В (&МассивСсылок)
|УПОРЯДОЧИТЬ ПО
| " + РеквизитыСортировки + "
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
ОтсортированныеСсылки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);
Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
Возврат ОтсортированныеСсылки;
ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда
СЗ = Новый СписокЗначений();
Для Каждого Ссылка Из ОтсортированныеСсылки Цикл
Для Каждого элСписка Из КоллекцияСсылок Цикл
Если элСписка.Значение = Ссылка Тогда
СЗ.Добавить(элСписка.Значение, элСписка.Представление, элСписка.Пометка, элСписка.Картинка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат СЗ;
КонецЕсли;
КонецФункции
//
// Параметры:
// КоллекцияСсылок — Массив, СписокЗначений — сортируемая коллекция однотипных ссылок
// РеквизитыСортировки — Строка — Список имен реквизитов, разделенных запятыми, по которым производится сортировка коллекции.
// После каждого имени колонки через пробел может быть указано направление сортировки.
// Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию.
// По умолчанию сортировка производится по возрастанию. Порядок указания имен реквизитов определяет порядок сортировки.
// При пустом значении производится автоупорядычивание ссылок.
// Возвращаемое значение:
// — Массив —
// — СписокЗначений —
// Пример:
// СЗ = СортироватьСсылкиПоРеквизитам(СЗ, "Код УБЫВ");
Функция СортироватьСсылкиПоРеквизитам(Знач КоллекцияСсылок, Знач РеквизитыСортировки = Неопределено) Экспорт
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ОбщегоНазначения.СортироватьСсылкиПоРеквизитам"
, "КоллекцияСсылок", КоллекцияСсылок, Новый ОписаниеТипов("Массив, СписокЗначений"));
Если Не ЗначениеЗаполнено(КоллекцияСсылок) Тогда
Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
Возврат Новый Массив;
ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда
Возврат Новый СписокЗначений();
КонецЕсли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(РеквизитыСортировки) Тогда
РеквизитыСортировки = "Ссылка";
КонецЕсли;
Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
МассивСсылок = КоллекцияСсылок;
ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда
МассивСсылок = КоллекцияСсылок.ВыгрузитьЗначения();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка КАК Ссылка
|ИЗ
| " + МассивСсылок[0].Метаданные().ПолноеИмя() + " КАК Таблица
|ГДЕ
| Таблица.Ссылка В (&МассивСсылок)
|УПОРЯДОЧИТЬ ПО
| " + РеквизитыСортировки + "
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
ОтсортированныеСсылки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);
Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
Возврат ОтсортированныеСсылки;
ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда
СЗ = Новый СписокЗначений();
Для Каждого Ссылка Из ОтсортированныеСсылки Цикл
Для Каждого элСписка Из КоллекцияСсылок Цикл
Если элСписка.Значение = Ссылка Тогда
СЗ.Добавить(элСписка.Значение, элСписка.Представление, элСписка.Пометка, элСписка.Картинка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат СЗ;
КонецЕсли;
КонецФункции
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник