Обмен данными между Ubercart 3 и 1С Управление торговли на примере модуля importer

Аватар пользователя VVS VVS 21 марта 2013 в 12:53

Всем привет!

Преамбула: стал вопрос о связи инет магазина на ubercart с 1С. Сам реализовывать пока не брался, решил поискать готовые решения.

Нашёл и рассмотрел несколько:
1. Разработчик из Екатеринбурга, имя домена с упоминанием 1С и drupal. В результате общения, через fededback на сайте, выяснилось, что реальная, запрашиваемая стоимость в два раза больше заявленной на его сайте.
И в результате ещё некоторых моментов в общении с разработчиком было принято решения далее с ним не общаться.
2. Решение, найденное на сайте http://armrus.net/blog/sinkhronizatsiya-drupal-s-1s отображало только авторские идеи, не доведённые до публичного практического решения. Со слов автора решение рабочее. Идея понравилась, но испробовать его, к сожалению, не удалось.
3. Решение, давно замеченное на http://cmlservice.com, первый раз о нём прочёл в статье http://www.drupal.ru/node/62395.

Далее об этом решении.

Это связка модулей, позволяющих загружать из 1С в Ubercart в формате CommerceML2 данные о товарах: каталог, описание, фотографии, цены, остатки, характеристики и свойства. Так же позволяет выгружать в файлы order.xml данные о заказах и контрагентах с сайта.
Порадовало адекватное отношение разработчика - быстрый ответ, помощь в режиме скайп-видео и TeamViewer, наличие документации к модулю и обработке 1С: http://cmlservice.com/docs

Но! Первый камень был брошен со стороны 1С. На сайте http://v8.1c.ru/edi/edi_stnd/90/ опубликованы стандарты формата CommerceML2, принятые самой 1С. Но в последних версиях Управления торговлей, без объявления войны, были вероломно нарушены данные "стандарты". Такая же реализация была выполнена в конфигурации Штрих-М: Торговое предприятия, с которой нам пришлось налаживать связь для ubercart. Фактически в 1С поменяли "характеристик товара". Ранее они были в файле import.xml теперь же в offers.xml, хотя версия формата в файле осталась той же - 2.04.
Проект CMLService поддерживал Характеристики, находящиеся в import.xml. В результате обнаруженной нами проблемы было создано issue http://css.mirocow.com/issues/501 которое оперативно было исправлено и закрыто.
Так же в последнее время была добавлена поддержка Ubercart 3, загрузка свойства товаров в поля ноды. Разработчик раскрыл карты на счёт окончания работ над модулем для Commerce - он будет окончен в ближайшее время.

Краткая инструкция по настройке модуля:

Включаем модули: Importer, Import content from CML, Import Offers from CML, Export orders from Ubercart (CommerceML2)

Добавляем атрибуты товара, опции можно не устанавливать, они загружаются из 1С: /admin/store/products/attributes

Идём в настройки модуля Importer: /admin/importer/settings

Настраиваем каталог (в каталоге sites/all/modules/importer/data уже расположен пример, выгруженный из 1С УТ. Права доступа на каталог должны быть 700 (иначе не будут записываться order.xml), поэтому желательно его вынести в корень, или скрыть где-то в недрах files.

Добавляем товару поля типа "Термин таксономии".
Настраиваем привязки свойств к полям (если нужно), копируя <Ид> свойств из файла import.xml:

Настраиваем привязки характеристик к атрибутам, копируя из файла offers.xml значения ключа <Наименование> из <ХарактеристикаТовара>:

Копируем из файла offers.cml значение ключа <Ид> из необходимого ключа <ТипЦены>:

Запуск импорта по адресу: /admin/importer

Сначала загружаем товары, зачем предложения по товарам (цены, остатки).

Идём в /admin/content, смотрим загруженные товары.

Всё.

Файлы заказов order_<номер>.xml создаются в этом же каталоге после осуществления заказа на сайте. Данный файл можно загрузить в 1С, используя обработку с сайта автора.

В тему приглашается сам разработчик, для ответа на вопросы :)

ВложениеРазмер
Иконка изображения importer1.jpg24.88 КБ
Иконка изображения importer2.jpg35.44 КБ
Иконка изображения importer3.jpg30.12 КБ
Иконка изображения importer4.jpg17.51 КБ
0 Thanks

Комментарии

Аватар пользователя ArmRus ArmRus 21 марта 2013 в 21:57

