← На главную
Нередко системные администраторы и программисты сталкиваются с ситуацией: пользователь выбирает информационную базу в списке, успешно вводит логин и пароль, начинается загрузка, на мгновение появляется интерфейс программы, после чего клиентское приложение 1С моментально закрывается без вывода явных сообщений об ошибках. При этом под отдельными пользователями программа может задавать вопрос о подтверждении выхода, и при нажатии кнопки продолжения сеанс успешно продолжается. Разберем детально, почему возникает такое поведение платформы и как по шагам восстановить нормальную работоспособность системы.
Причины самопроизвольного закрытия программы при старте
Проанализируем основные факторы, которые приводят к принудительному завершению сеанса сразу после запуска:
- Невыполненные процедуры обновления информационной базы (БСП): если структура метаданных была обновлена, но в пользовательском режиме еще не отработали фоновые или обязательные обработчики обновления данных, типовая конфигурация при входе обычного пользователя инициирует штатный выход. Для продолжения работы требуется вход администратора.
- Последствия динамического обновления конфигурации: при обновлении конфигурации базы данных «на лету» без монопольного захвата и перезапуска рабочих процессов сервера может произойти рассинхронизация таблиц
Config и ConfigSave, а также кэша метаданных. В результате клиентское приложение получает поврежденные инструкции инициализации интерфейса.
- Программный вызов завершения работы в модуле управляемого приложения: в событиях
ПередНачаломРаботыСистемы или ПриНачалеРаботыСистемы может выполняться проверка (например, контроль блокировки соединений, проверка прав или параметров конфигурации), вызывающая метод ЗавершитьРаботуСистемы().
- Влияние сторонних расширений: модификации в подключенных расширениях, перехватывающие процедуры старта сеанса, могут содержать ошибки или принудительно прерывать запуск при несоблюдении заданных разработчиком условий.
Особенность работы диалога подтверждения закрытия
Выясним причину, по которой некоторые пользователи могут продолжить работу, если у них включена настройка подтверждения выхода из программы. В платформе 1С предусмотрено два метода завершения работы:
- Метод
ЗавершитьРаботуСистемы() инициирует штатный выход и всегда вызывает обработчик события ПередЗавершениемРаботыСистемы. Если в параметрах пользователя включен интерактивный запрос на выход, нажатие кнопки «Продолжить работу» устанавливает параметр Отказ = Истина, что полностью отменяет процедуру закрытия программы и позволяет пользователю остаться в сеансе.
- Метод
ПрекратитьРаботуСистемы() завершает работу клиента безусловно, игнорируя любые диалоги и обработчики отмены.
Пошаговая диагностика через Конфигуратор
Рассмотрим, как локализовать место, в котором происходит закрытие приложения:
- Откроем базу в режиме Конфигуратор.
- Перейдем в дерево метаданных, откроем корень конфигурации и нажмем правой кнопкой мыши — выберем Открыть модуль управляемого приложения.
- Найдем процедуры
ПередНачаломРаботыСистемы и ПриНачалеРаботыСистемы.
- Установим точку останова (клавиша F9) на первую исполняемую строку в процедуре
ПередНачаломРаботыСистемы.
- Запустим отладку клиентского приложения (клавиша F5) и пошагово (клавиша F11) пройдем выполнение процедур инициализации, отслеживая, в какой момент вызывается закрытие программы или срабатывает условие выхода.
Решение 1: Завершение процедур обновления данных администратором
Если конфигурация обновлялась, типовые механизмы блокируют работу пользователей до тех пор, пока ответственный пользователь не завершит процедуру обновления.
- Запустим 1С:Предприятие под учетной записью с полными административными правами. Обратите внимание, что пользователю должны быть назначены роли
ПолныеПрава и Администрирование (а в некоторых конфигурациях также отдельная роль ОбновлениеКонфигурацииБазыДанных).
- Дождемся открытия программы и появления окна «Результаты обновления программы».
- Дождемся полного завершения всех фоновых и дополнительных процедур обработки данных.
- После успешного завершения процедур обновления выполним вход под обычным пользователем и проверим стабильность запуска.
Решение 2: Исправление последствий динамического обновления
Разберем процедуру очистки поврежденного кэша метаданных и приведения базы в согласованное состояние:
- Откроем базу в режиме Конфигуратор.
- Внесем любое незначительное изменение в любой модуль (например, добавим пробел или строку комментария), чтобы активировать возможность обновления базы данных.
- Сохраним изменения и нажмем F7 (Обновить конфигурацию базы данных), выполнив полное монопольное сохранение.
- Если используется клиент-серверный вариант, очистим серверный кэш:
- Остановим службу 1C:Enterprise Server Agent через консоль служб операционной системы.
- Перейдем в каталог данных кластера серверов (каталог
srvinfo) и удалим временные папки кэша рабочих процессов (каталоги вида snccntx*).
- Запустим службу сервера 1С заново.
- Для очистки локального кэша на клиентских рабочих станциях добавим параметр
/ClearCache в строку дополнительных параметров запуска базы в окне запуска 1С.
Решение 3: Проверка и отключение расширений конфигурации
Если проблема вызвана некорректно работающим расширением, выполним следующие действия:
- В Конфигураторе откроем меню Конфигурация — Расширения конфигурации.
- Проверим наличие сторонних расширений, перехватывающих события инициализации системы.
- Поочередно отключим активность подозрительных расширений (сняв флажок активности или временно удалив их из списка) и проверим запуск программы в пользовательском режиме.