Сортирует коллекцию в соответствии с указанными правилами сортировки.
Синтаксис
Сортировать(<Колонки>, <ОбъектСравнения>)Полное описание, параметры и ограничения
ДанныеФормыСтруктураСКоллекцией.Сортировать (FormDataStructureAndCollection.Sort)
ДанныеФормыСтруктураСКоллекцией (FormDataStructureAndCollection)
Сортировать (Sort)
Доступен, начиная с версии 8.2.
Синтаксис:
Сортировать(<Колонки>, <ОбъектСравнения>)
Параметры:
<Колонки> (необязательный)
Тип: Строка.
Список имен колонок, разделенных запятыми, по которым производится сортировка таблицы. После каждого имени колонки через пробел может быть указано направление сортировки. Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию. По умолчанию сортировка производится по возрастанию. Порядок указания имен колонок таблицы определяет порядок сортировки. Это означает, что сначала таблица сортируется по колонке, указанной первой. Затем группы строк с одинаковым значением в этой колонке сортируются по колонке, которая указана второй, и так далее.
<ОбъектСравнения> (необязательный)
Тип: Строка, СравнениеЗначений.
Объект для сравнения элементов, либо имя типа объекта для сравнения. Если объект сравнения или имя типа не задано, сравнение выполняется по следующим правилам:
элементы, чьи типы не совпадают, сравниваются по коду типа;
элементы простых типов сравниваются по значению;
элементы остальных типов сравниваются по строковому представлению.
Примечание: объекты для сравнения элементов недоступны на клиенте, поэтому там необходимо задавать имя типа объекта.
Описание:
Сортирует коллекцию в соответствии с указанными правилами сортировки.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Вызов метода выполняет обращение к серверу.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Сохранить идентификатор Книги при сортировке набора
Идентификатор строки модели не равен её позиции. Проверяем собственную Книгу после сортировки и отсутствие заранее несуществующего свойства.
Где и как запускать
Полный модуль управляемой формы своей внешней обработки, ПриСозданииНаСервере.
Подготовка
Используйте отдельную свою конфигурацию УчебнаяКонфигурацияСинтаксиса. В Конфигураторе создайте независимый непериодический регистр сведений УчебныеСтроки. Не используйте существующий рабочий регистр.
Добавьте измерения Номер типа Число (10, 0) и Товар типа Строка (64). Добавьте ресурсы Количество типа Число (10, 0), Сумма типа Число (12, 2). Обновите только свою учебную конфигурацию базы.
Создайте собственную внешнюю обработку с пустой управляемой основной формой. Реквизит УчебныеЗаписи и таблицу вручную не добавляйте: их создаёт код.
Вставьте весь модуль выбранного урока. В свойствах формы назначьте событию ПриСозданииНаСервере одноимённую процедуру. Сохраните EPF и откройте её в своей учебной базе.
Набор создаётся пустым и заполняется только в памяти. В коде нет Прочитать, Записать, транзакций, привилегированного режима, запросов, файлов или сети. Таблица на форме только для просмотра.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Реквизиты = Новый Массив;
Реквизиты.Добавить(Новый РеквизитФормы("УчебныеЗаписи",
Новый ОписаниеТипов("РегистрСведенийНаборЗаписей.УчебныеСтроки")));
ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
Набор = РегистрыСведений.УчебныеСтроки.СоздатьНаборЗаписей();
Для Каждого ИсходнаяСтрока Из СтрРазделить("1|Книга|3|750;2|Ручка|1|50;3|Коробка|2|60", ";") Цикл
Поля = СтрРазделить(ИсходнаяСтрока, "|");
Запись = Набор.Добавить();
Запись.Номер = Число(Поля[0]);
Запись.Товар = Поля[1];
Запись.Количество = Число(Поля[2]);
Запись.Сумма = Число(Поля[3]);
КонецЦикла;
ЭтаФорма.ЗначениеВРеквизитФормы(Набор, "УчебныеЗаписи");
Записи = ЭтаФорма.УчебныеЗаписи;
Если ТипЗнч(Записи) <> Тип("ДанныеФормыСтруктураСКоллекцией") Тогда
ВызватьИсключение "Ожидалась модель набора записей, а не обычная таблица формы";
КонецЕсли;
Сообщить(Записи.Количество() = 3);
Сообщить(Записи.Итог("Сумма") = 860);
Книга = Записи.Получить(0);
Идентификатор = Книга.ПолучитьИдентификатор();
Сообщить(Книга.Товар = "Книга");
Сообщить(Записи.НайтиПоИдентификатору(Идентификатор) = Книга);
Записи.Сортировать("Сумма Возр,Номер Возр");
Сообщить(Записи.Индекс(Книга) = 2);
ПослеСортировки = Записи.НайтиПоИдентификатору(Идентификатор);
Сообщить(ПослеСортировки = Книга);
Сообщить(ПослеСортировки.Сумма = 750);
Сообщить(Записи.Получить(0).Товар = "Ручка");
НайденноеЗначение = "Это значение должно быть заменено";
ЕстьСвойство = Записи.Свойство("ЗаведомоОтсутствующееУчебноеСвойство", НайденноеЗначение);
Сообщить(НЕ ЕстьСвойство);
Сообщить(НайденноеЗначение = Неопределено);
Записи.Удалить(Книга);
Сообщить(Записи.НайтиПоИдентификатору(Идентификатор) = Неопределено);
Сообщить(Записи.Количество() = 2);
Сообщить(Записи.Итог("Сумма") = 110);
Таблица = ЭтаФорма.Элементы.Добавить("ТаблицаУчебныхЗаписей", Тип("ТаблицаФормы"));
Таблица.ПутьКДанным = "УчебныеЗаписи";
Таблица.Заголовок = "Только собственные строки в памяти — регистр не записывается";
Таблица.ТолькоПросмотр = Истина;
Таблица.АвтоВводНезаполненного = Ложь;
Таблица.АвтоВводНовойСтроки = Ложь;
Для Каждого ИмяКолонки Из СтрРазделить("Номер,Товар,Количество,Сумма", ",") Цикл
Поле = ЭтаФорма.Элементы.Добавить("УчебноеПоле" + ИмяКолонки, Тип("ПолеФормы"), Таблица);
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "УчебныеЗаписи." + ИмяКолонки;
Поле.Заголовок = ИмяКолонки;
КонецЦикла;
КонецПроцедурыРазбор по шагам
Получить именно первую Книгу собственного начального набора, сохранить её идентификатор через метод строки модели.
Сортировать по сумме по возрастанию: Ручка 50, Коробка 60, Книга 750. Позиция Книги меняется с 0 на 2, идентификатор сохраняется.
Свойство проверяет ключ структуры модели, а не ищет товар или колонку по значению. На заведомо отсутствующем ключе получаем Ложь и Неопределено.
Удалить только строку Книги из собственной модели. НайтиПоИдентификатору теперь возвращает Неопределено; это не удаление справочника и не запись регистра.
Как проверить результат
Все булевы сообщения Истина. После удаления видны Ручка 50 и Коробка 60, сумма 110.
В реальном обработчике всегда проверяйте результат поиска до чтения его полей: удалённая строка не существует.
Ожидаемый результат
На понятном примере разделены индекс, идентификатор строки и ключ структуры.
На что обратить внимание
НайтиПоИдентификатору не возвращает UUID товара, ключ записи регистра или номер строки базы.
Идентификатор имеет смысл в текущей модели. Не обещается сохранение идентичности после её повторной загрузки.
Сортировка меняет представляемую коллекцию в памяти; порядок хранения записей в регистре не проверяется.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.