Почему сортировка по ссылочному полю в Журнале документов 1С идёт по ID и как это исправить

Разбираем, почему Журнал документов в 1С сортирует поставщика по внутреннему ID, а не по наименованию, и как получить нужный порядок. В статье: схема запроса с соединением справочника, настройка динамического списка и правка обработчиков кнопок с проверкой на копии базы.

Сортировка по колонке «Поставщик» в Журнале документов 1С идёт по внутреннему идентификатору потому, что платформа сравнивает значения ссылок, а не строки, которые видит пользователь. Команда ТП.Порядок.Установить("Поставщик Возр, Дата") задаёт порядок по полю таблицы формы. В поле хранится ссылка на элемент справочника, а «ООО Ромашка» вычисляется отдельно как представление. При сравнении ссылок получается порядок, который пользователь воспринимает как сортировку по ID.

Та же ситуация разобрана в обсуждении на buh.ru: кастомная конфигурация 1С:Предприятие 8, Журнал документов, колонка «Поставщик» ссылается на реквизит документа, данные берутся напрямую из документа без запроса. Порядок задаётся вызовами ТП.Порядок.Установить("Поставщик Возр, Дата") и ТП.Порядок.Установить("Поставщик Убыв, Дата"), а при снятии пометок очищается через ТП.Порядок.Очистить().

В журнале может быть всего один документ. Это не отменяет проблему: при росте данных сортировка станет заметной, а проверять её нужно на нескольких поставщиках. Причина в сравнении ссылок. Рабочее решение: вынести наименование поставщика в поле запроса и сортировать по нему. Материал не заменяет официальную документацию 1С: проверяйте поведение на своём релизе и на копии базы.

В чём суть проблемы: сортировка по «Поставщику» выдаёт порядок по ID

Симптом выглядит так: пользователь нажимает сортировку по колонке «Поставщик» и ожидает алфавитный порядок, а получает последовательность, которая не совпадает с наименованиями. Для платформы поле «Поставщик» остаётся ссылкой. Ссылки сравниваются как значения, поэтому порядок соответствует внутренним идентификаторам объектов.

Как выглядит симптом в коде и на форме

В приведённом коде ТП обозначает таблицу формы журнала. Строка "Поставщик Возр, Дата" состоит из имени поля и направления. Платформа находит поле Поставщик в таблице формы и упорядочивает строки по его значению. Для ссылочного реквизита значение — это ссылка, а не текст наименования.

Если КнопкаВОЗР.Пометка Тогда
    ТП.Порядок.Установить("Поставщик Возр, Дата");
ИначеЕсли КнопкаУБЫВ.Пометка Тогда
    ТП.Порядок.Установить("Поставщик Убыв, Дата");
Иначе
    ТП.Порядок.Очистить();
КонецЕсли;

Имена в строке порядка должны совпадать с полями таблицы формы. Если поле есть, платформа применяет порядок без дополнительного запроса к справочнику. Данные в таблицу попадают напрямую из документа, поэтому представление ссылки в упорядочивании не участвует.

Почему 1С сортирует ссылку по ID, а не по наименованию

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

Значение ссылки и её представление: в чём разница

Таблица 1. Если таблица шире экрана, прокрутите её влево или вправо. С клавиатуры: перейдите к таблице клавишей Tab и используйте стрелки.

Что хранится в полеЧто видит пользовательЧто сравнивает платформа
Ссылка на элемент справочника «Поставщики»Наименование «ООО Ромашка»Значение ссылки, внутренний идентификатор

В поле «Поставщик» лежит ссылка на элемент справочника. Это значение, по которому платформа находит объект в базе. Внутренний идентификатор уникален, поэтому сравнение двух ссылок даёт устойчивый, но неочевидный для человека порядок. Наименование «ООО Ромашка» хранится в справочнике отдельно и подставляется при выводе.

Представление вычисляется по данным объекта и в общем случае не лежит в том же поле документа. Поэтому таблица формы, которая получает данные напрямую из документа, не располагает готовой строкой для сортировки. Она сравнивает ссылки. Отсюда и порядок, который выглядит случайным.

