Почему ЗУП обрезает табельный номер в печатных формах и как это исправить?

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

При работе в программе «1С:Зарплата и Управление Персоналом» (ЗУП) пользователи нередко сталкиваются с неоднозначным поведением системы при генерации печатных форм кадровых документов, таких как приказ о приеме на работу (Т-1). Проблема проявляется специфически: если табельный номер сотрудника имеет простой формат (например, «1-А»), он отображается корректно. Но как только цифровой индекс становится двузначным (например, «10-А» или «11-Б»), система автоматически «отсекает» цифры, оставляя в документе только буквенный суффикс.

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

Суть проблемы: логика восприятия номера системой

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

  1. Префикс информационной базы (РИБ): исключает дублирование кодов при обмене данными между узлами.
  2. Префикс организации: помогает визуально разграничивать документы разных юридических лиц.
  3. Пользовательский префикс: произвольные символы, добавляемые вручную (например, индексы обособленных подразделений или филиалов).

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

Анализ программного кода

За вывод табельного номера на печать в современных конфигурациях отвечает общий модуль ПрефиксацияОбъектовКлиентСервер и его экспортная функция ТабельныйНомерНаПечать.

Внутренняя логика функции выглядит так:


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

КонецФункции

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

  1. Строка номера.
  2. Удаление лидирующих нулей (Истина).
  3. Удаление пользовательских префиксов (Истина).

Именно третья установка приводит к тому, что номер «10-А» распознается некорректно.

Механика парсинга: почему «10-А» обрезается?

Алгоритм ищет в строке стандартные разделители (дефис или слэш). Поскольку системный префикс в 1С обычно состоит из двух знаков, строка «10-А» воспринимается так: «10» — это префикс, «-» — разделитель, а «А» — значимая часть. В результате «префикс» удаляется.

В случае с «1-А» перед дефисом стоит лишь один символ, что не совпадает с паттерном системного префикса, поэтому алгоритм оставляет строку нетронутой. Для корректной работы требуется внесение правок в логику обработки номеров.

Решение для локальной базы (изменение кода)

Если ваша база допускает внесение изменений (снята с поддержки или используется возможность редактирования), достаточно скорректировать работу общего модуля.

Инструкция по исправлению:

  1. Запустите Конфигуратор.
  2. Перейдите в модуль ПрефиксацияОбъектовКлиентСервер.
  3. Найдите функцию ТабельныйНомерНаПечать.
  4. Установите третий параметр в значение Ложь.

Код после правки:


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

КонецФункции

Это позволит сохранить целостность номеров формата «10-А» и «11-Б» при выводе на печать.

Решение для облака (1С:Фреш) и типовых конфигураций

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

Вариант 1: Внешняя печатная форма (рекомендуется)

Этот способ универсален и не мешает обновлению программы.

  1. Подготовьте внешнюю обработку с макетом приказа.
  2. В коде формирования макета замените вызов стандартной функции на прямое обращение к коду сотрудника.

// Вместо: ОбластьМакета.Параметры.ТабельныйНомер = ТабельныйНомерНаПечать(Выборка.Сотрудник.Код);
// Используйте:
ОбластьМакета.Параметры.ТабельныйНомер = Выборка.Сотрудник.Код; 

Добавьте готовую форму через раздел «Дополнительные отчеты и обработки». В качестве основы для кадровых документов можно использовать набор внешних печатных форм кадровых приказов для ЗУП 3.1.

Вариант 2: Смена формата нумерации

Можно изменить способ записи номера, чтобы «обмануть» парсер. Попробуйте заменить дефис на пробел («10 А») или нижнее подчеркивание («10_А»). Часто система перестает считать первую часть префиксом при использовании пробела, что позволяет избежать обрезки без программирования.

Заключение и рекомендации

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

Для тех, кто уже столкнулся с проблемой «обрезанных» номеров в ЗУП 3.1, оптимальным решением станет либо точечная правка модуля (для локальных баз), либо установка специализированного расширения или внешней печатной формы (для облачных сервисов).

← На главную