Введение
Поскольку интернет-магазины прочно вошли в нашу жизнь и зачастую являются неотъемлемой частью информационной системы предприятия, я подумал, что было бы интересно изучить возможности, которые может предоставить OneScript, в плане создания интернет-магазинов.
Дабы не превращать настоящую статью в книгу, а демонстрационную конфигурацию в “типовую”, на просторах интернет был найден простой демонстрационный проект, созданный на php, который реализует простейший интернет-магазин.
Таким образом, целью настоящей работы является создание простейшего интернет-магазина на OneScript, на основе существующего демонстрационного проекта, написанного на php.
О том, что из этого получилось – Вы можете прочитать ниже или посмотреть, нажав кнопку "Показать демо", которая находится справа.
Архитектура решения
Платформа web-приложения
В качестве платформы для реализации магазина, были выбраны http-сервисы OneScript. Для сокращения трудозатрат, в качестве основы для web-части использовалась Yep CMS с обновлениями, описанными здесь.
Внешний вид приложения
Внешний вид приложения оставлен практически без изменений и соответствует исходному проекту.
Хранение данных
В отличие от исходного проекта, где для хранения данных о товарах и ценах исользуется СУБД MySQL, в настоящем проекте, с целью упрощения развертываниия используется СУБД SQLite. Взаимодействие OneScript с СУБД SQLite осуществляется посредством библиотеки OneScript SQL.
Следует отметить, что вышеуказанная библиотека работает и с другими СУБД. Таким образом, при необходимости, хранение данных может быть организовано и в MySQL или другой СУБД, в зависимости от ваших потребностей.
Обмен с 1С:Предприятие
Обмен данными с платформой 1С:Предприятие осуществляется посредством http-сервисов, которые являются частью платформы. В качестве формата передаваемых данных используется JSON.
К сожалению, в настоящее время в OneScript отсутствуют встроенные функции (написанные на C#), аналогичные функциям ПрочитатьJSON и ЗаписатьJSON, платформы 1С:Предприятие. В наличии имеется только библиотека работы с JSON, которая представляет собой библиотеку 1С:JSON, портированную на OneScript. Поскольку вышеуказанная библиотека достаточно объемны и несколько громоздки для нашего простого случая, для конвертации объектов в формат JSON и обратно используется немного доработанная обработка JSON в 1С:8Х.
Детали реализации
Общие замечания
В части интернет-магазина, конфигурация содержит три подсистемы:
ДемоCart – подсистема, которая содержит объекты, которые находятся на стороне интернет-магазина и выполняются в OneScript.
ДемоCartНаСайте – подсистема, которая содержит объекты 1С:Предприятие, которые находятся на стороне интернет-магазина и выполняются в среде 1С:Предприятие. Эти объекты используются для эмуляции поведения интернет-магазина в среде 1С:Предприятие и используются для разработки и отладки.
ДемоCartОбъекты1С – подсистема, содержащая объекты 1С:Предприятие, которые являются аналогами объектов типовых конфигураций.
Объекты информационной системы
Данные объекты, являются аналогами объектов типовых конфигураций, которые находятся на стороне 1С:Предприятие.
Справочники:
Номенклатура – является аналогом одноименного справочника в 1С:Предприятие. Для простоты, фотография товара для сайта, а также расширение файла фото хранятся в этом справочнике.
КатегорииДляСайта – этот справочник не имеет прямого аналога в типовых конфигурациях, его аналогом может являться любой справочник, где хранится информация о категориях товаров для сайта.
Документы:
УстановкаЦенНоменклатуры – используется для установки/изменения цен номенклатуры как в 1С:Предприятие так и в интернет-магазине. Этот объект является аналогом одноименного документа в типовых конфигурациях. Для упрощения, в нашем случае не используются виды цен.
ЗаказКлиента – содержит информацию о заказах клиентов, поступивших из интернет-магазина. Не имеет прямого аналога в 1С:Предприятие. Возможным ближайшим аналогом может являться объект ЗаказПокупателя (УНФ).
РегистрыСведений:
ЦеныНоменклатуры – аналог одноименного регистра в типовых конфигурациях.
Обмен информацией о товарах и ценах
Сторона 1С:Предприятие
Поскольку непосредственное использование 1С:Предприятие как back-end для интернет-магазина может повлечь за собой значительную лицензионную нагрузку, а также снижение производительности информационной системы, все данные о товарах, категориях и ценах хранятся локально на сайте в реляционной СУБД, а обмен с интернет магазином осуществляется посредством http-сервисов.
Объекты 1С предприятие, ответственные за обмен с интернет-магазином, представлены на рисунке ниже:
В нашем случае, факт изменения номенклатуры, категорий товаров или цен, отслеживается соответствующими подписками на события. Подписки создают документы ОбновленияДляСайта, в которых содержится информация об измененных объектах. В дальнейшем, регламентное задание ВыполнитьОбменССайтом осуществляет вызов соответствующих http-сервисов на стороне интернет-магазина и передает им необходимую информацию.
Сторона интернет-магазина
Для эмуляции объектов интернет-магазина с целью разработки и отладки в конфигурации созданы объекты ИБ, отражающие информацию о товарах и ценах на сайте интернет-магазина. Данные объекты представлены на рисунке ниже:
Справочники:
НоменклатураНаСайте – соответствует справочнику Номенклатура в информационной системе.
КатегорииНаСайте – соответствует справочнику КатегорииДляСайта в информационнойСистеме.
Регистры сведений:
ЦеныНоменклатурыНаСайте – соответствует документу УстановкаЦенНоменклатуры в информационной системе.
Список объектов со стороны интернет-магазина, которые выполняются в OneScript – представлен на рисунке ниже:
HTTP-сервисы:
ec – служит для обновления информации о категориях товаров во внутренней БД сайта.
ep – служит для обновления информации о товарах во внутренней БД сайта.
epr – служит для обновления информации о ценах во внутренней БД сайта.
createdb – служебный http-сервис. Служит для первоначального создания внутренней БД сайта. Выполняется один раз.
В продуктивной среде, объекты НоменклатураНаСайте, КатегорииНаСайте и ЦеныНоменклатурыНаСайте реализованы при помощи соответствующих объектов СУБД SQLite:
//<OneScript>
Соединение = СлужебныеФункции.НовыйСоединениеБД();
Запрос = Новый Запрос();
Запрос.УстановитьСоединение(Соединение);
Запрос.Текст = "CREATE TABLE product(
|id nvarchar(50) PRIMARY KEY,
|descr nvarchar(150),
|name nvarchar(150),
|code nvarchar(50),
|category_id nvarchar(50),
|fext nvarchar(4),
|deleted boolean
|);";
Запрос.ВыполнитьКоманду();
Запрос.Текст = "CREATE TABLE prices(
|id nvarchar(50),
|from_date datetime,
|product_id nvarchar(50),
|price decimal(10,2)
|);";
Запрос.ВыполнитьКоманду();
Запрос.Текст = "CREATE TABLE category(
|id nvarchar(50) PRIMARY KEY,
|name nvarchar(150),
|code nvarchar(50),
|deleted boolean
|);";
Запрос.ВыполнитьКоманду();
//<!OneScript>
Корзина товаров
Как и в исходном проекте, корзина товаров реализована на базе http-сессий и cookies. Со стороны OneScript, функционал работы с http-сессиями реализован в библиотеке HttpMeans. Эмуляция работы корзины в 1С:Предприятие, реализована при помощи константы ПараметрыСессии, а также общего модуля ЭмуляцияСессии.
Сайт интернет-магазина
Сайт интернет-магазина реализован на базе Yep CMS. Главная страница, каталог товаров, а также страница заказа реализованы соответствующими http-сервисами:
HTTP-сервисы:
index – отображение главной страницы сайта.
catalog – отображение каталога товаров
product – отображение страницы с детальной информацией о товаре
cart – отображение детальной информации о товарах в корзине.
order – отображение страницы формирования заказа
Обмен информацией о заказах
В процессе формирования заказа, информация о покупателе, а также о выбранных товарах сохраняется в локальной БД сайта. Затем производится оповещение информационной системы 1С:Предприятие о том, что появился новый Заказ. Оповещение производится вызовом http-сервиса ОповещениеОЗаказе, который расположен на стороне 1С:Предприятие. Этот сервис инициирует выполнение фонового задания с процедурой, соответствующей регламентному заданию ПолучитьЗаказыССайта см. рисунок ниже:
Которое получает заказы, вызывая http-сервис go, расположенный на стороне интернет-магазина, создает документы ЗаказКлиента в информационной системе и создает документ ОбновлениеДляСайта, соответствующий удалению сформированных заказов в БД сайта. В дальнейшем, при выполнении регламентного задания ВыполнитьОбменССайтом, производится вызов http-сервиса do, который удаляет заказы из БД интернет-магазина.
В случае, если публикация ИБ в интернет по каким-либо причинам отсутствует, эту часть кода необходимо отключить. В этом случае прием заказов будет происходить по расписанию, регламентным заданием ПолучитьЗаказыССайта.
Заключение
По моим сугубо-личным ощущениям, основанным на таком-вот небольшом опыте, разработка интернет-магазина на OneScript, не является какой-то более сложной или трудоемкой процедурой, по сравнению с созданием магазина с аналогичным функционалом на php. Конечно есть некоторая доля избыточного кодирования, для обеспечения разработки и отладки в среде 1С:Предприятие, однако она относительно невелика и в основном связана с реализацией возможностей, которые есть в OneScript и нет в 1С:Предприятие и наоборот. Также, немного подпортило общее впечатление, несоответствие поведения функции Сред в OneScript и 1С:Предприятие, но я склонен отнести этот момент к разряду досадных случайностей, которые несомненно будут исправлены.
Тем не менее, по моему мнению, все вышеперечисленные неудобства с лихвой компенсируются знакомым языком программирования, а также понятной схемой взаимодействия с информационной системой на базе 1С:Предприятие, которая может быть легко адаптирована под нужды бизнеса с минимальными усилиями.
В остальном, объем кода, его читабельность и производительность вы легко можете сравнить самостоятельно, не полагаясь на чье-то мнение.