Сделай Сам Свою Работу на 5

Описание реализации решения.

 

Решение поставленной задачи можно разбить на несколько этапов:

· Создание механизма двусторонней передачи данных – со стороны Интернет-магазина отправляются данные о сформированных клиентами заказах, со стороны «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- 2019 stydopedia.ru Все материалы защищены законодательством РФ.