Сортировка массива в 1С
Существует много алгоритмов сортировки массивов. Все они могут быть адаптированы для любого языка программирования, в том числе и 1С. Но в 1С реализованы и платформенные способы сортировки. Именно о них пойдет речь в статье.
Самым простым и достаточно быстрым способом сортировки массива в 1С является следующий алгоритм:
- Выгрузка исходного массива в список значений;
- Сортировка списка значений с использованием платформенного метода СортироватьПоЗначению () ;
- Выгрузка списка значений обратно в массив.
Рассмотрим пример программного кода, реализующего описанную последовательность действий:
Список = Новый СписокЗначений ; // Подготовительные действия: создание списка значений
Список . ЗагрузитьЗначения ( Массив ); // Этап 1
Список . СортироватьПоЗначению ( НаправлениеСортировки . Возр ); // Этап 2
Массив = Список . ВыгрузитьЗначения (); // Этап 3
Параметр метода СортироватьПоЗначению () может принимать значения:
- НаправлениеСортировки . Возр ;
- НаправлениеСортировки . Убыв .
Таблицу значений также можно использовать для сортировки массива по аналогии с описанным алгоритмом, но это не так удобно, т.к. требуются дополнительные действия:
ТЗ = Новый ТаблицаЗначений ;
ТЗ . Колонки . Добавить ( «ЗначенияМассива» ); // Создание колонки, в которую будет загружен массив
// Создание строк по количеству элементов массива
Для Ном = 1 По Массив . Количество () Цикл
ТЗ . Добавить ();
КонецЦикла;
ТЗ . ЗагрузитьКолонку ( Массив , «ЗначенияМассива » );
ТЗ . Сортировать ( «ЗначенияМассива Возр» );
Массив = ТЗ . ВыгрузитьКолонку ( «ЗначенияМассива» );
Кроме того, необходимо помнить, что таблица значений доступна только на стороне сервера.
Как отсортировать массив в 1с?
Задача сортировки массива на платформе 1С:Предприятие 8 — нетривиальная задача, т.к. отдельного метода, решающего эту задачу во встроенном языке нет.
Решить задачу можно следующим способом: если заранее известно, что потребуется сортировка некоторых элементов данных, можно сразу использовать более подходящую коллекцию — список значений. Он позволяет сортировать элементы не только по значению, но и по представлению. Если такой возможности нет, можно воспользоваться следующим кодом:
//создаем и наполняем массив м = Новый Массив; м.Добавить(1); м.Добавить(5); м.Добавить(4); //приступаем к сортировке сз = Новый СписокЗначений; сз.ЗагрузитьЗначения(м); сз.СортироватьПоЗначению(); //выгружаем результат в массив м = сз.ВыгрузитьЗначения(); //проверяем результат Сообщить(СтрСоединить(м, ",")); //1,4,5
Читайте также:
- Как загрузить массив в список значений
- СписокЗначений.ЗагрузитьЗначения()
- СписокЗначений.ВыгрузитьЗначения()
Поделиться страницей в соц.сетях
Похожие записи
- Как получить массив случайных чисел?
- Как выбрать значение из списка значений?
- Метод ВыбратьИзСписка() в обычной или управляемой форме
- Метод ВыбратьИзМеню() в управляемой или обычной форме
1С 8.3 Сортировать массив — Программист 1С Минск. Автоматизация бизнеса.

ПРИМЕРЫ КОДА 1С
Перейти в раздел примеры кода 1С 8.3:

Сортировка массива с помощью Списка значений в 1С 8.3 (самый простой метод, часто встречается в практике):
Процедура Сортировка_Массива_через_СписокЗначений () Экспорт
МассивДляСортировки = Новый Массив ;
МассивДляСортировки . Добавить ( 7 );
МассивДляСортировки . Добавить ( 2 );
МассивДляСортировки . Добавить ( 4 );
МассивДляСортировки . Добавить ( 9 );
МассивДляСортировки . Добавить ( 14 );
МассивДляСортировки . Добавить ( 1 );
МассивДляСортировки . Добавить ( 0 );
МассивДляСортировки . Добавить ( 6 ); // Массив: (7, 2, 4, 9, 14, 1, 0, 6)
// Загружаем и сортируем элементы Массива в Списке значений
СписокЗначенийДляСортировки = Новый СписокЗначений ;
СписокЗначенийДляСортировки . ЗагрузитьЗначения ( МассивДляСортировки );
СписокЗначенийДляСортировки . СортироватьПоЗначению ();
// Параметр метода СортироватьПоЗначению() может принимать значения:
// * НаправлениеСортировки.Возр
// * НаправлениеСортировки.Убыв
// Выгружаем СписокЗначений обратно в Массив
МассивДляСортировки = СписокЗначенийДляСортировки . ВыгрузитьЗначения ();
Сообщить ( СтрСоединить ( МассивДляСортировки , «,» ));
// 0,1,2,4,6,7,9,14
Сортировка массива через дробление в 1С 8.3 (самый быстрый, рекомендуется, редко встречается в практике):
Процедура Сортировка_Массива_дроблением ( Массив , НижнийПредел , ВерхнийПредел ) Экспорт
НижнийПределМассива = НижнийПредел ;
ВерхнийПределМассива = ВерхнийПредел ;
МассивСПределами = Массив [ Цел (( НижнийПределМассива + ВерхнийПределМассива )/ 2 )];
Пока Истина Цикл
Пока Массив [ НижнийПределМассива ] < МассивСПределами Цикл
НижнийПределМассива = НижнийПределМассива + 1 ;
КонецЦикла;
Пока Массив [ ВерхнийПределМассива ] > МассивСПределами Цикл
ВерхнийПределМассива = ВерхнийПределМассива — 1 ;
КонецЦикла;
Если НижнийПределМассива > ВерхнийПределМассива Тогда
Прервать;
КонецЕсли;
Если НижнийПредел < ВерхнийПределМассива Тогда
Сортировка_Массива_дроблением ( Массив , НижнийПредел , ВерхнийПределМассива );
КонецЕсли;
Если НижнийПределМассива < ВерхнийПредел Тогда
Сортировка_Массива_дроблением ( Массив , НижнийПределМассива , ВерхнийПредел );
КонецЕсли;
Функция БыстраяСортировка ( МассивДляСортировки )
НижняяГраница = 0 ;
ВерхняяГраница = МассивДляСортировки . ВГраница ();
Сортировка_Массива_дроблением ( МассивДляСортировки , НижняяГраница , ВерхняяГраница );
Упорядочивание (сортировка) массива

