Рассмотрим распространенную ситуацию в конфигурации «Управление торговлей» редакции 10.3 на обычной платформе: при открытии карточки номенклатуры на закладке «Комплектующие» или при добавлении нового элемента строки в списке динамического просмотра визуально перемешиваются и попадают в произвольные места таблицы. При этом клик по шапке колонки не дает никакого эффекта — сортировка не меняется, а стрелочки направления порядка отсутствуют.
Проанализируем технические причины такого поведения платформы 1С и разберем по шагам, как настроить предсказуемое упорядочивание данных.
Выясним, по какому принципу работает отображение данных в объекте РегистрСведенийСписок. Если в параметрах списка не задана явная сортировка (ни программно через свойство Порядок, ни пользовательским выбором), платформа 1С формирует запрос к системе управления базами данных (СУБД) без инструкции ORDER BY.
В реляционных базах данных (MS SQL Server, PostgreSQL или файловой базе данных) выборка строк без явно указанного порядка сортировки является недетерминированной. Порядок возврата записей в таком случае определяется исключительно внутренними алгоритмами СУБД:
При добавлении новой комплектующей происходит запись в СУБД, физическая структура хранения меняется, и при последующем обновлении списка данные считываются в новом произвольном порядке. Сортировка выглядит случайной, хотя подчиняется технической логике работы конкретной базы данных.
В обычных формах платформы «1С:Предприятие 8» возможность интерактивной сортировки в табличном поле динамического списка (связанного с РегистрСведенийСписок) ограничена. Щелчок по шапке колонки работает только для индексированных полей.
Если для измерений или реквизитов регистра сведений (в данном случае Комплектующая или ХарактеристикаКомплектующей) в конфигураторе не включено свойство индексирования, платформа блокирует возможность интерактивного упорядочивания. В этом случае пользователь не видит стрелочек сортировки и не может изменить порядок вручную.
Разберем основные варианты устранения проблемы в зависимости от ваших задач и прав на изменение конфигурации.
Если требуется предоставить пользователям возможность сортировать список кликом по заголовку таблицы, выполним следующие действия:
КомплектующиеНоменклатуры.Комплектующая) и откроем его палитру свойств.Индексировать в значение Индексировать или Индексировать с доп. упорядочиванием.После выполнения этих настроек платформа автоматически разрешит сортировку по данной колонке в интерфейсе пользователя.
Проанализируем программный способ задания сортировки. В модуле формы справочника Номенклатура (в процедуре ПриОткрытии или при инициализации закладки с комплектующими) необходимо разрешить доступность настройки порядка и задать правило сортировки по умолчанию.
Посмотрим на пример кода 1С:
// Установим доступность сортировки комплектующих по нужным полям
ЭлементыФормы.Комплектующие.НастройкаПорядка.Комплектующая.Доступность = Истина;
ЭлементыФормы.Комплектующие.НастройкаПорядка.ХарактеристикаКомплектующей.Доступность = Истина;
// Зададим явный порядок сортировки списка по наименованию комплектующей
ЭлементыФормы.Комплектующие.Значение.Порядок.Установить("Комплектующая Возр");
Обратите внимание: для работы этого кода соответствующее поле регистра также должно быть проиндексировано в метаданных либо являться измерением регистра.
Если бизнес-логика требует жесткого сохранения последовательности строк (например, с возможностью перемещать строки кнопками «Вверх» и «Вниз»), стандартный РегистрСведенийСписок не подойдет. В такой ситуации применяют вывод данных через ТаблицуЗначений:
ТаблицаЗначений.НомерСтроки или Порядок.РегистрСведенийНаборЗаписей.Таким образом, мы выяснили причины непроизвольного порядка отображения записей и разобрали способы его устранения для обеспечения корректной работы пользователей в программе.