При работе с программными продуктами на базе 1С:Зарплата и кадры государственного учреждения (ЗКГУ) или Зарплата и управление персоналом (ЗУП 3.1) программисты часто сталкиваются с задачей кастомизации типовых печатных форм. Одной из таких задач является добавление данных об исполнителе в конец приказа о приеме на работу (форма Т-1). Несмотря на кажущуюся простоту, архитектура современных конфигураций, построенных на Библиотеке стандартных подсистем (БСП), превращает поиск нужного участка кода в настоящий квест. В этой статье мы подробно разберем, как локализовать алгоритм формирования печати и внести изменения максимально корректно.
В старых редакциях 1С (например, 2.5) логика печати часто находилась непосредственно в модуле объекта документа. В современных же конфигурациях используется механизм универсальной печати. Рассмотрим, почему это усложняет поиск:
БЗК (Базовые Зарплата и Кадры).Давайте вместе разберем пошаговый алгоритм, который поможет нам найти «точку входа».
Первым делом проанализируем модуль менеджера документа ПриемНаРаботу. Именно здесь регистрируются команды печати. Нам необходимо найти процедуру ДобавитьКомандыПечати. В ней будет указано, какой именно менеджер печати или общий модуль вызывается при нажатии кнопки «Печать».
Обычно вызов выглядит следующим образом:
// В модуле менеджера документа
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
// Здесь регистрируется команда Т-1
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "ОбщийМодуль.УправлениеПечатьюБЗК";
КомандаПечати.Идентификатор = "ПФ_MXL_ПриказОПриеме";
...
КонецПроцедуры
Проанализировав этот участок, мы выясним, что основная работа происходит в общем модуле, например, УправлениеПечатьюБЗК или КадровыйУчет.
Если глобальный поиск по названию макета ПФ_MXL_ПриказОПриеме выдает слишком много результатов, воспользуемся проверенным инструментом разработчика — Замером производительности. Рассмотрим, как это сделать:
В открывшемся списке процедур отсортируйте их по количеству вызовов или времени выполнения. Ищите функции в общих модулях, названия которых содержат СформироватьПечатныеФормы или ПечатьПриказаОПриеме. Это самый быстрый способ увидеть реальный путь прохождения алгоритма.
Как правило, в ЗКГУ за формирование данных отвечает процедура ЗаполнитьПараметрыПриказаОПриеме (или аналогичная). В этой процедуре система формирует структуру или таблицу значений, которая затем передается в макет. Наша задача — найти место, где заполняются ДанныеПечати.
Типовой алгоритм сбора данных часто выглядит так:
// Примерный алгоритм сбора данных
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ... ИЗ Документ.ПриемНаРаботу КАК ПриемНаРаботу ...";
// Нам нужно добавить сюда выборку нашего реквизита Исполнитель
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если реквизит «Исполнитель» — это стандартный реквизит Ответственный или ваш добавленный реквизит на форме, убедитесь, что он попадает в запрос формирования данных.
Чтобы не снимать конфигурацию с поддержки, крайне рекомендуем использовать механизм расширений. Мы применим аннотацию &После к процедуре, которая подготавливает данные для печати. Разберем пример кода для расширения:
&После("СформироватьКоллекциюПечатныхФормПриемаНаРаботу")
Процедура Расш_СформироватьКоллекциюПечатныхФормПриемаНаРаботу(ПараметрыПечати, КоллекцияПечатныхФорм)
// Находим нужную печатную форму в коллекции
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ПФ_MXL_ПриказОПриеме");
Если ПечатнаяФорма <> Неопределено Тогда
// Здесь мы можем дозаполнить параметры макета,
// которые не были заполнены в типовом коде.
// Например, найти ФИО исполнителя по ссылке на документ
КонецЕсли;
КонецПроцедуры
Зачем вообще это нужно? Согласно ГОСТ Р 7.0.97-2016, отметка об исполнителе является важным реквизитом управленческой документации. Она должна включать:
Согласно стандарту, эта информация располагается в левом нижнем углу последнего листа документа. Шрифт при этом может быть на 1-2 пункта меньше основного текста приказа.
Если вам не требуется сложная логика (например, исполнитель всегда один и тот же для определенного филиала), можно обойтись без программирования модулей:
Однако помните: чтобы параметр ФИОИсполнителя заполнился автоматически, он все равно должен быть определен в коде формирования данных, который мы искали выше.
Для добавления исполнителя в приказ Т-1 в ЗКГУ:
УправлениеПечатьюБЗК).ДанныеПечати.Такой подход позволит вам сохранить конфигурацию на поддержке и корректно выполнить требования руководства и ГОСТа.