Как изменить макет Т-13 в 1С:ЗУП 3.1: создание внешней печатной формы и альтернативные варианты

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

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

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

Различие между документом «Табель» и отчетом «Т-13»

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

  1. Печатная форма документа «Табель». Этот вариант используется, когда на предприятии принято вводить документы «Табель учета рабочего времени» вручную или заполнять их по конкретным подразделениям. Печать в данном случае происходит непосредственно из формы документа и опирается исключительно на те данные, которые в нем записаны.
  2. Отчет «Табель учета рабочего времени (Т-13)» (доступен в разделе «Зарплата» — «Отчеты по зарплате»). Этот инструмент формирует табель «на лету», собирая данные из различных регистров сведений и накопления (графики работы, индивидуальные графики, документы отклонений: больничные листы, отпуска, командировки). Сами документы «Табель» при этом в системе могут вообще отсутствовать.

Если ваша цель — изменить печатную форму, выводимую из документа «Табель», то мы идем по пути доработки макета этого документа. Выясним, какими способами мы можем это сделать.

Способ 1. Изменение макета в пользовательском режиме (без программирования)

Для простых эстетических изменений (шрифты, цвета, логотип, статичный текст) в 1С:ЗУП предусмотрен штатный механизм. Нам не нужно привлекать программиста или создавать внешние обработки.

Рассмотрим по шагам, как отредактировать макет напрямую в пользовательском режиме:

  1. Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Откроем справочник Макеты печатных форм.
  3. В открывшемся списке найдем макет с именем Табель учета рабочего времени (Т-13), который относится к документу «Табель».
  4. Нажмем кнопку Изменить.
  5. Система откроет встроенный редактор табличных документов. Здесь мы можем изменить оформление ячеек, заменить шрифт, добавить картинку (например, логотип компании) или отредактировать шапку.
  6. После внесения изменений нажмем кнопку Записать и закрыть.

Важное ограничение: этот способ отлично работает для визуального тюнинга, но имеет жесткие ограничения. Вы не сможете добавить в макет новые расчетные показатели. Если вы просто пропишете в ячейке новый параметр, например, [ДополнительныйПоказатель], система выдаст ошибку при печати, поскольку в коде проведения и формирования печатной формы нет алгоритма для заполнения этой переменной.

Способ 2. Создание внешней печатной формы (ВПФ)

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

Вариант А: Программный перехват и модификация (Рекомендуемый путь)

Копирование сотен строк сложного кода заполнения табеля из модуля менеджера во внешнюю обработку — неблагодарное занятие. Этот код тесно связан со внутренними общими модулями конфигурации (такими как УчетРабочегоВремениРасширенный и ЗарплатаКадрыОтчеты). При любом плановом обновлении 1С:ЗУП этот скопированный код может сломаться.

Вместо этого мы применим элегантный прием: программно вызовем типовое формирование печатной формы, получим готовый заполненный табличный документ, а затем точечно внесем в него изменения средствами нашей ВПФ.

Посмотрим на пример реализации модуля объекта внешней печатной формы:


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

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

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

Вариант Б: Полное копирование кода формирования в ВПФ

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

Проанализируем шаги для выполнения этой операции:

  1. Создаем новую внешнюю обработку в конфигураторе.
  2. Добавляем макет с типом Табличный документ и копируем в него структуру макета Т13 из документа «Табель» конфигурации.
  3. Копируем экспортную процедуру печати и зависимые от нее процедуры и функции из модуля менеджера документа «Табель» в модуль объекта нашей обработки.
  4. Находим в скопированном коде все обращения к получению макета. Типовой код обращается к макету конфигурации следующим образом: Макет = Документы.Табель.ПолучитьМакет("Т13"); Нам необходимо перенаправить этот вызов на макет нашей внешней обработки: Макет = ЭтотОбъект.ПолучитьМакет("Т13");
  5. Проверяем вызовы сопутствующих функций общих модулей. Если в коде используются неэкспортные методы модуля менеджера, их также придется скопировать в модуль объекта внешней печатной формы.

Способ 3. Использование расширения конфигурации

Если перед нами стоит задача изменить только визуальное представление формы Т-13 без создания отдельных файлов обработок, расширение конфигурации является наиболее современным и технологичным решением.

Разберем алгоритм работы с расширением:

  1. Создаем новое расширение конфигурации в режиме конфигуратора.
  2. Добавляем в расширение документ Табель и его макет Т13.
  3. Вносим любые необходимые визуальные изменения в скопированный макет внутри расширения.
  4. В модуле менеджера документа через аннотацию &Вместо перехватываем функцию, которая отвечает за инициализацию и получение макета. Наша функция-обертка будет принудительно возвращать макет из расширения вместо макета основной конфигурации.

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

Важное предупреждение о совместимости версий

Обратим внимание на версию конфигурации — 3.1.9.159. Это достаточно старый релиз платформы и конфигурации 1С:ЗУП. В этой версии используется старая редакция Библиотеки стандартных подсистем (БСП).

При разработке внешней печатной формы под эту версию необходимо учитывать следующие особенности:

← На главную