Как отключить интерфейс «Такси» в веб-клиенте 1С и решить проблему с синхронными вызовами?

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

При обновлении технологической платформы 1С:Предприятие до современных релизов (начиная с версии 8.3.14) разработчики и администраторы часто сталкиваются с неприятным поведением веб-клиента. Старый, привычный интерфейс «в закладках» (версия 8.2) бесследно исчезает, уступая место принудительному интерфейсу «Такси». Вместе с этим ломается работа кастомизированных и устаревших конфигураций: пользователи начинают получать критические ошибки при попытке открыть любое модальное окно или выполнить простейшие синхронные действия вроде предупреждений.

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

Развеем миф: почему интерфейс «Такси» ни при чем?

В среде разработчиков 1С существует распространенное заблуждение, что именно включение интерфейса «Такси» ломает модальность и синхронные методы (такие как ОткрытьМодально, Предупредить или Вопрос). Давайте проанализируем реальное положение дел.

Интерфейс «Такси» — это исключительно визуальный слой (UI/UX), определяющий внешний вид форм, панелей разделов и навигации. Настоящая причина неработоспособности синхронного кода кроется в эволюции архитектуры веб-браузеров и отказе от устаревших стандартов:

  1. Блокировка основного потока (Event Loop): Современные браузеры (Google Chrome, Mozilla Firefox, Safari, Microsoft Edge) работают в многопоточном режиме, но выполнение JavaScript в конкретной вкладке происходит в одном основном потоке. Синхронный вызов (например, ожидание нажатия кнопки в модальном окне 1С) полностью замораживает этот поток. Пользователь не может свернуть вкладку, переключиться на другую форму или даже корректно закрыть зависшую страницу.
  2. Отказ от плагинов NPAPI и ActiveX: В старых версиях платформы 1С обход этих ограничений в веб-клиенте выполнялся за счет использования специализированных расширений браузера (ActiveX для Internet Explorer или плагинов NPAPI). Сегодня эти технологии полностью признаны небезопасными и заблокированы разработчиками браузеров на уровне движков Chromium и Gecko.
  3. Политика платформы 1С 8.3.14+: Начиная с релиза 8.3.14, компания 1С полностью перевела веб-клиент на технологический движок WebKit. Из веб-клиента был полностью удален код поддержки старого интерфейса версии 8.2. Параметры запуска в URL вроде ?itdi (интерфейс в закладках) теперь попросту игнорируются, а система принудительно инициализирует режим «Такси».

Таким образом, даже если вы найдете способ запустить старый интерфейс, современные браузеры все равно не позволят выполнить синхронный код. Платформа выдаст ошибку: «Использование синхронных методов на клиенте запрещено!».

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

Решение 1. Переход на Тонкий клиент через веб-сервер (Рекомендуемое быстрое решение)

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

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