У разных ссылочных типов внутреннее представление различается. Справочник, документ и план видов характеристик могут давать разный порядок. Для пользователя это выглядит как «сортировка по ID», хотя точнее говорить о сравнении значений ссылок. Прямого подтверждения того, что порядок задаётся именно UUID, в доступных источниках нет: стандарт 1С для результатов запроса, отображаемых пользователю, предписывает сортировать по полям примитивных типов, а сортировку по ссылочным полям заменять сортировкой по их строковым представлениям, иначе порядок строк для пользователя будет выглядеть случайным (стандарт 1С).

Отдельно стоит учитывать, что система неявно дополняет пользовательское упорядочивание полем Ссылка, чтобы избежать неоднозначности при одинаковых значениях сортируемого поля: например, при упорядочивании справочника по полю Наименование система дополнит упорядочивание полем Ссылка (особенности поведения списков динамического просмотра). Это не то же самое, что упорядочивание по полю, которое выбирает пользователь, но объясняет, почему вторичный ключ по ссылке присутствует в порядке почти всегда.

Миф о том, что в журналах документов сортировка возможна только по простым типам

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

Динамический список с запросом это ограничение обходит. В запросе можно соединить документ со справочником поставщиков, получить наименование отдельным полем и задать порядок по этому полю. Сортировка пойдёт по строке, а не по ссылке. Такой путь требует изменить источник данных формы, зато даёт предсказуемый результат.

Встроенной настройки «сортировать по представлению ссылки» для произвольного поля в таблице формы в общем случае нет. Это практический вывод из модели данных и стандарта 1С об упорядочивании результатов запроса, а не цитата из синтакс-помощника. Проверьте его на своей сборке: версия платформы в обращении указана как «8» без номера релиза.

Как проверить причину на своей конфигурации

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

  1. Добавьте в журнал не менее трёх документов с разными поставщиками. Один документ не покажет порядок.
  2. Включите сортировку по «Поставщику» и выпишите порядок наименований.
  3. Выведите для каждого документа ссылку и её представление. Подойдёт временная колонка формы или отладочное сообщение.
  4. Сравните порядок строк с наименованиями и с идентификаторами. Совпадение с ID подтверждает причину.
Сообщить(Строка(Документ.Поставщик));
Сообщить(Документ.Поставщик.УникальныйИдентификатор());

Метод УникальныйИдентификатор() возвращает UUID ссылки. Если отсортированный список идёт в том же порядке, что и UUID, вы видите сравнение значений ссылок. Если порядок совпадает с наименованиями, ищите другую причину: например, в форме уже выводится поле представления или запрос содержит УПОРЯДОЧИТЬ ПО. Официального описания метода в доступных источниках нет, поэтому проверяйте его поведение на своей версии платформы.

Рабочий подход: сортировка по наименованию через запрос и динамический список

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

Схема запроса с соединением справочника поставщиков

Минимальная схема для одного типа документа:

ВЫБРАТЬ
    Документы.Ссылка КАК Ссылка,
    Документы.Дата КАК Дата,
    Документы.Поставщик КАК Поставщик,
    ЕСТЬNULL(Поставщики.Наименование, "") КАК ПоставщикНаименование
ИЗ
    Документ.МойДокумент КАК Документы
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Поставщики КАК Поставщики
    ПО Документы.Поставщик = Поставщики.Ссылка

Если журнал собирает несколько типов документов, объедините их через ОБЪЕДИНИТЬ ВСЕ и приведите состав полей к одному набору. Поле ПоставщикНаименование должно попасть в список полей динамического списка. Порядок задаётся строкой "ПоставщикНаименование Возр, Дата Возр, Ссылка Возр".

Пустая ссылка на поставщика после левого соединения даёт NULL в наименовании. ЕСТЬNULL(..., "") превращает его в пустую строку, и такие записи встанут в начало возрастающего порядка. Если пустые поставщики нужно увести в конец, добавьте поле-признак и поставьте его первым в порядок. Дубли наименований не ломают сортировку, но делают её неоднозначной, поэтому дата и ссылка нужны как вторичные ключи.

