Как сформировать комплект документов при приеме на работу в 1С:ЗУП 3.1?

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

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

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

Типовые возможности новых версий 1С:ЗУП 3.1

Прежде чем приступать к программированию, давайте выясним, не решена ли уже эта проблема разработчиками. В новых релизах программы (начиная с версий 3.1.29 и 3.1.30) разработчики 1С добавили штатный механизм пакетной печати. Проанализируем, как это работает:

  1. Зайдите в документ ПриемНаРаботу или КадровыйПеревод.
  2. В меню кнопки Печать теперь доступна команда Комплект документов при приеме на работу.
  3. При ее выборе открывается форма, где можно галочками отметить нужные документы: заявление, приказ Т-1, трудовой договор и другие сопутствующие бланки.

Если вы используете актуальную версию конфигурации, разработка сложной ВПФ может не потребоваться. Кроме того, вместо жестко закодированных в 1С макетов MXL, мы рекомендуем использовать механизм Шаблоны документов. Он позволяет кадровикам самостоятельно создавать шаблоны договоров в привычных форматах MS Word или OpenOffice. Вы просто расставляете в тексте переменные (ФИО, должность, оклад), и программа сама заполняет их данными из документа-основания.

Программное решение: объединение форм через ВПФ

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

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


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    // Формируем первую внешнюю печатную форму - Трудовой договор (основной)
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "впфТрудовойДоговорОсновной");
    Если ПечатнаяФорма <> Неопределено Тогда
        ВПФ = СоздатьВПФ("впфТрудовойДоговорОсновной");
        ВПФ.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
        ПечатнаяФорма.СинонимМакета = НСтр("ru = 'впф Трудовой договор (основной)'");
    КонецЕсли;
    
    // Формируем вторую внешнюю печатную форму - Договор о мат. ответственности
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "впфТрудовойДоговорМатериальнойОтветственности");
    Если ПечатнаяФорма <> Неопределено Тогда
        ВПФ = СоздатьВПФ("впфТрудовойДоговорМатериальнойОтветственности");
        ВПФ.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
        ПечатнаяФорма.СинонимМакета = НСтр("ru = 'впф Трудовой договор (материальной ответственности)'");
    КонецЕсли;
    
    // Выводим типовую печатную форму приказа Т-1
    ПараметрыПечати = Новый Структура;
    ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", Ложь);
    ПараметрыПечати.Вставить("ТребуетсяЧтениеБезОграничений", Истина);
    
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ПриказОПриеме");
    ПечатнаяФорма.ИмяВРЕГ = "ПФ_MXL_Т1";
    
    // Обращение напрямую к менеджеру отчета (характерно для старых релизов)
    Отчеты.ПечатнаяФормаТ1.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
    
    ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Приказ о приеме (Т-1)'");

КонецПроцедуры

Особенности работы с Библиотекой стандартных подсистем (БСП)

Проанализируем архитектуру представленного решения. Код успешно работает в релизах уровня 3.1.15, однако в современных конфигурациях (на базе БСП 3.1.9 и выше) подход к работе с объектом КоллекцияПечатныхФорм немного изменился.

Для корректного добавления форм в комплект мы рекомендуем учитывать следующие нюансы:

  1. Коллекцию печатных форм необходимо инициализировать специальными методами БСП, например, УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм.
  2. Для вызова типовой формы вместо прямого обращения к Отчеты.ПечатнаяФормаТ1.Печать лучше использовать универсальную функцию УправлениеПечатью.СформироватьПечатныеФормы. Ей можно передать массив строк с именами макетов, и система самостоятельно соберет их в единый пакет.
  3. Если вы все же формируете формы вручную, обращайте внимание на параметры. Передача ключа ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", Истина) укажет системе на то, что текущий набор нужно склеить с другими внешними макетами.

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

← На главную