При ведении кадрового учета в программе «1С:Зарплата и управление персоналом» (редакция 3.1) специалисты нередко сталкиваются со сложными системными ошибками, возникающими после переноса данных или некорректного обновления конфигурации. Одной из наиболее частых и досадных проблем является невозможность провести документ приема на работу по внутреннему совместительству. Программа блокирует проведение и выдает предупреждение: «Нельзя оформить сотрудника на внутреннее совместительство, так как он не работает в нашей организации». Чтобы избежать сбоев при техническом обслуживании системы, можно использовать инструмент для автоматического обновления и тестирования баз 1С в «тихом» режиме.
В этой статье мы подробно проанализируем, почему возникает данное поведение системы, изучим логику работы конфигурации изнутри и разберем по шагам практические способы исправления этой ошибки.
Для того чтобы понять, почему программа считает работающего сотрудника «чужим», нам необходимо обратиться к архитектуре регистров 1С:ЗУП 3.1. Давайте разберем логику проверки кадрового состояния сотрудника платформой.
При оформлении приема на работу по внутреннему совместительству программа должна удостовериться, что у физического лица уже есть действующее основное место работы в выбранной организации. Для этой проверки система обращается к независимому регистру сведений Текущие кадровые данные сотрудников.
В этом регистре ключевую роль играет реквизит ОформленПоТрудовомуДоговору. Если при переносе данных из предыдущих версий (например, из ЗУП 2.5) или при проведении документа Начальная штатная расстановка этот флаг по основному месту работы не установился (остался в значении Ложь), система делает ошибочный вывод: у физического лица нет действующего трудового договора в организации. Как результат — программа блокирует проведение совместительства.
Если мы заглянем в конфигуратор, то увидим, что за вывод информации о месте работы отвечает общий модуль СотрудникиФормыБазовый, а именно функция ПоясняющаяНадписьКМестуРаботыСотрудника(ДанныеСотрудника, РеквизитыОрганизации, ДатаСведений). Когда свойство ДанныеСотрудника.ОформленПоТрудовомуДоговору возвращает Ложь, программа считает сотрудника не трудоустроенным.
Помимо невозможности оформить внутреннее совместительство, эта скрытая ошибка в регистре может повлечь за собой и другие проблемы в будущем, например:
Прежде чем переходить к редактированию регистров базы данных, давайте убедимся, что кадровик не совершил распространенную методологическую ошибку. Напомним базовое правило работы в 1С:ЗУП 3.1:
Для каждого отдельного трудового договора (будь то основное место или совместительство) в программе должен быть создан отдельный элемент в справочнике «Сотрудники»!
Рассмотрим правильный алгоритм действий кадровика:
Сотрудники создается первая карточка.Сотрудники, нажать кнопку «Создать» и ввести ФИО сотрудника.Физические лица.Если кадровик пытается выбрать в качестве совместителя ту же самую («основную») карточку сотрудника, программа закономерно выдаст ошибку проведения. Если же методология соблюдена, а ошибка все равно появляется — дело в технических данных регистра. Перейдем к их исправлению.
Рассмотрим самый быстрый способ решения проблемы, если она носит единичный характер (касается одного или нескольких конкретных сотрудников).
Выполним следующие шаги для ручного редактирования регистра:
Текущие кадровые данные сотрудников.После этой простой манипуляции попробуем заново провести документ приема на работу по внутреннему совместительству. Программа больше не будет выдавать ошибку.
Если база данных была заполнена путем автоматического переноса из предыдущих версий программ (например, из 1С:ЗУП 2.5), то сведения о трудовых договорах должны были перенестись в специальный технический документ. Для подготовки корректной миграции без потери информации можно изучить раздел с готовыми решениями для переноса данных в 1С:ЗУП.
Давайте проверим эти данные по шагам:
Сведения контракта, договора сотрудника.Если ошибка обнаружена на начальном этапе внедрения программы, когда расчеты по зарплате еще не производились и кадровые переводы в системе отсутствуют, мы можем воспользоваться системным перепроведением документов ввода остатков.
Документ Начальная штатная расстановка при проведении делает комплексные движения по всем кадровым регистрам, включая и Текущие кадровые данные сотрудников.
ИСТИНА.Важное предупреждение: Данный способ категорически запрещено использовать, если после начальной штатной расстановки по сотрудникам уже вводились последующие кадровые документы (переводы, изменения оплаты), рассчитывалась заработная плата или закрывались прошлые периоды! Распроведение ввода остатков нарушит ссылочную целостность кадровой истории и приведет к серьезным ошибкам в расчетах.
Представим ситуацию: перенос данных был выполнен давно, в базе уже рассчитано несколько периодов, а сотрудников с незаполненным признаком трудового договора оказалось несколько десятков или сотен. Распроводить документы расстановки нельзя. В таком случае нам поможет стандартная обработка группового изменения.
Рассмотрим алгоритм группового исправления данных:
Текущие кадровые данные сотрудников.Оформлен по трудовому договору равно Ложь. Дополнительно можно установить отбор по конкретной организации, если учет ведется по нескольким фирмам.Оформлен по трудовому договору, установим галочку в колонке «Изменять» и в колонке «Новое значение» выберем «Да» (Истина).Программа в фоновом режиме обработает все записи регистра по настроенному нами фильтру и принудительно проставит признак активного договора. Это полностью решит проблему для всех сотрудников сразу.
Если вы являетесь программистом или администратором 1С, вы можете написать простую внешнюю обработку, которая автоматически сопоставит данные регистра Виды занятости сотрудников с регистром Текущие кадровые данные сотрудников и точечно исправит расхождения.
Рассмотрим пример программного кода для автоматизации этого процесса:
Выборка = РегистрыСведений.ВидыЗанятостиСотрудников.Выбрать();
Пока Выборка.Следующий() Цикл
// Нас интересуют только сотрудники по основному месту работы
Если Выборка.ВидЗанятости = Перечисления.ВидыЗанятости.ОсновноеМестоРаботы Тогда
// Создаем менеджер записи для обращения к текущим кадровым данным
МенеджерЗаписи = РегистрыСведений.ТекущиеКадровыеДанныеСотрудников.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Сотрудник = Выборка.Сотрудник;
МенеджерЗаписи.Прочитать();
Если МенеджерЗаписи.Выбран() Тогда
// Если флаг договора не установлен, исправляем это
Если Не МенеджерЗаписи.ОформленПоТрудовомуДоговору Тогда
МенеджерЗаписи.ОформленПоТрудовомуДоговору = Истина;
Попытка
МенеджерЗаписи.Записать();
Сообщить("Успешно исправлены кадровые данные сотрудника: " + Выборка.Сотрудник);
Исключение
Сообщить("Не удалось записать данные по сотруднику: " + Выборка.Сотрудник + ". Ошибка: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Данный скрипт безопасно обходит всю базу данных, находит только те записи, в которых действительно присутствует расхождение кадровой логики, и аккуратно перезаписывает их, не нарушая остальную информацию по сотрудникам.
Мы детально проанализировали системную ошибку при приеме внутреннего совместителя в «1С:ЗУП 3.1». Теперь мы знаем, что корень проблемы лежит в регистре Текущие кадровые данные сотрудников. Используя предложенные нами методики ручного исправления, групповой обработки или программного скрипта, вы сможете быстро восстановить корректность учета в базе данных и обеспечить бесперебойную работу кадровой службы.