При работе в программе «1С:Зарплата и Управление Персоналом» (ЗУП) пользователи нередко сталкиваются с неоднозначным поведением системы при генерации печатных форм кадровых документов, таких как приказ о приеме на работу (Т-1). Проблема проявляется специфически: если табельный номер сотрудника имеет простой формат (например, «1-А»), он отображается корректно. Но как только цифровой индекс становится двузначным (например, «10-А» или «11-Б»), система автоматически «отсекает» цифры, оставляя в документе только буквенный суффикс.
В данном материале мы детально разберем техническую природу этой ошибки, изучим алгоритмы платформы, отвечающие за форматирование номеров в БСП, и предложим проверенные способы решения проблемы как для локальных информационных баз, так и для облачных сервисов (SaaS).
Чтобы понять, почему программа по-разному обрабатывает номера «1-А» и «10-А», нужно заглянуть в механизмы префиксации, реализованные в Библиотеке Стандартных Подсистем. В среде 1С префиксы выполняют важные функции:
При подготовке номера к печати система пытается «очистить» его, удаляя технические нули и служебные коды, чтобы приказ соответствовал правилам делопроизводства. Однако встроенный алгоритм очистки в определенных условиях срабатывает избыточно.
За вывод табельного номера на печать в современных конфигурациях отвечает общий модуль ПрефиксацияОбъектовКлиентСервер и его экспортная функция ТабельныйНомерНаПечать.
Внутренняя логика функции выглядит так:
Функция ТабельныйНомерНаПечать(Знач ТабельныйНомер) Экспорт
// Стандартная обработка номера для печатных форм
Возврат ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(ТабельныйНомер, Истина, Истина);
КонецФункции
Проблема кроется в параметрах вызова функции УдалитьПрефиксыИзНомераОбъекта:
Истина).Истина).Именно третья установка приводит к тому, что номер «10-А» распознается некорректно.
Алгоритм ищет в строке стандартные разделители (дефис или слэш). Поскольку системный префикс в 1С обычно состоит из двух знаков, строка «10-А» воспринимается так: «10» — это префикс, «-» — разделитель, а «А» — значимая часть. В результате «префикс» удаляется.
В случае с «1-А» перед дефисом стоит лишь один символ, что не совпадает с паттерном системного префикса, поэтому алгоритм оставляет строку нетронутой. Для корректной работы требуется внесение правок в логику обработки номеров.
Если ваша база допускает внесение изменений (снята с поддержки или используется возможность редактирования), достаточно скорректировать работу общего модуля.
Инструкция по исправлению:
ПрефиксацияОбъектовКлиентСервер.ТабельныйНомерНаПечать.Ложь.Код после правки:
Функция ТабельныйНомерНаПечать(Знач ТабельныйНомер) Экспорт
// Отключаем удаление пользовательских префиксов (Ложь)
Возврат ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(ТабельныйНомер, Истина, Ложь);
КонецФункции
Это позволит сохранить целостность номеров формата «10-А» и «11-Б» при выводе на печать.
В облачных решениях прямое редактирование кода невозможно. В этом случае наиболее эффективным методом будет использование внешних печатных форм. Для корректировки вывода данных без изменения типовой конфигурации подойдёт решение для постобработки печатных форм на базе БСП.
Этот способ универсален и не мешает обновлению программы.
// Вместо: ОбластьМакета.Параметры.ТабельныйНомер = ТабельныйНомерНаПечать(Выборка.Сотрудник.Код);
// Используйте:
ОбластьМакета.Параметры.ТабельныйНомер = Выборка.Сотрудник.Код;
Добавьте готовую форму через раздел «Дополнительные отчеты и обработки». В качестве основы для кадровых документов можно использовать набор внешних печатных форм кадровых приказов для ЗУП 3.1.
Можно изменить способ записи номера, чтобы «обмануть» парсер. Попробуйте заменить дефис на пробел («10 А») или нижнее подчеркивание («10_А»). Часто система перестает считать первую часть префиксом при использовании пробела, что позволяет избежать обрезки без программирования.
Использование букв в табельных номерах — это распространенная практика, однако она может усложнять автоматизацию кадрового учета и сортировку отчетов. Если вы только настраиваете учет, старайтесь придерживаться числовой нумерации фиксированной длины.
Для тех, кто уже столкнулся с проблемой «обрезанных» номеров в ЗУП 3.1, оптимальным решением станет либо точечная правка модуля (для локальных баз), либо установка специализированного расширения или внешней печатной формы (для облачных сервисов).