При ведении учета рабочего времени и начислении заработной платы в программе 1С:Зарплата и управление персоналом 3.1 пользователи и разработчики периодически сталкиваются с ситуацией: в проведенном документе Табель данные занесены за весь период (например, с 1 по 15 число), в регистре накопления Данные табельного учета рабочего времени сотрудников все движения присутствуют, однако унифицированная печатная форма или отчет Табель (Т-13) выводит рабочие часы только за часть периода (например, с 1 по 5 число), а расчет зарплаты или аванса игнорирует оставшиеся дни.
Разберем внутреннее устройство подсистемы учета времени, выясним, какую роль в этом процессе играет независимый регистр сведений Графики работы по видам времени, почему в нем «застревают» устаревшие данные и как исправить ошибки расчета.
Для оптимизации сложных запросов при расчете начислений и формировании отчетов разработчики конфигурации применили механизм материализованного кэширования рабочего времени. Ключевым звеном этого механизма является регистр сведений Графики работы по видам времени.
Рассмотрим главные особенности его архитектуры:
Графики работы сотрудников или прямой ссылки на справочник Сотрудники. Когда для конкретного сотрудника регистрируются индивидуальные отклонения или вводится документ Табель, программа при расчете формирует персональные строки, где измерение ГрафикРаботы заполняется ссылкой на самого сотрудника.Начисление за первую половину месяца, Начисление зарплаты и взносов, межрасчетные начисления) либо при подготовке данных для отчетов.Графики работы по видам времени за соответствующий Месяц и ПериодРегистрации. Если персональный кэш найден, запрос берет данные из него, не считывая повторно исходные записи из регистра накопления Данные табельного учета рабочего времени сотрудников.Проанализируем типовые ситуации, из-за которых в кэширующем регистре формируется неполный срез времени:
Табель вносит движения в регистр накопления, но не очищает уже сформированный независимый кэш.Табель в объектной модели, не вызывая служебные модули перерасчета зарплаты и очистки кэша рабочего времени.Состояния сотрудников (например, непроведенное увольнение или неявка) вытесняет табельные данные в итоговом расчетном запросе.Если проблема носит единичный характер и возникла в пользовательском режиме, выполним следующую пошаговую последовательность действий:
Начисление зарплаты и взносов, Начисление за первую половину месяца, межрасчетные начисления).Табель.Табель (при необходимости проверим корректность заполнения видов времени).Табель (Т-13). В процессе расчета система обновит записи регистра Графики работы по видам времени на основании актуального табеля.Когда документов много или табели загружаются регулярно из внешней системы, наиболее надежный подход — очищать персональный кэш перед расчетом или непосредственно при программной загрузке табелей.
Рассмотрим пример кода на встроенном языке 1С для программного удаления устаревших персональных записей по сотруднику:
// Очистка персональных записей сотрудника в регистре сведений "Графики работы по видам времени"
НаборЗаписей = РегистрыСведений.ГрафикиРаботыПоВидамВремени.СоздатьНаборЗаписей();
// Устанавливаем отбор по сотруднику и месяцу учета
НаборЗаписей.Отбор.ГрафикРаботы.Установить(СсылкаНаСотрудника);
НаборЗаписей.Отбор.Месяц.Установить(НачалоМесяца(ПериодРегистрации));
// Записываем пустой набор для удаления записей кэша
НаборЗаписей.Записать(Истина);
После очистки персонального набора записей при следующем вызове расчета зарплаты программа заново соберет фактические часы из регистра накопления Данные табельного учета рабочего времени сотрудников и сохранит корректный срез на весь расчетный период.
Если табели импортируются из сторонней учетной системы через COM-соединение, оптимизируем алгоритм загрузки следующим образом:
Графики работы по видам времени по списку загружаемых сотрудников.Перерасчет зарплаты, чтобы типовой функционал регламентных перерасчетов учел изменения рабочего времени.Если график сотрудников нестабилен и меняется в течение месяца, вместо сплошного ввода документов Табель рассмотрим использование типового документа Индивидуальный график.
В отличие от табеля, Индивидуальный график относится к плановым документам подсистемы. При его проведении типовой механизм 1С:ЗУП автоматически обновляет плановые показатели в регистре сведений Графики работы по видам времени, исключая расхождения между планом, фактом и отчетом Т-13.