При обновлении технологической платформы 1С:Предприятие до современных релизов (начиная с версии 8.3.14) разработчики и администраторы часто сталкиваются с неприятным поведением веб-клиента. Старый, привычный интерфейс «в закладках» (версия 8.2) бесследно исчезает, уступая место принудительному интерфейсу «Такси». Вместе с этим ломается работа кастомизированных и устаревших конфигураций: пользователи начинают получать критические ошибки при попытке открыть любое модальное окно или выполнить простейшие синхронные действия вроде предупреждений.
В этой статье мы подробно разберем, почему это происходит, как на самом деле связаны интерфейс «Такси» и синхронные вызовы, и какие практические шаги можно предпринять для восстановления работоспособности системы без тотального переписывания кода конфигурации.
В среде разработчиков 1С существует распространенное заблуждение, что именно включение интерфейса «Такси» ломает модальность и синхронные методы (такие как ОткрытьМодально, Предупредить или Вопрос). Давайте проанализируем реальное положение дел.
Интерфейс «Такси» — это исключительно визуальный слой (UI/UX), определяющий внешний вид форм, панелей разделов и навигации. Настоящая причина неработоспособности синхронного кода кроется в эволюции архитектуры веб-браузеров и отказе от устаревших стандартов:
?itdi (интерфейс в закладках) теперь попросту игнорируются, а система принудительно инициализирует режим «Такси».Таким образом, даже если вы найдете способ запустить старый интерфейс, современные браузеры все равно не позволят выполнить синхронный код. Платформа выдаст ошибку: «Использование синхронных методов на клиенте запрещено!».
Ниже мы подробно разберем три основных сценария решения этой проблемы, начиная от самых быстрых и заканчивая стратегически правильными.
Если конфигурация сильно дописана, содержит сотни модальных вызовов, а бизнес-процессы компании требуют срочного восстановления удаленной работы пользователей, самым эффективным шагом будет полный отказ от веб-клиента (браузера) в пользу Тонкого клиента 1С.
Многие забывают, что Тонкий клиент умеет работать не только по локальной сети, но и через интернет по протоколам HTTP и HTTPS. При этом он полностью сохраняет поддержку устаревших механизмов модальности, если они разрешены в свойствах конфигурации.
Давайте разберем по шагам, как это настроить:
https://mycompany.ru/unf_base).Поскольку Тонкий клиент запускается как полноценное Windows/Linux приложение со своим внутренним runtime-движком (а не внутри песочницы веб-браузера), он игнорирует ограничения безопасности веб-браузеров. Все модальные окна, синхронные предупреждения и вопросы будут работать без единой ошибки, а скорость работы интерфейса зачастую окажется даже выше, чем в браузере.
Если веб-клиент жизненно необходим (например, к системе подключаются внешние клиенты или подрядчики, у которых нет возможности устанавливать Тонкий клиент), придется адаптировать код конфигурации. Чтобы не переписывать сотни процедур вручную, воспользуемся встроенным инструментом автоматизированного рефакторинга в Конфигураторе 1С.
Давайте посмотрим, как работает этот инструмент:
ОткрытьМодально, Предупредить, Вопрос).Давайте разберем наглядный пример того, как преобразуется код.
Было (синхронный вариант, вызывающий крах веб-клиента):
Процедура ПроверитьЗаполнениеФормы()
Если Не ЗначениеЗаполнено(Объект.Контрагент) Тогда
Предупредить("Пожалуйста, заполните контрагента!");
Возврат;
КонецЕсли;
// Продолжение логики...
КонецПроцедуры
Стало (асинхронный вариант после автоматического рефакторинга):
Процедура ПроверитьЗаполнениеФормы()
Если Не ЗначениеЗаполнено(Объект.Контрагент) Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьЗаполнениеФормыЗавершение", ЭтотОбъект);
ПоказатьПредупреждение(ОписаниеОповещения, "Пожалуйста, заполните контрагента!");
Иначе
ПроверитьЗаполнениеФормыПродолжение();
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьЗаполнениеФормыЗавершение(ДополнительныеПараметры) Экспорт
// Сюда управление передается автоматически после нажатия кнопки "ОК" пользователем
КонецПроцедуры
Обратите внимание: Автоматический рефакторинг отлично справляется с простыми линейными конструкциями (например, вывод предупреждения в конце процедуры). Однако, если результат модального окна использовался в сложных разветвленных алгоритмах или циклах, логику придется дорабатывать вручную, разделяя одну процедуру на несколько связанных частей через объект ОписаниеОповещения.
Если у вас есть возможность обновить платформу до более современной (рекомендуется версия 8.3.18 и выше), вам станет доступен революционный механизм асинхронного программирования через операторы Асинх и Ждать.
Этот подход избавляет разработчиков от необходимости создавать громоздкие callback-процедуры (описания оповещений) и позволяет писать чистый, легко читаемый асинхронный код, внешне похожий на классический синхронный.
Давайте проанализируем пример реализации интерактивного вопроса пользователю.
Традиционный асинхронный код с процедурами обратного вызова (сложно читать и поддерживать):
&НаКлиенте
Процедура ВыполнитьУдалениеДанных(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВопросаОбУдалении", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, "Вы точно хотите удалить выбранные элементы?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВопросаОбУдалении(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
// Код удаления данных...
ПоказатьПредупреждение(, "Данные успешно удалены.");
КонецЕсли;
КонецПроцедуры
Современный асинхронный код с использованием Асинх и Ждать (код выполняется последовательно, без разрыва контекста):
&НаКлиенте
Асинх Процедура ВыполнитьУдалениеДанных(Команда)
РезультатВопроса = Ждать ВопросАсинх("Вы точно хотите удалить выбранные элементы?", РежимДиалогаВопрос.ДаНет);
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
// Логика продолжается в этой же процедуре!
Ждать ПоказатьПредупреждениеАсинх("Данные успешно удалены.");
КонецЕсли;
КонецПроцедуры
Использование суффикса Асинх у платформенных методов (например, ВопросАсинх, ОткрытьФормуАсинх, ПредупреждениеАсинх) в сочетании с оператором Ждать полностью решает проблему работоспособности веб-клиента в браузере под интерфейсом «Такси».
В качестве самого крайнего и временного решения автор ветки форума рассматривал переход на платформу версии 8.3.13. Действительно, в релизах 8.3.13 и ниже веб-клиент еще поддерживал запуск старого интерфейса версии 8.2 без принудительного включения «Такси». Это может дать передышку ИТ-отделу, но важно осознавать долгосрочные риски:
Подведем итог: Попытка отключить интерфейс «Такси» в современных веб-клиентах 1С — это борьба с симптомами, а не с причиной. Единственным надежным и архитектурно правильным решением является постепенный отказ от синхронных вызовов в пользу асинхронности (с использованием Ждать в новых версиях платформы) либо оперативный перевод удаленных пользователей на Тонкий клиент 1С, работающий через HTTP/HTTPS.