Почему в СЗВ-ТД не заполняются номера приказов в 1С:ЗУП 3.1 и как это исправить?

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

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

Причина №1: Некорректная обработка префиксов и сложных номеров

Одной из наиболее частых причин «исчезновения» номера является работа алгоритма удаления префиксов. В системе 1С по умолчанию включена или может быть настроена опция "Удалять префиксы организации и информационной базы из номеров кадровых приказов". Проанализируем, как это влияет на результат. Если номер вашего приказа содержит сложные символы, например, несколько дефисов (ЗПК-00071к-12), стандартная библиотека префиксации может дать сбой.

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

В системе за вывод номера отвечает экспортная функция НомерНаПечать. В актуальных релизах 1С:ЗУП 3.1 её логика выглядит следующим образом:


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

Из кода видно, что если включена настройка удаления префиксов, вызывается метод ПрефиксацияОбъектовКлиентСервер.НомерНаПечать. Именно этот метод может превратить сложный номер в пустую строку или «тыкву», если в номере присутствуют лишние разделители.

Причина №2: Использование поля «Номер для печати»

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

  1. В документах «Прием на работу», «Кадровый перевод», «Увольнение» на вкладке «Дополнительно» (или рядом с основным номером в новых версиях интерфейса) появилось поле для ручного ввода номера.
  2. Если это поле заполнено, программа берет данные напрямую из него, минуя все функции очистки префиксов. Это имеет абсолютный приоритет.
  3. Если поле пустое, система пытается программно «очистить» основной номер документа, что и приводит к ошибке, если номер имеет нестандартный формат.

Важный нюанс: если вы заполнили поле «Номер для печати» уже после того, как создали и провели документ СЗВ-ТД, изменения в отчете не появятся сами собой. Мероприятия в СЗВ-ТД фиксируются в специальном регистре сведений МероприятияТрудовойДеятельности в момент проведения кадрового приказа.

Способ решения №1: Настройка системы

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

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

После этого программа перестанет преобразовывать номера, и они будут попадать в СЗВ-ТД в том виде, в котором они записаны в поле Номер (включая лидирующие нули и префиксы). Однако помните, что для ПФР (СФР) наличие системных префиксов типа «ЦБ» может быть нежелательным.

Способ решения №2: Массовое заполнение поля «Номер для печати»

Если документов много и ручная правка каждого приказа невозможна, проанализируем ситуацию с точки зрения автоматизации. Мы можем воспользоваться обработкой «Групповое изменение реквизитов»:

  1. Откройте «Групповое изменение реквизитов» (через Администрирование — Обслуживание — Корректировка данных).
  2. Выберите нужный тип документа (например, Прием на работу).
  3. В списке реквизитов найдите «Номер для печати».
  4. В колонке «Новое значение» можно прописать формулу или просто скопировать текущие номера.
  5. После выполнения обработки необходимо перепровести документы, чтобы данные обновились в регистре мероприятий.

Способ решения №3: Обновление данных в СЗВ-ТД

Часто пользователи исправляют данные в приказе, но в СЗВ-ТД номер всё равно остается пустым. Выясним причину: документ СЗВ-ТД «запоминает» состояние записи на момент своего заполнения. Чтобы обновить сведения, выполните следующие действия:

  1. Зайдите в документ СЗВ-ТД.
  2. Нажмите правой кнопкой мыши на строке с сотрудником.
  3. Выберите команду «Обновить». Программа заново перечитает данные из регистра МероприятияТрудовойДеятельности.
  4. Если это не помогло, попробуйте перезаполнить документ целиком или временно отменить проведение кадрового приказа и провести его снова.

Использование расширений (для программистов)

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

Проанализируем пример кода для расширения:


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

Такой подход гарантирует, что в СЗВ-ТД никогда не попадет «пустота», если в самом документе-основании номер физически присутствует. Это избавляет от необходимости ручного контроля поля "Номер для печати" в каждом новом документе.

Резюме

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

← На главную