gifts2017

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

Опубликовал Василий Пупкин (BurningChrome) в раздел Обмен - Интеграция с WEB

Пример автоматической генерации 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:\web\demo». Далее создаете каталог «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/». Важно, чтобы на конце был слеш «/»!

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
uni
.zip 323,60Kb
03.01.16
55
.zip 1.0 323,60Kb 55 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Батурский Андрей Валерьевич (a.baturskiy_2015) 04.01.16 08:07
Старик, а что тут остается от 1С? Для чего она? :)
(не риторический вопрос)
2. Sergey Andreev (starik-2005) 04.01.16 12:17
(1) a.baturskiy_2015, походу она тут типа как среда, содержащая бизнес-логику. Я бы, например, не стал делать интернет-магазин на 1С - дорого, тормозно, излишне пафосно. А вот битрикс для этого с горем пополам мог бы подойти. Но, конечно, лучше чего-нибудь более серьезное для этого использовать.
3. Василий Пупкин (BurningChrome) 04.01.16 12:55
(1) a.baturskiy_2015, Вся логика пишется на 1С. Web - это только фасад.
4. Андрей Овсянкин (Evil Beaver) 04.01.16 15:55
При всем уважении, поделка получилась у вас, а не у 1С. Стандартный веб-интерфейс 1С решает ровно то, для чего он сделан - предоставляет вам веб-доступ к приложению, которое вы написали. Дает вам примерно одинаковый user-experience как на локальном доступе, так и через веб. Если вы хотите написать сайт на 1С и возмущаетесь, что интерфейс не гибкий, то, извините, вы где-то не там ищете решение и не теми инструментами пользуетесь.
sorb; Ali1976; Irwin; DrAku1a; CSiER; alest; JohnyDeath; cool.vlad4; PrinzOfMunchen; webester; orfos; freez1301; +12 Ответить 2
5. Василий Пупкин (BurningChrome) 04.01.16 21:12
(4) Evil Beaver, а я и не говорил, что это законченный продукт. Более того, в самом первом абзаце сказано что это всего лишь "proof-of-concept", т.е. именно демонстрация возможностей.
1С дали нам http-сервисы и это одно из возможных их применений. На здешнем инфостарте есть примеры даже cms написанные на 1С. Или они тоже «не теми инструментами пользуются»?
6. Ийон Тихий (cool.vlad4) 06.01.16 05:30
(5) BurningChrome, а он не писал ничего про законченность вашего продукта. он придрался и по делу придрался к вашей необоснованной претензии к 1С в части
а не той поделкой, что дает нам 1С из коробки в виде вэб-клиента.

довольно неумная фраза. (во всем остальном норм. ) с какого 1С должна что-то из коробки предоставлять, чтобы это не было поделкой для каких-то задач BurningChrome?
Evil Beaver; DrAku1a; +2 Ответить
7. Baloo Shkin (baloo) 06.01.16 08:55
Логичнее выглядело бы если бы вы открыли Odata интерфейс и использовали бэк 1С строго как модель в терминах MVC, а всё остальное решали уже на js, возможно с какой то прослойкой.
8. Василий Пупкин (BurningChrome) 06.01.16 12:01
(7) baloo, я не знаю js. Преимущество данного подхода как раз и заключается что нужно минимум знаний в html, все можно написать на 1С. Вам не нужно содержать дополнительного веб-разработчика если у вас есть программисты 1С. А js+прослойка получится "переписать 1C". Цель не в этом.
9. Владимир Конырев (Vladimir_Konyrev) 06.01.16 16:17
Когда данный метод можно и нужно использовать? Что он дает, быстродействие, красоту, совместимость или еще что-то?

Непонятно зачем мне это, если сейчас я и так пишу конфигурации на УФ и они полностью работают через браузер.
Думаю автору стоило бы больше уделить внимание раскрытию применимости своего решения/метода, пояснить плюсы.
the1; cleaner_it; +2 Ответить 1
10. Василий Пупкин (BurningChrome) 07.01.16 12:00
(9) Vladimir_Konyrev, Если вас устраивает веб-интерфейс от 1С, то действительно, вам это не зачем.
11. Владимир Конырев (Vladimir_Konyrev) 09.01.16 23:47
Думаю ответы на ранее заданные мною вопросы: "Когда данный метод можно и нужно использовать? Что он дает, быстродействие, красоту, совместимость или еще что-то?" дадут большее представление о том, что Вы предлагаете.
12. Андрей Акулов (DrAku1a) 11.01.16 05:55
(10) А чем конкретно Вас не устраивает веб-интерфейс 1С?
Mortiferus; +1 Ответить
13. kiruha Дронов (kiruha) 11.01.16 11:39
(4) Evil Beaver, прошу прощения - но судя по Вашим публикациям - все + и - стандартного интерфейса хорошо знаете.
Автор далеко не первый и не последний , кто начала использовать js и Http-сервисы, и данное направление набирает достаточно большую аудиторию (судя по этим публикациям ).
Поэтому удивительны вопросы к автору типа - чем не устраивает стандартный веб интерфейс и т.п. да еще по 10 "плюсов". Автору большое спасибо !
14. Василий Пупкин (BurningChrome) 11.01.16 21:01
Добавил блок "Зачем мне это, если есть стандартный 1С веб-интерфейс?". Это для всех, кто задает подобные вопросы.
15. Андрей Овсянкин (Evil Beaver) 12.01.16 01:42
(13) kiruha, я не про плюсы и минусы, я про презрительно брошенное: "поделка, которую 1С нам подсовывает"
16. Андрей Акулов (DrAku1a) 12.01.16 02:29
(14) BurningChrome, поймите правильно: я не критикую саму работу - она отличная и уверен - нужная!

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


И ещё раз о самой работе: лично я - файл скачал, обязательно буду его изучать и скорее всего, почерпну для себя что-то новое.
17. kiruha Дронов (kiruha) 12.01.16 10:03
(15)
Да, спасибо - сразу не понял, согласен - вообще разные задачи.
Я http сервисы хочу для клиентов и удаленщиков сделать - посмотреть конкретный заказ или договор, без доступа в базу.
18. serko krav (serko8547) 26.08.16 17:08
Ув. Автор, прошу Вас поделиться опытом:
Я начал использовать http-сервисами недавно, и напоролся на такую проблему: Если в 1с завести пользователя - то мне ответ на любой Get или post запрос приходит Ошибка 401 (не авторизован). Как быть?
Был бы Вам очень благодарен, если Вы подскажете, как решить сию проблему )
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа