Как настроить сортировку сотрудников по табельному номеру в документе Табель в 1С:ERP и 1С:ЗУП?

Пользователь 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием
← На главную

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

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

Причины некорректного поведения сортировки

Посмотрим на ключевые факторы, из-за которых сортировка по табельному номеру в документе может давать сбой:

  1. Строковый тип данных и лексикографическое упорядочивание. Реквизит Код справочника Сотрудники (табельный номер) имеет тип «Строка». Если в информационной базе номера имеют разную длину (например, не содержат ведущих нулей: 1, 2, 10, 100) или содержат литерные префиксы филиалов и организаций, платформа упорядочивает их посимвольно. В результате строка 100 окажется выше, чем 2, а сотрудники с префиксами сгруппируются отдельными блоками.
  2. Ограничения интерактивной сортировки в управляемых формах. Попытка вывести колонку Сотрудник.Код через команду «Еще» — «Изменить форму» и кликнуть по заголовку колонки не дает нужного результата. В табличной части документа реквизитом строки является ссылка на справочник Сотрудники. При интерактивной сортировке платформа 1С упорядочивает строки по основному представлению ссылочного объекта — то есть по ФИО сотрудника, игнорируя значение отображаемого вложенного реквизита.
  3. Механизм программного заполнения документа. При формировании табличной части алгоритм типовой конфигурации выполняет сортировку на сервере в момент нажатия кнопки Заполнить. В коде конфигурации используется служебная таблица значений для позиционирования строк:

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

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

Способ 1. Корректировка приоритетов упорядочивания и перезаполнение документа

Разберем по шагам, как правильно активировать штатный механизм упорядочивания в программах 1С:ERP и 1С:ЗУП:

  1. Перейдем в раздел Настройка (или вкладку «Кадры» — «Настройки и справочники»).
  2. Откроем пункт Настройка упорядочивания списка сотрудников (или «Дополнительные настройки»).
  3. В открывшемся списке полей найдем пункт Таб. номер. Установим напротив него флаг.
  4. С помощью кнопок со стрелками (Переместить вверх) поднимем поле Таб. номер на самую первую строчку в списке. Это гарантирует, что табельный номер получит наивысший приоритет перед остальными критериями (ФИО, подразделение, должность).
  5. Снимем флаги со всех остальных полей, если требуется сортировка исключительно по числовому/строковому коду.
  6. Сохраним настройки по кнопке Записать и закрыть.
  7. Откроем документ Табель, полностью очистим его табличную часть и нажмем кнопку Заполнить. Строки выстроятся согласно обновленным правилам.

Способ 2. Выравнивание и нормализация табельных номеров

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

  1. Откроем справочник Сотрудники и проанализируем колонку Таб. номер.
  2. Проверим наличие невидимых символов (пробелов в начале или конце номера), а также дефисов и буквенных префиксов.
  3. Убедимся, что все номера имеют одинаковую разрядность и дополнены ведущими нулями (например, 0000-00001, 0000-00002, а не 1, 2).
  4. Для массового исправления номеров без ведущих нулей воспользуемся сервисом Групповое изменение реквизитов (раздел «Администрирование» — «Обслуживание» — «Корректировка данных») или специализированной обработкой перенумерации справочников.

Способ 3. Формирование отчета «Табель учета рабочего времени (Т-13)»

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

  1. Перейдем в раздел Зарплата — Отчеты по зарплате.
  2. Откроем отчет Табель учета рабочего времени (Т-13).
  3. Нажмем кнопку Настройки и переключим вид в режим Расширенный.
  4. Перейдем на закладку Поля и сортировки.
  5. В окне Сортировки удалим поле Сотрудник и добавим поле Сотрудник.Код (по возрастанию).
  6. Нажмем Закрыть и сформировать. Отчет выведет всех сотрудников строго по порядку их табельных номеров, независимо от того, в какой последовательности строки записаны в первичном документе Табель.

Способ 4. Программная сортировка с помощью расширения конфигурации

Когда на предприятии учет требует ручной корректировки видов времени непосредственно в документе, перезаполнение по кнопке Заполнить приведет к потере внесенных часов. В такой ситуации для программиста оптимальным решением является добавление расширения с кнопкой сортировки табличной части на форме документа.

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


&НаКлиенте
Процедура ПересортироватьТабельПоТабельномуНомеру(Команда)
    ПересортироватьТабельНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПересортироватьТабельНаСервере()
    Таблица = Объект.ДанныеОВремени.Выгрузить();
    Таблица.Колонки.Добавить("ЧисловойНомер", Новый ОписаниеТипов("Число"));
    
    Для Каждого Стр Из Таблица Цикл
        // Очищаем код от нечисловых символов и преобразуем к числу
        СтрокаКода = Стр.Сотрудник.Код;
        ТолькоЦифры = "";
        Для Индекс = 1 По СтрДлина(СтрокаКода) Цикл
            Символ = Сред(СтрокаКода, Индекс, 1);
            Если СтрНайти("0123456789", Символ) > 0 Тогда
                ТолькоЦифры = ТолькоЦифры + Символ;
            КонецЕсли;
        КонецЦикла;
        Стр.ЧисловойНомер = Число(ТолькоЦифры);
    КонецЦикла;
    
    Таблица.Сортировать("ЧисловойНомер Возр");
    Объект.ДанныеОВремени.Загрузить(Таблица);
КонецПроцедуры

Такой подход позволяет упорядочивать список более чем из 1000 сотрудников в один клик без потери ранее внесенных отметок времени и явок.

← На главную