Работа с табличными частями в 1С:Предприятие 8.3 — одна из самых частых задач как для обычных пользователей, так и для разработчиков. Беспорядочные строки в документах, справочниках или отчётах не только усложняют поиск нужной информации, но и увеличивают риск ошибок при обработке данных. К сожалению, стандартный интерфейс платформы не всегда предлагает удобные инструменты для сортировки «из коробки», особенно если речь идёт о сохранении пользовательского порядка или автоматизации процесса.

В этой статье мы разберём 5 способов упорядочить табличную часть — от простых ручных методов до программных решений на встроенном языке. Вы узнаете, как сортировать данные по колонкам, фиксировать порядок строк, использовать механизмы платформы для автоматической сортировки и даже писать собственные алгоритмы для сложных сценариев. Особое внимание уделим сохранению сортировки при повторном открытии формы, что часто становится проблемой для пользователей.

Материал будет полезен как начинающим пользователям , так и опытным разработчикам, которые хотят оптимизировать работу с табличными данными. Все примеры актуальны для последних версий платформы 8.3.20+, но большинство методов работают и в более ранних релизах.

1. Ручная сортировка табличной части в пользовательском режиме

Самый простой способ упорядочить строки — использовать встроенные инструменты платформы. В большинстве форм табличные части поддерживают интерактивную сортировку по колонкам, аналогично работе в Excel или других табличных редакторах.

Чтобы отсортировать данные:

  • 📌 Кликните по заголовку колонки, по которой хотите упорядочить данные. Один клик — сортировка по возрастанию, второй — по убыванию.
  • 🔄 Для многоуровневой сортировки (например, сначала по дате, затем по сумме) зажмите клавишу Shift и кликните по второй колонке.
  • 🔒 Чтобы зафиксировать порядок строк (например, для документа «Реализация товаров»), используйте колонку или Порядок — вручную пронумеруйте строки в нужной последовательности.

Например, в документе «Поступление товаров» порядок строк может сбрасываться при повторном открытии, если не настроено иное.

💡

Если в табличной части нет колонки для ручной нумерации, добавьте её через конфигуратор: перейдите в свойства табличной части и создайте реквизит типа «Число» с именем «Порядок».

⚠️ Внимание: В некоторых конфигурациях (например, 1С:Бухгалтерия 3.0) сортировка по колонкам может быть отключена для отдельных табличных частей из-за особенностей бизнес-логики. В этом случае потребуется программное решение.

2. Сохранение порядка строк с помощью реквизита «Порядок»

Если вам нужно зафиксировать пользовательский порядок строк (например, для печатной формы или экспорта), самый надёжный способ — добавить в табличную часть реквизит типа «Число» и использовать его для сортировки. Этот метод работает во всех конфигурациях на базе 1С:Предприятие 8.3.

Инструкция для разработчиков:

  1. Откройте конфигуратор и найдите объект (документ, справочник), в котором нужно сохранить порядок.
  2. В дереве метаданных выберите табличную часть и добавьте новый реквизит с именем Порядок (тип — «Число», длина — 10).
  3. В модуле формы объекта добавьте обработчик события ПриАктивизацииСтроки, который будет автоматически заполнять поле Порядок:
Процедура ТабличнаяЧастьТоварыПриАктивизацииСтроки(Элемент)

Если НЕ ЗначениеЗаполнено(Элемент.Порядок) Тогда

Элемент.Порядок = ТабличнаяЧастьТовары.Количество() + 1;

КонецЕсли;

КонецПроцедуры

Теперь при добавлении новых строк поле Порядок будет заполняться автоматически. Чтобы отсортировать таблицу по этому полю, используйте метод СортироватьПоКолонке():

ТабличнаяЧастьТовары.СортироватьПоКолонке("Порядок");
Способ Преимущества Недостатки
Реквизит «Порядок» Сохраняется при закрытии формы, работает в любых конфигурациях Требует доработки конфигурации, не подходит для динамической сортировки
Интерактивная сортировка Быстро, не требует изменений в коде Не сохраняется, ограниченная функциональность
Программная сортировка Гибкость, поддержка сложных алгоритмов Требует знаний 1С-программирования
📊 Какой способ сортировки вы используете чаще?
Ручная сортировка по колонкам
Сохранение порядка через реквизит
Программная сортировка
Не сортирую данные

3. Программная сортировка табличной части на встроенном языке

Для сложных сценариев (например, сортировки по нескольким полям или с учётом бизнес-логики) используется программный метод. В 1С 8.3 для этого предусмотрены встроенные функции работы с таблицами значений.