Как переписать обработчики КнопкаВОЗР и КнопкаУБЫВ

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

Если КнопкаВОЗР.Пометка Тогда
    КнопкаУБЫВ.Пометка = Ложь;
    Список.Порядок.Установить("ПоставщикНаименование Возр, Дата Возр, Ссылка Возр");
ИначеЕсли КнопкаУБЫВ.Пометка Тогда
    КнопкаВОЗР.Пометка = Ложь;
    Список.Порядок.Установить("ПоставщикНаименование Убыв, Дата Убыв, Ссылка Убыв");
Иначе
    Список.Порядок.Очистить();
КонецЕсли;

Снимайте пометку с противоположной кнопки, иначе пользователь получит две активные кнопки и конфликтующий порядок. Вызов Очистить() оставьте для состояния без сортировки. Если в вашей форме ТП — это таблица формы, а не динамический список, проверьте доступный способ установки порядка: синтаксис зависит от типа элемента и релиза платформы. Официального описания метода Порядок.Установить для обоих типов элементов в доступных источниках нет; для программной сортировки строк табличной части на управляемой форме порядок строк изменяется методом Сдвинуть() у коллекции данных формы, с сохранением внутренних идентификаторов элементов формы и текущей позиции курсора (разбор на confaster.ru).

Альтернативы, если менять структуру журнала нельзя

Если менять источник данных журнала нельзя, остаются компромиссы.

  • Хранимый реквизит «Наименование поставщика». Заполняйте его при записи документа и сортируйте по нему. Цена: миграция данных и риск рассинхронизации после переименования поставщика. Нужен механизм обновления.
  • Вычисляемое поле представления в форме. Подходит для небольших выборок и визуальной сортировки. При больших объёмах проверяйте производительность и устойчивость порядка.
  • Сортировка на клиенте после получения данных. Даёт быстрый результат в простом сценарии, но не заменяет серверную сортировку и может конфликтовать с постраничным выводом.

Эти варианты не дают той же точности, что поле наименования в запросе. Хранимый реквизит требует дисциплины при изменении справочника, вычисляемое поле зависит от загруженных строк, клиентская сортировка ограничена объёмом данных. Выбирайте по нагрузке и требованиям к стабильности.

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

Риски, совместимость и что проверить перед доработкой

Чек-лист перед доработкой:

  • Работайте на копии базы и фиксируйте релиз платформы 1С:Предприятие 8 и версию кастомной конфигурации.
  • Проверьте сортировку на нескольких поставщиках, включая пустые ссылки и совпадающие наименования.
  • Проверьте обе кнопки, снятие пометок и очистку порядка.
  • Убедитесь, что отборы, права доступа и состав колонок журнала не изменились.
  • Оцените производительность запроса с соединением на рабочем объёме данных.
  • Проведите регрессионную проверку формы и сверьте результат с поведением на вашем релизе: исходное обращение не содержит номера релиза и проверенного объяснения от разработчиков (обсуждение).

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

Похожие статьи

Работа в выходной день: как рассчитать двойную оплату оклада и премии в 2026 году

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

Безвозмездная передача недвижимости муниципалитету: когда НДС платить не нужно

Минфин в письме от 10.08.2026 № 03-07-11/68954 подтвердил: при безвозмездной передаче муниципалитету объектов ЖКХ, дорог, электросетей и газовых сетей НДС не начисляется. Разбираем перечень объектов, требования к получателю, документы и отражение операции в 1С: Бухгалтерии.

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

Правительство РФ уточнило меры поддержки бизнеса, пострадавшего от атак на объекты Wildberries и Ozon: теперь учитывается ущерб от РСЗО и любых ракет, а продавцам двух площадок считают совокупный ущерб. Разбираем порог 5% годового дохода, исключение для компаний, зарегистрированных с 1 декабря 2025 года, и новый срок перечней в ФНС - 5-е число. Внутри есть шаблон справки о доле ущерба и план действий для бухгалтера.