Сделал загрузку товаров из 1С 8.2 Управление Торговлей на сайт в каталог commerce на основе стандартного обмена 1С8 с сайтом в формате CommerceML
+ парсинг описаний товаров с других сайтов.
Стояла задача:
1. Импортировать и обновлять из 1с цены и количество товаров.
2. Заполнить описания товаров с сайтов-поставщиков.
Задачи решены.
Импортирует товары, цены, каталог со структурой.
Парсит описания товаров с картинками.
Ноды-описания привязываются к нодам-ценам вручную. (Из 1с потом обновляются автоматически.)
Необходимые модули:
http://drupal.org/project/commerce
http://drupal.org/project/commerce_feeds
http://drupal.org/project/feeds_xpathparser
http://drupal.org/project/feeds_tamper 7.x-1.x-dev.tar.gz (31.95 KB) 2012-Feb-02
Парсер сайтов
http://xandeadx.ru/blog/drupal/554
Патчи:
Патчи для работы в feeds_xpathparser batch процесса
http://drupal.org/node/1447788
или
http://drupal.org/node/1397434
Патч при ошибке выполнения batch процесса
PHP Fatal error: Unsupported operand types in /sites/all/modules/feeds/includes/FeedsConfigurable.inc on line 149, referer: batch?op=start&id=201
http://drupal.org/node/1273622 http://drupal.org/files/issues/feeds_12.patch (http://drupal.org/node/1213472 не пробовал)
Патч для Иерархии таксономии в feeds
http://drupal.org/node/1152940#comment-5712000 http://drupal.org/files/0001-implemented-1152940-feeds-hierarchical-term...
Для применения патча в windows при ошибке line 354 использовать совет http://drupal.org/node/23844#comment-41593
patch {file} {patch} --verbose --binary
Настройки:
Настройки для решения проблемы уменьшения цены в 100 раз
http://drupal.org/node/1159426#comment-5729996
Изменил немного
profiles/commercebox_profile/modules/contirb/commerce/modules/product/commerce_product.module
для удобной выборки товаров по названию а не по SKU т.к. SKU из 1с не информативно + большое поле выборки
Посмотреть: эклектика24.рф
Потестировать:
Качайте архив:
http://narod.ru/disk/45734150001.4dff6339efc6701b181074a7cc0f8451/2012-0...
Логин Admin
Пароль 123456
Файлы для тестирования импорта - в папке files/feeds
Комментарии
Если работает то класс. Осталось только выучить комерц и 1С. Обязательно затестю. А на сайте цены есть?
Очень интересно. Спасибо автору за решение.
Есть чисто технический вопрос к автору. Тестировали ли Вы эту выгрузку "под нагрузкой"? Какие показатели по скорости обработки данных/расхода памяти при этом удалось зафиксировать?
10000 товаров импортирует минуты за три.
Работает на хостинге за 100 руб в месяц на drupalhost.ru 256MB памяти.
Можно узнать о настройках 1С?
Как настроить "стандартный обмен 1С8 с сайтом в формате CommerceML"?
Ты пользовался "Сервис->Обмен данными с Web-сайтом" ?
Да
Стандартный "Сервис->Обмен данными с Web-сайтом"
Там надо настроить фильтр выборки товаров из 1с.
Например только товары с ценой больше 0.
Сам в этом не сразу разобрался - думал это выбор полей для выборки в XML, а это оказался выбор товаров по параметрам для выгрузки в XML.
Ништяк! Огромное спасибо!
Спасибо большое за инфу
Спасибо!Решение очень нужное!
но как развернуть его на локальном компе под управлением Windows?
Не знаком с commerce, но может кому то будет интересно.
Есть модуль Node Import и Node Import Update.
Они позволяют без допиливаний заносить термины таксономии и товары с ценами и всеми их составляющими из файлов формата xml. Как вывести из 1С необходимую инфу в формат xml можно спросить у бухгалтера.
С ubercart эти модули прекрасно работают.
Такое количество модулей и патчей для одной задачи? Может, проще было ограничиться самописным скриптом?
пардон, а как залить ваш архив из бекапа? ставлю д7, ставлю backup and migrate и делаю через него восстановление (файл бекапа в files) и что-то он неособо заливается. дб надо делать по названию особенную чтоли?
вроде до этого много дампов использовал, с таким первый раз столкнулся
апд. разобрался - там префикс у бд стоит, нужно через сторонние дамперы загружать базу и прописывать вручную настройки для бд в settings.php
решение очень правильное, только был лишний импорт для сопоставления Ид каталогов с их названиями, это можно сделать в одном импорте следующим образом:
1. Создаем в Товаре поля текстовые для хранения ID групп и свойств (при показе их не используем, они только для импорта)
1. Создаем в mapping для них Поля.
2. В настройках парсера делаем как на приложенной картинке (файл импорта тоже приложен)
Вся фишка в использовании переменной '$field_group_id'.
<КоммерческаяИнформация ВерсияСхемы="2.05" ДатаФормирования="2012-12-13T22:10:08">
<Классификатор>
<Ид>dc0f1f6a-c5a7-4c4f-b497-3dc2be26d4e4</Ид>
<Наименование>Классификатор (Провиант)</Наименование>
<Группы>
<Группа>
<Ид>cbcf4966-55bc-11d9-848a-00112f43529a</Ид>
<Наименование>Продукты</Наименование>
<Группы>
<Группа>
<Ид>e8a71fa4-55bc-11d9-848a-00112f43529a</Ид>
<Наименование>Бакалея</Наименование>
</Группа>
<Группа>
<Ид>cbcf4967-55bc-11d9-848a-00112f43529a</Ид>
<Наименование>Кондитерские изделия</Наименование>
</Группа>
<Группа>
<Ид>e8a71fcb-55bc-11d9-848a-00112f43529a</Ид>
<Наименование>Молочные</Наименование>
</Группа>
</Группы>
</Группа>
</Группы>
</Классификатор>
<Каталог СодержитТолькоИзменения="false">
<Ид>dc0f1f6a-c5a7-4c4f-b497-3dc2be26d4e4</Ид>
<ИдКлассификатора>dc0f1f6a-c5a7-4c4f-b497-3dc2be26d4e4</ИдКлассификатора>
<Наименование>Провиант</Наименование>
<Товары>
<Товар>
<Ид>cbcf4972-55bc-11d9-848a-00112f43529a</Ид>
<Наименование>Ассорти (конфеты)</Наименование>
<Группы>
<Ид>cbcf4967-55bc-11d9-848a-00112f43529a</Ид>
</Группы>
</Товар>
<Товар>
<Ид>cbcf4968-55bc-11d9-848a-00112f43529a</Ид>
<Наименование>Молоко 1,5%</Наименование>
<Группы>
<Ид>e8a71fcb-55bc-11d9-848a-00112f43529a</Ид>
</Группы>
</Товар>
</Товары>
</Каталог>
</КоммерческаяИнформация>
Круто!
А я не догадался использовать дополнительную переменную.
Спасибо за помощь!
Пожешь потом что получилось.
Привет!
А кто-нибудь решил проблему импорта множества вариаций товара в 1 дисплей товара (это в терминах commerce kickstart)? Иными словами, проблему импорта множества продуктов в 1 ноду товара?
Использую
УТ 11.1.2.9 на платформе 8.3.3.641
Дополнение 1С Битрикс для УТ отсюда http://www.1c-bitrix.ru/download/1c/ecommerce/ut_addon_11.1.2.9.zip
Commerce Kickstart 7.x-2.9
Feeds 7.x-2.0-alpha8
Commerce Feeds 7.x-1.3
Feeds Tamper 7.x-1.0-beta4
В 1С дисплеи товара суть элементы номенклатуры, а вариации товара суть характеристики элементов номенклатуры. И в общем всё красиво выглядит, вариации импортируются из offers.xml, дисплеи я думал как раз загружать из import.xml. Но я никак не могу догнать, как, не используя explode в Feeds Tamper, загрузить дисплеи и сопоставить их с вариациями?
В архиве мои import.xml и offers.xml
Посмотри, может оно http://sirega.ru/video/drupal-commerce-import-tovarov-s-pomoshchyu-modul...
отличное видео, спасибо, особенно за то, что на русском языке. Но у меня файлы загрузки немного не так устроены.
Ясно
всё-таки удалось осилилить стандартными вышеуказанными стредствами. Правда пришлось чуть пропатчить модуль Feeds, там одна строчка мешала, причём видно, что не одному мне https://drupal.org/node/1539224
То, что я не мог понять, уже давно решено и обсуждалось здесь https://drupal.org/node/1188994
Пришлось импортировать в 3 прохода, т.е. создать 3 разных импортёра:
- первый парсит offers.xml и формирует продукты.
- второй парсит offers.xml и формирует ноды, связанные с только что созданными продуктами. Тут фокус в использовании Feeds Tamper для извлечения из <Ид> части, идентифицирующей элемент номенклатуры, т.е. ноду. Т.е. в <Ид> вида 47b8123d-0e28-11e3-95d1-0800278dbf07#47b8123f-0e28-11e3-95d1-0800278dbf07 это суть левая часть до решётки, т.е. 7b8123d-0e28-11e3-95d1-0800278dbf07. Я использовал для этого плагин Find replace REGEX для Feeds Tamper с аргументом /#\S*/ замещать на пустоту. Оное значение маппим на GUID и делаем его уникальным.
- третий парсит import.xml и добавляет остальные поля в ноду. Тут же берём <Ид> и маппим его на GUID и делаем его уникальным. Данный фокус имеет смысл только после вышеуказанного патча, а именно https://drupal.org/node/1539224#comment-7394766. Патч нужен для того, чтобы позволить разным импортёрам использовать один GUID, без него у каждого импотрёра свой набор GUID-ов.
Надеюсь, доступно описал. Сам потратил на это больше недели, ужеб наверное быстрее разобрался с написанием плагина под Feeds.
А в экспорт из 1С лезть всёравно наверное придётся, если встанет вопрос об индивидуальных картинках товара на характеристику, или, например, просто если есть _основная_ картинка и _дополнительные_ картинки, они выгружаются скопом. Как представляю этот идиотский механизм хранения картинок в 1С аж тошнит.
пару строк о commerce_feeds 1.3
1. Если использовать модель Commerce Kickstart, когда изображения хранятся в вариации, а не в дисплее товара (т.е. в product, а не в node), что в общем-то идеологически правильно, ибо у каждой вариации может быть своя картинка, например, футболки разного цвета, так вот, 1С УТ это дело ни хранить, ни выгружать толком не умеет. Ни из коробки, ни с дополнениями Битрикса. В очередной раз низкий поклон компаниям (1С, Битрикс), кормящие армию программистов, вечно допиливающих сии поделия. Так вот, в 1С УТ картинка вяжется к элементу номенклатуры, т.е., по-нашему, к ноде. И выгружается в import.xml, файл, откуда мы берём информацию о нодах (дисплеях). И как эти картинки оттуда в вариации загрузить, пусть даже одни и те же во все вариации, я не понял. Кое-кто может додуматься до создания у характеристики номенклатуры реквизита типа файл, и грузить картинку туда. Однако засады будет три минимум: крайне идиотский пользовательский интерфейс для работы с этими картинками, хранить можно 1 картинку на реквизит, и самое главное, всё равно не получится добиться желаемого - при выгрузке сама картинка в папку с картинками не попадёт, а в файле выгрузки появиться в виде имени картинки, заданном при задании значения этого реквизита, по умолчанию - имя картинки без расширения. Т.е. действо практически бесполезное. Потому пилю выгрузку, умнее ничего не придумал. Пока заставил выгружаться картинки номенклатуры в файл offers.xml, одни и те же в каждую характеристику.
2. commerce_feeds грузит эти картинки только по абсолютному URL, потратил на это знание пару часов.
по-простому (временно) разрешить в 1С 8.3 УТ 11.1.2.9 + дополнения Битрикса выгружать нулевые цены:
Конфигуратор -> Конфигурация -> Общие -> Планы обмена -> ОбменУправлениеТорговлейСайт -> Макеты -> РИ_СхемаВыгрузкиТоваров
Откроется
большая и страшная хуитаконструктор схемы компоновки данных (пример работы с ним http://v8.1c.ru/overview/dcs_sample_report.htm). Нам же нужна кнопка "Конструктор запроса...", в конструкторе находим справа самую нижнюю закладку с говорящим названием "Запрос пакета 12", переходим на неё, выбираем верхнюю закладку "Условия", там одна строчка Цены.цена > 0, удаляем эту строчку крестиком, сохраняем конфигурацию. Всё. Естественно, конфигурацию лучше заранее забекапить.Правда, если больше ничего не делать, в offers.xml исчезают строки ЦенаЗаЕдиницу, а commerce_feeds отчего-то не хочет создавать товары с незаполненной ценой, хотя с нулевой - пожалуйста. Таким образом, либо ковыряем 1С дальще, либо у нас ещё есть строчка вида <Представление>0 RUB за шт, которая, кажется, всегда возвращает цифру цены. Следовательно, можно настроить соответствующие правила в feeds_tamper.
А вот этим http://cmlservice.com/modules/importkit никто не пользовался?
пользовался, но там доработка 1С на 100 Мбайт, но в неё не было нужного мне импорта Характеристик товара и создатель до сих пор не сделал. И заказчик отказался вставлять обработку в 1С на 100 Мбайт Так что я зря потратил 5000 рублей. Может быть под ваши нужды подойдет. Кстати этого импорта Характеристик (ЗначенияСвойств)до сих пор не нашёл ни у одного интернет-магазина, на shopscript обещали сделать , но пока не сделали.
Спасибо. А как решили выгрузку, если не секрет? .. Не очень то охота опять к битриксу возвращаться((
Что скажете насчет иерархии таксономии? Получилось сделать обновление?
Добрый день.
На рабочий сайт подключил commerce и commerceml, на тестовый поставил сборку rucommerce чтобы разобраться. Подключил оба сайта к разным аккаунтам на "мой склад". В обоих случаях каждый раз после синхронизации отображений товаров(импортер Product Nodes ) добавляются все поля во вкладке "Mapping". через некоторое время на вкладку "Mapping" уже просто невозможно зайти не хватает памяти (php fatal error). В чем может быть причина? дело в commerceml, xpathparser или "моем складе"?
дело в php memory. хотя битва экстрасенсов закончилась
php memory - это следствие. я наверно не очень внятно написал. при каждом импорте товаров добапяются поля(дубли) в настройки соответствий (mapping). Через некоторое время их становится так много что на эту страницу не получается зайти. Все это можно воспроизвести поставив rucommerce. Я тоже не экстрасенс, не могу понять в чем причина. Пока сделал жуткий костыль - поставил на хостинг drush и сбрасываю по крону фичу с этим импортером раз в час
не знаю как у вас. или может мы говорим про разные вещи.
у меня VPS и стандартная сборка drupal 7 + commerce + feeds и доп модули к нему, обновление 22к нод происходит без проблем.
Видно нужно чуток доработать ваш импорт
че правда?
FALSE and NULL
В последних комментариях речь идет о вот этой ошибке в модуле CommerceML:
https://www.drupal.org/node/2601128
Там есть временный фикс, который должен работать в режиме полной выгрузки.
СПАСИБО ЗА МОДУЛЬ ВЫРУЧИЛИ!!! Планируется доработка для полноценного обмена заказами?
Пожалуйста!
Опубликовали релиз последней версии: https://www.drupal.org/project/commerceml
Если проблема с дубликатами в Feed Product Nodes все еще есть в этом релизе, то отключите опцию Create product node properties в настройках модуля.
В модуле реализован полноценный обмен заказами Drupal Commerce. Заказы выгружаются, обратно загружается информация об оплате и доставке. Если доставка или оплата была, то меняется статус заказа на указанный в настройках модуля.
В последней версии модуля опции Feed Product Nodes нет, код создания полей и синхронизации таксономии сильно переписан для поддержки обменов разных типов товаров с разным набором полей.
Если будут проблемы с этим, то заведите пожалуйста issue на Drupal.org, посмотрим что можно сделать.