Автоматическая генерация Web-интерфейса с использованием http-сервисов




Пример автоматической генерации Web-интерфейса с использованием http-сервисов.

Вводная

Данная публикация является своеобразным proof-of-concept, т.е. доказательством осуществимости того, что можно полностью генерировать веб-интерфейс сопоставимый по качеству с современными вэб-сайтами, а не тем стандартным интерфейсом, который предоставляет нам 1С из коробки в виде вэб-клиента.

Это не полнофункциональный интерфейс. Демонстрируется только возможность перехода по спискам, открытия ссылочных объектов и записи. Следует рассматривать данную публикацию именно с позиции «демонстрации возможностей», т.е. если возможно это, то можно реализовать и все остальное.

Зачем мне это, если есть стандартный 1С веб-интерфейс? 

Немного хочу пояснить для тех, кто в комментариях задает подобные вопросы. Данная публикация своего рода мое виденье того, каким должен быть интерфейс 1С именно в Web. И хотя до практического применения его далеко, этой публикацией я скорее хотел бы подтолкнуть сообщество на обсуждение того, какой мы видим веб-интерфейс 1С в будущем.

Некоторый говорят про мифический «user-experience». Так вот, у каждой платформы – свой user-experience. Если вы работаете в веб – вы ожидаете видеть интерфейсы примерно похожие на те, что есть в веб. В качестве примера можно показать мобильное приложение от того же 1С. Оно как минимум напоминает мобильные приложения. Стандартное же веб приложение от 1С напоминает 1С засунутое в браузер включая заголовок и все его меню «файл…» и прочее, чего никогда не увидишь в интернете.

Принцип работы

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

Реквизиты объектов собираются обходом по списку Метаданные.<Менеджер>.Реквизиты

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

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

Ограничения

Http-сервисы появились только в 8.3.4. Так что требуется платформа не ниже 8.3.4.

В разработке используется функция «СтрШаблон», которая доступны только в версии 8.3.5. Если нужно запустить на более ранней версии 1С, в модуле «UNI_Глобальный», следует переименовать функцию СтрШаблон_8_3_5() в СтрШаблон() – она полностью эмулирует действие функции из 8.3.5.

Состав

  • uni.cf: собственно подсистема.
  • Каталоги «css», «js», «fonts» — взяты из последней версии bootstrap фреймворка.

Свои стили и скрипты находятся в custom.css и custom.js файлах соответственно.

Установка

1. 1C: загружаете подсистему «UNI» в вашу конфигурацию.

2. Публикация:

    2.1. Если публикуете на IIS: публикуем базу. Размещаем каталоги «css», «js», «fonts» в каталоге публикации (внутри каталогов уже лежат файлы настроек web.config, чтобы IIS корректно понимал static-файлы).

    2.2. Если публикуете на Apache: публикуем базу. Например в каталог «C:webdemo». Далее создаете каталог «demo_static» — сюда складываете каталоги «css», «js» и «fonts». Теперь надо в файле настроек apache указать пути к данным каталогам. Получим следующее:

Alias "/demo/fonts" "C:/Web/demo_static/fonts/"
<Directory "C:/Web/demo_static/fonts/">
Order allow,deny
Allow from all
</Directory>

Alias "/demo/js" "C:/Web/demo_static/js/"
<Directory "C:/Web/demo_static/js/">
Order allow,deny
Allow from all
</Directory>

Alias "/demo/css" "C:/Web/demo_static/css/"
<Directory "C:/Web/demo_static/css/">
Order allow,deny
Allow from all
</Directory>

# 1c publication
Alias "/demo" "C:/Web/demo/"
<Directory "C:/Web/demo/">
AllowOverride All
Options None
Order allow,deny
Allow from all
SetHandler 1c-application
ManagedApplicationDescriptor "C:/Web/demo/default.vrd"
</Directory>

3. В модуле HTTP-сервиса «uni» необходимо указать имя публикации. Функция «ПолучитьБазовыйURL()», установите значение переменной «ИмяПубликации» — то, каким именем вы опубликовали базу.

4. Перезапускаем IIS/Apache.

5. Вводим в адресной строке «http://localhost/<Имя публикации>/hs/uni/». Важно, чтобы на конце был слеш «/»!

