[mSklad] - синхронизация без 1С

avatar

[mSklad] - синхронизация без 1С



Компонент для импорта товаров с 1С в [MiniShop2].

Довольно часто необходимо проверить выгрузку, наличие характеристик товара, ценовых предложений и многое другое. Конечно все это выгружать на рабочий сайт очень нежелательно. Расскажу как это делаю я.


Возникла необходимость провести выгрузку с 1С
Проще всего сделать локальную выгрузку с 1С, можно ускорить процесс не выгружая картинки товаров. В итоге по окончанию выгрузки у нас сформируется пара файлов:
— import.xml
— offers.xml

import.xml — основной файл, содержит структуру каталога и сами товары.
offers.xml — содержит характеристики товара, ценовые предложения и тд…
Что же нам делать с этими файлами дальше?

Создаем тестовый сайт
Идем на modhost.pro/ и создаем сайт для теста

Указываем необходимые пакеты для теста:
[MiniShop2]
[mSklad]


Заходим в панель управления сайта, необходимо еще установить пакет [Console], позже объясню зачем.
Далее закачиваем наши файлы в папку
assets/components/msklad/1c_temp


Настройки MiniShop2
Достаточно создать ресурс — категория товаров.
Настройки mSklad
— указать Id категории каталогаid ресурса созданного выше
— выставить создавать tvда
— выставить Лимит выполнения29

Процесс импорта миную 1С

Запускать процесс импорта будем по ссылке, вида
http://s2146.h4.modhost.pro/assets/components/msklad/1c_exchange.php?http_auth=htauth:bVN5bmM6MzIyZDc4M2IwNjNhZTM2ZWI2NTJmZDU0MjI2YjZmY2Q=&type=catalog&mode=import&filename=import.xml
параметры запроса
filename — имя файла импорта
http_auth — строка авторизации

параметр http_auth
Строка авторизации уникальна, вычисляется очень просто. Делаем следующее:
Заходим на страничку компонента [mSklad], вкладка Реквизиты синхронизации.
Открываем в соседней вкладке base64.ru/

так в окне пишем
mSync:0bda22998c0411c0c97644d41637fcd3

Где первый параметр это логин, второй соответственно пароль с вкладки Реквизиты синхронизации.
Полученная строка
bVN5bmM6MGJkYTIyOTk4YzA0MTFjMGM5NzY0NGQ0MTYzN2ZjZDM=
и есть строка необходимая для авторизации, вставляем ее с строку запроса и получаем следующее
http://s2146.h4.modhost.pro/assets/components/msklad/1c_exchange.php?http_auth=htauth:bVN5bmM6MGJkYTIyOTk4YzA0MTFjMGM5NzY0NGQ0MTYzN2ZjZDM=&type=catalog&mode=import&filename=import.xml
импорт товаров
Вставляем полученную строку в браузер и выполняем запрос…
Процесс импорта пошел. Операция импорта прерывается по таймауту указанному нами выше, если импорт еще не завершен — просто обновите страничку. Обновляйте ее до тех пор пока импорт полностью не будет завершен.

импорт характеристик
Для импорта характеристик достаточно поменять имя файла — filename
запрос будет такого вида
http://s2146.h4.modhost.pro/assets/components/msklad/1c_exchange.php?http_auth=htauth:bVN5bmM6MGJkYTIyOTk4YzA0MTFjMGM5NzY0NGQ0MTYzN2ZjZDM=&type=catalog&mode=import&filename=offers.xml
Таким образом мы быстренько провели импорт и можем просмотреть структуру каталога, свойства товара, цены на товары… На данном этапе можно решить готова ли база товаров к выгрузке на боевой сайт или же необходимо внести какие либо изменения.

уточнения к вышеописанному импорту
Импорт пишет данные в сессию и единожды сделав импорт вы будите ломать голову — а как же его запустить повторно?
Вот для этого нам и пригодиться пакет [Console].
Открываем страницу пакета и выполняем следующий запрос
unset($_SESSION['last_1c_offer']);
unset($_SESSION['importFinish']);
unset($_SESSION['lastCategory']);
unset($_SESSION['totalCategories']);
unset($_SESSION['lastProperty']);
unset($_SESSION['totalProperties']);
unset($_SESSION['lastImportProduct']);
unset($_SESSION['lastProduct']);
unset($_SESSION['totalProducts']);
unset($_SESSION['categories_mapping']);
unset($_SESSION['properties_mapping']);
unset($_SESSION['feature_mapping']);
unset($_SESSION['price_mapping']);

$_SESSION['feature_mapping'] = array();

После импорт можно запустить повторно…

ps. Всем спасибо за внимание, надеюсь данная статья поможет вам быстрее освоится с процессом импорта 1С в MODx.
16 июня 2015, 22:44    Владимир 1    12 +2

Комментарии [6]

  1. Владимир 21 июня 2015, 10:58 # 0
    Чтоб был понятен ответ, и не было крякозяблов вставляем в начало файла assets/components/msklad/1c_exchange.php
    header('Content-Type:text/html;charset=utf-8');
    у меня вот так
    <?php
    ini_set('display_errors', 1);
    ini_set('error_reporting', 1);
    
    header('Content-Type:text/html;charset=utf-8');
    ....
    
    1. Денис Райх 27 ноября 2015, 05:29 # 0
      Владимир, здравствуйте! Согласно Вашей статье была проведена синхронизация с выгрузкой 1С.
      В получившемся каталоге более 20000 товаров.
      У товара Около 20ти свойств, Из них 16 — автоматически созданные при первой синхронизации tv-параметры.
      Выгрузка синхронизируется со скоростью 1000 товаров ~ 20минут. На мой взгляд — долго.
      Возник вопрос — можно ли ускорить этот процесс?
      Поможет ли в моём случае расширение модели товара Minishop2?
      Т.е. вместо N tv-параметров и соответственно 1+N запросов при обновлении каждого товара — будет один запрос к таблице товара.
      Посоветуйте, пожалуйста.
      1. Владимир 27 ноября 2015, 08:35 # +1
        Насколько я понимаю ТВ-шки в цикле создаются, а если свойства перенести в таблицу msProductData то для создания товара и свойств будет задействован только единожды процессор. Так что скорее всего будут улучшения по скорости… Пробуйте.
        1. Денис Райх 27 ноября 2015, 09:26 # 0
          Большое спасибо за совет!
          Копаю дальше в этом направлении.
          1. Владимир 27 ноября 2015, 09:28 # 0
            На здоровье!
            Я бы отключил автосоздание ТВ и посмотрел сколько времени займет выгрузка. Затем добавил бы пяток свойств в таблицу msProductData и сравнил бы… Было бы видно стоит двигаться в данном направлении или нет.
            1. Денис Райх 27 ноября 2015, 09:32 # 0
              Понял.
              Так и поступлю.
              Ещё раз спасибо!

      Вы должны авторизоваться, чтобы оставлять комментарии.