Способы построение богатого пользовательского интерфейса на управляемых формах 1С
Данный обзор появился в рамках стартапа «Проект Доминикана» и является своеобразным отчетом о проделанной работе перед сообществом 1С.
Управляемые формы закономерно появились в 1С 8.2 с ориентацией на клиент-серверное выполнение. В клиент-серверном подходе происходит четкое разделение выполнения кода на стороне клиента, на стороне сервера и появляются механизмы обмена данными, минимизирующие трафик. С большинством повседневных задач управляемые формы от 1С справляются. Но остаются более специфические задачи, где возможностей родных средств 1С недостаточно. Происходит потеря функциональности по сравнению с неуправляемыми формами. В первую очередь это касается гибкости в настройке интерфейса и добавлении самописных элементов управления.
Недостатки в гибкости настройки интерфейса проявляются, например, в таких деталях, как невозможность развернуть форму на весь экран (http://forum.infostart.ru/forum14/topic67251/ ), невозможность управлять шириной колонки в таблице (http://forum.infostart.ru/forum26/topic48604/ ), невозможность управлять шириной бордюра-отступа между элементами и т.д.
Можно ли воспользоваться другими средствами построения пользовательского интерфейса, отличного от управляемых форм 1С? Да, можно. Ниже перечислены альтернативы. Все альтернативы основаны на html, который запускается внутри Поле HTML документа. Упор сделан на технологии, интегрируемые внутрь 1С. Существуют принципиально отличные технологии, например, написание собственного клиента с доступом к 1С через веб-сервисы, но такие подходы здесь не рассматриваются.
[more]
Active X
Проще всего начать с Active X – это хорошо известный всем по неуправляемым формам способ. Поддержка Active X снята в управляемых формах, но обходной способ запуска остался. Запуск производится через веб-браузер. Способ подключения описан здесь http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=557408
У Active X, на мой взгляд, больше всего недостатков среди всех способов:
1. Процесс создания (примеры от Microsoft на VC++) чрезмерно трудоемкий. Намного проще создать Windows Forms приложение.Net в режиме совместимости с ActiveX (это следующий способ).
2. Потребность в установке дополнительных компонентов на стороне клиента, например, VC++ runtime, ATL. Можно ATL/MFC статически присоединить к библиотеке, но размер ocx/dll увеличится значительно.
3. Жесткая привязка к Windows и IE. Технология от Microsoft, поэтому на Linux работать не будет, использование веб-клиента ограничено IE.
4. Особые требования по настройке безопасности в веб-браузере. Просто так на веб-клиенте ActiveX запустить не получится.
.Net framework (WPF или WinForms)
.Net framework содержит самые мощные средства визуализации вплоть до поддержки 3д и DirectX. Разработка происходит в разы быстрее, чем разработка компонентов ActiveX на VC++. Несмотря на то, что у технологии есть противники, многие ведущие разработчики 1С активно пользуются фреймворком, например, Инталев.
Способ подключения к 1С WinForms-компонентов через Active X описан здесь
//infostart.ru/public/61064/
Способ подключения WPF через HwndHost и .Net Bridge можно найти в декабрьском номере журнала MSDeveloper за 2011 год, а примеры обработок скачать здесь:
http://www.richmedia.us/post/2011/12/28/1c-ms-charts-msdeveloper.aspx
Использование .Net framework 4 перспективно, например, для создания диаграмм, которые превосходят диаграммы 1С. По другим возможностям WPF/WinForms сравнивать не приходится: анимации, градиентов, 3д, DirectX в 1С нет.
Например, такая диаграмма-воронка из .Net 4 используется в Microsoft Dynamics CRM.
Для сравнения такие воронки в 1С:
Биржевая диаграмма средствами .Net,
ниже сравнение из 1С
.Net framework имеет смысл использовать для создания сложных графических или инженерных приложений. Например, .Net хорошо проявил себя в 1С-приложении моделирования производства окон.
Недостатки использования .Net framework аналогичны недостаткам Active X, за исключением того, что WPF/WinForms приложения и быстрее создавать, чем Active X.
Rich Internet Application
Современное «насыщенное» Интернет-приложение строится на основе Silverlight, Adobe Flash или HTML5. HTML5 применительно к 1С вычеркиваем: тонкий клиент 1С использует IE7, а поддержка HTML5 началась с IE9. Silverlight намеренно выставлен вперед, так как этот плагин сочетается с .Net framework – способом, описанном выше. По сути Silverlight – это урезанный .Net framework c WPF-интерфейсом, встроенный в браузер.
Подключение к 1С на примере Silverlight подробно описано в статье
http://1clancer.ru/article/vstraivaem_silverlight-prilozhenie_v_lyubuyu_formu_1s_predpriyatie_800
Важной особенностью Silverlight является то обстоятельство, что в тонком и веб-клиенте интерфейс выглядит идентично. Эта ценность станет особенно заметной при рассмотрении следующего способа HTML+JS. Вторая положительная черта – меньшая требовательность к настройкам безопасности браузера и поддержка не только IE-браузеров. Ниже скриншоты экранов для тонкого клиента и веб-клиента (Google Chrome): открывается страница с демонстрационным CRM-приложением: http://demos.telerik.com/silverlight/crm/
Для Flash аналогично, можно сделать обработку с показом ссылки http://www.asual.com/enflash/demos/xml.html
Метод хорош еще тем, что в большинстве случаев требуется только один файл-контейнер, в который скомпилированы ресурсы. Могут быть сложности с поиском подходящих элементов управления, некоторые из которых могут быть коммерческими.
HTML + JS
Стандартный метод (HTML) для типовых конфигураций 1С. Хорош, когда требуется разместить простейшие html-элементы управления (кнопки, надписи). Если проект усложняется, форматирование становится сложно управляемым из-за противоречия между современными браузерами в веб-клиенте 1С и древним IE6/7 в тонком клиенте. Как следствие появляются разные нехорошие эффекты.
Так должно было быть для страницы http://maninblack.info/_proj/jquery-ui-ribbon/demos/ribbon/
Так получилось в тонком клиенте:
Так должно было быть для страницы http://demos.kendoui.com/websushi/#/menu/1
Так получилось в тонком клиенте
Выводы
Основные сравнительные характеристики выведены в таблицу. Победители по каждой обозначены цветом. Цвет показывает, что победителями стали HTML+JS (что ожидаемо по типовым конфигурациям) и RIA.
Active X | .Net framework | RIA | Html+JS | |
Сложность разработки | Сложная | Средняя | Средняя | Простая |
Совместимость с Linux простого проекта | Нет | Нет | Да | Да |
Совместимость с Liunx сложного проекта* | Нет | Нет | Нет | Нет |
Для веб-клиента требуется IE | Да | Да | Нет | Нет |
Необходимость установки у клиента дополнительных компонентов | Да, без статической линковки | Да | Да (в большинстве случаев Flash установлен) | Нет |
Требования к особой настройке безопасности | Да | Да | Нет | Нет |
Одинаковый вид в тонком и веб-клиенте простого проекта | Да | Да | Да | Да |
Одинаковый вид в тонком и веб-клиенте сложного проекта | Да | Да | Да | Нет |
Число отдельных файлов в проекте | Малое, ocx-файл | Малое, dll-сборка | Малое, xap/swf-контейнер | Большое, отдельные файлы рисунков, js, css |
* На сложных проектах, когда идет взаимный обмен данными между 1С и интерфейсом использование на Linux затруднительно. В большинстве подходов по интеграции используется Windows-элемент управления WebBrowser Control.
В интерфейсе рекомендуется в большинстве случаев использовать родные элементы управления 1С. Сторонними средствами, например, сложно заменить таблицу 1C, источником которой может быть огромный массив данных. 1С в таком случае сама заботится о подгрузке с сервера только отображаемых записей, минимизируя трафик. СКД от 1С получилась тоже весьма достойной использования на формах– этого монстра очень сложно переписать отличными от 1С средствами.
Для простейших «неродных» интерфейсов следует использовать Html+JS способ, как это сделано в типовых 1С-конфигурациях. При более сложном интерфейсе (если добавляется анимация, градиенты, число файлов-ресурсов растет) целесообразнее задействовать подход Rich Internet Application. Для сложных интерфейсов самым подходящим может стать .Net Framework.
Все способы позволяют встроить на управляемую форму «неродные» элементы управления. Ни один вариант не позволит встроить в «неродной» элемент управления элемент управления 1С или управляемую форму 1С. Соответственно, интерфейс нужно планировать без вложенностей, недопустимо, когда, например, в Silverlight-плагин вложена таблица 1С.