Пример кода для сортировки табличной части документа по колонкам «Номенклатура» и «Количество»:

Процедура СортироватьТабличнуюЧасть()

ТаблицаДляСортировки = ТабличнаяЧастьТовары.Выгрузить();

ТаблицаДляСортировки.Сортировать("Номенклатура Возр, Количество Убыв");

ТабличнаяЧастьТовары.Загрузить(ТаблицаДляСортировки);

КонецПроцедуры

Ключевые моменты:

  • 🔹 Метод Выгрузить() преобразует табличную часть в ТаблицуЗначений, с которой удобно работать программно.
  • 🔹 В параметре Сортировать() указываются имена колонок и направление (Возр/Убыв).
  • 🔹 Для сортировки по нескольким полям перечислите их через запятую.
  • 🔹 Метод Загрузить() применяет изменения обратно к табличной части.

Этот способ подходит для динамической сортировки, когда порядок строк должен меняться в зависимости от условий (например, при изменении фильтров или параметров отчёта).

Как сортировать по вычисляемым полям?

Если нужно отсортировать таблицу по полю, которого нет в табличной части (например, по сумме с учётом скидки), сначала добавьте его в таблицу значений программно:

ТаблицаДляСортировки.Колонки.Добавить("СуммаСоСкидкой");

Для Каждого Строка Из ТаблицаДляСортировки Цикл

Строка.СуммаСоСкидкой = Строка.Сумма * (1 - Строка.Скидка/100);

КонецЦикла;

После этого можно сортировать по новой колонке.

4. Использование механизма «Порядок» в типовых конфигурациях

Многие типовые конфигурации (например, 1С:ERP или 1С:Управление торговлей 11) уже содержат встроенные механизмы для управления порядком строк. Обычно это реализовано через:

  • 📋 Колонку Порядок в табличных частях документов (например, «Товары» в «Реализации»).
  • 🔄 Автоматическое заполнение порядка при добавлении новых строк.
  • 🔒 Сохранение порядка при проведении и повторном открытии документа.

Чтобы проверить, поддерживает ли ваша конфигурация этот механизм:

  1. Откройте документ с табличной частью (например, «Поступление товаров»).
  2. Посмотрите, есть ли в таблице колонка Порядок или № п/п.
  3. Добавьте несколько строк и проверьте, заполняется ли поле автоматически.

Если колонки нет, её можно добавить самостоятельно (см. раздел 2) или использовать альтернативные методы. В некоторых конфигурациях (например, 1С:Бухгалтерия 3.0) порядок строк в документах сохраняется автоматически без дополнительных реквизитов.

⚠️ Внимание: В конфигурациях на базе БСП (Библиотека стандартных подсистем) порядок строк может управляться через механизм «Пользовательские настройки». Проверьте модуль формы объекта на наличие обработчиков событий ПриСозданииНаСервере или ПриЧтенииНаСервере, где может быть реализована логика сортировки.

5. Сортировка табличной части в отчётах и обработках

При работе с отчётами или внешними обработками часто требуется упорядочить данные перед выводом. Здесь используются те же принципы, что и для документов, но с учётом особенностей Схемы компоновки данных (СКД).

Пример сортировки таблицы в отчёте:

  1. Откройте схему компоновки данных в конфигураторе.
  2. В настройках набора данных найдите раздел Порядок.
  3. Добавьте поля для сортировки и укажите направление (По возрастанию/По убыванию).

Для программной сортировки в обработке используйте методы ТаблицаЗначений:

Процедура КомандаСортировать()

ТаблицаДанных = ЭлементыФормы.ТаблицаТоваров.Выгрузить();

ТаблицаДанных.Сортировать("Наименование, Количество Убыв");

ЭлементыФормы.ТаблицаТоваров.Загрузить(ТаблицаДанных);

КонецПроцедуры

Особенности сортировки в отчётах:

  • 📊 В СКД можно настроить многоуровневую сортировку с группировкой.
  • 🔍 Для динамической сортировки (например, по выбору пользователя) используйте параметры отчёта.
  • 📌 В внешних обработках сортировка часто применяется перед экспортом данных в Excel или PDF.

Добавить все необходимые поля в таблицу|Проверить типы данных (число, строка, дата)|Настроить сортировку по ключевым полям|Удалить дублирующиеся строки (если нужно)|Проверить результат перед выводом-->

6. Автоматическая сортировка при загрузке данных