18 Comments

  1. a.baturskiy_2015

    Старик, а что тут остается от 1С? Для чего она? 🙂

    (не риторический вопрос)

    Reply
  2. starik-2005

    (1) a.baturskiy_2015, походу она тут типа как среда, содержащая бизнес-логику. Я бы, например, не стал делать интернет-магазин на 1С — дорого, тормозно, излишне пафосно. А вот битрикс для этого с горем пополам мог бы подойти. Но, конечно, лучше чего-нибудь более серьезное для этого использовать.

    Reply
  3. BurningChrome

    (1) a.baturskiy_2015, Вся логика пишется на 1С. Web — это только фасад.

    Reply
  4. Evil Beaver

    При всем уважении, поделка получилась у вас, а не у 1С. Стандартный веб-интерфейс 1С решает ровно то, для чего он сделан — предоставляет вам веб-доступ к приложению, которое вы написали. Дает вам примерно одинаковый user-experience как на локальном доступе, так и через веб. Если вы хотите написать сайт на 1С и возмущаетесь, что интерфейс не гибкий, то, извините, вы где-то не там ищете решение и не теми инструментами пользуетесь.

    Reply
  5. BurningChrome

    (4) Evil Beaver, а я и не говорил, что это законченный продукт. Более того, в самом первом абзаце сказано что это всего лишь «proof-of-concept», т.е. именно демонстрация возможностей.

    1С дали нам http-сервисы и это одно из возможных их применений. На здешнем инфостарте есть примеры даже cms написанные на 1С. Или они тоже «не теми инструментами пользуются»?

    Reply
  6. cool.vlad4

    (5) а он не писал ничего про законченность вашего продукта. он придрался и по делу придрался к вашей необоснованной претензии к 1С в части

    а не той поделкой, что дает нам 1С из коробки в виде вэб-клиента.

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

    Reply
  7. baloo

    Логичнее выглядело бы если бы вы открыли Odata интерфейс и использовали бэк 1С строго как модель в терминах MVC, а всё остальное решали уже на js, возможно с какой то прослойкой.

    Reply
  8. BurningChrome

    (7) baloo, я не знаю js. Преимущество данного подхода как раз и заключается что нужно минимум знаний в html, все можно написать на 1С. Вам не нужно содержать дополнительного веб-разработчика если у вас есть программисты 1С. А js+прослойка получится «переписать 1C». Цель не в этом.

    Reply
  9. Vladimir_Konyrev

    Когда данный метод можно и нужно использовать? Что он дает, быстродействие, красоту, совместимость или еще что-то?

    Непонятно зачем мне это, если сейчас я и так пишу конфигурации на УФ и они полностью работают через браузер.

    Думаю автору стоило бы больше уделить внимание раскрытию применимости своего решения/метода, пояснить плюсы.

    Reply
  10. BurningChrome

    (9) Vladimir_Konyrev, Если вас устраивает веб-интерфейс от 1С, то действительно, вам это не зачем.

    Reply
  11. Vladimir_Konyrev

    Думаю ответы на ранее заданные мною вопросы: «Когда данный метод можно и нужно использовать? Что он дает, быстродействие, красоту, совместимость или еще что-то?» дадут большее представление о том, что Вы предлагаете.

    Reply
  12. DrAku1a

    (10) А чем конкретно Вас не устраивает веб-интерфейс 1С?

    Reply
  13. kiruha

    (4) Evil Beaver, прошу прощения — но судя по Вашим публикациям — все + и — стандартного интерфейса хорошо знаете.

    Автор далеко не первый и не последний , кто начала использовать js и Http-сервисы, и данное направление набирает достаточно большую аудиторию (судя по этим публикациям ).

    Поэтому удивительны вопросы к автору типа — чем не устраивает стандартный веб интерфейс и т.п. да еще по 10 «плюсов». Автору большое спасибо !

    Reply
  14. BurningChrome

    Добавил блок «Зачем мне это, если есть стандартный 1С веб-интерфейс?«. Это для всех, кто задает подобные вопросы.

    Reply
  15. Evil Beaver

    (13) kiruha, я не про плюсы и минусы, я про презрительно брошенное: «поделка, которую 1С нам подсовывает»

    Reply
  16. DrAku1a

    (14) BurningChrome, поймите правильно: я не критикую саму работу — она отличная и уверен — нужная!

    Но в контексте претензий к 1С — считаю, Вы не правы. С точки зрения пользователя — гораздо удобнее видеть примерно одинаковый интерфейс в веб-клиенте и тонком/толстом клиенте. Что и обеспечивает платформа 1С.

    В остальном — повторю Evil Beaver:

    Если вы хотите написать сайт на 1С и возмущаетесь, что интерфейс не гибкий, то, извините, вы где-то не там ищете решение и не теми инструментами пользуетесь.

    И ещё раз о самой работе: лично я — файл скачал, обязательно буду его изучать и скорее всего, почерпну для себя что-то новое.

    Reply
  17. kiruha

    (15)

    Да, спасибо — сразу не понял, согласен — вообще разные задачи.

    Я http сервисы хочу для клиентов и удаленщиков сделать — посмотреть конкретный заказ или договор, без доступа в базу.

    Reply
  18. serko8547

    Ув. Автор, прошу Вас поделиться опытом:

    Я начал использовать http-сервисами недавно, и напоролся на такую проблему: Если в 1с завести пользователя — то мне ответ на любой Get или post запрос приходит Ошибка 401 (не авторизован). Как быть?

    Был бы Вам очень благодарен, если Вы подскажете, как решить сию проблему )

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *