Почему сотрудники по договору ГПХ не попадают в форму подбора в 1С:ЗУП 3.1 и как это исправить?

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

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

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

Выясняем причину: архитектура динамических списков и подбора

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

Основным «узким местом» и одновременно оптимизатором этого механизма является независимый регистр сведений Текущие кадровые данные сотрудников. Программа обращается к нему для моментального получения актуального среза информации о сотруднике: работает ли он сейчас, в каком подразделении находится, действует ли по нему договор ГПХ и т. д. Если по какой-то причине в этом регистре отсутствует запись по конкретному физическому лицу (или его сотруднику-договорнику), система считает, что такого сотрудника «не существует» для текущего контекста работы, и полностью скрывает его из формы подбора.

Существует несколько основных причин, почему запись в регистре Текущие кадровые данные сотрудников может отсутствовать:

  1. Некорректный перенос данных. При переходе со старых версий программы (например, с ЗУП 2.5 на ЗУП 3.1) документы договоров перенеслись, карточки сотрудников создались, но фоновые механизмы платформы не сделали соответствующие записи в кадровый регистр.
  2. Сбои синхронизации. Если данные о договорниках выгружались из внешних систем (бухгалтерских баз, CRM-систем или специализированного софта) программным путем, то стандартные обработчики событий при записи объекта могли быть отключены (параметр ОбменДанными.Загрузка = Истина). В результате карточка создана, а регистр остался пустым.
  3. Ошибки релизов конфигурации. В некоторых релизах ЗУП 3.1.10 и смежных версиях наблюдались системные ошибки, при которых проведение договора ГПХ не инициировало обновление записей в регистре для сотрудников, не имеющих основного трудового договора.

Давайте рассмотрим подробнее, как диагностировать эту проблему и какие существуют методы ее решения.

Шаг 1. Диагностика проблемы через технический режим

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

  1. Откроем главное меню программы 1С (кнопка с тремя полосками в левом верхнем углу).
  2. Перейдем в раздел «Функции для технического специалиста» (в старых версиях платформы данный пункт назывался «Все функции»).
  3. В открывшемся дереве объектов раскроем ветку «Регистры сведений».
  4. Найдем и откроем регистр сведений Текущие кадровые данные сотрудников.
  5. В поле поиска или через стандартный отбор введем фамилию проблемного сотрудника ГПХ.

Если поиск не дал результатов, это подтверждает наш диагноз: записи по сотруднику в регистре нет, именно поэтому подбор его «не видит».

Шаг 2. Простая перезапись карточки сотрудника (Быстрое решение)

Самый простой способ заставить систему создать недостающую запись — принудительно запустить стандартные обработчики платформы ПриЗаписи справочника Сотрудники. В коде конфигурации прописано автоматическое обновление кадрового регистра при любом сохранении карточки сотрудника.

Выполним следующие действия:

  1. Перейдем в раздел «Кадры» — справочник «Сотрудники».
  2. Найдем проблемного договорника и откроем его карточку.
  3. Внесем любое незначительное изменение (например, добавим пробел в поле комментария или временно изменим символ в наименовании, после чего вернем исходный вариант).
  4. Нажмем кнопку «Записать и закрыть» (или просто «Записать»).

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

Шаг 3. Использование группового изменения реквизитов (Для массового исправления)

Что делать, если проблемных сотрудников ГПХ десятки или сотни (например, сразу после масштабного переноса базы)? Вручную открывать и перезаписывать каждую карточку нерационально. Нам поможет стандартный инструмент администрирования.

Разберем по шагам работу с групповой обработкой:

  1. Перейдем в раздел «Администрирование» — «Обслуживание» — «Корректировка данных».
  2. Откроем ссылку «Групповое изменение реквизитов».
  3. В поле «Выбирать элементы в объекте» укажем справочник Сотрудники.
  4. По кнопке «Добавить условие отбора» настроим фильтр: например, укажем конкретную организацию и вид занятости (в нашем случае это должен быть договор ГПХ, либо можно отобрать сотрудников по конкретному списку).
  5. Внизу формы нажмем кнопку «Дополнительные параметры» и убедимся, что установлены флаги «Выполнять в транзакции» и «Записывать объекты принудительно».
  6. Нажимать изменение самих реквизитов не обязательно — достаточно выбрать любое малозначительное служебное поле или просто нажать кнопку «Изменить параметры», выбрав перезапись без изменения значений. Платформа произведет циклическую перезапись всех отобранных объектов, что автоматически сформирует записи в регистре Текущие кадровые данные сотрудников.

Шаг 4. Программное восстановление данных (Для разработчиков)

Если вы хотите решить проблему изящно с помощью встроенного языка 1С или разрабатываете обработку обновления данных после переноса, можно использовать программную перезапись. Рассмотрим пример кода, который выбирает всех «активных» сотрудников ГПХ, у которых отсутствуют записи в кадровом регистре, и принудительно обновляет их кадровые данные с помощью вызова стандартных процедур конфигурации.

Посмотрим на пример кода:


// Создаем запрос для поиска проблемных сотрудников ГПХ
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Сотрудники.Ссылка КАК Сотрудник
    |ИЗ
    |	Справочник.Сотрудники КАК Сотрудники
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанные
    |		ПО Сотрудники.Ссылка = ТекущиеКадровыеДанные.Сотрудник
    |ГДЕ
    |	ТекущиеКадровыеДанные.Сотрудник ЕСТЬ NULL
    |	И Сотрудники.ВАрхиве = ЛОЖЬ";

РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    // Получаем объект сотрудника для последующей перезаписи
    СотрудникОбъект = ВыборкаДетальныеЗаписи.Сотрудник.ПолучитьОбъект();
    Если СотрудникОбъект <> Неопределено Тогда
        Попытка
            // Запись объекта инициирует подписку на событие, 
            // которая заполнит регистр "Текущие кадровые данные сотрудников"
            СотрудникОбъект.Записать();
            ЗаписьЖурналаРегистрации("ОбновлениеКадровыхДанных",
                УровеньЖурналаРегистрации.Информация, , ,
                "Успешно обновлены данные по сотруднику: " + СотрудникОбъект.Наименование);
        Исключение
            ЗаписьЖурналаРегистрации("ОбновлениеКадровыхДанных",
                УровеньЖурналаРегистрации.Ошибка, , ,
                "Ошибка обновления сотрудника " + СотрудникОбъект.Наименование + ": " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
КонецЦикла;

Этот скрипт можно оформить в виде простейшей внешней обработки и запускать каждый раз после проведения масштабных технических работ по импорту сотрудников из сторонних систем. Он гарантирует полноту данных в регистре и исключает человеческий фактор.

Резюме и превентивные меры

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

← На главную