При работе с независимыми регистрами сведений пользователи часто сталкиваются с тем, что строки отображаются совсем не в том порядке, в котором их вводили. Рассмотрим, почему возникает такое поведение системы и какими способами можно настроить нужный порядок строк для удобства пользователей.
Проанализируем физическую структуру хранения данных. Для независимого непериодического регистра сведений СУБД формирует кластерный индекс на основе комбинации измерений в том порядке, в котором они заданы в конфигураторе. При считывании данных из базы (например, в динамическом списке или табличном поле) СУБД возвращает записи по индексу — например, по алфавиту или ссылке измерения Склад.
Физическая последовательность добавления строк в СУБД не сохраняется. Стандартный тип Дата имеет точность до 1 секунды, поэтому если несколько записей созданы одновременно, сортировка по нему также не гарантирует правильную последовательность.
Разберем самый надежный способ ручного или автоматического управления порядком строк:
Порядок с типом Число (например, длина 5, точность 0).ПередЗаписью вычисляем следующий порядковый номер:
Для Каждого Запись Из ЭтотОбъект Цикл
Если Не ЗначениеЗаполнено(Запись.Порядок) Тогда
Запись.Порядок = ПолучитьМаксимальныйПорядок() + 1;
КонецЕсли;
КонецЦикла;
Посмотрим на решение, при котором пользователь не вводит номера вручную, а система сама фиксирует последовательность ввода:
МоментЗаписи с типом Дата (включая время).ТекущаяУниверсальнаяДатаВМилисекундах() или сохраняем текущую дату сеанса.МоментЗаписи по возрастанию.Рассмотрим, как вывести данные в нужной последовательности в интерфейсе пользователя:
Порядок или МоментЗаписи).Если бизнес-логика требует строгого сохранения порядка строк (как в табличной части), проанализируем следующие варианты:
НомерСтроки, фиксирующее порядок из документа-регистратора.