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

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

В процессе работы с программными продуктами 1С:Зарплата и управление персоналом 3.1 часто возникает задача оперативного ограничения доступа к базе данных для сотрудников, которые покидают организацию. Это критически важно с точки зрения информационной безопасности. Рассмотрим, как реализовать автоматическое отключение пользователей в различных версиях программы (ПРОФ и КОРП) и проанализируем технические нюансы этого процесса.

Решение для версии 1С:ЗУП КОРП: штатные возможности

Если ваша организация использует версию КОРП, разработчики уже предусмотрели типовой механизм для решения данной задачи. Нам не потребуется писать программный код, достаточно изменить настройки системы. Разберем по шагам, как это сделать:

  1. Перейдем в раздел Настройка, далее выберем пункт Управление персоналом.
  2. Найдем блок настроек Самообслуживание сотрудников (обычно он располагается в нижней части формы).
  3. Установим флаг Запрещать доступ в программу уволенным сотрудникам автоматически.

Проанализируем, как работает этот механизм изнутри. В системе существует регламентное задание ОтключениеДоступаУволеннымСотрудникам. Оно регулярно проверяет наличие проведенных документов Увольнение и сопоставляет уволенных сотрудников с пользователями информационной базы. Если соответствие найдено, в карточке пользователя устанавливается признак Недействителен.

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

Решение для версии 1С:ЗУП ПРОФ: разработка расширения

В версии ПРОФ вышеуказанная настройка отсутствует, поэтому нам потребуется доработка. Рассмотрим наиболее эффективный способ — использование расширения конфигурации. Наша задача — перехватить момент проведения документа Увольнение и программно отключить связанного пользователя.

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

Рассмотрим пример программной логики, которую можно внедрить в расширение:


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

Альтернативный вариант: регламентное задание для версии ПРОФ

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

Разберем алгоритм работы такого задания:

  1. Выбираем всех пользователей информационной базы, у которых не установлен флаг Недействителен.
  2. Для каждого пользователя получаем связанное ФизическоеЛицо.
  3. Проверяем по регистру сведений ТекущиеКадровыеДанныеСотрудников (или аналогичному), является ли данное физлицо работающим на текущую дату во всех организациях базы.
  4. Если работающих сотрудников по данному физлицу не обнаружено — устанавливаем признак Недействителен в объекте Пользователь.

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


ВыборкаПользователей = Справочники.Пользователи.Выбрать();
Пока ВыборкаПользователей.Следующий() Цикл
    
    Если ВыборкаПользователей.Недействителен Тогда
        Продолжить;
    КонецЕсли;
    
    ФизЛицо = ВыборкаПользователей.ФизическоеЛицо;
    Если ФизЛицо.Пустая() Тогда
        Продолжить;
    КонецЕсли;
    
    // Проверка актуальности работы через кадровые данные
    АктуальнаяРабота = КадровыйУчет.ЕстьРаботающиеСотрудникиУФизическогоЛица(ФизЛицо);
    
    Если Не АктуальнаяРабота Тогда
        ОбъектПользователь = ВыборкаПользователей.ПолучитьОбъект();
        ОбъектПользователь.Недействителен = Истина;
        ОбъектПользователь.Записать();
    КонецЕсли;
    
КонецЦикла;

Интеграция с Active Directory (AD)

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

Рассмотрим схему взаимодействия:

Такой подход считается наиболее надежным, так как он закрывает доступ не только к 1С, но и к корпоративной почте, файловым серверам и другим ресурсам организации.

Важные замечания по безопасности

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

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

Таким образом, автоматизация отключения пользователей — это комплексная задача, требующая учета кадровой специфики (совместительство) и архитектуры связи объектов Сотрудник — Физическое лицо — Пользователь. Использование штатных средств КОРП или грамотно написанного расширения в ПРОФ позволяет минимизировать риски несанкционированного доступа после увольнения персонала.

← На главную