Главное что решение работает. Спасибо за статью. единственное что смутило

"VVS" wrote:

Включаем модули: Importer, Import content from CML, Import Offers from CML, Export orders from Ubercart (CommerceML2)

Что касается моего решения импорта из 1с - на самом деле в 1С не только этот подводный камень, и по факту разработки встречаются совершенно разные реализацию Comerce ML 2.04 =) респект разработчикам 1с. Я на своем первом проекте - где была необхадима реализация импорта из 1с решил использовать вышеуказанный метод. Но получив от клиента файлы выгруженные из 1С понял что головной боли будет больше чем ожидается. Тут же второй проект с идентичным требованием.
И с точки зрения логики - я предпочел использовать не Ubercart 3 а Commerce. Причиной решения стал тот факт что у комерца товар и отображение товара разные сущности. Но вопрос стоял о дальнейшей интеграции модуля выгрузки с уберкатром, а может и с каталогом - который просто построен на таксономии. У меня получилось универсальное решение - которое применялось уже на 5-6 коммерческих проектах(и на Ubercart 3 и на Commerce) а так же недавно интегрировал модуль с интернет магазином Drupal 6 + Ubercart 2. Единственный недостаток - это время - у меня мало свободного времени и руки не добираются почистить модуль от привязок к тому или иному проекту.
Но все же порадую людей кто ищет универсальное решение. На предстоящем баркемпе (http://www.drupal.ru/node/97071) будет доклад о Электронной комерции и Drupal. Скажу сразу что часть доклада будет о интеграции интернет магазинов и 1С а так же мини обзор модуля импорта. Сразу после Баркемпа исходный код модуля будет опубликован в сети.

Аватар пользователя Mirocow Mirocow 23 марта 2013 в 20:37

Версия под Commerce выйдет на следующей неделе.
Адаптация будет под сборку Commerce Kickstart.
Также мы готовим новую универсальную обработку под 1С. Увеличена скорость подготовка XML к выгрузки. И добавлена возможность работы с любыми Конфигурациями 1С.

p/s: Всем кто хочет помочь в развитии проекта.
https://bitbucket.org/mirocow/importer
Ждем пул-реквесты.

Аватар пользователя Softovick Softovick 24 марта 2013 в 11:44

Не совсем понял, зачем права 777 на папку data?
1. Прямая угроза безопасности, что для интернет магазина очень актуально и нужно относится внимательно.
2. В корень тем более не нужно выводить эту папку, быстрее найдут.

Если без 777 не обойтись, тогда рекомендую выдать название ей неудобочитаемое, с каким нибудь хешем, чтобы путем перебора не подобрать. Например, как это сделали в Drupal 8 для папки конфигураций.

Аватар пользователя VVS VVS 24 марта 2013 в 18:07
Softovick wrote:

Не совсем понял, зачем права 777 на папку data?
1. Прямая угроза безопасности, что для интернет магазина очень актуально и нужно относится внимательно.
2. В корень тем более не нужно выводить эту папку, быстрее найдут.

Если без 777 не обойтись, тогда рекомендую выдать название ей неудобочитаемое, с каким нибудь хешем, чтобы путем перебора не подобрать. Например, как это сделали в Drupal 8 для папки конфигураций.

Да, это я загнул конечно с 777. Вполне 700 хватит. Спасибо за замечание.

Аватар пользователя kyky kyky 24 марта 2013 в 16:29

Зачем эти костыли, когда в 1С есть веб-сервисы? Все уже придумано за вас.

Аватар пользователя Softovick Softovick 24 марта 2013 в 17:38
kyky wrote:

Зачем эти костыли, когда в 1С есть веб-сервисы? Все уже придумано за вас.

Видимо вы не очень вчитывались, веб-сервисы есть далеко не во всякой версии 1С. К тому же если надо передавать данные на сайт с клиентской машины с 1С - в подавляющем большинстве случаев не будет доступа извне к этим web-сервисам.
Я согласен, веб-сервис вещь шикарная, сталкивался и прекрасно работало. Но уж очень много ограничений, путем обмена файлами бывает гораздо проще и быстрее организовать регулярный обмен данными.

Аватар пользователя VVS VVS 25 марта 2013 в 16:05
kyky wrote:

Зачем эти костыли, когда в 1С есть веб-сервисы? Все уже придумано за вас.

Напишите пост об этом - мы почитаем.

Аватар пользователя Mirocow Mirocow 24 марта 2013 в 17:55
"Softovick" wrote:

Если без 777 не обойтись, тогда рекомендую выдать название ей неудобочитаемое, с каким нибудь хешем, чтобы путем перебора не подобрать

Лучше всего кидать в корень фтп а в настройках указать относительный путь до папки. К примеру ../1c. И конечно права 777 ставить некчему. Я обычно ставлю 700.
Ну или 770, чтоб дать возможность писать и читать пользователю от которого запущен процесс php-fpm или apache.

Аватар пользователя Mirocow Mirocow 24 марта 2013 в 17:56
"kyky" wrote:

Зачем эти костыли, когда в 1С есть веб-сервисы? Все уже придумано за вас.

Очень интересно как через веб сервисы вы будете передавать файлы 100 мб XML и 2 терабайта картинок.

Аватар пользователя kyky kyky 25 марта 2013 в 2:58
"Mirocow" wrote:

Очень интересно как через веб сервисы вы будете передавать файлы 100 мб XML и 2 терабайта картинок.

Могу подсказать решение.
1) Через веб-сервис можно передавать файлы. XML сжимается до 3-5%, т.е. на выходе мы получим 3-5 Мб. Отдаете как двоичные данные.
2) Таскать 2 Тб картинок — идиотизм, достаточно поставить Апач/nginx для разрачи этих картинок через веб.

