Как реализовать печать личной карточки Т-2 из справочника «Сотрудники» на основе существующего отчета

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

Создание внешних печатных форм — одна из базовых задач разработчика 1С. Часто возникает потребность не создавать макет с нуля, а использовать уже существующий в системе сложный отчет, такой как «Унифицированная форма Т-2». В этой статье мы подробно разберем, как превратить типовой отчет во внешнюю печатную форму, которая будет вызываться прямо из карточки или списка сотрудников.

Анализ задачи и выбор стратегии

Для начала проанализируем ситуацию. В типовых конфигурациях, таких как «Зарплата и управление персоналом 3.1» (ЗУП) или «Бухгалтерия предприятия 3.0», личная карточка Т-2 реализована как полноценный отчет. Наша задача — сделать так, чтобы пользователь, выбрав сотрудника в справочнике Сотрудники, мог нажать кнопку «Печать» и получить уже заполненную форму именно по этому человеку. Рассмотрим два основных пути реализации: копирование кода макета в новую обработку или программный вызов существующего отчета с передачей параметров. Второй вариант предпочтительнее, так как он позволяет сохранить поддержку обновлений конфигурации.

Шаг 1. Создание внешней обработки и регистрация в системе

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

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


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработки.ВидДополнительнойОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Назначение.Добавить("Справочник.Сотрудники");
    ПараметрыРегистрации.Наименование = "Личная карточка Т-2 (внешняя)";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    ПараметрыРегистрации.Версия = "1.0";
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Унифицированная карточка Т-2 (внешняя)";
    НоваяКоманда.Идентификатор = "ПечатьТ2_Внешняя";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработки.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.Модификатор = "ПечатьMXL";
    
    Возврат ПараметрыРегистрации;
КонецФункции

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

Шаг 2. Реализация процедуры Печать

После регистрации БСП будет искать в модуле объекта процедуру Печать. Именно здесь происходит основная магия: получение ссылки на выбранного сотрудника и запуск механизма формирования отчета. Рассмотрим, как правильно обработать входящие данные.

Система всегда передает массив ссылок в параметре ОбъектыНазначения, даже если выбран всего один сотрудник. Нам необходимо организовать цикл и сформировать документ для каждого объекта в массиве.


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ПечатьТ2_Внешняя");
    
    Если ПечатнаяФорма <> Неопределено Тогда
        ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФормуТ2(МассивОбъектов, ОбъектыПечати);
        ПечатнаяФорма.СинонимМакета = "Личная карточка Т-2";
    КонецЕсли;
    
КонецПроцедуры

Шаг 3. Программный вызов отчета «УнифицированнаяФормаТ2»

Теперь разберем самый ответственный момент: как заставить существующий отчет сформироваться программно с нужным нам отбором. Выясним причину, почему это лучше делать через Систему компоновки данных (СКД). Отчет Т-2 в типовых решениях построен на СКД, и нам нужно передать настройки компоновки.

Посмотрим на пример реализации функции формирования:


Функция СформироватьПечатнуюФормуТ2(МассивОбъектов, ОбъектыПечати)
    
    // Создаем объект отчета из конфигурации
    ОтчетОбъект = Отчеты.УнифицированнаяФормаТ2.Создать();
    СхемаКомпоновкиДанных = ОтчетОбъект.СхемаКомпоновкиДанных;
    
    // Получаем настройки по умолчанию
    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    
    // Устанавливаем отбор по сотруднику
    // В СКД отчета Т-2 параметр или поле обычно называется "Сотрудник"
    ОтборСотрудник = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборСотрудник.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сотрудник");
    ОтборСотрудник.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ОтборСотрудник.ПравоеЗначение = МассивОбъектов;
    ОтборСотрудник.Использование = Истина;
    
    // Подготавливаем данные для формирования
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    Результат = Новый ТабличныйДокумент;
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
    // Настраиваем параметры печати
    Результат.АвтоМасштаб = Истина;
    Результат.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    
    Возврат Результат;
    
КонецФункции

Особенности работы с формой Т-2 в ЗУП 3.1

Проанализируем ситуацию, если вы работаете в конфигурации «Зарплата и управление персоналом». В этой программе форма Т-2 является достаточно сложной. Она собирает данные из множества регистров сведений: ЛичныеДанныеФизическихЛиц, ВоинскийУчет, ОбразованиеФизическихЛиц и других.

Важный нюанс: часто в типовых решениях в менеджере отчета уже есть экспортный метод для печати. Если вы обнаружите в модуле менеджера отчета УнифицированнаяФормаТ2 процедуру типа СформироватьПечатнуюФорму(Параметры), лучше вызвать именно её. Это гарантирует, что все специфические алгоритмы (например, разбиение на страницы или двусторонняя печать) будут выполнены корректно.

Разберем, на что стоит обратить внимание при настройке отборов:

  1. Физическое лицо vs Сотрудник: Учтите, что кадровая информация часто хранится в разрезе ФизическихЛиц, а не Сотрудников. Если отчет не выводит данные, попробуйте установить отбор по полю Сотрудник.ФизическоеЛицо.
  2. Дата актуальности: Карточка Т-2 формируется на определенную дату (обычно текущую). Не забудьте проверить параметры СКД, отвечающие за период или дату формирования.
  3. Масштабирование: Поскольку карточка Т-2 содержит очень много мелких полей, установка свойства Результат.АвтоМасштаб = Истина обязательна, иначе форма может не поместиться на лист А4 при печати.

Рекомендации для начинающих разработчиков

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

Во-первых, всегда проверяйте, чтобы в вашей внешней обработке был создан реквизит СсылкаНаОбъект (хотя БСП 3.0+ передает объекты через массив в процедуру Печать, наличие реквизита помогает при тестировании).

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

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

Таким образом, мы выяснили, что для печати личной карточки Т-2 из справочника не обязательно переписывать весь отчет. Достаточно создать небольшую «обертку» в виде внешней обработки, которая программно настроит типовой отчет и выведет его результат пользователю. Это профессиональный и эффективный подход в экосистеме 1С.

← На главную