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