"Softovick" wrote:

К тому же если надо передавать данные на сайт с клиентской машины с 1С - в подавляющем большинстве случаев не будет доступа извне к этим web-сервисам.

В этом случае можно дергать из 1С урлы сайта, передавая данные в теле POST/PUT запроса.

Аватар пользователя Mirocow Mirocow 25 марта 2013 в 14:57
"kyky" wrote:

1) Через веб-сервис можно передавать файлы. XML сжимается до 3-5%, т.е. на выходе мы получим 3-5 Мб. Отдаете как двоичные данные.

import.xml - 250мб
Сжимается в 5,44мб

+

offers.xml

И того 10 мб в сжатом виде.

Это планируется применить к обработке. И к скрипту Importer. После того как будет сделана поддержка Drush

"kyky" wrote:

2) Таскать 2 Тб картинок — идиотизм, достаточно поставить Апач/nginx для разрачи этих картинок через веб.

Какое это имеет отношение к задаче импорта?

Аватар пользователя droopy droopy 25 марта 2013 в 16:37

Здравствуйте!
Попробовала модуль и к сожалению ничего не подгружается в Bindings settings.

Вот страница настроек:

В чем может быть проблема?

Аватар пользователя Mirocow Mirocow 25 марта 2013 в 22:48
"droopy" wrote:

Для того чтоб грузить в поля, они хотяб должны быть. А после уже можно их и настроить. Из скриншота, что вы прислали, выходит что полей просто нет.

Аватар пользователя droopy droopy 26 марта 2013 в 14:36
Mirocow wrote:
"droopy" wrote:

Для того чтоб грузить в поля, они хотяб должны быть. А после уже можно их и настроить. Из скриншота, что вы прислали, выходит что полей просто нет.

Ок, спасибо. Могли бы Вы пояснить, какие именно поля нужно добавлять? Немного не понятно из инструкции.
Поля CCK? Если да, то какие у них должны быть системные названия, что бы модуль их выводил? (может нужно что-то смотреть в файлах выгрузки 1С)
Поля таксономии? (как в инструкции) - это для меня вообще не понятно, что это за поля? Это для терминов таксономии или же какая-то хитрая связка из таксономии+ckk (может модуль NAT) ?

Аватар пользователя VVS VVS 26 марта 2013 в 14:46
droopy wrote:

Ок, спасибо. Могли бы Вы пояснить, какие именно поля нужно добавлять? Немного не понятно из инструкции.
Поля CCK? Если да, то какие у них должны быть системные названия, что бы модуль их выводил? (может нужно что-то смотреть в файлах выгрузки 1С)
Поля таксономии? (как в инструкции) - это для меня вообще не понятно, что это за поля? Это для терминов таксономии или же какая-то хитрая связка из таксономии+ckk (может модуль NAT) ?

Инструкция написана к drupal 7. А вы точно используете Ubercart 3 и Drupal 7? Смущает CCK, которого в 7 нету. Так же в 7 есть поля типа "Ссылка на термин". Названия роли не играют.

