1С и Joomla нужна помощь в доработке скрипта

Тема в разделе "Программирование", создана пользователем wesper, 19.03.2011.

  1. Offline

    wesper Недавно здесь

    Регистрация:
    19.03.2011
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Всем привет!

    Разбирался с Битриксом и обменом с 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</СодержитТолькоИзменения>
    </ПакетПредложений>
    </КоммерческаяИнформация>

    ----------------------------


    Вообщем если не сложно скиньте какой-нибудь несложный скрипт обработки этих файлов
     
  2.  
  3. sergiks
    Offline

    sergiks специалист

    Регистрация:
    10.10.2010
    Сообщения:
    362
    Симпатии:
    36
    Пол:
    Мужской
    Ну ты спросил... Много букв! : ) Это ж нужно быть очень плотно в теме именно твоей конфигурации - связки 1С, Битрикса и Joomla.
    Задача недешевая. Есть какой-то бюджет на ее выполнение?
     
  4. Offline

    wesper Недавно здесь

    Регистрация:
    19.03.2011
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Кажется просто набиваешь цену, здесь ни в какой теме не надо быть - из 1С получается файл с данными - я его получил - осталась тривиальная задача из XML файла загрузить данные в базу. Такой функцией обладает множество CMS, просто заливают не из XML, а из XLS. Единственная особенность, что идентификатор товара разрабатывался Битриксом под себя и часто остальные CMS просто даже поле кода товара делают более коротким, чтобы освободить место в БД.
    На счет бюджета - бюджет не устанавливал - если доработка исключительно под меня - обозначь стоимость. Рассчитывал на равноценный обмен - я даю часть скрипта с которой разобрался я (он в свободном доступе), кто-то дает ту часть которой у меня не хватает. Но могу купить, просто не рассказывай о сложности задачи, либо ты ее не понимаешь и не можешь решить, либо хочется по легкому распотрошить мой кошелек. Для уровня написания CMS думаю это работа не более 2-3 часов программирования.
     
  5. vesy
    Offline

    vesy специалист

    Регистрация:
    02.07.2010
    Сообщения:
    263
    Симпатии:
    53
    Пол:
    Мужской
    Извини, если не въехал )) может поможет DOMIT!
     
  6. Offline

    wesper Недавно здесь

    Регистрация:
    19.03.2011
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Проявлю откровенную лень - не то, чтобы совсем не знаю как это сделать:

    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 - для меня это освоение нового, а не применение знаний которые уже есть, а сейчас не тот период когда я хочу на это тратить время.
    Готов в разумных пределах оплатить - просто в этом случае уже делиться точно не буду. И опять же, задачу сложной не вижу, цену сопоставимую со стоимостью покупки Битрикса рассматривать не хочу.
     
  7. Offline

    _voland_ специалист

    Регистрация:
    12.04.2008
    Сообщения:
    2 173
    Симпатии:
    102
    Пол:
    Мужской
    А собственно в какой компонент грузить данные то?
     
  8. Offline

    wesper Недавно здесь

    Регистрация:
    19.03.2011
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Более подробно задача выглядит так:

    файл import.xml содержит всю информацию о товаре, как вы ее забиваете в 1С - есть возможность перенести: Наименование, описание товара, список функций (если ведете раздельно в 1С), картинку (только одну и для тех кто это ведет в 1С), ну и в том числе разделение на группы (т.е. опять же наименование групп и дерево структуры). Эту информацию из файла import.xml можно извлечь стандартными инструментами php и переложить в БД CMS - возникает одна сложность ID товара в CMS не рассчитана на ту же длину, что и ИД в системе битрикс - поэтому, на мой взгляд, можно использовать дополнительную таблицу соответствия идентификаторов, либо добавить дополнительное поле для данного идентификатора - в обоих случаях, насколько я понимаю, структура БД не нарушается и они продолжает исполнять свои функции нормально.

    Второй файл offer.xml содержит всю информацию о ценах - идентификаторы остались теми же, по битриксовым идентификаторам (в зависимости от выбранного прежде способа - таблица либо доп поле) отыскать место хранения цены на товар и положить значение из offer.xml - при этом 1С выгружает различный тип цен, это может быть быть решено простой настройкой файла - типа "использовать только тип цен: розничный".
     

Поделиться этой страницей

Загрузка...