Как установить постоянный порядок сортировки записей в динамическом списке на управляемой форме 1С 8.3?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с платформой 1С:Предприятие 8.3 на управляемых формах, мы часто сталкиваемся с необходимостью отображения данных в динамических списках. По умолчанию система может устанавливать порядок сортировки, который не всегда соответствует нашим бизнес-требованиям, например, сортировка по коду вместо наименования. Давайте подробно разберем, как мы можем жестко задать желаемый порядок сортировки для динамического списка, чтобы он всегда отображался так, как нам нужно.

Мы выясним, какие существуют способы настройки сортировки, когда применять каждый из них и каков приоритет этих настроек. Наша цель — обеспечить, чтобы динамический список всегда сортировался по определенному полю, например, по наименованию, а не по каким-либо другим полям по умолчанию.

1. Настройка сортировки через свойства Динамического списка в конфигураторе (рекомендуемый подход)

Это самый простой и часто используемый способ, особенно когда динамический список основан на простой таблице данных (например, справочник, документ, регистр).

Когда применять?

Мы используем этот метод, когда наш динамический список напрямую связан с основным источником данных (например, Справочник.Контрагенты, Документ.РеализацияТоваровУслуг) без сложных запросов Системы Компоновки Данных (СКД) или с простым запросом, который не переопределяет сортировку.

Порядок действий:

  1. Открываем форму в конфигураторе: Переходим в дерево объектов конфигурации, находим нужный объект (например, справочник), открываем его форму списка (обычно с названием ФормаСписка).
  2. Выделяем динамический список: Находим на форме элемент типа "Динамический список", который отображает наши данные. Обычно он имеет имя, похожее на Список или СписокКонтрагентов. Выделяем его.
  3. Переходим к свойствам данных: В окне свойств элемента формы, мы увидим разделы. Нас интересует раздел "Данные". В этом разделе находим свойство "Порядок".
  4. Указываем поле для сортировки: В поле "Порядок" вводим имя поля, по которому мы хотим сортировать список. Например, если мы хотим сортировать справочник контрагентов по наименованию, мы вводим Наименование.
  5. Уточняем направление сортировки (опционально): По умолчанию сортировка будет по возрастанию. Если нам нужна сортировка по убыванию, мы можем добавить ключевое слово Убыв. Например, Наименование Убыв. Для возрастания можно явно указать Возр, но это необязательно.
  6. Сохраняем изменения: После ввода значения, сохраняем изменения в форме и обновляем базу данных.

Пример: Если наш динамический список показывает элементы справочника "Контрагенты" и мы хотим сортировать его по полю "Наименование", мы просто указываем в свойстве "Порядок" значение Наименование. Это приведет к сортировке по наименованию в алфавитном порядке.

Этот подход является наиболее надежным, если мы хотим, чтобы сортировка была постоянной и действовала всегда, когда список открывается.

2. Программное изменение свойства элемента формы ДинамическийСписок.Порядок

Мы также можем попытаться установить порядок сортировки программно, в коде модуля формы. Однако, как показал опыт на форуме, этот метод имеет свои нюансы и не всегда является окончательным решением.

Когда применять?

Этот метод подходит, когда нам нужно установить предлагаемую сортировку, которая может быть изменена пользователем, или когда другие методы сортировки (через СКД или свойства самого списка) не установлены. Важно понимать, что программная установка свойства Элементы.МойДинамическийСписок.Порядок имеет более низкий приоритет по сравнению с сортировкой, заданной в СКД или в свойстве Порядок самого динамического списка в конфигураторе.

Порядок действий:

  1. Открываем модуль формы: В конфигураторе для нашей формы открываем модуль объекта.
  2. Используем обработчик события: Обычно мы устанавливаем порядок сортировки в обработчике события ПриСозданииНаСервере формы.
  3. Задаем свойство "Порядок": Мы обращаемся к элементу формы типа "Динамический список" и устанавливаем его свойство Порядок.

Пример кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Предположим, что наш динамический список имеет имя "СписокКонтрагентов"
    // Устанавливаем желаемый порядок сортировки по наименованию по возрастанию
    Элементы.СписокКонтрагентов.Порядок = "Наименование Возр";
    
    // Если нам нужно сортировать по полю, которое является ссылкой на другой объект,
    // например, по наименованию контрагента в списке документов:
    // Элементы.СписокДокументов.Порядок = "Контрагент.Наименование Возр";
КонецПроцедуры

Важный нюанс: Если в запросе динамического списка (особенно, если он основан на СКД) уже задана сортировка, или если свойство Порядок самого динамического списка в конфигураторе заполнено, то программная установка этого свойства в модуле формы может быть проигнорирована. Мы должны всегда проверять, нет ли более "сильных" настроек сортировки, которые перекрывают наше программное вмешательство. Для интерактивной проверки и изменения параметров элементов управляемых форм без перезапуска конфигуратора подойдёт редактор форм в режиме предприятия.