Аватар пользователя kyky kyky 26 марта 2013 в 3:11
"Mirocow" wrote:

Какое это имеет отношение к задаче импорта?

У вас склероз? Напомню, вы спрашивали:

"Mirocow" wrote:

как через веб сервисы вы будете передавать файлы 100 мб XML и 2 терабайта картинок.

Я ответил, что картинки нужно не передавать на сайт, а раздавать с сервера, где они лежат.
Таким образом отпадает потребность в импорте, кэп.

Аватар пользователя Mirocow Mirocow 26 марта 2013 в 6:08
"kyky" wrote:

Я ответил, что картинки нужно не передавать на сайт, а раздавать с сервера, где они лежат.
Таким образом отпадает потребность в импорте, кэп.

Пожалуйста не пишите больше ерунды. Для начала разберитесь в вопросе, а только потом предлагайте свое решение.

Смысл реализации в использовании всех возможностей Dupal при выводе картинок. Так как импорт формирует или филд или cck филд в зависимости от версии Drupal. А уж положить картинку на фтп проблем не составляет. А ваш способ больше смахивает на костыль.

Аватар пользователя kyky kyky 26 марта 2013 в 9:43

Костыль у вас — вы задваиваете данные, в то время как можно пользоваться одним централизованным хранилищем. Получается, что из двух терабайт сделали четыре — глупо и расточительно.
Какие особенности Друпала при выводе картинок вам нужны? Нджинкс умеет ресайзить картинки в полете, например.

Аватар пользователя Mirocow Mirocow 26 марта 2013 в 14:16
"kyky" wrote:

Нджинкс умеет ресайзить картинки в полете, например.

Nginx даж перл имеет и что. К чему вы это все пишите?

Аватар пользователя droopy droopy 26 марта 2013 в 18:04

Ой, а я использую Drupal6 + Ubercart2. А как-же тогда делать настройку модуля под имеющийся арсенал?

Аватар пользователя Mirocow Mirocow 26 марта 2013 в 22:44
"droopy" wrote:

Ой, а я использую Drupal6 + Ubercart2. А как-же тогда делать настройку модуля под имеющийся арсенал?

Вот тут http://cmlservice.com/docs представлена официальная документация. Если чего то нет, пишите - допишем.

Аватар пользователя kyky kyky 27 марта 2013 в 2:58
"Mirocow" wrote:

К чему вы это все пишите?

Поскрольте выше, если с памятью проблемы.

Аватар пользователя Mirocow Mirocow 27 марта 2013 в 4:52
"kyky" wrote:

Поскрольте выше, если с памятью проблемы.

Спасибо за Ваше предложение, но к сожалению оно не удовлетворяет требованиям заказчиков и накладывает ограничения на использования возможностей Drupal в дальнейшем.

Аватар пользователя svaroha svaroha 2 апреля 2013 в 12:30

Если 2 терабайта картинок, то, наверное, все же лучше не гонять их лишний раз на сервер...поперхнуться может.
з.ы. многие разработчики, при таких немаленьких размерах товарного ассортимента, вообще пользуются прямыми запросами от 1с к друпалу для получения данных. Быстрее будет. Хотя по поводу скорости могу сильно ошибаться. Сам сделал импорт с сайта в 1с прямыми запросами (в 1с обработка, тунель через путти), экспорт на сайт еще не делал.

Аватар пользователя ArmRus ArmRus 4 апреля 2013 в 1:22
"kyky" wrote:

Зачем эти костыли, когда в 1С есть веб-сервисы? Все уже придумано за вас.

А какого ... тогда разрабы 1С придумали модуль выгрузки на сайт?)))
Второй нюанс - вы уверены что каждый программист 1с осилит все правильно настроить? Не слышали что есть компании которые, категорически, не дадут доступ к своим серверам - чтобы вы там что либо настроили. Вы уверены что сможете объяснить заказчику что из ВНЕ будет доступ к 1С и почему это безопасно? - если вы у вас есть ответы оправдывающие все эти пункты - или вы гений или работаете с одним клиентом и думаете что все остальные такие))))

P.S. 1 правильно написанный и задокументированный модуль для друпала намного легче интегрировать практически на всех сайтах, для которых он написан(в данном случае Drupal 7 + Ubercart 3) а для работы с веб сервисами разных баз надо будет писать обработчики для каждой из них - и то что у клиента админ 1с будет настолько прошарен, что все сделает как надо - очень редкий случай(по опыту говорю) - если гдето ошибся - поправьте.

