Как опубликовать конфигурацию на обычных формах в веб-клиенте и настроить запуск управляемой формы без лишних панелей?

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

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

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

Выясняем причину ошибки «Переменная не определена (Обработки)»

Типичная ошибка новичков при попытке открыть управляемую форму в модуле управляемого приложения выглядит следующим образом:


Процедура ПриНачалеРаботыСистемы()
    Обработки.АРМ_WEB_пользователя.ПолучитьФорму("Форма").Открыть();
КонецПроцедуры

При запуске системы в веб-клиенте программа выдает критический сбой: {МодульУправляемогоПриложения(3,2)}: Переменная не определена (Обработки). Давайте проанализируем ситуацию и разберем, почему так происходит.

Дело в том, что процедура ПриНачалеРаботыСистемы() выполняется на клиенте. В управляемом интерфейсе на стороне клиента менеджеры прикладных объектов (такие как Справочники, Документы, Обработки) недоступны. Контекст клиента максимально облегчен для обеспечения высокой скорости работы в браузере. Попытка обратиться к свойству Обработки приводит к закономерной ошибке компиляции, так как клиент ничего не знает о метаданных конфигурации напрямую.

Также важно помнить, что вы не можете получить форму на сервере (например, вызвав серверный общий модуль) и передать её на клиент. Объект формы не сериализуется и не может пересекать границу «клиент-сервер».

Правильное открытие управляемой формы через ОткрытьФорму()

Для открытия управляемых форм на клиенте в платформе 1С предусмотрен специализированный метод ОткрытьФорму(). Этот метод принимает на вход строковое имя формы, инициализирует её создание на сервере и корректно отображает пользователю на клиенте.

Разберем по шагам, как применить это решение. Нам потребуется изменить код в модуле управляемого приложения следующим образом:


Процедура ПриНачалеРаботыСистемы()
    // Открываем форму обработки по её полному пути в метаданных
    ОткрытьФорму("Обработка.АРМ_WEB_пользователя.Форма.Форма"); 
КонецПроцедуры

При таком подходе платформа сама берет на себя все клиент-серверные взаимодействия: обращается к серверу, генерирует структуру формы и возвращает её в веб-браузер пользователя. Это простое и надежное решение для быстрого старта.

Более правильный способ: Настройка начальной страницы (без кода)

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

Рассмотрим более элегантный способ — назначение формы АРМ в качестве Начальной страницы (Рабочего стола) конфигурации. В этом случае форма будет открываться платформой автоматически, занимая всё доступное пространство экрана, без лишних рамок окон.

Выполним настройку по шагам в Конфигураторе:

  1. В дереве метаданных кликните правой кнопкой мыши по самому верхнему элементу (корню конфигурации).
  2. В контекстном меню выберите пункт «Открыть рабочую область начальной страницы».
  3. В открывшемся окне настройки выберите шаблон разметки (для веб-клиента лучше всего подходит одноколоночный вариант).
  4. В списке доступных форм найдите форму вашей обработки АРМ_WEB_пользователя и добавьте её в колонку начальной страницы.
  5. Удалите или закомментируйте код ручного открытия формы из процедуры ПриНачалеРаботыСистемы().

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

Как скрыть левую панель интерфейса «Такси» в веб-клиенте

По умолчанию интерфейс «Такси» выводит на экран панель разделов и панель инструментов (меню функций, историю, поиск). Для узкоспециализированного веб-АРМ эти панели только засоряют экранное пространство. Существует два способа убрать левую панель: интерактивный и программный.

Вариант А. Интерактивная настройка в Конфигураторе

Если веб-интерфейс создается для всех пользователей этой базы одинаковым, проще всего отключить панели глобально:

  1. Нажмите правой кнопкой мыши по корню конфигурации и выберите пункт «Открыть интерфейс клиентского приложения».
  2. В открывшемся редакторе панелей найдите разделы «Панель разделов» и «Панель инструментов».
  3. Перетащите эти элементы мышкой из левой колонки вниз — в серую область «Неиспользуемые».
  4. Сохраните конфигурацию. При запуске веб-клиента интерфейс станет чистым.

Вариант Б. Программное скрытие панелей для веб-клиента

Если база используется одновременно и в тонком клиенте (где панели нужны), и в веб-клиенте (где их нужно скрыть), применим гибкую программную настройку.

Сначала создадим общий модуль. Назовем его, например, РаботаСИнтерфейсомКлиента. В свойствах модуля обязательно установим галочки «Сервер» и «Вызов сервера». Напишем в нем процедуру работы с системным хранилищем настроек:


Процедура СкрытьПанелиДляВебКлиента() Экспорт
    // Инициализируем новые пустые настройки интерфейса
    Настройки = Новый НастройкиИнтерфейсаКлиентскогоПриложения;
    НастройкиСостава = Новый НастройкиСоставаИнтерфейсаКлиентскогоПриложения;
    
    // Оставляем состав панелей пустым. При необходимости сюда можно добавить, 
    // например, только верхнюю панель открытых окон:
    // НастройкиСостава.Верх.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельОткрытых"));
    
    Настройки.УстановитьСостав(НастройкиСостава);
    
    // Перезаписываем системные настройки интерфейса текущего пользователя
    ХранилищеСистемныхНастроек.Сохранить(
        "Общее/НастройкиИнтерфейсаКлиентскогоПриложения", 
        "", 
        Настройки
    );
КонецПроцедуры

Теперь настроим вызов этой процедуры при старте системы. В Модуле управляемого приложения дополним предопределенную процедуру следующим кодом:


Процедура ПриНачалеРаботыСистемы()
    #Если ВебКлиент Тогда
        // Очищаем состав панелей на сервере
        РаботаСИнтерфейсомКлиента.СкрытьПанелиДляВебКлиента();
        // Принудительно обновляем интерфейс текущего сеанса на клиенте
        ОбновитьИнтерфейс();
    #КонецЕсли
КонецПроцедуры

Важное примечание: Если в вашей конфигурации используется БСП (Библиотека стандартных подсистем), она может автоматически переопределять и сбрасывать настройки интерфейса при первом входе нового пользователя. В таком случае программное управление составом панелей следует внедрять в общий модуль ПользователиПереопределяемый в процедуру ПриУстановкеНачальныхНастроек.

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

← На главную