При автоматизации учета в программе 1С:Зарплата и управление персоналом 3.1 (ЗУП) разработчики часто сталкиваются с задачей определения точных периодов, в течение которых сотрудник был занят на работах с вредными или тяжелыми условиями труда (УТ). Эти данные необходимы для расчета дополнительных тарифов страховых взносов, оценки стажа для досрочного выхода на пенсию (отчетность в СФР), расчета дней дополнительного отпуска или формирования внутренней аналитической отчетности по охране труда.
Сложность задачи заключается в том, что в зависимости от версии программы (ПРОФ или КОРП) и включенных функциональных опций учет вредных условий труда может вестись по-разному. Рассмотрим подробнее все существующие методы решения этой задачи — от простых запросов к интервальным регистрам сведений до использования универсального программного интерфейса (API) конфигурации.
В версии 1С:ЗУП КОРП реализован полноценный учет рабочих мест в разрезе условий труда (спецоценки СОУТ). Для связи сотрудников с конкретными рабочими местами используется специализированный интервальный регистр сведений.
Выясним причину, почему этот способ считается наиболее точным для версии КОРП: программа регистрирует назначение рабочего места сотруднику напрямую, фиксируя даты начала и окончания работы в интервальном регистре. Если в вашей базе КОРП ведется этот учет, то получить периоды вредности можно с помощью прямого запроса к регистру РегистрСведений.РабочиеМестаСотрудниковИнтервальный.
Разберем по шагам пример построения такого запроса:
ВЫБРАТЬ
РабочиеМеста.Сотрудник КАК Сотрудник,
РабочиеМеста.РабочееМесто КАК РабочееМестоОхраныТруда,
РабочиеМеста.ДатаНачала КАК ДатаНачала,
ВЫБОР
КОГДА РабочиеМеста.ДатаОкончания > &КонецПериода
ТОГДА &КонецПериода
ИНАЧЕ РабочиеМеста.ДатаОкончания
КОНЕЦ КАК ДатаОкончания
ИЗ
РегистрСведений.РабочиеМестаСотрудниковИнтервальный КАК РабочиеМеста
ГДЕ
РабочиеМеста.Сотрудник = &Сотрудник
И РабочиеМеста.ДатаНачала <= &КонецПериода
И РабочиеМеста.ДатаОкончания >= &НачалоПериода
При анализе результатов запроса необходимо соединить полученные данные со справочником рабочих мест и таблицами классов условий труда по результатам спецоценки. Это позволит отфильтровать только те интервалы, где класс условий труда относится к вредным или опасным (например, подклассы 3.1, 3.2, 3.3, 3.4 или класс 4).
Если используется версия ПРОФ (в которой подсистема рабочих мест охраны труда отсутствует) либо в версии КОРП данный учет не ведется, информация о вредных условиях труда привязывается к позиции штатного расписания или к должности сотрудника.
Проанализируем классический алгоритм получения периодов работы во вредных условиях через соединение кадровой истории и регистров классов условий труда. В программе 1С:ЗУП 3.1 кадровая история хранится в интервальном виде, что значительно упрощает написание запросов без необходимости использовать сложные виртуальные таблицы срезов первых и последних.
Рассмотрим структуру запроса, связывающего кадровую историю сотрудников с классами условий труда должностей:
ВЫБРАТЬ
Кадры.Сотрудник КАК Сотрудник,
Кадры.ДатаНачала КАК ДатаНачала,
Кадры.ДатаОкончания КАК ДатаОкончания,
Кадры.Должность КАК Должность,
КлассыУсловий.КлассУсловийТруда КАК КлассУсловийТруда
ПОМЕСТИТЬ ВТ_ВредныеПериоды
ИЗ
РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК Кадры
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлассыУсловийТрудаПоДолжностям КАК КлассыУсловий
ПО Кадры.Должность = КлассыУсловий.Должность
И КлассыУсловий.КлассУсловийТруда В (
ЗНАЧЕНИЕ(Перечисление.КлассыУсловийТрудаПоРезультатамСпециальнойОценки.Вредный1),
ЗНАЧЕНИЕ(Перечисление.КлассыУсловийТрудаПоРезультатамСпециальнойОценки.Вредный2),
ЗНАЧЕНИЕ(Перечисление.КлассыУсловийТрудаПоРезультатамСпециальнойОценки.Вредный3),
ЗНАЧЕНИЕ(Перечисление.КлассыУсловийТрудаПоРезультатамСпециальнойОценки.Вредный4),
ЗНАЧЕНИЕ(Перечисление.КлассыУсловийТрудаПоРезультатамСпециальнойОценки.Опасный)
)
ГДЕ
Кадры.Сотрудник = &Сотрудник
И Кадры.ДатаНачала <= &КонецПериода
И Кадры.ДатаОкончания >= &НачалоПериода
Важное примечание: Если в организации ведется штатное расписание с историей изменений, то класс условий труда следует получать не из регистра должностей, а из регистра РегистрСведений.КлассыУсловийТрудаПозицийШтатногоРасписания. В таком случае соединение в запросе необходимо производить по полю ПозицияШтатногоРасписания.
Бывают ситуации, когда сотрудник выполняет работы во вредных условиях не постоянно (что фиксируется кадровыми переводами на другую должность), а периодически — посменно или даже в течение нескольких часов за смену. В ЗУП 3.1 для этого задействуется штатный механизм «Особых условий труда».
Посмотрим на логику его работы. Если в настройках учетной политики включена опция использования особых условий, то конкретные периоды вредности регистрируются непосредственно в документе «Табель» или через специализированный документ «Изменение мест работы». Такие оперативные данные не попадают в классические кадровые регистры сведений.
Для программного извлечения таких периодов рекомендуется обращаться к программному интерфейсу системы учета времени. Разработчики 1С предусмотрели специальные методы общего модуля УчетРабочегоВремени. Вызов этих процедур формирует временные таблицы с детальной информацией о рабочем времени и условиях труда за каждый день:
// Пример вызова методов программного интерфейса для анализа времени и условий труда
ПараметрыЗапроса = УчетРабочегоВремени.ПараметрыДляСозданияВТДанныеУчетаВремени();
ПараметрыЗапроса.НачалоПериода = &НачалоПериода;
ПараметрыЗапроса.КонецПериода = &КонецПериода;
ПараметрыЗапроса.Сотрудники = СписокСотрудников;
УчетРабочегоВремени.СоздатьВТДанныеУчетаРабочегоВремениСотрудников(
МенеджерВременныхТаблиц,
"ВТ_ДанныеУчетаВремени",
ПараметрыЗапроса
);
В созданной временной таблице ВТ_ДанныеУчетаВремени будет содержаться посуточная детализация отработанного времени сотрудников. Одним из полей таблицы будет выступать ссылка на элемент справочника Справочник.УсловияТруда, что позволит точно определить дни и часы работы во вредных условиях.
Если вашей конечной целью является получение «чистых» периодов вредного стажа сотрудника, признаваемых государством для льготного пенсионного обеспечения, обращаться к кадровой истории напрямую может быть не совсем корректно. Дело в том, что периоды реального вредного стажа прерываются определенными событиями (например, отпусками за свой счет, периодами ухода за ребенком, неоплачиваемыми невыходами, командировками и т.д.).
Программа ЗУП выполняет этот сложный расчет автоматически при формировании отчетности по персонифицированному учету и сохраняет результаты в служебных регистрах сведений:
РегистрСведений.ПараметрыПериодовСтажаПФР — хранит детальные рассчитанные параметры стажа.РегистрСведений.ПериодыСтажаПФР — содержит сформированные интервалы с кодами особых условий.РегистрСведений.ПараметрыПериодовСтажаПФРИспр — хранит исправленные версии расчетов.Запрос к данным регистрам с отбором по физическому лицу и заполненным полям вредных условий (код позиции списка, особые условия труда СФР/ПФР) — это самый надежный способ получить юридически значимые очищенные периоды работы во вредных условиях труда.
Для того чтобы избежать написания громоздких запросов, учитывающих приоритеты настроек программы (ПРОФ или КОРП, использование штатного расписания, наличие индивидуальных рабочих мест), фирма 1С настоятельно рекомендует использовать стандартный программный интерфейс прикладных решений.
Для получения кадровых данных, включая классы условий труда и параметры ПФР/СФР по периодам, используется функция общего модуля КадровыйУчет. Программа сама проанализирует текущие настройки учетной политики и вернет корректные данные.
Рассмотрим пример использования API БСП для получения истории изменения классов условий труда сотрудника:
// Задаем список необходимых полей для анализа
КадровыеДанные = Новый Массив;
КадровыеДанные.Добавить("КлассУсловийТруда");
КадровыеДанные.Добавить("КодПозицииСпискаПФР");
КадровыеДанные.Добавить("ОсобыеУсловияТрудаПФР");
// Формируем параметры получения данных
ПараметрыПолучения = КадровыйУчет.ПараметрыПолученияКадровыхДанных();
ПараметрыПолучения.КадровыеДанные = КадровыеДанные;
ПараметрыПолучения.Период = &КонецПериода;
// Вызываем программный метод для получения таблицы значений
ТаблицаКадровыхДанных = КадровыйУчет.КадровыеДанныеСотрудников(
Истина,
СписокСотрудников,
ПараметрыПолучения
);
Этот метод гарантирует, что при обновлении конфигурации или изменении настроек ведения учета (например, при переходе с ЗУП ПРОФ на ЗУП КОРП или при начале ведения истории штатного расписания) ваш программный код продолжит работать корректно и без ошибок.
Таким образом, выбор конкретного метода зависит от архитектуры вашей базы данных и бизнес-требований. Для простых отчетов в ПРОФ подойдет соединение интервальных кадровых регистров с классами условий должностей, для КОРП — запрос к рабочим местам сотрудников, для точной отчетности СФР — специализированные регистры стажа ПФР, а для универсальных доработок — штатный общий модуль КадровыйУчет.