Здравствуйте. Проблема с обменом с 1с8: Управление Торговлей.
Имеется: Denwer3 + HostCMS 5.7.9 Free + Демонстрационный сайт
(Скачал HostCMS - 19.10.2009 после того как увидел в новостях: http://www.hostcms.ru/news/1c-v8/)
Все работает как часы, кроме автоматического обмена с 1с - со стороны 1С все нормально, заглядываем после обмена в магазин - ничего не меняется (а ручной обмен через файлы как-то работает: номенклатура хотя бы загружается).
Мои вопросы:
1. В инструкции по обмену читаем: "В центре администрирования HostCMS в структуре сайта проверьте существование узла /shop/1c/, если узел отсутствует — создайте его аналогично узлу в демонстрационном сайте."
Насколько я понимаю, узел может быть любым, лишь бы он был привязан к динамической странице "Обмен с 1С:Управление торговлей" с кодом 36.
Я прав?
2.Протокол обмена 1с с веб-сайтом (http://www.v8.1c.ru/edi/edi_stnd/131/) подразумевает многократное обращение к php-скрипту ответственному за обмен.
Находим скрипт с кодом 36 (\lib\lib_36\lib_config_36.php) - и что мы там видим:
а)
....
// Создадим массив для записи в него переданных данных
$array_of_data = array();
.....
elseif (isset($_REQUEST['type']) && $_REQUEST['type'] == 'catalog'
&& isset($_REQUEST['mode']) && $_REQUEST['mode'] == 'file'
&& isset($_REQUEST['filename']))
{
if(isset($GLOBALS['HTTP_RAW_POST_DATA']))
{
//Считываем файл в строку
$array_of_data[] = $GLOBALS['HTTP_RAW_POST_DATA'];
}
Ребята, но если мы каждый раз заново создаем массив, и всего один раз в него записывем данные, там никогда не будет больше одного элемента. К чему циклы???
Или я чего-то не понимаю?
б) Несколько экспериментов синхронно с кодом 1с и с lib_config_36.php показали, что глюк наступает где-то здесь:
// Получаем структурированный массив данных из CommerceML файла
$array_of_cml_data = $kernel->Xml2Array($array_of_data[$i]);
// Отправляем данные на обработку, $shop_shops_id - идентификатор интернет-магазина, 1 - флаг, указывающий что делать с товарами уже существующими в магазине (Обновить информацию для существующих товаров), 0 - идентификатор группы товаров, в которую необходимо выгружать товары (корневая группа)
$shop->ImportCML($array_of_cml_data, $shop_shops_id, 1, 0);
Потому как файлы из 1С принимаются нормально - проверено (отправлял содержимое $array_of_data обратно в виде ответа сервера).
------------------
Резюме:
Поскольку не придумал как заглянуть в $kernel->Xml2Array и в $shop->ImportCML, прошу помощи. Заранее спасибо.
Насколько я понимаю, узел может быть любым, лишь бы он был привязан к динамической странице «Обмен с 1С:Управление торговлей» с кодом 36.
Я прав?
да, узел может быть любым. В примере дан тот узел, который стандартно поставляется с системой.
zhurba писал(а):
Ребята, но если мы каждый раз заново создаем массив, и всего один раз в него записывем данные, там никогда не будет больше одного элемента. К чему циклы???
Что значит каждый раз заново создаем массив? Каждый раз - это когда?
zhurba писал(а):
б) Несколько экспериментов синхронно с кодом 1с и с lib_config_36.php показали, что глюк наступает где-то здесь:
Все работает как часы, кроме автоматического обмена с 1с
обмен с 1С по http - не работает.
2. HostCMS писал(а):
Что значит каждый раз заново создаем массив? Каждый раз — это когда?
скрипт \lib\lib_36\lib_config_36.php вызывается каждый раз при импорте каждого xml-файла. (Типовая демка "1С:Управление Торговлей" при выгрузке на сайт выгружает два файл и вызывает запуск lib_config_36.php - 6 раз - и это только для экспорта, для импорта, кажется еще 6 раз)
Т.е. для КАЖДОГО (одного) импортируемого файла будет выполняться:
Но не в этом проблема (это так, "мелкие" странности). Беда в том, что ни загрузка товаров на сайт, ни выгрузка заказов через http не работает. И мне кажется, что причина где-то тут (касательно загрузки товаров):