Как найти сотрудников без прав на отпуск в 1С:ЗУП 3.1 и исправить ошибки в учете остатков?

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

В процессе ведения кадрового учета в программе 1С:Зарплата и управление персоналом 3.1 (или ЗКГУ) нередко возникает ситуация, когда у сотрудника не заполнены права на отпуск. Это может произойти при приеме на работу или кадровом переводе, особенно если в информационной базе не настроено автоматическое заполнение из штатного расписания или данные переносились из других систем. Проблема заключается в том, что стандартный отчет по остаткам отпусков может не показывать «дыру» в правах за определенный период, что в будущем приведет к занижению компенсации при увольнении или некорректному расчету планового отпуска.

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

Выясним причины отсутствия прав на отпуск

Прежде чем приступать к поиску ошибок, проанализируем, почему поле «Права на отпуск» в документе Прием на работу или Кадровый перевод может остаться пустым. Рассмотрим основные факторы:

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

Разберем ситуацию на примере: сотрудник принят 1 марта, но права на отпуск в документе не указаны. 1 апреля оформляется кадровый перевод, где права на отпуск (28 дней) уже заданы. В результате отчет по остаткам отпусков за период с 1 марта по 31 марта покажет «0» накопленных дней, и обнаружить этот пропуск визуально в общем списке сотрудников крайне сложно.

Решение 1: Использование регистра «Положенные виды ежегодных отпусков»

Основным источником информации о правах сотрудника на отпуск в системе является регистр сведений ПоложенныеВидыЕжегодныхОтпусков. Именно на его данных строятся все отчеты по остаткам. Рассмотрим, как использовать его для поиска ошибок.

Самый простой способ без привлечения программиста — настроить Универсальный отчет. Выполним следующие шаги:

  1. Перейдем в раздел Администрирование — Обслуживание — Отчеты и обработки — Универсальный отчет.
  2. Выберем тип объекта «Регистр сведений» и таблицу «Основные данные» для регистра Положенные виды ежегодных отпусков.
  3. В настройках отчета добавим отбор: Количество дней в году равно 0 или Вид отпуска не заполнен.

Важный нюанс: если записи в регистре на дату приема вообще нет (как в нашем примере с мартом), «Универсальный отчет» по этому регистру не покажет сотрудника, так как записи физически не существует. Для выявления таких «дыр» нам потребуется более сложный подход.

Решение 2: Проверка через стандартный отчет «Остатки отпусков»

Рассмотрим, как заставить стандартный отчет Остатки отпусков работать на нас. Хотя автор темы утверждает, что «поймать косяк нельзя», при детальной настройке это возможно. Проанализируем ситуацию: если мы сформируем отчет на текущую дату, мы увидим итоговое число дней. Но если мы добавим в группировки отчета Периоды стажа, мы увидим, что за первый месяц работы начисления не производились.

Для точечной проверки подозрительного сотрудника используем Справку об остатках отпусков из карточки сотрудника (кнопка «Печать»). Система подробно расписывает все рабочие года и права. Если период с даты приема выпадает из расчета или имеет нулевой остаток при отсутствии отпусков — это явный признак отсутствия прав.

Решение 3: Программный поиск «дыр» в правах (для разработчика)

Если нам необходимо проверить сразу всю базу на наличие пропусков в правах, рассмотрим написание запроса. Проанализируем логику: нам нужно найти сотрудников, у которых дата начала действия прав на отпуск в регистре ПоложенныеВидыЕжегодныхОтпусков не совпадает с датой приема на работу.

Посмотрим на пример запроса, который можно использовать в консоли отчетов или при создании собственного отчета на СКД:


ВЫБРАТЬ
    Сотрудники.Ссылка КАК Сотрудник,
    Сотрудники.ДатаПриема КАК ДатаПриема,
    ЕСТЬNULL(ПраваОтпуска.Период, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаНачалаПрав
ИЗ
    Справочник.Сотрудники КАК Сотрудники
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоложенныеВидыЕжегодныхОтпусков.СрезПоследних(&ДатаПроверки, ) КАК ПраваОтпуска
    ПО Сотрудники.Ссылка = ПраваОтпуска.Сотрудник
ГДЕ
    Сотрудники.ВАрхиве = ЛОЖЬ
    И (ПраваОтпуска.Период > Сотрудники.ДатаПриема 
        ИЛИ ПраваОтпуска.Период ЕСТЬ NULL)

Разберем этот код: мы берем всех работающих сотрудников и соединяем их с регистром прав. Если дата начала действия прав (поле Период в регистре) больше даты приема или запись вовсе отсутствует (NULL), значит, у сотрудника есть период «бесправия» на отпуск.

Решение 4: Исправление данных и профилактика

После того как мы обнаружили «проблемных» сотрудников, необходимо внести исправления. Проанализируем два способа:

  1. Исправление в кадровом документе. Если период еще не закрыт для редактирования, можно зайти в Прием на работу и вручную добавить вид отпуска. После проведения документа запись в регистре обновится автоматически.
  2. Использование документа «Корректировка остатков отпусков». Если период закрыт, мы не рекомендуем перепроводить документы приема. В разделе Кадры — См. также — Корректировки остатков отпусков создадим новый документ. В нем можно не только ввести фактические остатки, но и установить права на отпуск с нужной даты. Это наиболее безопасный способ с точки зрения целостности данных прошлых периодов.

Для предотвращения подобных ситуаций в будущем рассмотрим внедрение небольшого расширения. В модуле объекта документа ПриемНаРаботу в процедуре ПередЗаписью или ОбработкаПроверкиЗаполнения можно добавить проверку:


&После("ОбработкаПроверкиЗаполнения")
Процедура ПроверкаПравНаОтпуск(Отказ, ПроверяемыеРеквизиты)
    Если ЭтотОбъект.ЕжегодныеОтпуска.Количество() = 0 Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Внимание! Не заполнены права на ежегодный отпуск.");
        // Можно установить Отказ = Истина, если проверка должна быть жесткой
    КонецЕсли;
КонецПроцедуры

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

Подведем итоги

Мы выяснили, что отсутствие прав на отпуск в 1С:ЗУП 3.1 — это критичная ошибка, которая может долго оставаться незамеченной. Однако, используя регистр ПоложенныеВидыЕжегодныхОтпусков и отчетность по сотрудникам, можно быстро локализовать проблему. Помните, что право на отпуск по закону возникает с первого дня работы, поэтому любые «пустые» периоды в программе должны быть оперативно устранены через корректировку или исправление первичных документов.

← На главную