|
Нравится
29.03.2012
Рубрики: Программирование 1С, Веб программирование
Итак, как все начиналось)
Периодически к нам обращались клиенты с просьбами сделать обработку для загрузки данных в 1С из xml-файла (или csv)
с данными о заказах на сайте. Не долго думая мы выполняли эту несложную работу.
Аналогичные просьбы поступали насчет обработок для выгрузки остатков товаров с ценами из 1С в xml-файл (или csv).
Программисты подтвердят что такая обработка пишется на раз-два.
И в результате вроде бы есть обмен с сайтом, и все прекрасно. Но, настал тот момент, когда у нас случился совместный проект с веб-студией
по разработке интернет магазина с нуля. И, на собственном опыте, мы увидели весь ужас положения.
Такие методы обмена практически не упрощают работу, они подразумевают совершенно излишний ручной труд (запуск обработки в 1С, заливка результирующего файла
в директорию на сайте, запуск загружающего скрипта на сайте). И, полагаю, все понимают что такой обмен неэффективен, выгружает-загружает совершенно
недостаточное количество информации, и в общем и в целом является примитивным шлюзом между сайтом и 1С.
Давайте рассмотрим все существующие методы синхронизации сайта и 1С.
1) Обмен посредством файлов (xml или csv). Это может быть либо выгрузка товаров с остатками и ценами на сайт,
либо загрузка заказов с сайта в 1С. Данный метод подразумевает запуск обработки которая формирует файл с данными и сохраняет его в указанном месте
(либо наоборот разбирает файл и формирует необходимые документы в 1С). Указанный метод можно частично автоматизировать.
Например, организовать запуск скрипта загрузчика на сайте по расписанию. Тогда файл данных будет «заливаться» на сайт полностью автоматически
с определенной периодичностью. Можно подойти к автоматизации с другой стороны.
Например, организовать запуск обработки выгружающей данные из 1С в файл в автоматическом режиме, по расписанию, с заданной периодичностью,
и «заливающей» файл в определенную директорию сайта. И наконец, можно совместить оба метода.
Недостатки метода:
а) Отсутствует контроль из каждой учетной системы за успешностью выполнения операции в другой.
1С «не знает» когда скрипт-загрузчик на сайте загрузит файл данных в базу, и, что самое важное — насколько успешно прошла загрузка.
Аналогично, сайт «не знает» когда 1С загрузит данные с информацией о заказах, и насколько успешно прошла эта операция.
б) Проблема, описанная в предыдущем пункте, вытекает из следующего. С точки зрения программиста, разбирающегося и в веб-программировании, и в программировании на 1С,
в данном решении без необходимости увеличено количество «передаточных звеньев».
Логично было бы исключить лишние передаточные звенья и реализовать, например, следующую схему — 1С инициирует обмен с сайтом, и самостоятельно управляет процессом обмена,
контролируя статусы завершения каждой операции.
2) Метод так называемого «прямого доступа» к базе MySQL сайта из 1С.
Решений на основе данного метода много, и они отличаются реализацией.
Технические ньюансы в данном случае нам неинтересны и мы их опустим.
Данный метод имеет следующие недостатки:
а) Мало кто из хостеров откроет вам прямой доступ к базе MySQL из внешнего интернета. По соображениям безопасности, естественно.
Если у вас не виртуальный хостинг, а выделенный сервер, то — пожалуйста. На ваш страх и риск. Но лично я бы не стал открывать внешний доступ.
б) Прямой доступ из 1С к базе MySQL нивелирует производительность сервера хостера,
и сервера вашей компании, и приводит скорость обмена к общему знаменателю, а именно — к скорости самого медленного звена.
Это может быть сервер вашей компании (если он и так загружен под завязку), либо, что чаще всего - скорость интернет соединения.
3) Технологическое промышленное решение от фирмы ЗАО «1C» и «1C-Битрикс».
Данное решение стоит особняком и вообще вряд ли стоило бы рассматривать как метод обмена.
Но есть одно «но» - данный метод основан на технологических возможностях платформы 1С 8.2.
А именно, данная платформа имеет встроенную поддержку веб-сервисов,
имеет встроенные полноценные механизмы запуска фоновых процессов реализующих регламентные задания.
А именно это нам и нужно. Нам нужен четко работающий, поддерживаемый на уровне платформы (движка) механизм обеспечивающий соединение
программы 1С с сайтом и двусторонний обмен информацией.
Именно это и обеспечивает плаформа 1С 8.2 и система управления сайтами «1C:Битрикс».
Резюмируя, скажу что стандартный обмен с сайтом на CMS Битрикс реализует ну почти все что нам требуется для отображения консолидированной информации в 1С.
Недостатки метода:
а) Обмен инициируется вручную. И только из 1С.
Нет автоматического обмена по расписанию.
Впрочем, данный недостаток легко устраняется вмешательством программиста, так как соответствующие возможности у платформы есть.
б) Недостаток не метода, а собственно рассматриваемого решения.
CMS Битрикс — платная. И, к слову сказать, достаточно сложная и громоздкая система требующая серьезных вычислительных ресурсов.
Общие системные недостатки всех упомянутых методов:
1) Нет обмена по событиям. Вот примеры событий которые, на мой взгляд, однозначно должны инициировать синхронизацию:
а) Проведение в 1С документа изменяющего товарные остатки (расходная накладная, поступление товара)
б) Обмен между переферийными базами 1С. То есть, например, после синхронизации баз 1С двух офисов находящихся в разных районах города.
2) Нет обмена между 1С и сайтом информацией о движении денежных средств.
Информация о оплате клиентом товара электронными деньгами либо банковской картой должна загружаться в 1С и отображаться в виде приходных документов.
Полагаю, нет сомнений в том, что в 1С должны учитываться все денежные потоки.
3) Для многих интернет магазинов актуален вопрос отображения и динамического
изменения статуса заказа клиента на сайте. Например, статус заказа
клиента может принимать следующие значения - «в заказе», «оплачен», «доставлен». Соответственно
должен быть предусмотрен механизм обновлющий статусы заказов на сайте из 1С (либо наоборот — после
оплаты заказа на сайте банковской картой статус заказа должен быть обновлен и в 1С).
Резюмируя, опишу полноценный модуль синхронизации данных между 1С и сайтом:
1) Модуль должен быть лишен недостатков вышеописанных методов.
А именно, предлагаю двухзвеньевую структуру: обработка 1С + скрипт загрузчик запускаемый из
1С с заданными параметрами.
Хочу заметить что при обращении к скрипту загрузчику
обработка предварительно должна проходить авторизацию.
При неудачной авторизации скрипт не обслуживает свои вызовы из обработки.
Иначе говоря наш модуль синхронизации работает следующим образом: Обработка
запускается по расписанию как регламентное задание и инициирует обмен с сайтом.
Перед обменом обработка осуществляет запрос авторизации у скрипта.
Если авторизация успешна, то скрипт-загрузчик
разрешает (в пределах данной сессии конечно) обработке
посылать запросы на выборку, либо обновление данных.
После завершения синхронизации обработка 1С выполняет «logout».
2) Модуль должен иметь возможность легкой адаптации к
структуре таблиц основных интернет-магазинов. В данном случае это реализуется набором скриптов-загрузчиков адаптированных под основные существующие интернет-магазины.
3) Модуль должен уметь инициировать синхронизациях по событиям:
а) Проведение в 1С документа, изменяющего товарные остатки (расходная накладная, поступление товара) б) Обмен между переферийными базами 1С.
4) Модуль должен работать по принципу
«синхронизирую все изменения касающиеся товарных остатков и денежных потоков». То есть
модуль должен предусматривать обмен между 1С и сайтом информацией о движении денежных средств. Информация об оплате клиентом товара
электронными деньгами либо банковской картой должна загружаться в 1С и отображаться в виде приходных документов.
5) Модуль должен предусматривать (опционально) синхронизацию
статуса заказа клиента на сайте со статусом заказа в 1С.
Все не так сложно, вполне реализуемо. Мы на настоящий момент
пришли именно к такому пониманию функций необходимых модулю синхронизации. И, именно таким образом
спроектированный модуль синхронизации «1C<->сайт», мы предлагаем своим клиентам.
Как бы там ни было, хочется делать технологически верные и перспективные решения. Поэтому надеемся на то, что эта статья будет полезна владельцам интернет-магазинов.
|
|