Аватар пользователя arcada.isb arcada.isb 9 апреля 2013 в 17:32

Дмитрий (Mirocow) красавчег! модуль пока не смотрел, но похвально, что он делится с сообществом ;)

Аватар пользователя EnShTeIn EnShTeIn 10 апреля 2013 в 1:57
"arcada.isb" wrote:

Дмитрий (Mirocow) красавчег! модуль пока не смотрел, но похвально, что он делится с сообществом ;)

На самом деле модуль гуд.
Сейчас заканчиваю сайт Drupal 6 + Ubercart 2 + 1C 8.2 УТ 11
Можете не верить, но подружили эти злые штуки вместе, правда с допилами (+ загрузка информации в доп.поля - CCK), но к сожалению до автомата нужно правильно допилить модуль (Автор обещал решить:)) ).
В остальном вкратце: данные выгружаются из 1С (категории, товары, цены, остатки) и загружаются в 1с новые заказы. На сайт всё грузится нажатием одной кнопки, но для нашего проекта нужен именно автомат (думаю скоро сделаем).
З.Ы. Как доделаем - постараюсь написать по свежей памяти процесс интеграции.

Аватар пользователя Mirocow Mirocow 17 апреля 2013 в 13:48
"EnShTeIn" wrote:

алению до автомата нужно правильно допилить модуль (Автор обещал решить:)) ).

Планируется 2 автомата:

1) Drush - консольное выполнение
2) Cron - Выполнение чeрез wget

Аватар пользователя droopy droopy 21 апреля 2013 в 22:48

Итак, промчавшись с связкой drupal 6 + ubercart 2 + 1c удалось выявить проблемы:

1. Importer не видит cck полей. CCK поля есть в node_product, но в Bindings settings всегда пусто =( С чем может быть связанно?
2. Не цепляются картинки. Настроек кроме move/copy в модуле нет, а как цеплять ума не приложу.
3. Не цепляются артикулы.

Прошу прощения, если где-то не увидела, но очень жду помощи, что бы все таки полноценно попробовать работу модуля importer.

Спасибо!

Аватар пользователя Mirocow Mirocow 28 апреля 2013 в 18:15
"droopy" wrote:

1. Importer не видит cck полей. CCK поля есть в node_product, но в Bindings settings всегда пусто =( С чем может быть связанно?

поля вяжутся определенного типа, возможна причина в этом

"droopy" wrote:

2. Не цепляются картинки. Настроек кроме move/copy в модуле нет, а как
цеплять ума не приложу.

проверьте права на папку

"droopy" wrote:

3. Не цепляются артикулы.

проверьте их наличие в import.xml

И да importer больше развиваться не будет. На смену пришел "Import KIT"

Аватар пользователя roman-yrv roman-yrv 14 июня 2013 в 23:03

Добрый вечер.

Хочу уточнить, решение для синхронизации Drupal Commerce и 1С уже готово ?

Аватар пользователя Mirocow Mirocow 17 июня 2013 в 5:36
"roman-yrv" wrote:

Хочу уточнить, решение для синхронизации Drupal Commerce и 1С уже готово ?

да

Аватар пользователя Ubiquitous_Nothing Ubiquitous_Nothing 17 июня 2014 в 3:28
"VVS" wrote:

1. Разработчик из Екатеринбурга, имя домена с упоминанием 1С и drupal. В результате общения, через fededback на сайте, выяснилось, что реальная, запрашиваемая стоимость в два раза больше заявленной на его сайте.

Чего я до оплаты не прочитал этих строк. Случилось мне заказать обработку для 1с у этого "разработчика" из Екатеринбурга имя которому Ефимов Сергей Николаевич. По цене он меня не обманул, хотя, видимо позднее жалел об этом (видно из переписке в скайпе, что по ссылке ниже). Когда до меня начало доходить, что он не только понимает в друпале меньше меня, но и ещё умеет его поломать своей "интеграцией", я отказался от его услуг и немного был удивлён, когда он не захотел вернуть деньги уплаченные за невыполненную работу.
Со стороны drupal этот умелец не производит ниодной операции, т.к. пишет 1С-овской обработкой непосредственно в sql БД сайта.
Подробнее см. тут http://www.drupal.ru/node/89343#comment-612705