Всем привет! Разбирался с Битриксом и обменом с 1С - в версии 8.1 у 1С-ки есть очень хорошая выгрузка, которую себе использует битрикс. Но по-сути для встречи данных из 1с достаточно написать простой скрипт и положить его на свой сайт - в результате нехитрых настроек встроенная функция 1С позволяет выливать на сайт все данные из каталога в виде одной картинки и двух XML файлов (описание товаров и характеристики + каталог цен). С выгрузкой я разобрался и написал упрощенный встречный скрипт - предлагаю его на обзор всем желающим, скрипт рабочий после небольшой шлифовки (встроить функцию пароля) можно смело выкладывать на сайт и выгружать данные. Скрипт смотрите ниже, суть моей просьбы: самому оказалось немного лень, да и для меня программирование скорее увлечение, поэтому нужно сделать обработчик XML файла который бы отделял соответствующие позиции, проверял наличие данной позиции в MySQL базе товаров - если нет, то записывал новый элемент, если да, то обновлял старые данные. Ну и конечно обновлял прайс лист Техническая информация здесь http://v8.1c.ru/edi/edi_stnd/131/ ---------------------------- Скрипт встречи данных 1С: <? switch ($mode) { case "checkauth": session_save_path($_SERVER['DOCUMENT_ROOT'].'/session'); session_start(); // это равносильно HEADERS() и SETCOOKIES(), до вызова функции $s="user_ok"; // ничего на экран не выводить session_register("s"); // объявляем, что $s является частью сессии echo "success\n"; echo "PHPSESSID\n"; echo $s; break; // проверяем в каком виде принимаются данные - есть возможность получать в архивном виде case "init": echo "zip=no\n"; echo "file_limit=2900800\n"; break; //выгружаем файлы case "file": $uploaddir = $_SERVER["DOCUMENT_ROOT"]."/bitrix/upload/"; $uploadfile = $filename; if (strstr ($uploadfile,"/")) { $uploadfile = substr($filename,16); } //$uploadfile = $uploaddir.basename($filename1); $DATA = &$GLOBALS["HTTP_RAW_POST_DATA"]; if($fp = fopen($uploaddir.$uploadfile, "a+")) { $result = fwrite($fp, $DATA); } fclose($fp); echo "success\n"; echo $uploadfile; break; // после выгрузки можно обработать файлы - пока сессия не завершена case "import": include '$_SERVER["DOCUMENT_ROOT"]'."/bitrix/upload/".'picture_resize.php'; echo "success\n"; break; } ?> ----------------------------------- Далее в 1С прописываете путь к данному скрипту, нажимаете выгрузить (здесь без проверки паролей, но встроите функцию - будет с проверкой) и у вас на сайте в указанной папке появляются соответствующие файлы картинки и 2 XML Вот обработчика XML и не хватает. Файлы вида: import.xml --------- ?xml version="1.0" encoding="UTF-8"?> <КоммерческаяИнформация ВерсияСхемы="2.03" ДатаФормирования="2010-06-17"> <Классификатор> <Ид>8e8e84d7-481f-11dd-89b3-001a4d468053</Ид> <Наименование>Классификато р (Каталог товаров)</Наименование> <Группы> <Группа> <Ид>bebc5b12-4833-11dd-89b3-001a4d468053</Ид> <Наименование>Режущие плоттеры (каттеры)</Наименование> <Группы> <Группа> <Ид>bebc5b13-4833-11dd-89b3-001a4d468053</Ид> <Наименование>Redsail</Наименование> </Группа> <Группа> <Ид>6fc1a299-57b4-11dd-a475-001a4d468053</Ид> <Наименование>PCUT</Наименование> </Группа> <Группа> <Ид>924cea60-7b3c-11de-bdfe-fb8a070233dd</Ид> <Наименование>Foison</Наименование> </Группа> </Группы> </Группа> </Группы> </Классификатор> <Каталог> <Ид>8e8e84d7-481f-11dd-89b3-001a4d468053</Ид> <ИдКлассификатора>8e8e84d7-481f-11dd-89b3-001a4d468053</ИдКлассификатора> <Наименование>Каталог товаров</Наименование> <Товары> <Товар> <Ид>924cea61-7b3c-11de-bdfe-fb8a070233dd</Ид> <Артикул>Foison C48</Артикул> <Наименование>Foison C48 режущий плоттер</Наименование> <БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PC E">шт</БазоваяЕдиница> <ЗначенияРеквизитов> <ЗначениеРеквизита> <Наименование>ВидНоменклат уры</Наименование> <Значение>Оборудование</Значение> </ЗначениеРеквизита> <ЗначениеРеквизита> <Наименование>ТипНоменклат уры</Наименование> <Значение>Товар</Значение> </ЗначениеРеквизита> <ЗначениеРеквизита> <Наименование>Полное наименование</Наименование> <Значение>Foison C48 режущий плоттер</Значение> </ЗначениеРеквизита> </ЗначенияРеквизитов> <СтавкиНалогов> <СтавкаНалога> <Наименование>НДС</Наименование> <Ставка>18</Ставка> </СтавкаНалога> </СтавкиНалогов> <Группы> <Ид>924cea60-7b3c-11de-bdfe-fb8a070233dd</Ид> </Группы> <Описание>Оборудование Режущий плоттер (каттер) Модель С48 </Описание> <Картинка/> </Товар> </Товары> <СодержитТолькоИзменения>fa lse</СодержитТолькоИзменения> </Каталог> </КоммерческаяИнформация> ------------------------------- offers.xml ------------------------------ <?xml version="1.0" encoding="UTF-8"?> <КоммерческаяИнформация ВерсияСхемы="2.03" ДатаФормирования="2010-06-17"> <ПакетПредложений> <Ид>8e8e84d7-481f-11dd-89b3-001a4d468053#</Ид> <Наименование>Пакет предложений</Наименование> <ИдКаталога>8e8e84d7-481f-11dd-89b3-001a4d468053</ИдКаталога> <ИдКлассификатора>8e8e84d7-481f-11dd-89b3-001a4d468053</ИдКлассификатора> <ТипыЦен> <ТипЦены> <Ид>bebc5b3a-4833-11dd-89b3-001a4d468053</Ид> <Наименование>Партнерские </Наименование> <Валюта>RUB</Валюта> <Налог> <Наименование>НДС</Наименование> <УчтеноВСумме>true</УчтеноВСумме> </Налог> </ТипЦены> <ТипЦены> <Ид>bebc5b39-4833-11dd-89b3-001a4d468053</Ид> <Наименование>Розничные</Наименование> <Валюта>RUB</Валюта> <Налог> <Наименование>НДС</Наименование> <УчтеноВСумме>true</УчтеноВСумме> </Налог> </ТипЦены> </ТипыЦен> <Предложения> <Предложение> <Ид>6fc1a29a-57b4-11dd-a475-001a4d468053</Ид> <Артикул>CT1200</Артикул> <Наименование>Режущий плоттер PCUT CT 1200</Наименование> <БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PC E">шт</БазоваяЕдиница> <Цены> <Цена> <Представление>32 000 RUB за шт</Представление> <ИдТипаЦены>bebc5b3a-4833-11dd-89b3-001a4d468053</ИдТипаЦены> <ЦенаЗаЕдиницу>32000</ЦенаЗаЕдиницу> <Валюта>RUB</Валюта> <Единица>шт</Единица> <Коэффициент>1</Коэффициент> </Цена> </Цены> <Количество>0</Количество> </Предложение> </Предложения> <СодержитТолькоИзменения>fa lse</СодержитТолькоИзменения> </ПакетПредложений> </КоммерческаяИнформация> ---------------------------- Вообщем если не сложно скиньте какой-нибудь несложный скрипт обработки этих файлов
Ну ты спросил... Много букв! : ) Это ж нужно быть очень плотно в теме именно твоей конфигурации - связки 1С, Битрикса и Joomla. Задача недешевая. Есть какой-то бюджет на ее выполнение?
Кажется просто набиваешь цену, здесь ни в какой теме не надо быть - из 1С получается файл с данными - я его получил - осталась тривиальная задача из XML файла загрузить данные в базу. Такой функцией обладает множество CMS, просто заливают не из XML, а из XLS. Единственная особенность, что идентификатор товара разрабатывался Битриксом под себя и часто остальные CMS просто даже поле кода товара делают более коротким, чтобы освободить место в БД. На счет бюджета - бюджет не устанавливал - если доработка исключительно под меня - обозначь стоимость. Рассчитывал на равноценный обмен - я даю часть скрипта с которой разобрался я (он в свободном доступе), кто-то дает ту часть которой у меня не хватает. Но могу купить, просто не рассказывай о сложности задачи, либо ты ее не понимаешь и не можешь решить, либо хочется по легкому распотрошить мой кошелек. Для уровня написания CMS думаю это работа не более 2-3 часов программирования.
Проявлю откровенную лень - не то, чтобы совсем не знаю как это сделать: http://ru.php.net/manual/en/xmlreader.isvalid.php http://www.v7n.com/forums/coding-forum/149878-xml-php-unstructured-data-problem.html http://forums.digitalpoint.com/showthread.php?t=790453 ... и т.д. Просто программирование не мой хлеб, для меня это будет освоением нового, а кто-то давно все это прошел. Но часть работы я сделал и ею делюсь бесплатно - расчитываю на "взаимность". Работа (на мой взгляд) состоит из трех частей: получение данных из 1С, чтение XML, занесение и обновление данных в БД. Итого - первую я сделал - отдаю бесплатно, откровенно рассчитываю на "алаверды" со второй и третьей частями - получить так же бесплатно. Сам не делаю, потому, что 1 - лень, 2 - для меня это освоение нового, а не применение знаний которые уже есть, а сейчас не тот период когда я хочу на это тратить время. Готов в разумных пределах оплатить - просто в этом случае уже делиться точно не буду. И опять же, задачу сложной не вижу, цену сопоставимую со стоимостью покупки Битрикса рассматривать не хочу.
Более подробно задача выглядит так: файл import.xml содержит всю информацию о товаре, как вы ее забиваете в 1С - есть возможность перенести: Наименование, описание товара, список функций (если ведете раздельно в 1С), картинку (только одну и для тех кто это ведет в 1С), ну и в том числе разделение на группы (т.е. опять же наименование групп и дерево структуры). Эту информацию из файла import.xml можно извлечь стандартными инструментами php и переложить в БД CMS - возникает одна сложность ID товара в CMS не рассчитана на ту же длину, что и ИД в системе битрикс - поэтому, на мой взгляд, можно использовать дополнительную таблицу соответствия идентификаторов, либо добавить дополнительное поле для данного идентификатора - в обоих случаях, насколько я понимаю, структура БД не нарушается и они продолжает исполнять свои функции нормально. Второй файл offer.xml содержит всю информацию о ценах - идентификаторы остались теми же, по битриксовым идентификаторам (в зависимости от выбранного прежде способа - таблица либо доп поле) отыскать место хранения цены на товар и положить значение из offer.xml - при этом 1С выгружает различный тип цен, это может быть быть решено простой настройкой файла - типа "использовать только тип цен: розничный".