Почему записи комплектующих номенклатуры отображаются в произвольном порядке и как настроить сортировку в 1С:Управление торговлей 10.3?

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

Рассмотрим распространенную ситуацию в конфигурации «Управление торговлей» редакции 10.3 на обычной платформе: при открытии карточки номенклатуры на закладке «Комплектующие» или при добавлении нового элемента строки в списке динамического просмотра визуально перемешиваются и попадают в произвольные места таблицы. При этом клик по шапке колонки не дает никакого эффекта — сортировка не меняется, а стрелочки направления порядка отсутствуют.

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

Причина произвольного порядка элементов в списке

Выясним, по какому принципу работает отображение данных в объекте РегистрСведенийСписок. Если в параметрах списка не задана явная сортировка (ни программно через свойство Порядок, ни пользовательским выбором), платформа 1С формирует запрос к системе управления базами данных (СУБД) без инструкции ORDER BY.

В реляционных базах данных (MS SQL Server, PostgreSQL или файловой базе данных) выборка строк без явно указанного порядка сортировки является недетерминированной. Порядок возврата записей в таком случае определяется исключительно внутренними алгоритмами СУБД:

  1. Физическим расположением записей на страницах данных в памяти или на диске.
  2. Текущим состоянием индексов и степенью их фрагментации.
  3. Выбранным оптимизатором СУБД планом выполнения запроса.

При добавлении новой комплектующей происходит запись в СУБД, физическая структура хранения меняется, и при последующем обновлении списка данные считываются в новом произвольном порядке. Сортировка выглядит случайной, хотя подчиняется технической логике работы конкретной базы данных.

Почему не работает сортировка по щелчку на заголовок колонки?

В обычных формах платформы «1С:Предприятие 8» возможность интерактивной сортировки в табличном поле динамического списка (связанного с РегистрСведенийСписок) ограничена. Щелчок по шапке колонки работает только для индексированных полей.

Если для измерений или реквизитов регистра сведений (в данном случае Комплектующая или ХарактеристикаКомплектующей) в конфигураторе не включено свойство индексирования, платформа блокирует возможность интерактивного упорядочивания. В этом случае пользователь не видит стрелочек сортировки и не может изменить порядок вручную.

Способы решения и настройки порядка строк

Разберем основные варианты устранения проблемы в зависимости от ваших задач и прав на изменение конфигурации.

Способ 1. Включение индексирования полей в Конфигураторе

Если требуется предоставить пользователям возможность сортировать список кликом по заголовку таблицы, выполним следующие действия:

  1. Откроем конфигурацию в режиме «Конфигуратор».
  2. Перейдем к регистру сведений КомплектующиеНоменклатуры.
  3. Найдем необходимое измерение (например, Комплектующая) и откроем его палитру свойств.
  4. Установим свойство Индексировать в значение Индексировать или Индексировать с доп. упорядочиванием.
  5. Обновим конфигурацию базы данных.

После выполнения этих настроек платформа автоматически разрешит сортировку по данной колонке в интерфейсе пользователя.

Способ 2. Программная установка порядка при открытии формы

Проанализируем программный способ задания сортировки. В модуле формы справочника Номенклатура (в процедуре ПриОткрытии или при инициализации закладки с комплектующими) необходимо разрешить доступность настройки порядка и задать правило сортировки по умолчанию.

Посмотрим на пример кода 1С:


// Установим доступность сортировки комплектующих по нужным полям
ЭлементыФормы.Комплектующие.НастройкаПорядка.Комплектующая.Доступность = Истина;
ЭлементыФормы.Комплектующие.НастройкаПорядка.ХарактеристикаКомплектующей.Доступность = Истина;

// Зададим явный порядок сортировки списка по наименованию комплектующей
ЭлементыФормы.Комплектующие.Значение.Порядок.Установить("Комплектующая Возр");

Обратите внимание: для работы этого кода соответствующее поле регистра также должно быть проиндексировано в метаданных либо являться измерением регистра.

Способ 3. Использование Таблицы Значений вместо динамического списка

Если бизнес-логика требует жесткого сохранения последовательности строк (например, с возможностью перемещать строки кнопками «Вверх» и «Вниз»), стандартный РегистрСведенийСписок не подойдет. В такой ситуации применяют вывод данных через ТаблицуЗначений:

  1. При открытии формы данные из регистра сведений считываются запросом и загружаются в реквизит формы с типом ТаблицаЗначений.
  2. В таблице значений добавляется числовая колонка НомерСтроки или Порядок.
  3. Пользователь редактирует состав и порядок строк непосредственно в таблице значений.
  4. При сохранении формы данные перезаписываются в регистр сведений с помощью объекта РегистрСведенийНаборЗаписей.

Таким образом, мы выяснили причины непроизвольного порядка отображения записей и разобрали способы его устранения для обеспечения корректной работы пользователей в программе.

← На главную