При работе в конфигурации «Зарплата и управление персоналом, редакция 3.1» часто возникает необходимость кастомизации печатной формы трудового договора. Стандартный механизм редактирования макетов через раздел «Администрирование» позволяет менять текст и оформление, но часто пасует перед задачами изменения логики вывода данных. Рассмотрим, как решить две типичные проблемы: корректное отображение испытательного срока и исключение лишних начислений (например, премий) из пункта об оплате труда.
Проанализируем ситуацию: почему простое добавление параметра в макет не всегда работает? В 1С:ЗУП 3.1 данные для печати подготавливаются в программном коде модуля менеджера документа ПриемНаРаботу. Если алгоритм формирования данных не предусматривает передачу конкретного показателя или делает это с условиями, обычное редактирование макета (MXL или Word) не даст результата.
Основные причины проблем:
ИспытательныйСрок и СрокИспытания. Если в коде заполнено одно имя, а в макете указано другое, поле останется пустым.ПлановыеНачисления и собирает все записи, действующие на дату приема. Программа «не знает», что вы хотите видеть в договоре только оклад, и автоматически выводит все назначенные документом надбавки и премии.Это наиболее надежный способ, позволяющий не снимать конфигурацию с поддержки. Внешняя печатная форма — это отдельный файл (обработка), который подключается к программе и заменяет или дополняет стандартную печать.
Разберем алгоритм действий:
ExtFiles присутствуют примеры печатных форм.СформироватьПечатнуюФорму.Если вы не хотите поддерживать отдельный файл внешней формы, воспользуемся механизмом расширений. Это позволит перехватить процедуру подготовки данных. Выясним, как это сделать программно.
Нам необходимо создать расширение и добавить в него модуль менеджера документа ПриемНаРаботу. Мы будем использовать аннотацию &После для процедуры, подготавливающей данные для печати (например, ПечатьТрудовогоДоговора).
Пример логики для фильтрации начислений:
&После("КоллекцияДанныхПечатиТрудовогоДоговора")
Процедура Расш_КоллекцияДанныхПечатиТрудовогоДоговора(ДанныеПечати, ОбъектыПечати)
Для Каждого СтрокаИзДанных Из ДанныеПечати Цикл
// Допустим, начисления хранятся в таблице внутри структуры ДанныеПечати
ТаблицаНачислений = СтрокаИзДанных.ОсновныеНачисления;
Индекс = ТаблицаНачислений.Количество() - 1;
Пока Индекс >= 0 Цикл
ТекущееНачисление = ТаблицаНачислений[Индекс];
// Проверяем, является ли начисление премией (по наименованию или категории)
Если Найти(ТекущееНачисление.НачислениеНаименование, "Премия") > 0 Тогда
ТаблицаНачислений.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Выясним причину, по которой ИспытательныйСрок может не отображаться. В макетах 1С (особенно в формате Word) параметры должны быть написаны в строгом соответствии с тем, как они передаются из кода.
Проанализируем следующие моменты:
ИспытательныйСрок. Попробуйте изменить его на СрокИспытания или наоборот, если данные не подтягиваются.{ИспытательныйСрок}. Если макет в формате MXL, проверьте, что в свойствах ячейки установлено «Заполнение: Параметр».Проблема с выводом премий в договоре заключается в том, что система воспринимает любое плановое начисление как часть «социального пакета» или условий труда, которые должны быть зафиксированы. Чтобы оставить только оклад, нужно либо программно фильтровать таблицу начислений (как показано выше), либо использовать «Дополнительные реквизиты».
Рассмотрим вариант с использованием дополнительных реквизитов:
Посмотрим, какой формат макета лучше использовать для трудового договора.
MXL (табличный документ) проще в редактировании внутри 1С, но сложнее в верстке больших текстовых блоков.
Microsoft Word (doc/docx) идеален для длинных юридических текстов, так как автоматически переносит строки и распределяет текст по страницам. Однако работа с параметрами в Word требует более точной настройки в коде. Если вы решите использовать макет Word, помните, что программа передает в него фиксированный набор полей. Если нужного поля (например, суммы оклада без премий) в этом наборе нет, простое добавление текста в скобках в файле Word не поможет — данные не появятся без доработки программного кода в МодулеМенеджера или внешней обработке.