Перенос данных из старых информационных систем в 1С:Зарплата и Управление Персоналом 3.1 часто сопровождается техническими сложностями. Одной из наиболее неочевидных проблем является ситуация, когда программа «теряет» исторический рабочий год сотрудника. Это происходит в тех случаях, когда на момент переноса (например, на 1 октября) у сотрудника полностью отгулян отпуск, и остаток дней равен нулю. Разберем, почему возникает эта ошибка и как заставить систему видеть правильные периоды.
Проанализируем внутреннюю логику системы. В 1С:ЗУП 3.1 алгоритм расчета остатков отпусков базируется на данных специальных регистров. Когда мы выполняем «краткий» перенос остатками, программа создает документы Начальная штатная расстановка или Ввод остатков отпусков. Если в этих документах мы не указываем конкретный рабочий год, считая, что раз остаток «0», то и вносить ничего не нужно, система оказывается в информационном вакууме.
Для программы отсутствие записи в регистре означает отсутствие истории. В результате, при создании первого же документа Отпуск в новой базе, 1С начинает отсчет нового рабочего года либо с даты приема сотрудника (если она позже даты начала эксплуатации), либо, что чаще всего, с даты самого документа переноса остатков. Таким образом, вместо привычного периода, например, с 15 июня по 14 июня следующего года, мы получаем искусственный период, начинающийся с 1 октября. Выясним, как это исправить программными и методическими средствами.
Самый надежный и «чистый» с точки зрения методологии 1С способ — это зафиксировать последний закрытый рабочий год в документах ввода остатков. Рассмотрим, как это сделать пошагово:
Начальная штатная расстановка в разделе Кадры).Важный нюанс: когда мы указываем значение 0, программа фиксирует в регистре накопления Остатки отпусков «точку опоры». Теперь система знает, что обязательств за прошлый год нет, и следующий рабочий год должен начаться автоматически со следующего дня после указанной даты окончания (в нашем примере — с 15.06.2021). Это именно то поведение, которое мы ожидаем увидеть в документе Отпуск.
Иногда использование Начальной штатной расстановки неудобно, особенно если данных много. Рассмотрим альтернативный путь через специализированный документ. Путь к нему: Кадры — См. также — Остатки отпусков (в зависимости от настроек интерфейса путь может быть Главное — Остатки отпусков).
Создадим новый документ и проанализируем его структуру. В нижней табличной части мы можем детально расписать рабочие года. Если мы добавим строку с последним рабочим годом и нулевым остатком, программа запишет эти данные в регистр. Это позволит избежать ручной правки периодов в каждом будущем отпуске. Как подтверждают участники обсуждения, после такой манипуляции документ Отпуск начинает «красиво» тянуть правильный период.
Разберем еще один тонкий момент, который может помочь в работе. В документах ввода остатков есть поле «На дату». По умолчанию туда ставится дата перехода на новую базу (например, 01.10.2021). Однако, если за текущий рабочий год сотрудник еще не заработал ни одного дня или вы хотите жестко привязать окончание истории к определенному моменту, можно попробовать указать дату окончания последнего закрытого рабочего года.
Внимание: эта дата не должна быть позже даты реального перехода на новую конфигурацию, иначе возникнут коллизии при расчете зарплаты и страховых взносов.
Проанализируем ситуацию, когда даже ручной ввод периода не дает ожидаемого результата. Это может произойти, если в старой базе рабочий год сотрудника был сдвинут из-за определенных событий:
При кратком переносе «остатками» информация о таких сдвигах в новую базу не попадает. Поэтому, перед тем как вводить нулевой остаток, убедитесь, что дата окончания рабочего года в старой базе рассчитана корректно с учетом всех сдвигов. В ЗУП 3.1 вводите уже итоговую, фактически «сдвинутую» дату.
Если в организации сотни сотрудников, ручной ввод нулевых остатков в Начальную штатную расстановку превращается в рутину. В таком случае рассмотрим возможность программного заполнения. Для этого можно использовать документ Перенос данных (раздел Администрирование), который позволяет напрямую писать в регистры. Нам понадобится регистр накопления Остатки отпусков.
Пример логики для программной обработки (псевдокод):
// Для каждого сотрудника из старой базы
Запись = РегистрыНакопления.ОстаткиОтпусков.СоздатьНаборЗаписей();
Запись.Отбор.Регистратор.Установить(ДокументПереносДанных);
НоваяСтрока = Запись.Добавить();
НоваяСтрока.Сотрудник = Стр.Сотрудник;
НоваяСтрока.ВидЕжегодногоОтпуска = Справочники.ВидыОтпусков.Основной;
НоваяСтрока.РабочийГодС = Стр.ДатаНачалаСтараяБаза;
НоваяСтрока.РабочийГодПо = Стр.ДатаОкончанияСтараяБаза;
НоваяСтрока.Количество = 0; // Фиксируем нулевой остаток для истории
Запись.Записать();
После того как мы внесли корректировки (любым из способов), обязательно нужно проверить результат. Лучший инструмент для этого — отчет Справка об остатках отпусков. Найти её можно в карточке сотрудника (кнопка Печать — Справка об остатках отпусков).
Проанализируем показатели справки:
Отпуск автоматически подставит рабочий период, начинающийся с 15.06.2021.Таким образом, мы выяснили, что «пустота» в данных о рабочем годе при переносе остатков — это не ошибка программы, а особенность её расчетного алгоритма. Явное указание последнего рабочего года, даже при отсутствии фактических остатков, является ключом к корректному кадровому учету в 1С:ЗУП 3.1.