Почему не проставляется номер документа в печатных формах кадровых приказов и как это исправить

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

При работе в конфигурации 1С:Зарплата и управление персоналом 3.1 часто возникает ситуация, когда бухгалтеры или кадровики решают вести нумерацию документов вручную. Это может быть связано с переходом из другой системы, специфическими требованиями делопроизводства или просто личным удобством. Однако после перехода на ручной ввод номеров пользователи замечают неприятную деталь: в печатных формах (Т-1, Т-5, Т-8 и других) поле с номером документа остается пустым или содержит некорректные данные. Рассмотрим, почему это происходит и как вернуть номера на место.

Выясняем причину: как 1С обрабатывает номер документа

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

Проанализируем работу основной функции, отвечающей за этот процесс. В большинстве типовых конфигураций, включая ЗУП 3.1, за это отвечает общий модуль ПрефиксацияОбъектовКлиентСервер и его метод НомерНаПечать. Проблема заключается в том, что этот алгоритм жестко завязан на стандартную структуру номера: [Префикс]-[Номер]. Если пользователь вводит номер вручную и нарушает эту структуру (например, убирает дефис, добавляет свои буквы в середину или использует нестандартные символы вроде знака дроби /), функция может не справиться с поиском значащей части. В результате на печать передается пустая строка.

Способ 1. Использование стандартных настроек программы

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

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

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

Способ 2. Поиск и модификация кода в общем модуле

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

Воспользуемся глобальным поиском по конфигурации (Ctrl+Shift+F) и введем текст НомерНаПечать или ПолучитьНомерНаПечать. Скорее всего, поиск приведет нас в общий модуль ПрефиксацияОбъектовКлиентСервер. Типовой вызов функции в модуле менеджера документа выглядит примерно так:


// Пример вызова функции подготовки номера
ДанныеПечати.НомерДокумента = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Шапка.Номер, Истина, Ложь);

В этой функции первый параметр — это сам номер, второй (УдалятьПрефиксИнформационнойБазы) и третий (УдалятьПрефиксОрганизации) определяют логику очистки. Если бухгалтеры ведут нумерацию произвольно, функция может вернуть пустой результат, так как не найдет ожидаемых разделителей. Чтобы разобраться, как именно функция «режет» ваш номер, можно поставить точку останова в начале метода НомерНаПечать и сформировать печатную форму.

Способ 3. Особенности печати через СКД и общие модули

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

Посмотрим на общие модули, имеющие в названии ЗарплатаКадрыОтчеты. В них часто встречаются процедуры типа ПоместитьДанныеДляПечати.... Если номер не выводится, причина может крыться в том, что запрос к базе данных или последующая обработка результата запроса в коде СКД некорректно интерпретирует «ручной» номер. Проверьте процедуру ВывестиВДокументРезультатОбластиМакета — именно здесь происходит окончательная сборка табличного документа, и можно увидеть, какие значения попадают в параметры макета.

Рекомендация: Использование расширений конфигурации

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

  1. Создадим новое расширение конфигурации.
  2. Добавим в него общий модуль ПрефиксацияОбъектовКлиентСервер.
  3. Используя аннотацию &Вместо, переопределим функцию НомерНаПечать.
  4. Внутри функции опишем свою логику. Например, если стандартный алгоритм вернул пустое значение, будем возвращать исходный номер без изменений.

Пример реализации в расширении может выглядеть так:


&Вместо("НомерНаПечать")
Функция Расш1_НомерНаПечать(Номер, УдалятьПрефиксИБ = Ложь, УдалятьПрефиксОрганизации = Ложь)
    // Вызываем стандартную обработку
    Результат = ПродолжитьВызов(Номер, УдалятьПрефиксИБ, УдалятьПрефиксОрганизации);
    
    // Если стандартная функция не смогла обработать номер (вернула пусто)
    // или если номер содержит нестандартные символы, возвращаем как есть
    Если ПустаяСтрока(Результат) И Не ПустаяСтрока(Номер) Тогда
        Возврат СокрЛП(Номер);
    КонецЕсли;
    
    Возврат Результат;
КонецФункции

Проверка макетов печатных форм

Иногда проблема кроется не в коде, а в визуальном представлении. Проанализируем макет табличного документа (MXL). Если бухгалтеры вводят очень длинные номера, они могут просто не помещаться в отведенную ячейку макета. В свойствах ячейки для параметра Номер проверьте свойство Размещение текста. Если там установлено значение «Забивать», то длинный номер может визуально исчезать. Измените это значение на «Переносить» или «Авто», чтобы текст был виден целиком.

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

← На главную