Как создать печатную форму табеля в одну строку (один "этаж") в 1С:ЗУП 3.1?

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

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

Специфика вывода однострочного табеля

Стандартные типовые формы (Т-13 и Т-12) разбиты на два «этажа» (с 1 по 15 и с 16 по 31 число) исключительно ради экономии места. Это позволяет форме нормально читаться на стандартном листе формата А4 при книжной ориентации. Если мы разместим все 31 день в одну строку плюс добавим колонки с итогами отработанных часов за месяц, таблица значительно расширится вправо.

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


ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина;

Проблема кадровых переводов в середине месяца

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

  1. Выводить сотрудника одной строкой по последней должности (что может исказить исторические кадровые данные).
  2. Разбивать вывод на две отдельные строки (до перевода и после).

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

Отображение нескольких видов времени в один день

Выясним причину еще одной сложности. Если у сотрудника в один день зарегистрирована Явка (Я) и Ночные часы (Н) или Сверхурочные (С), в типовом «двухэтажном» табеле под это выделяются верхняя и нижняя ячейки в рамках одного дня. В однострочном табеле нам придется программно склеивать эти данные через разделитель. Например, выводить в одной ячейке строку вида Я8/Н2.

Обратите внимание: это потребует небольшого расширения колонок дней в макете, иначе сдвоенный текст при печати просто обрежется.

Как раскрасить выходные и праздничные дни в ячейках шапки

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

Алгоритм действий следующий:

  1. Выводим область шапки в результирующий документ. Функция вывода возвращает координаты выведенной области.
  2. Определяем, какие дни являются выходными по производственному календарю.
  3. В цикле обходим ячейки выведенной области и меняем их цвет.

// Вывод области и получение ее координат
ОбластьОформления = ТабДок.Вывести(ОбластьШапка);

// Пример обхода ячеек (условный код)
Для НомерДня = 1 По КоличествоДнейВМесяце Цикл
    Если ЭтоВыходной(НомерДня) Тогда
        ТабДок.Область(НомерСтроки, КолонкаДня).ЦветФона = WebЦвета.Красный;
    КонецЕсли;
КонецЦикла;

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

Использование СКД для создания печатной формы табеля

Разработка сложных печатных форм через Систему Компоновки Данных (СКД) — это мощный современный подход, который отлично подходит для табелей и позволяет сэкономить массу времени на ручной отрисовке.

Разберем по шагам, как это работает:

  1. Структура кросс-таблицы: В настройках СКД создается таблица. Строки — это группировка по полю Сотрудник, а колонки — группировка по полю Дата (от 1 до конца месяца).
  2. Решение проблемы раскраски: Главный плюс СКД в данной задаче — встроенный механизм Условное оформление. Там можно просто задать правило: если тип дня = "Выходной" или "Праздник", установить красный цвет фона. Механизм платформы сам закрасит нужные ячейки колонок без единой строчки кода обхода областей.
  3. Постобработка: Как показывает практика, полностью обойтись без постобработки не получится. СКД сформирует идеальную сетку с часами и красными выходными, но она не выведет регламентированную шапку (название организации, коды ОКПО) и подвал с местами для подписей ответственных лиц в том виде, в котором этого требует форма Т-12.

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

← На главную