С чего все началось
Заказчик, крупная компания транспортной доставки, решила расширить сеть пунктов выдачи заказов (ПВЗ) с помощью партнерских ПВЗ - других юридических лиц со складскими помещениями. Но т.к. это может быть что угодно от ларька до СТО, то интерфейс системы надо сделать со следующими признаками:
- Простой
- Приятный
- Доступ с браузера
- Не надо устанавливать ничего дополнительного
Из-за этого стандартный веб-клиент 1С не подошел. Поэтому приняли решение делать альтернативную веб-версию. А поскольку у заказчика уже был печальный опыт работы с веб-разработчиками (после первого этапа и получения оплаты они куда-то сливались) я предложил сделать то же, но на 1С. С одной оговоркой - попросил для начала заказать шаблон страниц. Большую помощь также дала публикация "Мини-сайт на http-сервисах".
Общее описание
Самописная конфигурация на основе БСП, которая ведет простой учет движения заказа - от момента приемки на ПВЗ и до выдачи либо отправки возвратов, а также учет денежных средств. Но это не главное, можно настроить и над типовой.
С заказчиком были утверждены определенные сценарии и под каждый были добавлены шаблоны URL в http-сервис и создана страница с контентом.
Для связи с клиентом используются куки, которые также хранятся в БД.
Практически все страницы используют модальные окна, иначе количество сценариев бы выросло в разы. В моем случае я использовал JQuery, для интерактивности Ajax. Но ничто не мешает использовать другие библиотеки.
Благодаря такой реализации, frontend можно изменять на лету. Но для backend надо каждый раз прописывать изменения в модуле http-сервиса и обновлять ИБ.
По сценариям пользователь может делать следующее:
- Просмотр списка заказов с разными фильтрами по статусу.
- Поиск заказа по номеру, штрихкоду, данным покупателя.
- Просмотр данных заказа
- Оформить выдачу или отказ от заказа
- Принять заказы, отправленные со склада и напечатать акт приема-передачи
- Собрать возвраты, отменить сборку, отправить возвраты на склад - и напечатать соответствующие акты
- Провести инвентаризацию
- Сделать инкассацию денег, полученных за заказы
- Сформировать и вывести произвольные отчеты.
Демонстрация
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С и не пришлось искать веб-мастеров. В этом и есть выгода.
Если кто-то захочет "пощупать вживую" - пишите в личку, могу организовать доступ.