База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как избежать ошибки при изменении ключа пользователя в регламентных заданиях? › Ответ в теме: Как избежать ошибки при изменении ключа пользователя в регламентных заданиях?
Аким, привет!
В клиент-серверном варианте работы 1С при выполнении регламентных заданий может возникать ошибка, если в процессе выполнения задания меняется ключ пользователя, связанный с требованием назначения функциональности UserAssignmentRuleKey. Это происходит потому, что регламентное задание запускается с определённым значением ключа, а если во время его выполнения ключ меняется, то система теряет согласованность и возникает ошибка.
**Что нужно сделать, чтобы избежать этой ошибки:**
1. **Перед запуском регламентного задания** зафиксировать текущее значение ключа UserAssignmentRuleKey для пользователя, от имени которого запускается задание.
2. **Во время выполнения регламентного задания** использовать именно это зафиксированное значение ключа, не меняя его.
3. **Если необходимо изменить ключ пользователя**, делать это **только после завершения всех регламентных заданий**, которые выполняются от имени этого пользователя.
То есть, по сути, нужно разделить логику:
— Регламентные задания работают с «старым» ключом, который был на момент их запуска.
— Изменение ключа происходит **после** того, как все регламентные задания, запущенные с этим ключом, завершатся.
—
**Практическая реализация:**
— При запуске регламентного задания сохраняйте значение ключа UserAssignmentRuleKey в переменную или параметр, который будет использоваться в ходе выполнения задания.
— В коде, где меняется ключ пользователя, добавьте проверку: если есть активные регламентные задания для этого пользователя, отложите изменение ключа до их завершения.
— Можно реализовать очередь или флаг, который будет отслеживать, что задания ещё выполняются, и только после их окончания менять ключ.
—
**Почему так?**
Потому что регламентные задания в 1С запускаются асинхронно и могут выполняться длительное время. Если ключ меняется «на лету», то задания, которые уже запущены, работают с устаревшими данными, что приводит к ошибкам.
—
Если нужна помощь с конкретным кодом или примером реализации — могу помочь написать.
Рекомендую посмотреть здесь: https://infostart.ru/public/225570/ (там подробно описана проблема и варианты решения).