При доработке внешней печатной формы (ВПФ) ТабельУчетаРабочегоВремени для конфигурации ЗУП 3.1 часто возникает задача детальной аналитики отработанного времени. Рассмотрим, как правильно разделить общее время явок и время, отработанное в праздничные и выходные дни, чтобы вывести эти показатели в разные колонки отчета.
Для реализации этой задачи нам не нужно изобретать сложные механизмы расчета. В системе ЗУП 3.1 данные о времени сотрудников уже подготовлены к выводу. Ключом к решению является использование БуквенногоКода вида использования рабочего времени. В типовой конфигурации работа в выходные и праздничные дни обычно маркируется кодом РВ.
Нам необходимо модифицировать логику формирования данных в модуле объекта ВПФ. Давайте разберем по шагам, как это сделать правильно:
ДанныеТабеля.РВ (или другим кодом, соответствующим праздникам в вашей организации).Давайте посмотрим, как модифицировать алгоритм обхода выборки. В текущей реализации параметры макета заполняются для общих явок. Мы расширим эту логику.
В блоке формирования данных, где происходит обход выборки, добавим условие для проверки буквенного кода. Это позволит нам накопить праздничные часы отдельно от основных явок:
// Пример логики для разделения времени
Если ВидВремени.БуквенныйКод = "РВ" Тогда
ПраздникиДни = ПраздникиДни + ДниВПериоде;
ПраздникиЧасы = ПраздникиЧасы + ЧасыВПериоде;
Иначе
ОсновныеДни = ОсновныеДни + ДниВПериоде;
ОсновныеЧасы = ОсновныеЧасы + ЧасыВПериоде;
КонецЕсли;
Далее, при выводе данных в ОбластьВремяСтрока, нам необходимо присвоить полученные значения в соответствующие параметры макета:
ОбластьВремяСтрока.Параметры.ВсегоДнейЯвок = ОсновныеДни;
ОбластьВремяСтрока.Параметры.ВсегоЧасовЯвок = ОсновныеЧасы;
ОбластьВремяСтрока.Параметры.ДниПраздники = ПраздникиДни;
ОбластьВремяСтрока.Параметры.ЧасыПраздники = ПраздникиЧасы;
После внесения правок в код модуля, необходимо обновить сам макет печатной формы:
ВремяСтрока или аналогичную, отвечающую за вывод временных показателей.ДниПраздники и ЧасыПраздники).При выполнении данной доработки обязательно учитывайте следующие моменты:
Гибкость проверки кода: Не привязывайтесь жестко только к коду РВ, если в вашей компании используются дополнительные виды времени для праздничных дней. Лучше всего предусмотреть проверку списка кодов или использовать ссылку на ВидИспользованияРабочегоВремени.
Проверка полноты данных: Проанализируйте, как отражаются в табеле случаи неполного дня или работы в праздник по нескольким разным начислениям. Использование агрегирующих функций в запросе к виртуальной таблице данных табеля ДанныеТабеля значительно упростит вам задачу, позволяя сразу получить нужные суммы до этапа обхода выборки в модуле.
Тестирование: После внесения изменений обязательно проверьте отчет на сотрудниках, которые имели разные графики работы, выходы в праздники и использование отгулов. Убедитесь, что суммы ОсновныеДни + ПраздникиДни соответствуют исходным значениям ДниЗаМесяц, которые выводились до доработки.
Таким образом, использование БуквенногоКода является самым надежным и быстрым способом реализовать разделение рабочего времени в печатной форме без необходимости переписывания архитектуры получения данных.