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