Как найти и изменить логику формирования табельного номера в отчете Т-13 в 1С:ЗУП 3.1?

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

В процессе кастомизации или отладки отчета Табель учета рабочего времени (Т-13) в конфигурации Зарплата и управление персоналом 3.1 программисты часто сталкиваются с вопросом: откуда именно "прилетает" табельный номер? На первый взгляд в макете системы компоновки данных (СКД) может не быть явного поля с таким заголовком, а в коде вывод данных кажется завуалированным. В этой статье мы подробно разберем механику работы этого реквизита, выясним, как СКД преобразует имена полей, и изучим функции программной постобработки.

Поиск поля в Системе компоновки данных (СКД)

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

Разберем, почему в коде или в настройках вы можете видеть идентификатор СотрудникКод вместо привычного Сотрудник.Код. Когда система компоновки данных обрабатывает запрос, содержащий обращение через точку, она автоматически создает алиас (псевдоним) для этого поля. Так как правила именования переменных в 1С запрещают использование спецсимволов (в том числе точки) в именах полей наборов данных, точка заменяется на отсутствие разделителя, и имя поля "схлопывается".

Проанализируем пример формирования псевдонимов на простом запросе:


Выбрать 
    Т1.Ссылка,
    Т1.Код,
    Т1.ВидНоменклатуры.Наименование 
Из 
    Справочник.Номенклатура Как Т1

В результате работы СКД, если мы не укажем псевдонимы вручную, система присвоит полям следующие имена:

  1. Ссылка
  2. Код
  3. ВидНоменклатурыНаименование

По этой же логике в отчете Т-13 поле ДанныеПоСотруднику.СотрудникКод — это и есть значение реквизита Код объекта СправочникСсылка.Сотрудники.

Программное формирование данных во временных таблицах

Рассмотрим более глубокий уровень формирования отчета. В современных версиях ЗУП 3.1 отчет Т-13 не является простым запросом к базе данных. Для его построения используется механизм сбора данных во временные таблицы через программный интерфейс. За это отвечают общие модули, такие как УчетРабочегоВремениРасширенный или ЗарплатаКадрыОтчеты.

Система сначала формирует таблицу ДанныеДляПечати. На этом этапе происходит заполнение поля ТабельныйНомер. Важно понимать, что в справочнике Сотрудники табельный номер хранится в стандартном поле Код. Если вам нужно программно вмешаться в процесс получения номера, следует искать место заполнения структуры ДанныеПоСотруднику.

Обработка префиксов и вывод на печать

Одной из главных проблем при выводе табельного номера является наличие префиксов (префикс организации, префикс информационной базы) и ведущих нулей. Рассмотрим ситуацию: в базе номер сотрудника выглядит как ЦБ-000012, а в печатной форме табеля кадровики хотят видеть просто 12.

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


Функция ТабельныйНомерНаПечать(Знач ТабельныйНомер) Экспорт    
    Возврат ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(ТабельныйНомер, Истина, Истина);    
КонецФункции

Эта функция обращается к универсальному механизму удаления префиксов. Проанализируем параметры функции УдалитьПрефиксыИзНомераОбъекта:

Посмотрим на примеры преобразования:

  1. УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Истина, Истина) вернет "1234".
  2. УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Ложь, Истина) вернет "Ф-1234" (в зависимости от настроек префиксации).

Методологические особенности табельного учета

При работе с табельными номерами важно разделять две сущности: Физическое лицо и Сотрудник. В 1С:ЗУП табельный номер присваивается именно элементу справочника Сотрудники. При повторном приеме одного и того же человека на работу создается новый элемент Сотрудник, которому система автоматически присвоит новый уникальный код.

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

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

  1. Перейдем в раздел Настройки — Управление персоналом.
  2. Найдем пункт Дополнительные настройки состава предприятия.
  3. Там может располагаться флаг Контролировать уникальность табельных номеров.

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

Резюме по поиску решения

Если вам необходимо изменить логику вывода табельного номера в Т-13, выполните следующие шаги:

  1. Проверьте Вычисляемые поля в СКД отчета. Возможно, там уже добавлена логика обработки поля Сотрудник.Код.
  2. Изучите настройки компоновки (вкладка "Наборы данных"), найдите поле СотрудникКод и посмотрите, какой путь к данным для него указан.
  3. Если требуется изменить формат (убрать/добавить нули или префиксы), ищите вызов функции ТабельныйНомерНаПечать в модуле объекта отчета или в общих модулях, отвечающих за заполнение данных для табеля.
  4. Помните, что поле СотрудникКод в выборке — это строковый реквизит. Если вы хотите превратить его в число (чтобы убрать нули без использования функций БСП), можно использовать конструкцию ВЫРАЗИТЬ(Сотрудник.Код КАК ЧИСЛО) в запросе, но будьте осторожны: если в коде встретятся буквы, запрос упадет с ошибкой.

Таким образом, мы выяснили, что табельный номер в отчете — это результат цепочки: Справочник Сотрудники (реквизит Код) -> Запрос/Временная таблица -> Псевдоним СКД -> Программная очистка от префиксов.

← На главную