HTML-клиент у конфигурации 1С

17.04.19

Интеграция - WEB-интеграция

Приветствую. В этой публикации опишу свой опыт создания html-клиента для конфигурации 1С с помощью http-сервисов. HTML-клиент в этом случае - это frontend (html + css+ js), который генерирует и выдает пользователю конфигурация + backend, который тоже реализован в этой же конфигурации.

С чего все началось

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

  1. Простой
  2. Приятный
  3. Доступ с браузера
  4. Не надо устанавливать ничего дополнительного

Из-за этого стандартный веб-клиент 1С не подошел. Поэтому приняли решение делать альтернативную веб-версию. А поскольку у заказчика уже был печальный опыт работы с веб-разработчиками (после первого этапа и получения оплаты они куда-то сливались) я предложил сделать то же, но на 1С. С одной оговоркой - попросил для начала заказать шаблон страниц. Большую помощь также дала публикация "Мини-сайт на http-сервисах".

Общее описание

Самописная конфигурация на основе БСП, которая ведет простой учет движения заказа - от момента приемки на ПВЗ и до выдачи либо отправки возвратов, а также учет денежных средств. Но это не главное, можно настроить и над типовой.
С заказчиком были утверждены определенные сценарии и под каждый были добавлены шаблоны URL в http-сервис и создана страница с контентом.

Для связи с клиентом используются куки, которые также хранятся в БД.

Практически все страницы используют модальные окна, иначе количество сценариев бы выросло в разы. В моем случае я использовал JQuery, для интерактивности Ajax. Но ничто не мешает использовать другие библиотеки.

Благодаря такой реализации, frontend можно изменять на лету. Но для backend надо каждый раз прописывать изменения в модуле http-сервиса и обновлять ИБ.

По сценариям пользователь может делать следующее:

  1. Просмотр списка заказов с разными фильтрами по статусу.
  2. Поиск заказа по номеру, штрихкоду, данным покупателя.
  3. Просмотр данных заказа
  4. Оформить выдачу или отказ от заказа
  5. Принять заказы, отправленные со склада и напечатать акт приема-передачи
  6. Собрать возвраты, отменить сборку, отправить возвраты на склад - и напечатать соответствующие акты
  7. Провести инвентаризацию
  8. Сделать инкассацию денег, полученных за заказы
  9. Сформировать и вывести произвольные отчеты.

Демонстрация

HTTP-сервисы

 
Основой являются http-сервисы, которые формируют и отображают контент, а также реализовывают backend функции - прочитать или внести изменения в БД. Реализовать взаимодействие с сайтом можно было двумя способами: для каждой операции реализовать страничку со своим адресом или же все делать в пределе одной странице с помощью Post-запросов. Я выбрал первый вариант, но Post-запросы тоже использую (шаблон-URL API).

Контент


Справочники "Изображения", "Скрипты", "Стили", "ФайлыHTTP"  являются вспомогательными (css + js + img) и содержат в себе соответствующую информацию. Можно как загрузить туда текст или изображение, так и указать URL (подключить файл). За их передачу на клиент отвечают одноименные http-сервисы.

 
Скриншоты


Для формирования динамического содержимого используются справочники "МакетыБлоков" и "ИсточникиДанных". Источники данных - это описание запроса, параметров и полей, которые он вернет. В макетах описывается выборка из источников, связь параметров и формирования HTML-представление данных.

 
Скриншоты


Основным источником контента является справочник "Страницы". Страница отвечает за отображение контента для определенных сценариев (в моем случае список заказов, открытие заказа, выдача заказа и т.д.)
К странице можно подключить произвольное количество стилей и скриптов. Подключаются с помощью тегов <link> и <script src="">. Также была реализована возможность выгрузки в каталог на веб-сервере, для уменьшения нагрузки на 1С и ускорения загрузки веб-страницы.
В зависимости от состояния выгрузки каждого файла в каталог будут прописываться разные адреса.  В тексте страницы прописывается html-код, вставить определенный параметр, который http-сервис преобразует в значение, вставить блок (список заказов ПВЗ, данные конкретного заказа и т.д.).

Печать документов и отчеты

Для фиксации факта определенных операций необходимо было обеспечить печать документов, как результат их проведения. Необходимо было, чтобы это работало сразу на большинстве популярных браузеров без установки дополнительно ПО. Можно было экспортировать в PDF, но была вероятность, что файл будет загружаться, а не открываться.  Благо Табличный документ можно выгрузить в HTML-формате. Оставалась проблема со штрихкодом, но ее решил, реализовав печать штрихкодов в SVG-формате. Спасибо за Формирование штрихкода EAN-13 в SVG с помощью XDTO.

Со временем партнеры захотели смотреть определенную сводную информацию или отчеты в своем клиенте. Здесь пришлось поиграться, чтобы сделать универсальную систему для подключения любого отчета с помощью подсистемы Варианты отчетов из БСП.