Давайте разберем по шагам, как это настроить:

  1. Публикация базы на веб-сервере: Информационная база публикуется на веб-сервере Apache или IIS стандартным способом через Конфигуратор (Администрирование – Публикация на веб-сервере...).
  2. Установка платформы у пользователей: На компьютерах удаленных пользователей устанавливается стандартный дистрибутив Тонкого клиента 1С:Предприятие той же версии, что и на сервере (например, 8.3.14.ххх).
  3. Настройка подключения в списке баз: При добавлении новой информационной базы в стартере 1С выбирается вариант подключения «На веб-сервере». В поле адреса вводится URL опубликованной базы (например, https://mycompany.ru/unf_base).

Поскольку Тонкий клиент запускается как полноценное Windows/Linux приложение со своим внутренним runtime-движком (а не внутри песочницы веб-браузера), он игнорирует ограничения безопасности веб-браузеров. Все модальные окна, синхронные предупреждения и вопросы будут работать без единой ошибки, а скорость работы интерфейса зачастую окажется даже выше, чем в браузере.

Решение 2. Автоматический рефакторинг кода в Конфигураторе

Если веб-клиент жизненно необходим (например, к системе подключаются внешние клиенты или подрядчики, у которых нет возможности устанавливать Тонкий клиент), придется адаптировать код конфигурации. Чтобы не переписывать сотни процедур вручную, воспользуемся встроенным инструментом автоматизированного рефакторинга в Конфигураторе 1С.

Давайте посмотрим, как работает этот инструмент:

  1. Откройте конфигурацию в режиме Конфигуратор.
  2. В дереве метаданных выберите модуль, который необходимо переработать (или откройте глобальный поиск по конфигурации для поиска ключевых слов ОткрытьМодально, Предупредить, Вопрос).
  3. Выделите участок кода или перейдите в меню главного окна: Правка – Рефакторинг – Преобразовать модальные вызовы... (или Преобразовать синхронные вызовы...).
  4. Платформа проанализирует код и предложит автоматически заменить устаревшие синхронные конструкции на асинхронные аналоги.

Давайте разберем наглядный пример того, как преобразуется код.

Было (синхронный вариант, вызывающий крах веб-клиента):


Процедура ПроверитьЗаполнениеФормы()
    Если Не ЗначениеЗаполнено(Объект.Контрагент) Тогда
        Предупредить("Пожалуйста, заполните контрагента!");
        Возврат;
    КонецЕсли;
    // Продолжение логики...
КонецПроцедуры

Стало (асинхронный вариант после автоматического рефакторинга):


Процедура ПроверитьЗаполнениеФормы()
    Если Не ЗначениеЗаполнено(Объект.Контрагент) Тогда
        ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьЗаполнениеФормыЗавершение", ЭтотОбъект);
        ПоказатьПредупреждение(ОписаниеОповещения, "Пожалуйста, заполните контрагента!");
    Иначе
        ПроверитьЗаполнениеФормыПродолжение();
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьЗаполнениеФормыЗавершение(ДополнительныеПараметры) Экспорт
    // Сюда управление передается автоматически после нажатия кнопки "ОК" пользователем
КонецПроцедуры

Обратите внимание: Автоматический рефакторинг отлично справляется с простыми линейными конструкциями (например, вывод предупреждения в конце процедуры). Однако, если результат модального окна использовался в сложных разветвленных алгоритмах или циклах, логику придется дорабатывать вручную, разделяя одну процедуру на несколько связанных частей через объект ОписаниеОповещения.

Решение 3. Использование современного асинхронного программирования (Обещания / Promises)

Если у вас есть возможность обновить платформу до более современной (рекомендуется версия 8.3.18 и выше), вам станет доступен революционный механизм асинхронного программирования через операторы Асинх и Ждать.

Этот подход избавляет разработчиков от необходимости создавать громоздкие callback-процедуры (описания оповещений) и позволяет писать чистый, легко читаемый асинхронный код, внешне похожий на классический синхронный.

Давайте проанализируем пример реализации интерактивного вопроса пользователю.

Традиционный асинхронный код с процедурами обратного вызова (сложно читать и поддерживать):


&НаКлиенте
Процедура ВыполнитьУдалениеДанных(Команда)
    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВопросаОбУдалении", ЭтотОбъект);
    ПоказатьВопрос(ОписаниеОповещения, "Вы точно хотите удалить выбранные элементы?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры

&НаКлиенте
Процедура ПослеВопросаОбУдалении(РезультатВопроса, ДополнительныеПараметры) Экспорт
    Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
        // Код удаления данных...
        ПоказатьПредупреждение(, "Данные успешно удалены.");
    КонецЕсли;
КонецПроцедуры

Современный асинхронный код с использованием Асинх и Ждать (код выполняется последовательно, без разрыва контекста):


&НаКлиенте
Асинх Процедура ВыполнитьУдалениеДанных(Команда)
    
    РезультатВопроса = Ждать ВопросАсинх("Вы точно хотите удалить выбранные элементы?", РежимДиалогаВопрос.ДаНет);
    
    Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
        // Логика продолжается в этой же процедуре!
        Ждать ПоказатьПредупреждениеАсинх("Данные успешно удалены.");
    КонецЕсли;
    
КонецПроцедуры

Использование суффикса Асинх у платформенных методов (например, ВопросАсинх, ОткрытьФормуАсинх, ПредупреждениеАсинх) в сочетании с оператором Ждать полностью решает проблему работоспособности веб-клиента в браузере под интерфейсом «Такси».

Временная полумера: откат на платформу 8.3.13

В качестве самого крайнего и временного решения автор ветки форума рассматривал переход на платформу версии 8.3.13. Действительно, в релизах 8.3.13 и ниже веб-клиент еще поддерживал запуск старого интерфейса версии 8.2 без принудительного включения «Такси». Это может дать передышку ИТ-отделу, но важно осознавать долгосрочные риски:

Подведем итог: Попытка отключить интерфейс «Такси» в современных веб-клиентах 1С — это борьба с симптомами, а не с причиной. Единственным надежным и архитектурно правильным решением является постепенный отказ от синхронных вызовов в пользу асинхронности (с использованием Ждать в новых версиях платформы) либо оперативный перевод удаленных пользователей на Тонкий клиент 1С, работающий через HTTP/HTTPS.

← На главную