3. Настройка сортировки в запросе Системы Компоновки Данных (СКД)

Для более сложных динамических списков, основанных на схемах компоновки данных, именно настройки СКД будут определять окончательный порядок сортировки. Это наиболее мощный и высокоприоритетный способ управления сортировкой.

Когда применять?

Мы используем этот подход, когда наш динамический список построен на основе сложного запроса, сформированного с использованием Системы Компоновки Данных (СКД). Это часто встречается в отчетах, списках со сложными условиями или агрегациями.

Порядок действий:

  1. Открываем схему СКД: В конфигураторе, для нашего динамического списка, находим свойство "Схема компоновки данных". Это может быть как встроенная схема (для которой есть кнопка "Открыть"), так и ссылка на отдельный объект конфигурации. Открываем ее.
  2. Переходим на вкладку "Настройки": В окне схемы компоновки данных, переходим на вкладку "Настройки".
  3. Добавляем или изменяем элемент порядка:
    • В секции "Порядок" или "Сортировка" (название может незначительно отличаться в зависимости от версии платформы и типа СКД) мы добавляем новое поле для сортировки или изменяем существующее.
    • Выбираем из списка доступных полей то, по которому хотим сортировать (например, Наименование).
    • Устанавливаем направление сортировки (Возрастание/Убывание).
  4. Применяем настройки: Сохраняем изменения в схеме СКД и, если необходимо, в форме.

Пример: Если наш динамический список основан на СКД, которая объединяет данные из нескольких таблиц, и мы хотим, чтобы результат всегда сортировался по полю Поставщик.Наименование, мы добавляем это поле в настройки порядка СКД. Это гарантирует, что список будет отсортирован именно так, независимо от других настроек.

Сортировка, заданная в СКД, имеет наивысший приоритет и перекрывает все другие настройки сортировки для данного динамического списка.

Взаимодействие и приоритет настроек сортировки

Для эффективного управления сортировкой динамических списков крайне важно понимать, как различные настройки взаимодействуют друг с другом и какой из них обладает наивысшим приоритетом. Мы проанализировали три основных метода, и теперь выясним их иерархию:

  1. Сортировка, заданная в схеме компоновки данных (СКД): Этот метод имеет наивысший приоритет. Если в СКД, на которой базируется динамический список, явно указаны поля и направления сортировки, то именно эти настройки будут использоваться. Все остальные попытки изменить сортировку будут проигнорированы или перекрыты. Мы всегда должны начинать проверку именно с СКД, если сталкиваемся с тем, что сортировка не работает так, как мы ожидаем.
  2. Свойство "Порядок" динамического списка в конфигураторе: Этот метод имеет средний приоритет. Он работает, если СКД не устанавливает свою собственную сортировку. Если наш список основан на стандартном запросе к таблице (например, Справочник.Контрагенты) или на простом запросе без указания ORDER BY, то значение этого свойства будет применено. Это удобный и надежный способ для большинства типовых случаев.
  3. Программное изменение свойства Элементы.МойДинамическийСписок.Порядок в модуле формы: Этот метод имеет наименьший приоритет. Он сработает только в том случае, если ни в СКД, ни в свойстве "Порядок" самого динамического списка в конфигураторе не задана сортировка. Мы можем использовать его для динамической, пользовательской или временной сортировки, но всегда должны помнить о его низком приоритете. Если мы видим, что программная установка порядка не дает результата, это почти всегда означает, что существует более высокоприоритетная настройка, которая ее перекрывает.

Резюмируя: если мы хотим добиться гарантированной и постоянной сортировки, в первую очередь мы должны рассмотреть настройку свойства "Порядок" самого динамического списка в конфигураторе. Если этого недостаточно или список очень сложный, мы углубляемся в настройки СКД. Программное изменение порядка — это скорее дополнительный инструмент для специфических сценариев.

Заключение

Мы подробно рассмотрели различные способы установки постоянного порядка сортировки для динамического списка на управляемых формах в 1С 8.3. Теперь мы понимаем, что наиболее надежными и рекомендуемыми подходами являются:

  1. Изменение свойства Порядок самого динамического списка в конфигураторе для простых случаев.
  2. Настройка порядка в схеме компоновки данных (СКД) для сложных списков, основанных на пользовательских запросах.

Важно помнить о приоритетах: СКД перекрывает настройки динамического списка в конфигураторе, а те, в свою очередь, перекрывают программную установку порядка через свойство элемента формы. Используя эти знания, мы можем эффективно управлять отображением данных и обеспечить соответствие динамических списков нашим бизнес-требованиям по сортировке. Для решения других прикладных задач кастомизации таблиц можно изучить методы доработки динамических списков.

← На главную