При работе с конфигурацией 1С:Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с необходимостью скорректировать внешний вид унифицированной формы Т-13 (Табель учета рабочего времени). Это может быть связано с корпоративными стандартами: добавлением логотипа компании, изменением шрифтов, границ или добавлением дополнительной справочной информации в подвал документа. При этом критически важно сохранить сложный расчетный код заполнения табеля нетронутым, чтобы обновления программы не привели к поломкам.
В этой статье мы подробно разберем, как решить эту задачу различными способами, начиная от самых простых инструментов в пользовательском режиме и заканчивая разработкой внешней печатной формы (ВПФ) и использованием механизмов расширения конфигурации.
Прежде чем приступать к технической реализации, важно проанализировать архитектуру учета рабочего времени в 1С:ЗУП 3.1. В программе существует два принципиально разных механизма получения формы Т-13:
Если ваша цель — изменить печатную форму, выводимую из документа «Табель», то мы идем по пути доработки макета этого документа. Выясним, какими способами мы можем это сделать.
Для простых эстетических изменений (шрифты, цвета, логотип, статичный текст) в 1С:ЗУП предусмотрен штатный механизм. Нам не нужно привлекать программиста или создавать внешние обработки.
Рассмотрим по шагам, как отредактировать макет напрямую в пользовательском режиме:
Важное ограничение: этот способ отлично работает для визуального тюнинга, но имеет жесткие ограничения. Вы не сможете добавить в макет новые расчетные показатели. Если вы просто пропишете в ячейке новый параметр, например, [ДополнительныйПоказатель], система выдаст ошибку при печати, поскольку в коде проведения и формирования печатной формы нет алгоритма для заполнения этой переменной.
Если перед нами стоит задача разработать именно внешнюю печатную форму, чтобы не вносить изменения непосредственно в базу данных и иметь возможность передавать ее как отдельный файл, мы можем пойти двумя путями интеграции кода.
Копирование сотен строк сложного кода заполнения табеля из модуля менеджера во внешнюю обработку — неблагодарное занятие. Этот код тесно связан со внутренними общими модулями конфигурации (такими как УчетРабочегоВремениРасширенный и ЗарплатаКадрыОтчеты). При любом плановом обновлении 1С:ЗУП этот скопированный код может сломаться.
Вместо этого мы применим элегантный прием: программно вызовем типовое формирование печатной формы, получим готовый заполненный табличный документ, а затем точечно внесем в него изменения средствами нашей ВПФ.
Посмотрим на пример реализации модуля объекта внешней печатной формы:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.Табель");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Табель Т-13 (внешний макет)");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Табель Т-13 (модифицированный)", "ТабельТ13Мод", "ВызовСерверногоМетода", Истина, "ПечатьВнешнейПечатнойФормы");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// 1. Создаем временную коллекцию для получения стандартной печатной формы
ВременнаяКоллекция = Новый ТаблицаЗначений;
ВременнаяКоллекция.Колонки.Добавить("Имя");
ВременнаяКоллекция.Колонки.Добавить("ТабличныйДокумент");
ВременнаяКоллекция.Колонки.Добавить("Экземпляров");
ВременнаяКоллекция.Колонки.Добавить("Синоним");
НоваяСтрока = ВременнаяКоллекция.Добавить();
НоваяСтрока.Имя = "Т13";
НоваяСтрока.Синоним = "Табель учета рабочего времени (Т-13)";
// 2. Вызываем стандартный метод формирования печати конфигурации
УправлениеПечатью.СформироватьПечатныеФормы(
"Документ.Табель",
"Т13",
МассивОбъектов,
ПараметрыВывода,
ВременнаяКоллекция,
ОбъектыПечати
);
// 3. Получаем сформированный стандартный табель
СтрокаПечати = ВременнаяКоллекция.Найти("Т13", "Имя");
Если СтрокаПечати <> Неопределено И СтрокаПечати.ТабличныйДокумент <> Неопределено Тогда
ТабДок = СтрокаПечати.ТабличныйДокумент;
// 4. Модифицируем табличный документ по нашим требованиям
// Например, найдем область подвала и добавим туда нужную надпись
ОбластьПодвала = ТабДок.НайтиТекст("Руководитель кадровой службы");
Если ОбластьПодвала <> Неопределено Тогда
// Здесь выполняем необходимые программные манипуляции с ячейками
// Например, меняем высоту строк или цвет фона
КонецЕсли;
// Переносим готовый измененный документ в основную коллекцию БСП
СтрокаОсновнойКоллекции = КоллекцияПечатныхФорм.Найти("ТабельТ13Мод", "Имя");
Если СтрокаОсновнойКоллекции <> Неопределено Тогда
СтрокаОсновнойКоллекции.ТабличныйДокумент = ТабДок;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот подход гарантирует стабильность работы решения при обновлениях программы: расчетные алгоритмы всегда будут актуальными, так как выполняются на стороне типовой конфигурации.
Если вам требуется кардинально переработать логику формирования отчета (например, изменить саму структуру вывода строк сотрудников или внедрить сложнейшие кастомные расчеты), придется перенести алгоритм генерации табеля во внешнюю обработку.
Проанализируем шаги для выполнения этой операции:
Т13 из документа «Табель» конфигурации.Макет = Документы.Табель.ПолучитьМакет("Т13");
Нам необходимо перенаправить этот вызов на макет нашей внешней обработки:
Макет = ЭтотОбъект.ПолучитьМакет("Т13");
Если перед нами стоит задача изменить только визуальное представление формы Т-13 без создания отдельных файлов обработок, расширение конфигурации является наиболее современным и технологичным решением.
Разберем алгоритм работы с расширением:
Табель и его макет Т13.&Вместо перехватываем функцию, которая отвечает за инициализацию и получение макета. Наша функция-обертка будет принудительно возвращать макет из расширения вместо макета основной конфигурации.При таком подходе вся сложнейшая математика расчета времени остается на стороне типового решения, а визуальный слой полностью замещается из расширения, что минимизирует риски при последующих обновлениях системы.
Обратим внимание на версию конфигурации — 3.1.9.159. Это достаточно старый релиз платформы и конфигурации 1С:ЗУП. В этой версии используется старая редакция Библиотеки стандартных подсистем (БСП).
При разработке внешней печатной формы под эту версию необходимо учитывать следующие особенности:
СведенияОВнешнейОбработке должна строго соответствовать требованиям старой БСП. В частности, это касается параметров структуры ПараметрыРегистрации и передаваемых коллекций.УправлениеПечатью.