Yep Cart. Пишем интернет-магазин на http-сервисах OneScript

Программирование - Практика программирования

В статье описана демонстрационная конфигурация, реализующая простейший интернет магазин на http-сервисах OneScript, интегрированный с 1С:Предприятие.

Введение

Поскольку интернет-магазины прочно вошли в нашу жизнь и зачастую являются неотъемлемой частью информационной системы предприятия,  я подумал, что было бы интересно изучить возможности, которые может предоставить 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С:Предприятие, которая может быть легко адаптирована под нужды бизнеса с минимальными усилиями.

В остальном, объем кода, его читабельность и производительность вы легко можете сравнить самостоятельно, не полагаясь на чье-то мнение.

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

Наименование Файл Версия Размер
Yep Cart. Пишем интернет-магазин на http-сервисах OneScript:
.cf 6,10Mb
16.04.18
2
.cf 6,10Mb 2 Скачать

См. также

Комментарии
6. Алексей Лапицкий (Lapitskiy) 869 20.04.18 10:45 Сейчас в теме
Ничего не нашел в статье про безопасность скриптов и т.п.
jquery и прочие - регулярно выпускают обновления безопасности, а как обстоят дела с этим делом в OneScript ?
Когда используем локально - проблем как бы нет, но когда выходим в открытый интернет, то надо быть готовыми к угрозам.
7. Юрий Дешин (blackhole321) 457 20.04.18 10:56 Сейчас в теме
(6)
выпускают обновления безопасности, а как обстоят дела с этим делом в OneScript ?
Когда используем локально - проблем как бы нет, но когда выходим в открытый интернет, то надо быть готовыми к угрозам.

Полностью с Вами согласен.
Поскольку jquery является отдельной библиотекой и не является частью OneScript, ее обновление ложится на Ваши плечи. Собственно аналогичным образом обстоят дела и с другими продуктами (не OneScript). Конечно, некоторые включают автоматическое обновления, в некоторых, как источник используется CDN.
Оставьте свое сообщение