Функция сортировки массива или списка значений (ссылок одного типа) по реквизитам соответствующих объектов

Sokolin D.A. 52 1 1 3

Например: СЗ = СортироватьСсылкиПоРеквизитам(СЗ, "Дата УБЫВ");

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

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

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

См. также

УдалитьЗначениеИзМассива (БСП)

СкопироватьРекурсивно (БСП)

ПолучитьЗначениеРеквизитаПредмета (БСП)

Упорядочивание (сортировка) массива

УдалитьНепроверяемыеРеквизитыИзМассива (БСП)

СоответствиеПустыхСсылокУказаннымТипамСсылок (БСП)

ЗначениеСвойства

СпискиЗначенийИдентичны (БСП)

Модератору