В процессе ведения кадрового учета в программе 1С:Зарплата и управление персоналом 3.1 (или ЗКГУ) нередко возникает ситуация, когда у сотрудника не заполнены права на отпуск. Это может произойти при приеме на работу или кадровом переводе, особенно если в информационной базе не настроено автоматическое заполнение из штатного расписания или данные переносились из других систем. Проблема заключается в том, что стандартный отчет по остаткам отпусков может не показывать «дыру» в правах за определенный период, что в будущем приведет к занижению компенсации при увольнении или некорректному расчету планового отпуска.
В этой статье мы подробно разберем, почему возникают такие ситуации, как их эффективно отлавливать с помощью типовых инструментов и какие программные методы может использовать разработчик для автоматизации контроля.
Прежде чем приступать к поиску ошибок, проанализируем, почему поле «Права на отпуск» в документе Прием на работу или Кадровый перевод может остаться пустым. Рассмотрим основные факторы:
ВидыОтпусков. Если для основного ежегодного отпуска не установлена настройка «Предоставлять всем сотрудникам» или флаг «Является ежегодным», программа не будет настаивать на его обязательном заполнении.Разберем ситуацию на примере: сотрудник принят 1 марта, но права на отпуск в документе не указаны. 1 апреля оформляется кадровый перевод, где права на отпуск (28 дней) уже заданы. В результате отчет по остаткам отпусков за период с 1 марта по 31 марта покажет «0» накопленных дней, и обнаружить этот пропуск визуально в общем списке сотрудников крайне сложно.
Основным источником информации о правах сотрудника на отпуск в системе является регистр сведений ПоложенныеВидыЕжегодныхОтпусков. Именно на его данных строятся все отчеты по остаткам. Рассмотрим, как использовать его для поиска ошибок.
Самый простой способ без привлечения программиста — настроить Универсальный отчет. Выполним следующие шаги:
Положенные виды ежегодных отпусков.Количество дней в году равно 0 или Вид отпуска не заполнен.Важный нюанс: если записи в регистре на дату приема вообще нет (как в нашем примере с мартом), «Универсальный отчет» по этому регистру не покажет сотрудника, так как записи физически не существует. Для выявления таких «дыр» нам потребуется более сложный подход.
Рассмотрим, как заставить стандартный отчет Остатки отпусков работать на нас. Хотя автор темы утверждает, что «поймать косяк нельзя», при детальной настройке это возможно. Проанализируем ситуацию: если мы сформируем отчет на текущую дату, мы увидим итоговое число дней. Но если мы добавим в группировки отчета Периоды стажа, мы увидим, что за первый месяц работы начисления не производились.
Для точечной проверки подозрительного сотрудника используем Справку об остатках отпусков из карточки сотрудника (кнопка «Печать»). Система подробно расписывает все рабочие года и права. Если период с даты приема выпадает из расчета или имеет нулевой остаток при отсутствии отпусков — это явный признак отсутствия прав.
Если нам необходимо проверить сразу всю базу на наличие пропусков в правах, рассмотрим написание запроса. Проанализируем логику: нам нужно найти сотрудников, у которых дата начала действия прав на отпуск в регистре ПоложенныеВидыЕжегодныхОтпусков не совпадает с датой приема на работу.
Посмотрим на пример запроса, который можно использовать в консоли отчетов или при создании собственного отчета на СКД:
ВЫБРАТЬ
Сотрудники.Ссылка КАК Сотрудник,
Сотрудники.ДатаПриема КАК ДатаПриема,
ЕСТЬNULL(ПраваОтпуска.Период, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаНачалаПрав
ИЗ
Справочник.Сотрудники КАК Сотрудники
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоложенныеВидыЕжегодныхОтпусков.СрезПоследних(&ДатаПроверки, ) КАК ПраваОтпуска
ПО Сотрудники.Ссылка = ПраваОтпуска.Сотрудник
ГДЕ
Сотрудники.ВАрхиве = ЛОЖЬ
И (ПраваОтпуска.Период > Сотрудники.ДатаПриема
ИЛИ ПраваОтпуска.Период ЕСТЬ NULL)
Разберем этот код: мы берем всех работающих сотрудников и соединяем их с регистром прав. Если дата начала действия прав (поле Период в регистре) больше даты приема или запись вовсе отсутствует (NULL), значит, у сотрудника есть период «бесправия» на отпуск.
После того как мы обнаружили «проблемных» сотрудников, необходимо внести исправления. Проанализируем два способа:
Прием на работу и вручную добавить вид отпуска. После проведения документа запись в регистре обновится автоматически.Для предотвращения подобных ситуаций в будущем рассмотрим внедрение небольшого расширения. В модуле объекта документа ПриемНаРаботу в процедуре ПередЗаписью или ОбработкаПроверкиЗаполнения можно добавить проверку:
&После("ОбработкаПроверкиЗаполнения")
Процедура ПроверкаПравНаОтпуск(Отказ, ПроверяемыеРеквизиты)
Если ЭтотОбъект.ЕжегодныеОтпуска.Количество() = 0 Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Внимание! Не заполнены права на ежегодный отпуск.");
// Можно установить Отказ = Истина, если проверка должна быть жесткой
КонецЕсли;
КонецПроцедуры
Такой подход позволит контролировать корректность данных в момент их ввода, что значительно сэкономит время бухгалтера и программиста в будущем.
Мы выяснили, что отсутствие прав на отпуск в 1С:ЗУП 3.1 — это критичная ошибка, которая может долго оставаться незамеченной. Однако, используя регистр ПоложенныеВидыЕжегодныхОтпусков и отчетность по сотрудникам, можно быстро локализовать проблему. Помните, что право на отпуск по закону возникает с первого дня работы, поэтому любые «пустые» периоды в программе должны быть оперативно устранены через корректировку или исправление первичных документов.