Как изменить макет трудового договора в 1С:ЗУП 3.1: вывод испытательного срока и фильтрация начислений

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

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

Причины возникновения сложностей при редактировании стандартного макета

Проанализируем ситуацию: почему простое добавление параметра в макет не всегда работает? В 1С:ЗУП 3.1 данные для печати подготавливаются в программном коде модуля менеджера документа ПриемНаРаботу. Если алгоритм формирования данных не предусматривает передачу конкретного показателя или делает это с условиями, обычное редактирование макета (MXL или Word) не даст результата.

Основные причины проблем:

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

Решение 1: Использование внешней печатной формы

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

Разберем алгоритм действий:

  1. Рассмотрим возможность поиска готовой внешней печатной формы. Зачастую в составе обновлений конфигурации в папке ExtFiles присутствуют примеры печатных форм.
  2. Если вы нашли подходящую форму, ее можно доработать под свои нужды. В коде обработки найдите функцию СформироватьПечатнуюФорму.
  3. В этой функции мы можем вмешаться в таблицу начислений. Чтобы исключить премии, проанализируем тип начисления и удалим ненужные строки перед выводом в макет.

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

Если вы не хотите поддерживать отдельный файл внешней формы, воспользуемся механизмом расширений. Это позволит перехватить процедуру подготовки данных. Выясним, как это сделать программно.

Нам необходимо создать расширение и добавить в него модуль менеджера документа ПриемНаРаботу. Мы будем использовать аннотацию &После для процедуры, подготавливающей данные для печати (например, ПечатьТрудовогоДоговора).

Пример логики для фильтрации начислений:


&После("КоллекцияДанныхПечатиТрудовогоДоговора")
Процедура Расш_КоллекцияДанныхПечатиТрудовогоДоговора(ДанныеПечати, ОбъектыПечати)
    Для Каждого СтрокаИзДанных Из ДанныеПечати Цикл
        // Допустим, начисления хранятся в таблице внутри структуры ДанныеПечати
        ТаблицаНачислений = СтрокаИзДанных.ОсновныеНачисления; 
        Индекс = ТаблицаНачислений.Количество() - 1;
        Пока Индекс >= 0 Цикл
            ТекущееНачисление = ТаблицаНачислений[Индекс];
            // Проверяем, является ли начисление премией (по наименованию или категории)
            Если Найти(ТекущееНачисление.НачислениеНаименование, "Премия") > 0 Тогда
                ТаблицаНачислений.Удалить(Индекс);
            КонецЕсли;
            Индекс = Индекс - 1;
        КонецЦикла;
    КонецЦикла;
КонецПроцедуры

Как обеспечить вывод испытательного срока

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

Проанализируем следующие моменты:

  1. Проверка значения: Убедитесь, что в документе «Прием на работу» поле «Испытательный срок» заполнено и значение больше нуля.
  2. Имя параметра: Откройте макет и проверьте, как называется поле. В современных редакциях ЗУП 3.1 часто используется параметр ИспытательныйСрок. Попробуйте изменить его на СрокИспытания или наоборот, если данные не подтягиваются.
  3. Тип макета: Если вы используете макет в формате Microsoft Word, убедитесь, что параметр заключен в фигурные скобки: {ИспытательныйСрок}. Если макет в формате MXL, проверьте, что в свойствах ячейки установлено «Заполнение: Параметр».

Тонкости настройки раздела об оплате труда

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

Рассмотрим вариант с использованием дополнительных реквизитов:

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

Выбор между MXL и Microsoft Word

Посмотрим, какой формат макета лучше использовать для трудового договора. MXL (табличный документ) проще в редактировании внутри 1С, но сложнее в верстке больших текстовых блоков. Microsoft Word (doc/docx) идеален для длинных юридических текстов, так как автоматически переносит строки и распределяет текст по страницам. Однако работа с параметрами в Word требует более точной настройки в коде. Если вы решите использовать макет Word, помните, что программа передает в него фиксированный набор полей. Если нужного поля (например, суммы оклада без премий) в этом наборе нет, простое добавление текста в скобках в файле Word не поможет — данные не появятся без доработки программного кода в МодулеМенеджера или внешней обработке.

← На главную