Примечание
Пример можно посмотреть в демонстрационной базе «Оформление списков», форма списка документа Накладная, команда Сортировка. Это локальная команда этой формы.
Для сортировки динамического списка будем использовать локальную команду формы со следующим текстом (листинг 3.83).
Листинг 3.83. Установка сортировки динамического списка
&НаКлиенте
Процедура Сортировка(Команда)
Сортировка = Список.КомпоновщикНастроек.Настройки.Порядок.Элементы;
Если Сортировка.Количество() = 1 Тогда
Сортировка[0].Использование = Ложь;
ИначеЕсли Сортировка.Количество() > 1 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Уже задано несколько условий сортировки. Команда не выполнена.";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
УсловиеСортировки = Сортировка.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
УсловиеСортировки.Поле = Новый ПолеКомпоновкиДанных("Склад");
УсловиеСортировки.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв;
Список.КомпоновщикНастроек.ЗагрузитьНастройки(Список.КомпоновщикНастроек.Настройки);
КонецПроцедуры
Как правило, динамический список всегда содержит некоторое условие сортировки. Например, список документов платформа стандартно сортирует по дате документа.
Поэтому анализировать имеющиеся условия сортировки мы будем следующим образом. Если условие одно, будем считать, что это условие задано платформой. Мы будем отключать его использование и добавлять собственное условие. Если условий несколько, сообщим об этом пользователю и не будем выполнять никаких действий (листинг 3.84).
Листинг 3.84. Анализ имеющихся условий сортировки
Сортировка = Список.КомпоновщикНастроек.Настройки.Порядок.Элементы;
Если Сортировка.Количество() = 1 Тогда
Сортировка[0].Использование = Ложь;
ИначеЕсли Сортировка.Количество() > 1 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Уже задано несколько условий сортировки. Команда не выполнена.";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
После этого добавляем свое новое условие сортировки (листинг 3.85).
Листинг 3.85. Добавление нового условия сортировки
УсловиеСортировки = Сортировка.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
Поскольку мы собираемся самостоятельно указать, по какому полю сортировать список, мы добавляем «обычный» элемент порядка. Но существует возможность добавить и автоэлемент порядка (Тип("АвтоЭлементПорядкаКомпоновкиДанных")). Тогда платформа самостоятельно, на основе имеющегося описания запроса динамического списка, определит, по каким полям нужно выполнять сортировку.
Итак, после того как новый элемент порядка добавлен, нужно указать поле, по которому будет выполняться сортировка, и направление сортировки.
В нашем случае сортировать будем по полю Склад (листинг 3.86).
Листинг 3.86. Установка поля, по которому будут выполняться сортировки
УсловиеСортировки.Поле = Новый ПолеКомпоновкиДанных("Склад");
А направление сортировки будет по убыванию значения этого поля (листинг 3.87).
Листинг 3.87. Установка направления сортировки
УсловиеСортировки.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв;
В заключение загружаем измененные настройки обратно в компоновщик настроек динамического списка (листинг 3.88).
Листинг 3.88. Загрузка настроек в компоновщик настроек
Список.КомпоновщикНастроек.ЗагрузитьНастройки(Список.КомпоновщикНастроек.Настройки);
Поскольку поле Склад – это ссылочное поле (содержит ссылки на элементы справочника Склады), то сортировка фактически будет выполняться не по самим значениям ссылок, а по их представлениям, то есть по наименованиям складов, которые являются строками.
Запустим конфигурацию в режиме 1С:Предприятие. Откроется список накладных, который стандартно отсортирован платформой по возрастанию даты (рис. 3.105).

Рис. 3.105. Стандартная сортировка списка
ПРИМЕЧАНИЕ
На рис. 3.105 показан список накладных без отбора, который мы программно установили в предыдущем примере. Для чистоты эксперимента мы удалили этот отбор из настроек списка в режиме 1С:Предприятие.
После того как мы выполним команду Сортировка, список будет отсортирован по убыванию наименования склада (рис. 3.106).

Рис. 3.106. Сортировка по полю «Склад»
Если мы откроем настройку списка, то увидим, что существуют два условия сортировки (рис. 3.107).

Рис. 3.107. Сортировка в настройках динамического списка
Первое – это стандартная сортировка по дате, которую мы отключили, но не удалили. А второе – это то самое условие, которое мы добавили из встроенного языка. Пользователь может его отключить или удалить.