Авторизация

При авторизации на сервер передается логин и пароль, по логину ищется пользователь ИБ, от пароля берется SHA1-хеш и ищется в свойстве СохраняемоеЗначениеПароля пользователя ИБ. Спасибо Антону Ширяеву за его обработку, но на ИС не могу найти публикацию.

После авторизации работником ПВЗ создается запись в регистре сведений Сессии с уникальным идентификатором, сроком действия (длина срока зависит от галочки "Запомнить меня" на странице Авторизации) и вспомогательными данными. Идентификатор передается в куки на клиент через Set-Cookie и при последующих обращениях на сервер можно определить активна ли эта сессия (если нет - надо опять авторизацию проходить), а также получить ключевые данные (Пользователь, ПВЗ и их данные).

Позже пришлось добавить авторизацию по токену, для возможности входа под определенным ПВЗ и исключить передачу паролей. В ИБ можно сформировать токен и ссылку для входа, типа localhost/pvz/hs/index/token?id=1760e3d7-4ec0-4e89-89f9-44bbc6b50162. После перехода по этой ссылке ищется токен, если он актуален - деактивируются все сессии этого клиента, создается новая сессия и высылается идентификатор с ответом.

Frontend и backend

Как я уже описал выше, frontend можно изменять на лету, не обновляя конфигурацию.
Для backend http-сервис определяет команду, делает необходимые операции и возвращает результат. Результатом является сериализованная структура в json, которая содержит в себе ключи result(тоже в json) и error(текст). Но для каждой операции надо прописывать ее обработку.

Публикация

API для обмена, HTML-клиент и веб-клиент были опубликованы в разных публикациях, в которых разрешено нужное и запрещено остальное. Для HTML-клиента в описании публикации указаны данные авторизации пользователя http, который имеет необходимые права для работы с заказами, но запрещен вход через остальные клиенты.

Итоги

За время полноценной работы системы (уже больше полгода) система показала себя с лучшей стороны. Пользователей около 20, так что про замеры нагрузки говорить не приходится. Но со своей изначальной задачей она справилась - новые ПВЗ заходят и сразу же адаптируются. О каких-то критических замечаниях я не слышал. Постепенно допиливаю и улучшаю. На у с помощью html + css + js можно сделать очень многое.

В целом вышло немного сумбурно и не описание опыта, а описание продукта. Тем не менее с помощью http-сервисов можно не только обмены делать, а и вот такие сайты - а это и было одной из целей публикации.

И еще - на все, кроме первичных макетов страниц, ушли силы одного-двух программистов 1С и не пришлось искать веб-мастеров. В этом и есть выгода.
Если кто-то захочет "пощупать вживую" - пишите в личку, могу организовать доступ.

Конфигурация http html css js http-сервис сайт

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15930    13    18    

13

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17881    6    15    

13

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88926    163    216    

318

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25871    9    0    

7

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16477    42    49    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
66. Smaylukk 185 18.04.19 12:58 Сейчас в теме
(65) Спасибо. А в чем минус?
Сервис API - это для обмена с базами
Шаблон api сервиса index - это для обработки ajax-запросов.
По поводу авторизации, идеи к размышлению:

В моем случае - это вообще сторонние организации, у которых есть логин/пароль и их немного.
+
67. 🅵🅾️🆇 523 18.04.19 13:03 Сейчас в теме
(66) Минус большого числа http сервисов?
Это не очень удобно с точки зрения разработки, отладки и администрирования.
Единая "точка входа" в ваш микросервис будет гораздо удобнее.