Если табличная часть заполняется данными из внешнего источника (например, при обмене с сайтом или загрузке из Excel), порядок строк может быть хаотичным. Чтобы автоматически сортировать данные при загрузке, используйте обработчик события ПослеЗаписи или ПриЧтенииНаСервере.

Пример кода для автоматической сортировки после загрузки:

Процедура ПослеЗаписи(Отказ)

Если НЕ ЗначениеЗаполнено(Объект.Товары) Тогда

Возврат;

КонецЕсли;

ТаблицаТоваров = Объект.Товары.Выгрузить();

ТаблицаТоваров.Сортировать("Номенклатура.Наименование Возр");

Объект.Товары.Загрузить(ТаблицаТоваров);

КонецПроцедуры

Где это применимо:

  • 📥 При импорте данных из Excel или XML.
  • 🔄 При обмене данными между базами (например, через Универсальный формат обмена).
  • 📋 При заполнении табличной части по умолчанию (например, подбор номенклатуры в документ).

Для оптимизации производительности при работе с большими объёмами данных используйте индексированные поля в запросах или сортируйте данные непосредственно в источнике (например, в SQL-запросе при обмене с внешней базой).

💡

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

7. Решение типичных проблем с сортировкой

При работе с сортировкой табличных частей пользователи и разработчики сталкиваются с типичными ошибками. Рассмотрим самые распространённые и способы их решения.

Проблема Причина Решение
Сортировка не сохраняется после закрытия формы Отсутствует реквизит для хранения порядка Добавьте поле «Порядок» и настройте автоматическое заполнение
Не работает сортировка по колонке Колонка не включена в настройки таблицы или заблокирована Проверьте свойства колонки в конфигураторе (Разрешить сортировку)
Медленная сортировка больших таблиц Отсутствуют индексы или оптимизация кода Используйте ИндексироватьПо для ключевых полей или сортируйте данные в запросе
Сортировка игнорирует регистр или пробелы Стандартное сравнение строк в 1С Используйте функцию СтрСравнить() с параметром НечувствительноКРегистру = Ложь

Если сортировка работает некорректно, проверьте:

  1. Типы данных в колонках (например, сортировка чисел и строк даёт разные результаты).
  2. Наличие NULL-значений, которые могут влиять на порядок.
  3. Права доступа пользователя (в некоторых конфигурациях сортировка может быть ограничена ролями).
⚠️ Внимание: В конфигурациях с включённым механизмом Управляемые блокировки сортировка табличных частей в транзакциях может приводить к конфликтам. В этом случае используйте ПоместитьВременныеДанные() для работы с копией таблицы.

Часто задаваемые вопросы

Как отключить сортировку по колонке в пользовательском режиме?

Чтобы запретить пользователям сортировать табличную часть по определённой колонке, откройте конфигуратор, найдите форму объекта и в свойствах колонки снимите флаг Разрешить сортировку. Если флага нет, проверьте настройки табличного поля в целом — иногда сортировка управляется на уровне всего элемента формы.

Можно ли сохранить порядок строк при экспорте в Excel?

Да, если порядок строк зафиксирован (например, через реквизит Порядок или ручную нумерацию). При экспорте используйте метод ЗаписатьТаблицу() с параметром ПорядокКолонок, чтобы сохранить последовательность. Пример:

ТаблицаДляЭкспорта = ТабличнаяЧасть.Выгрузить();

ТаблицаДляЭкспорта.Сортировать("Порядок");

Экспорт.ЗаписатьТаблицу(ТаблицаДляЭкспорта);

Почему сортировка по дате работает некорректно?

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

Таблица.Сортировать("НачалоДня(ДатаДокумента) Возр");

Также проверьте формат хранения даты в базе — иногда проблемы возникают из-за несовпадения региональных настроек.

Как сортировать табличную часть по нескольким полям с разным приоритетом?

В методе Сортировать() перечислите поля через запятую в порядке убывания приоритета. Например, для сортировки сначала по номенклатуре, затем по количеству (по убыванию), а потом по цене:

Таблица.Сортировать("Номенклатура.Наименование Возр, Количество Убыв, Цена Возр");

Для сложных условий используйте временные колонки с вычисляемыми значениями.

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

Да, для этого в модуле формы добавьте обработчик события ПриОткрытии и вызовите сортировку программно:

Процедура ПриОткрытии()

ТабличнаяЧастьТовары.СортироватьПоКолонке("Номенклатура");

КонецПроцедуры

Если нужно сохранить пользовательские настройки, используйте механизм ПользовательскиеНастройкиФормы.