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

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

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

Техническое назначение реквизита ДатаРазрешенияВходаВПрограмму

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


Если ВходВПрограммуВключен И НаборЗаписей[0].ДатаРазрешенияВходаВПрограмму <> НачалоДня(ТекущаяДатаСеанса) Тогда 
    Записать = Истина; 
    НаборЗаписей[0].ДатаРазрешенияВходаВПрограмму = НачалоДня(ТекущаяДатаСеанса); 
КонецЕсли;

Проанализируем этот алгоритм. Система проверяет, совпадает ли дата в базе с текущей датой сеанса. Если нет — обновляет её. Это говорит нам о том, что поле ДатаРазрешенияВходаВПрограмму используется как техническая метка последнего успешного подтверждения прав. Оно необходимо для работы следующих механизмов:

Таким образом, мы выяснили причину: это поле не предназначено для ручного управления «будущим» доступом. Оно фиксирует факт настоящего доступа.

Штатные возможности ограничения входа

Посмотрим на стандартный интерфейс карточки пользователя. В разделе администрирования прав существует гиперссылка «Установить ограничение». Рассмотрим, что она позволяет сделать по умолчанию:

  1. Ограничить вход в программу «ДО» определенной даты. Это классический механизм для временных сотрудников или при увольнении.
  2. Установить запрет входа, если пользователь не проявлял активность определенное количество дней.
  3. Заставить пользователя сменить пароль при следующем входе.

Проблема заключается в том, что стандартная конфигурация 1С:ЗУП 3.1 не содержит поля «Вход разрешен С...». Если кадровик просит создать пользователя сегодня (18.09), но разрешить ему вход только с понедельника (22.09), типовыми «галочками» в интерфейсе этого не добиться. Либо флаг Вход в программу разрешен стоит, и доступ есть прямо сейчас, либо его нет.

Решение задачи: Как разрешить вход с конкретной даты

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

Способ 1: Создание расширения конфигурации

Это самый надежный и «правильный» с точки зрения разработки метод. Мы можем добавить новый реквизит в справочник Пользователи (через расширение) под названием ДатаНачалаДоступа. Далее необходимо перехватить процедуру ПриНачалеРаботыСистемы или использовать программные интерфейсы БСП.

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


&После("ПриНачалеРаботыСистемы")
Процедура Расш1_ПриНачалеРаботыСистемы()
    ТекущийПользовательСсылка = Пользователи.ТекущийПользователь();
    ДатаНачала = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийПользовательСсылка, "ДатаНачалаДоступа");
    
    Если ЗначениеЗаполнено(ДатаНачала) И ТекущаяДатаСеанса() < НачалоДня(ДатаНачала) Тогда
        ТекстСообщения = "Доступ к программе будет разрешен только с " + Формат(ДатаНачала, "ДЛФ=D");
        ЗавершитьРаботуСистемы(Ложь, ТекстСообщения);
    КонецЕсли;
КонецПроцедуры

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

Способ 2: Использование регламентного задания

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

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

Алгоритм регламентного задания будет выглядеть так: найти всех пользователей, у которых в доп. реквизите ДатаСтарта стоит сегодняшнее число, и программно установить им свойство ВходРазрешен = Истина.

Способ 3: Настройка прав через «Изменение состава дополнительных реквизитов»

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

Выводы и рекомендации

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

Если ваша кадровая служба настаивает на функционале «Вход с даты», рекомендуем:

Теперь мы точно знаем, зачем в коде 1С:ЗУП происходит перезапись этой даты и почему штатной настройки «Разрешить вход С...» не стоит искать в обычном интерфейсе.

← На главную