Как настроить порядок отображения записей в регистре сведений 1С?

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

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

Выясним причину стандартного поведения платформы

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

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

Вариант 1. Добавление числового реквизита «Порядок»

Разберем самый надежный способ ручного или автоматического управления порядком строк:

  1. В конфигураторе открываем регистр сведений и добавляем новый реквизит Порядок с типом Число (например, длина 5, точность 0).
  2. Для реквизита устанавливаем свойство Индексировать, чтобы СУБД могла эффективно выполнять сортировку.
  3. Если порядок задается вручную, пользователь сам вводит нужные номера (1, 2, 3 и т. д.).
  4. При необходимости автоматического присвоения номера в модуле набора записей в событии ПередЗаписью вычисляем следующий порядковый номер:

Для Каждого Запись Из ЭтотОбъект Цикл
    Если Не ЗначениеЗаполнено(Запись.Порядок) Тогда
        Запись.Порядок = ПолучитьМаксимальныйПорядок() + 1;
    КонецЕсли;
КонецЦикла;

Вариант 2. Использование точного времени записи

Посмотрим на решение, при котором пользователь не вводит номера вручную, а система сама фиксирует последовательность ввода:

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

Вариант 3. Настройка сортировки в форме списка

Рассмотрим, как вывести данные в нужной последовательности в интерфейсе пользователя:

  1. В форме списка регистра переходим в настройки динамического списка или табличной части.
  2. В управляемых формах открываем Все действия — Настройка списка — Сортировка и добавляем созданное поле (Порядок или МоментЗаписи).
  3. В обычных формах (ОП) в свойствах элемента управления или через диалог настройки списка устанавливаем порядок по служебному полю.

Альтернативные архитектурные решения

Если бизнес-логика требует строгого сохранения порядка строк (как в табличной части), проанализируем следующие варианты:

← На главную