Ситуация, когда учетная запись пользователя удалена из списка в Конфигураторе, но при этом элемент в справочнике Пользователи в режиме «Предприятие» остался нетронутым, является классической технической коллизией. В таких случаях нарушается связь между авторизационными данными (логином/паролем) и внутренними настройками программы, такими как права доступа, история документов и персональные настройки интерфейса. Разберем подробно, как восстановить эту связь, основываясь на особенностях платформы 8.3 и конфигураций типа «Управление торговлей 10.3».
Для начала проанализируем, как 1С идентифицирует пользователя. В системе существует два уровня хранения данных о субъекте:
UUID (GUID).Связь между ними осуществляется через реквизит справочника ИдентификаторПользователяИБ. Когда вы удаляете пользователя в Конфигураторе, его уникальный идентификатор исчезает навсегда. Даже если вы создадите нового пользователя с точно таким же именем, платформа присвоит ему новый UUID. В результате старый элемент справочника перестанет «узнавать» этого пользователя.
Рассмотрим наиболее простой и корректный способ для конфигураций на обычных формах (УТ 10.3, КА 1.1, УПП 1.3). Если текущий администратор обладает полными правами, открывать Конфигуратор может и не потребоваться.
Выполним следующие шаги:
Пользователи.UUID в реквизит справочника.Это самый безопасный путь, так как программный код конфигурации сам заботится о целостности данных.
Проанализируем ситуацию, когда необходимо действовать через Конфигуратор. Существует мнение, что достаточно создать пользователя с тем же именем. Это сработает только в том случае, если в конфигурации реализован механизм «сопоставления по имени» при первом входе. Однако чаще всего потребуется ручная корректировка.
Алгоритм действий:
Пользователи в режиме «Предприятие».Если автоматическое сопоставление не произошло, нам нужно «подсунуть» справочнику идентификатор нового пользователя ИБ. Выясним, как это сделать программно. Рассмотрим пример кода, который можно запустить во внешней обработке:
// Найдем пользователя информационной базы по имени
ИмяПользователя = "ИвановИИ"; // Укажите нужное имя
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
Если ПользовательИБ <> Неопределено Тогда
// Получаем его новый уникальный идентификатор
НовыйUUID = ПользовательИБ.УникальныйИдентификатор;
// Находим элемент в справочнике
СсылкаНаПользователя = Справочники.Пользователи.НайтиПоНаименованию(ИмяПользователя);
Если Не СсылкаНаПользователя.Пустая() Тогда
ОбъектПользователь = СсылкаНаПользователя.ПолучитьОбъект();
// Записываем новый идентификатор в технический реквизит
ОбъектПользователь.ИдентификаторПользователяИБ = НовыйUUID;
ОбъектПользователь.Записать();
Сообщить("Связь успешно восстановлена для: " + ИмяПользователя);
КонецЕсли;
КонецЕсли;
Внимание: Имя реквизита ИдентификаторПользователяИБ может отличаться в зависимости от версии вашей конфигурации. Перед запуском кода рекомендуется проверить структуру справочника в Конфигураторе.
В процессе восстановления прав и проверки журналов регистрации вам может потребоваться работа с временными интервалами. Посмотрим на небольшую тонкость при работе с объектом Дата в 1С. Если в коде или в табло вы используете выражение типа Объект.Дата + 1, помните, что в 1С к дате прибавляются секунды. Таким образом, прибавив единицу, вы сдвинете время документа всего на одну секунду вперед.
Для проверки выражений в режиме обычных форм (как в УТ 10.3) удобно использовать Табло:
'20231231235959' + 1.01.01.2024 00:00:00.Этот метод позволяет быстро проверять вычисления, не прибегая к написанию отдельных обработок в процессе администрирования пользователей и данных.
Для восстановления удаленного пользователя:
Пользователи в режиме «Предприятие».UUID в справочнике.