Почему ПередНачаломРаботыСистемы() не срабатывает в веб-клиенте 1С и как это исправить?

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

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

Проанализируем ситуацию по шагам: выясним, почему отладчик не останавливается в нужной процедуре, как назначение расширения конфигурации влияет на инициализацию приложения и какие ограничения накладывают сами веб-браузеры на перерисовку окон.

Разберем особенности метода УстановитьРежимОсновногоОкна

Для начала давайте посмотрим на правила использования функции, которая задает вид главного окна приложения. Метод УстановитьРежимОсновногоОкна (на английском SetMainWindowMode) имеет жесткое ограничение: он может быть вызван только внутри обработчика события ПередНачаломРаботыСистемы модуля управляемого приложения.

Если мы попытаемся перенести этот код, например, в ПриНачалеРаботыСистемы, платформа выдаст ошибку или проигнорирует команду. Почему разработчики 1С сделали именно так? Логика заключается в том, что режим главного окна (отображение панелей разделов, навигации, командного интерфейса) определяется самой сутью сеанса пользователя. Платформа должна получить эти настройки до того, как начнет формировать и отрисовывать каркас интерфейса. Когда срабатывает ПриНачалеРаботыСистемы, главное окно уже инициализировано, и менять его каркас поздно.

Пример корректного вызова в модуле приложения:


Процедура ПередНачаломРаботыСистемы(Отказ)
    
    // Устанавливаем режим основного окна без лишних панелей
    КлиентскоеПриложение.УстановитьРежимОсновногоОкна(РежимОсновногоОкнаКлиентскогоПриложения.РабочееМесто);
    
КонецПроцедуры

Проанализируем ограничения веб-браузеров

При работе в веб-клиенте нужно учитывать не только архитектуру 1С, но и политики безопасности современных браузеров (Chrome, Firefox, Safari и др.). Браузеры запрещают программному коду радикально менять отображение экрана или перехватывать управление без прямого действия со стороны пользователя.

Например, если вы хотите установить режим ПолноэкранноеРабочееМесто, веб-клиент 1С не сможет автоматически развернуть окно на весь экран сразу при старте. Сначала пользователю будет показано промежуточное диалоговое окно с предупреждением, и только после ручного клика пользователя произойдет переход в полноэкранный режим. В тонком клиенте таких строгих ограничений безопасности нет, поэтому там интерфейс перестраивается мгновенно и без дополнительных вопросов.

Выясним причину проблемы с расширениями 1С

Если с синтаксисом все верно, но отладчик все равно не останавливается в процедуре ПередНачаломРаботыСистемы при запуске веб-клиента, перейдем к механизму расширений. Как показывает практика, проблема кроется в назначении расширения, в котором вы переопределяете данный обработчик.

Механизм 1С всегда применяет расширения к информационной базе в строгой очередности:

  1. Исправление — наивысший приоритет, применяется самым первым.
  2. Адаптация — средний приоритет.
  3. Дополнение — низший приоритет, применяется последним.

Методом научного перебора было установлено: если переопределение процедуры ПередНачаломРаботыСистемы находится в расширении с назначением Адаптация, вызов в веб-клиенте может просто не произойти. При этом в тонком клиенте этот же код отрабатывает без нареканий.

Как решить проблему: перенесите код переопределения модуля приложения в расширение с назначением Исправление. За счет высшего приоритета платформа успеет корректно применить измененный код на самом раннем этапе инициализации старта веб-клиента, и обработчик сработает.

Ошибки конкретных релизов платформы

Стоит отметить, что подобное странное поведение — это известный баг конкретных версий платформы 1С. В частности, ошибка ярко проявляется на платформе версии 8.3.22.1704. В этой ветке наблюдались нестабильности при чтении платформой кэша расширений непосредственно в браузере. Самые ранние события приложения игнорировались, если находились на уровнях «Адаптации» или «Дополнения».

Если вы столкнулись с подобной проблемой, у вас есть два пути решения:

  1. Изменить назначение расширения на Исправление (как описано выше). Это быстрый обходной маневр, который заставит код работать "здесь и сейчас".
  2. Обновить платформу 1С до более свежего релиза. Разработчики оперативно правят ошибки жизненного цикла расширений в веб-среде. Рекомендуется проверить работу на патчах, начиная с 8.3.22.1709 и выше, где ошибка инициализации кэша расширений в веб-клиенте была устранена.

Таким образом, мы детально разобрали, почему могут возникать сложности с переопределением стартовых процедур через расширения в веб-клиенте, и нашли практические способы обхода этой ошибки платформы.

← На главную