Рассмотрим распространенную и крайне неприятную проблему, с которой часто сталкиваются 1С-разработчики при попытке развернуть новую (пустую) базу данных из имеющегося файла конфигурации .cf. Ситуация выглядит следующим образом: конфигурация успешно загружается в СУБД или файловый вариант через Конфигуратор, однако при первом же запуске в режиме «1С:Предприятие» система аварийно завершает работу, выдавая ошибку авторизации и указывая на невозможность обращения к параметрам сеанса.
В этой статье мы подробно разберем, почему возникает подобный сбой, проанализируем внутренние механизмы Библиотеки стандартных подсистем (БСП) и рассмотрим несколько надежных способов устранения этой ошибки как путем доработки кода, так и с помощью административных методов обхода проблемы.
Для того чтобы понять природу ошибки, проанализируем текст сообщения, которое выдает платформа:
Ошибка при получении значения атрибута контекста (ТекущийПользователь) по причине: Авторизация не выполнена. Работа системы будет завершена. Пользователь: Админ не найден в справочнике "Пользователи".
И следом за ним:
Недопустимое обращение к необновленным параметрам работы программы (например, к некоторым параметрам сеанса)...
Давайте разберем по шагам, что происходит в системе в момент первого запуска новой информационной базы:
Обработка.Чат.Форма.Форма) разработчики вывели на рабочий стол (начальную страницу) кастомный интерфейс чата. В коде этой формы при ее создании на сервере (строка 150) происходит обращение к параметру сеанса: ПараметрыСеанса.ТекущийПользователь.Пользователи физически отсутствует запись для текущей учетной записи администратора. Платформа 1С расценивает попытку прочитать эти данные как критическую ошибку безопасности и аварийно прерывает сеанс.Таким образом, корень проблемы кроется в преждевременном обращении к недоступным параметрам сеанса из формы, открывающейся при старте системы, до того как БСП завершила свою базовую настройку.
Ниже мы рассмотрим детальные варианты решения этой проблемы, начиная от правильной доработки кода до административных способов быстрого обхода.
---
Если мы хотим решить проблему раз и навсегда на уровне кода конфигурации, нам необходимо скорректировать модуль формы, которая выводится на начальную страницу. Согласно стандартам разработки фирмы «1С» для БСП, любая форма, предназначенная для рабочего стола, обязана содержать проверку готовности системы к работе.
Давайте посмотрим, как должен выглядеть правильный код инициализации формы. В обработчике события ПриСозданииНаСервере первым делом необходимо вызвать специализированную процедуру общего назначения:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Обязательный вызов БСП для всех форм начальной страницы!
Если Не ОбщегоНазначения.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка) Тогда
Возврат;
КонецЕсли;
// Ваш прикладной код, выполняемый после проверки готовности системы:
// НЕ используем прямое обращение к ПараметрыСеанса.ТекущийПользователь!
// Вместо этого вызываем безопасную функцию БСП:
ТекущийПользовательСистемы = Пользователи.АвторизованныйПользователь();
Запрос.УстановитьПараметр("Получатель", ТекущийПользовательСистемы);
КонецПроцедуры
Разберем, что делает данный код:
ОбщегоНазначения.ПриСозданииНаСервере() проверяет, завершено ли обновление информационной базы. Если система находится в процессе обновления, этот метод безопасно взведет флаг Отказ = Истина и не позволит форме открыться раньше времени, предотвращая падение платформы.ПараметрыСеанса.ТекущийПользователь мы применили безопасный вызов функции общего модуля БСП Пользователи.АвторизованныйПользователь() (или Пользователи.ТекущийПользователь()). Этот метод умеет корректно обрабатывать ситуации, когда параметры сеанса еще не полностью инициализированы, возвращая пустую ссылку вместо генерации критического исключения.---
Если вам нужно запустить информационную базу «здесь и сейчас», а времени или прав на переписывание кода конфигурации нет, можно применить административный способ обхода. Нам необходимо временно убрать проблемную форму с начальной страницы, дать БСП завершить первый запуск, а затем вернуть настройки на место.
Выполним следующие шаги:
Чат) и временно удалите ее из списка отображаемых на рабочем столе шаблонов.F7).Пользователи и корректно свяжет его с учетной записью Конфигуратора.F7).При последующих запусках ошибка возникать уже не будет, так как все необходимые параметры работы программы и записи в справочниках уже созданы в базе данных.
---
Как совершенно справедливо заметили практикующие разработчики в обсуждении на форуме, при работе с сильно кастомизированными конфигурациями, снятыми с поддержки, оптимальным вариантом создания новой чистой базы является метод постепенного переноса изменений.
Проанализируем этот алгоритм подробнее:
Пользователи.Этот способ гарантирует, что все служебные константы и структуры БСП инициализируются в штатном режиме без конфликтов с недоработанным кодом кастомных модулей.
---
Существует еще один быстрый способ заставить систему принудительно выполнить обработчики обновления БСП до того, как начнет инициализироваться интерфейс пользователя и формы рабочего стола. Для этого мы можем воспользоваться специальным ключом запуска платформы.
Разберем, как его применить:
/C ЗапуститьОбновлениеИнформационнойБазыПри передаче этого параметра система запускается в специальном монопольном режиме выполнения обработчиков обновления БСП, минуя открытие стандартного интерфейса и начальной страницы. После успешного завершения процедуры обновления закройте программу, обязательно удалите этот ключ из параметров запуска и зайдите в базу в обычном режиме.
---
Чтобы раз и навсегда застраховать себя от подобных ошибок при развертывании баз на базе БСП, запомните золотое правило разработки:
Никогда не создавайте пользователей в Конфигураторе пустой базы вручную до первого запуска системы!
Если вы создадите пользователя «Админ» в Конфигураторе пустой базы заранее, то при первом запуске БСП не сможет сопоставить его со справочником Пользователи, так как сам справочник еще пуст, а механизмы создания новой записи будут заблокированы проверками безопасности платформы. Всегда запускайте пустую базу под пустым списком пользователей, позволяя БСП самостоятельно и корректно выполнить первоначальное конфигурирование прав доступа.