Как во внешней печатной форме табеля учета рабочего времени разделить явки и работу в праздничные дни в ЗУП 3.1?

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

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

Анализ структуры данных и выбор метода решения

Для реализации этой задачи нам не нужно изобретать сложные механизмы расчета. В системе ЗУП 3.1 данные о времени сотрудников уже подготовлены к выводу. Ключом к решению является использование БуквенногоКода вида использования рабочего времени. В типовой конфигурации работа в выходные и праздничные дни обычно маркируется кодом РВ.

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

  1. Проанализируем запрос, который получает данные о времени из регистра ДанныеТабеля.
  2. Добавим дополнительную группировку или условие выбора, которое позволит отфильтровать записи с кодом РВ (или другим кодом, соответствующим праздникам в вашей организации).
  3. Создадим дополнительные переменные-счетчики для хранения значений «Дни» и «Часы» именно для праздничных дней.

Реализация логики в коде модуля объекта

Давайте посмотрим, как модифицировать алгоритм обхода выборки. В текущей реализации параметры макета заполняются для общих явок. Мы расширим эту логику.

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


// Пример логики для разделения времени
Если ВидВремени.БуквенныйКод = "РВ" Тогда
    ПраздникиДни = ПраздникиДни + ДниВПериоде;
    ПраздникиЧасы = ПраздникиЧасы + ЧасыВПериоде;
Иначе
    ОсновныеДни = ОсновныеДни + ДниВПериоде;
    ОсновныеЧасы = ОсновныеЧасы + ЧасыВПериоде;
КонецЕсли;

Далее, при выводе данных в ОбластьВремяСтрока, нам необходимо присвоить полученные значения в соответствующие параметры макета:


ОбластьВремяСтрока.Параметры.ВсегоДнейЯвок = ОсновныеДни;
ОбластьВремяСтрока.Параметры.ВсегоЧасовЯвок = ОсновныеЧасы;
ОбластьВремяСтрока.Параметры.ДниПраздники = ПраздникиДни;
ОбластьВремяСтрока.Параметры.ЧасыПраздники = ПраздникиЧасы;

Редактирование макета печатной формы

После внесения правок в код модуля, необходимо обновить сам макет печатной формы:

  1. Откройте макет внешней печатной формы в конфигураторе.
  2. Найдите область ВремяСтрока или аналогичную, отвечающую за вывод временных показателей.
  3. Добавьте необходимое количество новых колонок в таблицу.
  4. В ячейках новых колонок установите параметры, которые мы определили в коде модуля (например, ДниПраздники и ЧасыПраздники).
  5. Убедитесь, что заголовки колонок в шапке макета также отражают суть выводимых данных (например, «Всего (без РВ)» и «В т.ч. праздники»).

Важные рекомендации и предостережения

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

Гибкость проверки кода: Не привязывайтесь жестко только к коду РВ, если в вашей компании используются дополнительные виды времени для праздничных дней. Лучше всего предусмотреть проверку списка кодов или использовать ссылку на ВидИспользованияРабочегоВремени.

Проверка полноты данных: Проанализируйте, как отражаются в табеле случаи неполного дня или работы в праздник по нескольким разным начислениям. Использование агрегирующих функций в запросе к виртуальной таблице данных табеля ДанныеТабеля значительно упростит вам задачу, позволяя сразу получить нужные суммы до этапа обхода выборки в модуле.

Тестирование: После внесения изменений обязательно проверьте отчет на сотрудниках, которые имели разные графики работы, выходы в праздники и использование отгулов. Убедитесь, что суммы ОсновныеДни + ПраздникиДни соответствуют исходным значениям ДниЗаМесяц, которые выводились до доработки.

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

← На главную