Если вы про рендеринг на сервере, то это лишняя нагрузка на сервер, нагрузка на канал, некрасивый интерфейс и ожидание загрузки пользователем.
Сейчас в почете реактивщина, страничка загружается лишь раз, а дальше дергает апи сервера.
К томуже с таким подходом вам не составит труда смасштабировать добавив мобильное и десктопные приложения.
+
71. Smaylukk 185 18.04.19 13:19 Сейчас в теме
(67) В этих вопросах наверное нет правильных. Все зависит от целей, денег и сроков.
+
73. 🅵🅾️🆇 523 18.04.19 13:21 Сейчас в теме
(71) Естественно, если вопрос закрыт и всех все устраивает - то просто замечательно)
Я лишь наметил вам точки роста, если вам интересно развиваться в этом направлении)
+
74. Smaylukk 185 18.04.19 13:24 Сейчас в теме
(67)
Сейчас в почете реактивщина
А это React.js или что-то другое?
+
76. 🅵🅾️🆇 523 18.04.19 13:25 Сейчас в теме
(74) react/vue/angular
Все три имеют одинаковую весовую категорию.
+
77. 🅵🅾️🆇 523 18.04.19 13:28 Сейчас в теме
(76) Причем в react и angular (только не js, а dart)
Относительно несложно перескочить на кроссплатформенную мобильную разработку.
В случае дарта (тобишь flutter) у гугла аноннсирована не только кроссплатформенная мобильная разработка, а вообще под все оси, веб и их будующую операционку фуксию.
+
84. KandKonst 32 18.04.19 14:12 Сейчас в теме
Комменты огонь прям. Теперь и я в теме текущего положения дел веб-http-сервисов и лицензирования 1С. Получается, что все сугубо индивидуально для каждой организации.
chemezov; +1
90. TitanLuchs 395 18.04.19 14:55 Сейчас в теме
(84) Статьи на данную тему под собой всегда собирают знатный холивар в комментах )
+
95. panvartan 18.04.19 22:43 Сейчас в теме
Ребята, а зачем вам 1С?
testnv0; torbeev; Soloist; acanta; +4
96. agent00mouse 253 19.04.19 07:35 Сейчас в теме
(95) Удобный фреймворк для хранения и обработки данных. ;-)
+
97. Smaylukk 185 19.04.19 10:05 Сейчас в теме
(95) А почему-бы и не 1С?
+
102. surinat 20.04.19 17:12 Сейчас в теме
Спасибо за статью.
+
105. user726873 22.04.19 11:08 Сейчас в теме
Дима, добрый день! Не могу найти способ написать в ЛС по поводу полетного теста HTML-клиента. По возможности напишите, как пощупать/проанализировать вашу превосходную наработку
+
109. пользователь 31.07.19 11:18
Сообщение было скрыто модератором.
...
110. chemezov 47 01.08.19 03:26 Сейчас в теме
Круто! После проб с Vue.js в начале года тоже много думал, а можно ли сделать такой движок на базе 1С, используя не Django как бекенд, а вот 1С например. Но да опытов так руки и не дошли). В общем можно и мне кажется даже нужно, т.к. это сделает интеграцию 1С и веб еще проще без всяких битриксов и дополнительных выгрузок на сайт. Все данные через Rest API сразу выводить на сайт. Правда придется 1С нику знать Vue или React... Но имхо лучше чем знать php шный битрикс и 1С, хотя пока что задач и работы на них более чем достаточно.
+
111. Smaylukk 185 01.08.19 15:24 Сейчас в теме
(110) Собственно это и был основной послы статьи - что не надо быть веб-программистом, чтобы сделать веб-обертку над конфигурацией. Но и чистым 1С-ником не останешься.
+
117. user598128_able123 5 07.08.19 08:21 Сейчас в теме
Тема интересная, где можно попробовать/посмотреть демонстрацию фунционала?

В таком случае, работу мобильного клиента также можно сделать? Клиент на Android, бэкенд на базе 1С.

И еще где можно посмотреть примеры создания веб обертки, хочу простенький ввод данных сделать на базе 1С.
+
118. Smaylukk 185 07.08.19 09:28 Сейчас в теме
(117) Ответил в личном сообщении
+
119. TAT116 08.08.19 07:37 Сейчас в теме
Сейчас пишу кодогенератор который из метаданных базы 1С создает модель данных для Java JPA конкретно для Cuba Platform, включая создание кода обмена и для 1С и для системы на Java. Суть которого избавить программиста от самостоятельного написания обмена и ORM, можно сразу переходить к написанию фронта и настройке правил обмена. Надеюсь получится выложить готовую версию к концу осени. Сейчас поддерживаются все версии 8.x. В идеях перенос отчетов и создание форм на основе имеющихся. Ну если будет спрос думаю дальше писать такое же для других платформ Android/IOS/Web и др.
+
120. AntonSm 30 08.08.19 08:45 Сейчас в теме
(119) а вы metadata.js видели?
Вы описали что-то очень похожее.
+
121. EvgeTrofi 127 25.10.20 21:05 Сейчас в теме
Напишите пожалуйста про настройку самого веб сервера. Не было инцидентов взлома (проникновения на сервер с целью украсть или испортить какие-нибудь файлы)?
Какой совет дадите по настройке безопасности?
Какой используете веб-сервер? Апачи? Прослойку Linux ( https://infostart.ru/1c/articles/303420/ ) не делали?
+
122. Smaylukk 185 26.10.20 10:05 Сейчас в теме
(121) Особой настройки не делал. У меня обычный отдельный веб-сервер IIS, 1С сервер стоит отдельно. Защита возложена на ОС и админа.
Касательно взлома, то я ничего не заметил. Через ЛК сломать что-то очень сложно. Бэкенд зашит в общих модулях.
Можете еще установить прокси-сервер перед веб-сервером.
+
123. GVl81 19.03.21 15:29 Сейчас в теме
где можно посмотреть как работает?
+
124. UPKA 27.03.23 10:40 Сейчас в теме
Какой смысл размещать решение без исходников?)
GarickRus; +1
Оставьте свое сообщение