Описание реализации решения.
Решение поставленной задачи можно разбить на несколько этапов:
· Создание механизма двусторонней передачи данных – со стороны Интернет-магазина отправляются данные о сформированных клиентами заказах, со стороны «1С:Предприятие» - данные об изменения прайс-листа.
· Создание механизма подготовки данных для отправки и формирование их в определенный формат передачи, как на стороне «1С:Предприятие», так и на стороне Интернет-магазина.
Был реализован Web-сервис «Internet-shop», имеющий два метода:
1. WriteOrders(OrderList) - Метод, производящий запись в информационную базу «1С:Предприятие» список заказов клиентов, оформленных посредством интернет-магазина. Входной параметр OrderList содержит данные о заказах, по структуре совпадающих со структурой XDTO-пакета «OrderList». Выходной параметр типа «string» - возвращающий на сайт интернет-магазина код выполнения операции записи заказов в информационную базу «1С:Предприятие».
2. ReadPriceList(). Метод, осуществляющий выборку данных о изменениях прайс-листа из информационной базы «1С:Предприятие» и формирование данных в структуру XDTO-пакета «PriceList» для последующей отправки их в выходном параметре.
Схема двустороннего обмена выглядит следующим образом:
1. Интернет-магазин à «1С:Предприятие»: Заказы, сформированные клиентом на сайте интернет-магазина, включающие информацию о клиенте:
· Имя
· Фамилия
· Контактный телефон
· Адрес доставки
· E-mail
Информацию о заказанном товаре:
· Код товара в базе данных
· Наименование товара
· Количество заказанного товара
· Цена, по которой заказан товар.
2. «1С:Предприятие» à Интернет магазин: Изменения прайс-листа:
· - Новые товарные позиции.
· - Какие либо изменения в существующих товарных позициях.
· - Количество товара, доступное для заказа.
· - Цена товара.
Для структурирования этой информации был разработан XDTO_пакет «OrderXDTO»:
Рис 3. Структура XDTO-пакета «OrderXDTO».
Типы объектов XDTO-пакета:
· Customer – содержит информацию о клиентк Интернет-магазина.
· Product – для представления списка товаров в заказах и прайс-листе, включающий цену и количество товара.
· Order – тип, описывающий заказ, оформленный через Интернет-магазин, включающий информацию о клиенте (типа Customer) и список товаров в заказе (массив типа Product)
· OrderList – массив заказов. XDTO-пакет именно такого типа используется для передачи сведений о заказах с Интернет-магазина в систему «1С:Предприятие».
· PriceList – массив товаров, включающий актуальную цену товара и количество, доступное для заказа.
Фрагмент XML-схемы, по которой пакет такого типа сериализуется в XML представлен в Приложении1.
Результатом публикации Web-сервиса является файл inet_shop.1cws, содержащий ссылку на WSDL-описание Web-сервиса. При попытке подключения в Web-сервису, сторонне приложение по этой ссылке запрашивает всю необходимую информацию о сервисе, как то методы, реализованные этим сервисом, типы объектов входных и выходных параметров.
На стороне Интернет-магазина была реализована база данных на СУБД MySQL для хранения данных, необходимых для работы магазина:
1. Таблица PRODUCTS – содержит информацию о прайс-листе – наименование товарных позиций, их цену и количество, доступное для заказа.
2. Таблица CUSTOMER – содержит сведения о клиентах Интернет-магазина.
3. Таблица ORDERS – оформленные заказы клиентами Интернет-магазина.
4. Таблица ORDERED_CART – таблица, содержащая информацию о товарных позициях, заказанных клиентами, их цену на момент заказа и заказанное количество.
Рис 4. Схема базы данных.
Инициализация обмена данных осуществляется скриптом, написанным на языке PHP. Скрипт осуществляет подготовку данных для обмена и формирует их в формате, разработанном для обмена. Для реализации этого формата был разработан ряд классов, структура которых совпадает со структурой XDTO-пакета реализованного в «1С:Предприятие». После формирования данных для обмена осуществляется отправка данных по протоколу SOAP. Фрагмент скрипта, организующий отправку данных об оформленных заказах предложен в Приложении2.
Следует отметить, что данный скрипт организационно рассчитан на запуск двумя методами:
· запуск по событию – оформления заказа на сайте интерент-магазина при выполнении особых условий.
· автоматический запуск по заданному расписанию – для уменьшения количества соединений Интерент-магазина и системы «1С:Предприятие». Обрабатывает типичные заказы и посылает запрос на обновление прайс-листа.
Реализованное решение увеличивает общее количество пользователей «1С:Предприятие» на одного – пользователь Web-сервиса, и расчет количества необходимых лицензий не составляет большой проблемы.
ЗАКЛЮЧЕНИЕ
В результате проделанной работы были детально изучены механизмы работы Web-сервисов «1С:Предприятие» и взаимодействие их со сторонними веб-приложениями, а также принципы разработки форматов данных, участвующих в обменах. Полученные наработки могут быть использованы в дальнейшем – разработанный формат данных для обмена может масштабироваться до любых необходимых размеров и при незначительных изменениях система готова к организации интеграции любой системы «1С:Предприятие 8.1 Управление торговлей» с произвольным Интернет-магазином, написанном на языке PHP с использованием в качестве базы данных СУБД MySQL. Так же она может быть примером для реализации интеграции системы «1С:Предприятие», с Интернет-магазином, реализованным с применением других программных средств (ASP, MSSQL).
.
ЛИТЕРАТУРА
1. Профессиональная разработка в системе 1С:Предприятие 8.0/ Под ред. М. Г. Радченко. – М.: 1С-Паблишинг; СПб.: Питер, 2006, - 808 с.: ил.
2. 1С:Предприятие 8.1 Конфигурирование и администрирование.
3. 1С:Предприятие: от 8.0 к 8.1. Белоусов П. С., Островерх А. В. – М.: 1С-Паблишинг; СПб.: Питер, 2008. – 206 с.: ил.
4. PHP5 и MySQL. Библия пользователя. : Конверс Тим, Парк Джойс, Морган Кларк. Пер с англ. – М.: Издательский дом «Вильямс», 2006. – 1216 с.: ил. – Парал.тит.англ.
5. Ресурсы Интернет: http://partners.v8.1c.ru
ПРИЛОЖЕНИЯ
Приложение1.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.sample-package.org" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.sample-package.org">
<xsd:complexType name="Customer">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="address" type="xsd:string"/>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="email" type="xsd:string"/>
<xsd:element name="phone" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Order">
<xsd:sequence>
<xsd:element name="customer" type="tns:Customer"/>
<xsd:element maxOccurs="unbounded" name="product_list" type="tns:Product"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="OrderList">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0"
Приложение 2.
db_connect(DB_HOST,DB_USER,DB_PASS) or die (db_error());
db_select_db(DB_NAME) or die (db_error());
$q = db_query("SELECT ".ORDERS_TABLE.".orderID, prod_code, oc_price, oc_quantity, order_time, cust_firstname, cust_lastname, cust_email, cust_address, cust_phone, cust_send FROM ".ORDERS_TABLE.", ".ORDERED_CARTS_TABLE." ".PRODUCT_TABLE." WHERE cust_send is NULL AND ".ORDERS_TABLE.".orderID=".ORDERED_CARTS_TABLE.".orderID ADN ".ORDERS_TABLE.".prodID=".PRODUCT_TABLE.".productID ") or die (db_error());
if ($r = db_fetch_row($q)){
$oid = $r[0];
$i = 0;
$j = 0;
$par = new OrderList();
$par->order = array();
$par->order[$i]->customer = new Customer();
$par->order[$i]->customer->firstname = $r[5];
$par->order[$i]->customer->lastname = $r[6];
$par->order[$i]->product_list = array();
$par->order[$i]->product_list[$j] = new Product();
$par->order[$i]->product_list[$j]->productID = $r[1];
$par->order[$i]->product_list[$j]->price = $r[2];
$par->order[$i]->product_list[$j]->quantity = $r[3];
$j++;
while ($r = db_fetch_row($q)){
if($oid != $r[0]){
$oid = $r[0];
$i++;
$j = 0;
$par->order[$i]->customer = new Customer();
$par->order[$i]->customer->firstname = $r[5];
$par->order[$i]->customer->lastname = $r[6];
$par->order[$i]->product_list = array();
}
$par->order[$i]->product_list[$j] = new Product();
$par->order[$i]->product_list[$j]->productID = $r[1];
$par->order[$i]->product_list[$j]->price = $r[2];
$par->order[$i]->product_list[$j]->quantity = $r[3];
$j++;
}
$client = new SoapClient( "http://www.localhost/ws/inet_shop.1cws?wsdl", array("trace" => 1, "exceptions" => 1));
try {
$resp = $client->WriteOrders(array("OrderList" => $par))->return;
}
Catch (SoapFault $exception) {
}
Приложение 3.
<?xml version="1.0" encoding="UTF-8" ?>
- <definitions xmlns:tns="http://www.sample-package.org" xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12bind="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd1="http://www.sample-package.org" xmlns="http://schemas.xmlsoap.org/wsdl/" name="InternerShop" targetNamespace="http://www.sample-package.org">
- <types>
- <xsd:schema xmlns:xs1="http://www.sample-package.org" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.sample-package.org">
<...>
- <xsd:element name="WriteOrders">
- <xsd:complexType>
- <xsd:sequence>
<xsd:element name="OrderList" type="tns:OrderList" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
- <xsd:element name="WriteOrdersResponse">
- <xsd:complexType>
- <xsd:sequence>
<xsd:element name="return" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
- <message name="WriteOrdersRequestMessage">
<part name="parameters" element="tns:WriteOrders" />
</message>
- <message name="WriteOrdersResponseMessage">
<part name="parameters" element="tns:WriteOrdersResponse" />
</message>
- <portType name="InternetShopPortType">
- <operation name="WriteOrders">
<input message="tns:WriteOrdersRequestMessage" />
<output message="tns:WriteOrdersResponseMessage" />
</operation>
</portType>
- <service name="InternetShop">
- <port name="InternetShopSoap" binding="tns:InternetShopSoapBinding">
- <documentation>
<wsi:Claim xmlns:wsi="http://ws-i.org/schemas/conformanceClaim/" conformsTo="http://ws-i.org/profiles/basic/1.1" />
</documentation>
<soapbind:address location="http://localhost/ws/inet_shop.1cws" />
</port>
- <port name="InternetShopSoap12" binding="tns:InternetShopSoap12Binding">
<soap12bind:address location="http://localhost/ws/inet_shop.1cws" />
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|