Сортирует массив через методы объекта «СписокЗначений». Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив. В подавляющем большинстве случаев достаточно использовать метод как процедуру. Метод реализован в виде функции для: — удобства вычисления выражения (результата сортировки) в отладчике — возможности инициализации (получения) копии результата на вызывающей стороне в той же строке, что и сам вызов . Поддерживаемые контексты: клиент, сервер. Метод подходит для размещения в клиент-серверном общем модуле.
// Сортирует массив через методы объекта "СписокЗначений". // Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив. // // Метод не требует смены контекста исполнения кода (подходит для размещения в клиент-серверном общем модуле). // // В подавляющем большинстве случаев достаточно использовать метод как процедуру. // Метод реализован в виде функции для: // - удобства вычисления выражения (результата сортировки) в отладчике // - возможности инициализации (получения) копии результата на вызывающей стороне в той же строке, что и сам вызов // . // // Параметры: // МассивДляУпорядочивания - Массив - Массив элементов, которые необходимо упорядочить (по значению или по представлению). // Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив. // ПорядокСортировки - Строка - "Возр" или "Убыв" (в любом регистре, т.е. регистр не важен). // СортироватьПоЗначению - Булево - Если Ложь, то сортировать по представлению. // // Возвращаемое значение: // Массив - упорядоченный массив. // Функция УпорядочитьМассив(МассивДляУпорядочивания, Знач ПорядокСортировки = "Возр", Знач СортироватьПоЗначению = Истина) Экспорт лПорядокСортировки = НаправлениеСортировки.Возр; Если НРег(ПорядокСортировки) = НРег("Убыв") Тогда лПорядокСортировки = НаправлениеСортировки.Убыв; КонецЕсли; СЗ = Новый СписокЗначений; СЗ.ЗагрузитьЗначения(МассивДляУпорядочивания); Если СортироватьПоЗначению Тогда СЗ.СортироватьПоЗначению(лПорядокСортировки); Иначе СЗ.СортироватьПоПредставлению(лПорядокСортировки); КонецЕсли; МассивДляУпорядочивания = СЗ.ВыгрузитьЗначения(); Возврат МассивДляУпорядочивания; КонецФункции
// Сортирует массив через методы объекта "СписокЗначений". // Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив. // // Метод не требует смены контекста исполнения кода (подходит для размещения в клиент-серверном общем модуле). // // В подавляющем большинстве случаев достаточно использовать метод как процедуру. // Метод реализован в виде функции для: // - удобства вычисления выражения (результата сортировки) в отладчике // - возможности инициализации (получения) копии результата на вызывающей стороне в той же строке, что и сам вызов // . // // Параметры: // МассивДляУпорядочивания - Массив - Массив элементов, которые необходимо упорядочить (по значению или по представлению). // Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив. // ПорядокСортировки - Строка - "Возр" или "Убыв" (в любом регистре, т.е. регистр не важен). // СортироватьПоЗначению - Булево - Если Ложь, то сортировать по представлению. // // Возвращаемое значение: // Массив - упорядоченный массив. // Функция УпорядочитьМассив(МассивДляУпорядочивания, Знач ПорядокСортировки = "Возр", Знач СортироватьПоЗначению = Истина) Экспорт лПорядокСортировки = НаправлениеСортировки.Возр; Если НРег(ПорядокСортировки) = НРег("Убыв") Тогда лПорядокСортировки = НаправлениеСортировки.Убыв; КонецЕсли; СЗ = Новый СписокЗначений; СЗ.ЗагрузитьЗначения(МассивДляУпорядочивания); Если СортироватьПоЗначению Тогда СЗ.СортироватьПоЗначению(лПорядокСортировки); Иначе СЗ.СортироватьПоПредставлению(лПорядокСортировки); КонецЕсли; МассивДляУпорядочивания = СЗ.ВыгрузитьЗначения(); Возврат МассивДляУпорядочивания; КонецФункции
13 13 0 0 1 Скопировано.
ред. 9 месяцев назад
Недостаточно рейтинга для добавления отрицательного голоса. Шаблон будет скрыт из ваших результатов поиска.