Синхронизация интернет-магазина Drupal 6+Ubercart 2+Importer с 1С на автомате

Главные вкладки

Аватар пользователя EnShTeIn EnShTeIn 26 июня 2013 в 15:46

Привет народ!
Это мой первый пост, поэтому шапками не кидаться.
Статья написана для рассеивания мифов о невозможности качественной синхронизации Drupal'а и 1С.

Начну с того, что встала задача сделать интернет-магазин, управляемый из 1С с актуальными ценами и остатками на сайте, в добавок к этому новые товары должны были выгружаться из 1с прямо на сайт. Синхронизация должна быть только в XML по соображениям безопасности и конфиденциальности. И всё это должно было жить своей жизнью, забегая вперёд скажу, что всё работает так как планировали.

Для решения этой задачи мы, не побоюсь этого слова, перерыли весь интернет на предмет синхронизации 1С с Drupal'ом и были выбраны на тот момент два модуля:

  • от сайта 1c-ubercart (оказались мошенниками), ещё одно подтверждение тут
  • от Mirocow (но к сожалению был в сыром виде и пришлось вместе с автором допиливать, благо человек оказался хороший) под названием Importer (ранее CML Service, сейчас проект перерос в Import Kit и должен быть многообещающим)

После того, как с первым вариантом ничего не получилость, мы обратились ко второму.

Модуль для выгрузки из 1С я не видел (для получения обращайтесь к автору Mirocow), поэтому ничего вообще сказать о нём не могу, только разве что он выгружает по FTP номенклатуру (с категориями) + картинки и остатки, и загружает заказы, которые формируются на сайте в виде xml-файлов.

Для синхронизации на понадобится сам модуль, он в приложенных файлах и выгрузка из 1С.
Будем считать, что ubercart у Вас уже стоит и настроен, а так же имеется выгрузка из 1С.

При разработке интернет магазина нам нужно было получить килограммы и штуки из xml-файлов выгрузки и далее их выводить на сайте при просмотре товаров и т.д.
Для этого было создано новое текстовое поле unit при помощи CCK (его нужно создать) и дописать модуль соответствующим образом (приложенный модуль это загружает). Для получения новых полей Вы так же можете по образу и подобию получить нужные данные в процессе загрузки на сайт, поправив файлы модуля.

После importer'а в папку с модулями Вам нужно включить Export orders from Ubercart (CommerceML2), Import CML common, Import content from CML, Import Offers from CML и сам Importer на странице модулей, указать GUID типа цен, которые вы хотите выгружать на сайт и произвести нужные настройки.

Перейдите в раздел Управление => Importer => Importer settings

  1. в поле Full path to exchange folder укажите путь к файлам, выгруженным из 1С (по умолчанию стоит путь в папку с примером в модуле)
  2. в поле Retail price указываем GUID цены
  3. выбираем статус заказа В ожидании в поле Status of orders (для автоматического формирования xml-файла заказа)
  4. Настраиваем остальное по желанию и сохраняем

Теперь, когда предварительно всё настроено, переходим на уровень выше в раздел Управление => Importer

  1. Ставим галочки Force update products. и Force update picture. в блоке Insert/Update producrs by "product", нажимаем сохранить, далее жмём кнопку отправить и наблюдаем процесс загрузки на сайт категорий, товаров и картинок.
  2. теперь на той же странице (Управление => Importer) ставим галочки Update price. и Update stock. в блоке Update offers, нажимаем сохранить, жмём кнопку отправить и наблюдаем процесс загрузки цен и остатков.

Вуаля. теперь на сайте у Вас должны появиться динамически созданные категории, созданы новые товары, обновлены старые и добавлены цены с остатками.
Для автоматизации сего процесса мы использовали только cron задачу (http://example.com/cron.php - выполнение регулярных процедур), т.к. модуль использует hook_cron.

На этом всё. Надеюсь статья окажется полезной.
Удачи в автоматизации

ВложениеРазмер
Иконка пакета importer.zip770.71 КБ

Комментарии

Аватар пользователя EnShTeIn EnShTeIn 28 июня 2013 в 14:48

Enemy wrote:
по крону точно автоимпорт идет?

Извините за долгий ответ. Да, импорт идёт, это вариант с рабочего сайта.
Более того, есть так же возможность работы через bash, но к сожалению с ним ни разу не работал