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

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

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

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

Метод 1: Использование универсальной обработки «Поиск и замена значений»

Это классический инструмент для администраторов и программистов 1С. Суть метода заключается в том, чтобы найти все упоминания «ненужного» сотрудника и заменить их на другого (например, технического «пустого» сотрудника) или просто очистить ссылки.

  1. Запустим обработку ПоискИЗаменаЗначений.epf (ее можно найти на диске ИТС или в составе инструментов разработчика).
  2. В поле «Что заменять» выберем нашего сотрудника из справочника Сотрудники.
  3. В поле «На что заменять» можно выбрать заранее созданного пустого сотрудника или аналогичный объект, если данные нужно «перебросить».
  4. Нажмем кнопку «Найти ссылки». Система выведет список всех документов и регистров, где фигурирует данный объект.
  5. После выполнения замены старый объект можно будет беспрепятственно удалить стандартным механизмом через Администрирование — Обслуживание — Удаление помеченных объектов.

Важно: При замене сотрудника в расчетных документах (Начисление зарплаты, Ведомости) могут поехать итоги по регистрам. Этот метод хорош только в том случае, если сотрудник был заведен ошибочно и по нему не было реальных выплат.

Метод 2: Программное удаление с игнорированием ссылочной целостности

Рассмотрим более радикальный способ, который часто применяют программисты, когда нужно быстро очистить базу. Мы можем написать небольшую обработку, которая принудительно удалит объект, не обращая внимания на связи.

Проанализируем пример кода для удаления объекта:


// Получаем ссылку на сотрудника
СсылкаНаСотрудника = Справочники.Сотрудники.НайтиПоНаименованию("Иванов Иван Иванович");

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

Внимание: После выполнения этого кода во всех документах, где был указан этот сотрудник, появится надпись <Объект не найден>. Это называется «битыми ссылками». Чтобы этого избежать, перед удалением необходимо программно пройтись по всем ссылкам.

Рассмотрим, как правильно собрать все ссылки программно:


МассивСсылок = Новый Массив;
МассивСсылок.Добавить(СсылкаНаСотрудника);

// Находим все места использования объекта
ТаблицаСсылок = НайтиСсылки(МассивСсылок);

Для Каждого СтрокаСсылок Из ТаблицаСсылок Цикл
    // Здесь можно реализовать логику очистки реквизитов в найденных объектах
    // Например, через Метаданные определить тип ссылки и очистить её
КонецЦикла;

Метод 3: Обезличивание данных (согласно 152-ФЗ)

Если ваша задача — не просто удалить запись, а выполнить требования законодательства по защите персональных данных (когда сотрудник требует удалить информацию о себе), в ЗУП 3.1 есть штатный механизм.

Разберем шаги по обезличиванию:

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав — Защита персональных данных.
  2. Найдем пункт Уничтожение персональных данных.
  3. Этот инструмент позволяет заменить ФИО, паспортные данные, СНИЛС и ИНН сотрудника на случайные наборы символов или пустые значения во всех исторических записях.

Это самый безопасный метод с точки зрения учета. Ссылочная целостность базы сохраняется, отчеты продолжают формироваться, но идентифицировать человека по этим записям уже невозможно. Фактически объект остается, но он становится «анонимным».

Метод 4: Удаление связанных объектов через справочник «Физические лица»

Не забываем, что в 1С:ЗУП 3.1 Сотрудник и Физическое лицо — это разные сущности. Ссылки часто ведут именно на физическое лицо (например, в регистрах сведений по НДФЛ и страховым взносам).

Посмотрим на последовательность действий для полной очистки:

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

Технические и юридические последствия удаления

Выясним причину, по которой опытные специалисты 1С предостерегают от удаления сотрудников, по которым уже велись начисления:

  1. Нарушение отчетности: Если сотрудник был принят и уволен в течение одного отчетного периода, и по нему была сдана отчетность (например, ЕФС-1 или РСВ), его удаление приведет к расхождению данных в базе с данными, поданными в контролирующие органы.
  2. Ошибки в СКД: Многие отчеты в ЗУП 3.1 построены на системе компоновки данных. Если в базе останутся записи в регистрах с битыми ссылками, отчет может просто перестать открываться с ошибкой Ошибка компоновки данных: поле не найдено.
  3. Проблема нарастающего итога: Налоги (НДФЛ, взносы) считаются в ЗУП нарастающим итогом с начала года. Удаление одного сотрудника «задним числом» может повлиять на распределение вычетов или предельных величин по базе в целом в некоторых специфических случаях.

Резюме и рекомендации

Проанализировав ситуацию, мы рекомендуем следующий алгоритм действий:

Если сотрудник был заведен полностью ошибочно (не было движений по деньгам): воспользуйтесь обработкой Поиск и замена значений, заменив сотрудника на пустую ссылку, а затем удалите объект.

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

Если требуется удалить данные по закону: используйте штатный помощник уничтожения персональных данных в разделе администрирования. Это самый профессиональный подход в современной экосистеме 1С.

← На главную