Меню

1с битрикс настройка sale

Процесс обмена Битрикса и 1С

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

Инициатором любого обмена является 1С, сайт не загружает ничего в 1С, сайт только принимает запросы и отдаёт результат. По умолчанию, 1С обращается к скрипту /bitrix/admin/1c_exchange.php. Этот путь указывается в настройках обмена в самой 1С. Из коробки в этом файле включается файл /bitrix/modules/sale/admin/1c_exchange.php. Если открыть файл, то видим там подключение нескольких компонентов в зависимости от $_GET[«type»]. В общем случае интересуют два из них:

bitrix:sale.export.1c — экспорт заказов.

bitrix:catalog.import.1c -импорт каталога.

Экспорт заказов в 1С

Обмен заказами начинается с авторизации с помощью логина и пароля, который указали в настройках обмена. После авторизации сайт выдает ID сессии, URL: /bitrix/admin/1c_exchange.php?type=sale&mode=checkauth .

После получения ID сессии идёт инициализация обмена, URL: /bitrix/admin/1c_exchange.php?type=sale&mode=init&sessid=ID_Сессии . На этом этапе сайт отдаёт настройки обмена со стороны сайта.

Для получения списка заказов запрашивается URL /bitrix/admin/1c_exchange.php?type=sale&mode=query&sessid=ID_Сессии . Выгружаются заказы с полями EXTERNAL_ORDER = «N», UPDATED_1C = «N» и обновившиеся после последней успешной выгрузки в 1С (это проверяется по времени из свойства «last_export_time_committed_/bitrix/admin/1c_excha» модуля sale).

Флаг EXTERNAL_ORDER указывает, что заказ создан в 1С и его выгрузка в 1С не требуется.

Флаг UPDATED_1C после успешного импорта из 1С на сайте устанавливается в «Y» и такие заказы не участвуют в дальнейших экспортах до их обновления на сайте. Во время обновлений заказов на сайте UPDATED_1C устанавливается в «N».

После обработки заказов 1С для завершения обмена запрашивает URL /bitrix/admin/1c_exchange.php?type=sale&mode=success&sessid=ID_Сессии . При этом в свойство «last_export_time_committed_/bitrix/admin/1c_excha» модуля sale записывается время запроса списка заказов (НЕ текущее время, т.к. с момента запроса заказов до их обработки могли добавиться заказы и они попадут в следующую выгрузку с сайта).

Модификация

В экспорте заказов участвуют файл /bitrix/admin/1c_exchange.php , компонент bitrix:sale.export.1c и класс CSaleExport . Какие-либо события здесь отсутствуют, поэтому для модификации этого процесса нужно заменить компонент на свой, создать класс-наследник CSaleExport и заменить вызовы в компоненте на него. В последних версиях Битрикс этот класс стал относительно читабельным, в старых там была просто простыня из php и «xml».

Отключение проверки источника запроса

С версии 15.5 добавлена дополнительная проверка и если вызвать просто /bitrix/admin/1c_exchange.php?type=sale&mode=query , то получим ошибку «failure Ошибка проверки источника запроса. Обновите модуль обмена». Если нет желания возиться с sessid, то можно отключить проверку источника запроса, для этого нужно выполнить:

Импорт товаров из 1С

Импорт начинается с авторизации, посылается запрос на /bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth с передачей логина и пароля, который указали в настройках обмена. После авторизации сайт выдает ID сессии.

Далее идёт инициализация обмена, URL /bitrix/admin/1c_exchange.php?type=catalog&mode=init&sessid=ID_Сессии . На этом этапе в сессии инициализируется массив данных обмена $_SESSION[«BX_CML2_IMPORT»] и сайт отдаёт параметры обмена: возможность использования zip, лимит размера файла и т.д. Также на этом этапе очищается папка для файлов выгрузки. Скорее всего, это будет папка /upload/1c_catalog/. Для отладки можно включить сохранение старых файлов обмена, тогда при новом обмене старые данные будут перемещаться в отдельные папки: 1c_catalog0, 1c_catalog1 и т.д.. Для сохранения данных нужно объявить константу в dbconn.php:

После этого 1С начинает подготовку данных и далее посылает их POST-запросом на сайт частями, URL: /bitrix/admin/1c_exchange.php?type=catalog&mode=file&filename=ИМЯ_ФАЙЛА.zip&sessid=ID_Сессии . Запрос продолжается, пока файлы не будут переданы полностью.

Читайте также:  настройка the bat по imap на яндексе

1С передает на сайт xml-файлы с данными товаров и предложений, а также картинки. В случае если сайт разрешил использовать zip, то 1С передает все файлы одним архивом. Тогда следующий шаг начинается с его распаковки.

В выгрузке могут участвовать xml-файлы:

  • import.xml — товары, разделы, типы цен, склады, свойства товаров и единицы измерения;
  • offers.xml — торговые предложения товаров и их свойства;
  • prices.xml — цены торговых предложений(в новых версиях);
  • rests.xml — остатки торговых предложений(в новых версиях);
  • references.xml — пользовательские справочники (highload-инфоблоки, в новых версиях).

Картинки загружаются в папку import_files.

Далее начинаются шаги импорта, URL: /bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=ИМЯ_ФАЙЛА_ВЫГРУЗКИ.xml , где ИМЯ_ФАЙЛА_ВЫГРУЗКИ — import.xml, offers.xml и т.д. Обработка файла завершается, когда сайт отдаёт слово «success». За обработку файла выгрузки отвечают классы CIBlockXMLFile (/bitrix/modules/iblock/classes/mysql/cml2.php) и CIBlockCMLImport (/bitrix/modules/iblock/classes/general/cml2.php).

Обработка файла состоит из нескольких шагов (информация будет дополняться):

Очистка временной таблицы (таблица b_xml_tree);

Метод CIBlockXMLFile::DropTemporaryTables(). Обычный drop таблицы b_xml_tree.

Создание временной таблицы;

Метод CIBlockXMLFile::CreateTemporaryTables(). Здесь создается таблица b_xml_tree. Можно, кстати, задать storage engine этой таблицы, равно как и всех создаваемые битриксом, с помощью определения константы MYSQL_TABLE_TYPE.

Чтение файла во временную таблицу;

  • Индексация временной таблицы;
  • Импорт метаданных;
  • Импорт разделов;
  • Деактивация разделов и пересчёт левой и правой границ для разделов;
  • Импорт элементов;
  • Деактивация элементов;
  • success.
  • Некоторые шаги могут выполняться за несколько запросов, порциями по несколько секунд (это время настраивается параметров «Интервал одного шага в секундах» в настройках интеграции с 1С в админке Битрикса).

    Модификация

    На шаге 10, т.е. по окончании обработки файла выгрузки (NB: одного файла, например, товаров или предложений) вызывается событие OnSuccessCatalogImport1C модуля catalog. Аргументы обработчика — параметры компонента обмена и путь к файлу выгрузки.

    Также для изменения процесса обмена можно использовать обычные события, например, OnBeforeIBlockElementUpdate или OnBeforeProductAdd. В обработчике, чтобы определить, что событие вызвано именно во время обмена с 1С, я использую такое костыльное условие:

    Ну и, если ничего нельзя решить событиями, всегда можно полностью изменить процесс обмена, скопировав и изменив файл /bitrix/admin/1c_exchange.php , компонент bitrix:catalog.import.1c и класс CIBlockCMLImport .

    Отключение проверки источника запроса

    Как и в случае с выгрузкой товаров, при импорте товаров есть проверка источника запроса. Можно отключить её следующим кодом:

    Статья будет дополняться по мере появления новой информации и вдохновения.

    источник

    Битрикс и интеграция с 1С
    [краткий ликбез для начинающих]

    Вы разработали интернет-магазин на битриксе. Во время разработки вы создали все нужные свойства и заполнили каталог демо-товарами.

    Осталось только загрузить реальный каталог из 1С — это означает, что впереди еще много работы. Придется добиться, чтобы все нужные данные выгружались вообще и выгружались в нужное место. Иначе придется подгонять проект под структуру данных из 1С.

    Вопрос интеграции поднимается на каждом более-менее крупном интернет-магазине. Часто разработчикам, не только начинающим, трудно понять, как работает механизм обмена. Полезная информация разбросана по интернету, будет удобно собрать её в одном месте.

    Цели статьи

    • Коротко изложить основные возможности обмена и его алгоритм работы;
    • Дать ссылки на официальные и прочие полезные источники;
    • Ответить на частые вопросы;
    • Прояснить, с чего начать интеграцию и как ее успешно завершить.

    Стандартный обмен между 1С-Битрикс и 1С

    В битриксе есть встроенный функционал для обмена с 1С, благодаря чему любой обмен должен настраиваться в пару кликов.
    Однако, для этого 1С должна быть “чистой” типовой конфигурации. На деле каждая первая 1С “нетиповая”, то есть модифицирована так или иначе.

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

    Читайте также:  браузер не переходит по ссылкам настройки

    Что умеет штатный механизм обмена

    • Импорт каталога товаров из 1С на сайт;
    • Экспорт каталога товаров с сайта в 1С;
    • Экспорт заказов с сайта в 1С;
    • Импорт заказов из 1С на сайт;
    • Импорт справочников (highload-инфоблоков) из 1С на сайт.

    Полезные ссылки

    Алгоритм выгрузки данных на сайт

    Инициатором обмена всегда выступает 1С, по соображениям безопасности — даже если сайт взломают, атаковать 1C будет невозможно, так как сайт не умеет обращаться к 1С и вообще ничего не знает про нее.

    Обмен работает посредством последовательных http GET/POST запросов от 1С к сайту, к скрипту /bitrix/admin/1c_exchange.php.

    Обмен состоит из нескольких ключевых этапов

    • Авторизация 1с на сайте;
    • Загрузка файлов из 1с на сайт;
    • Чтение xml файлов во временную таблицу;
    • Обработка данных.

    Этапы загрузки, чтения и обработки — делаются за множество шагов. Время длительности каждого шага задается в настройках обмена на стороне сайта. На стороне 1С ограничение на длительность шага должно совпадать.

    Процесс выгрузки данных из 1С на сайт можно представить в виде следующей схемы

    Полезные ссылки

    Формат данных для обмена с 1С

    1C загружает на сайт xml файлы, и картинки при импорте товаров.

    Если включено zip-сжатие в настройках обмена на стороне сайта (по-умолчанию включено), то 1C загружает один архив, иначе все файлы по отдельности.

    Формат xml файлов

    Информация в файлах структурирована в соответствии со стандартом обмена коммерческой информацией CommerceML2.

    Информация о товарах передается на сайт в следующих файлах

    • import.xml — товары, группы (разделы инфоблока), типы цен, склады, свойства товаров и единицах измерения;
    • offers.xml — торговые предложения (ТП) товаров и их свойствах;
    • prices.xml — цены ТП;
    • rests.xml — остатки ТП;
    • references.xml — пользовательские справочники (HL-инфоблоки).

    Файлы import.xml и offers.xml содержат описания свойств, типов цен, и прочую информацию, которая относится в равной степени ко всем товарам/ТП.

    Если каталог большой, в целях оптимизации, описания выгружаются в отдельных “заголовочных” файлах. Это такие же файлы import.xml и offers.xml, только не содержат ничего кроме описаний. В таком случае заголовочные файлы обрабатываются только в самом начале обмена.

    Информация о заказах передается на сайт в следующих файлах

    Полезные ссылки

    Куда на сайт загружаются файлы выгрузки

    В папку /upload/1c_catalog/. Перед каждым обменом эта папка очищается. То есть в этой папке всегда находятся файлы последнего обмена.

    Можно включить «режим отладки” обмена — отключить перезапись файлов в папке 1c_catalog. Таким образом можно отключить удаление файлов выгрузки после завершения обмена.

    Для этого нужно объявить константу в файле dbconn.php:

    Теперь вместо удаления папка будет переименовываться, к ней будет добавляться числовой идентификатор.

    Чем больше число у папки, тем новее эта папка.
    Однако, самая новая папка всегда будет без чисел, и только со следующим обменом она будет переименована.

    Важно помнить, что с включенным режимом отладки очень быстро идет расход места на диске. Поэтому после отладки следует отключить лог и удалить все лишние папки обмена.

    Что нужно для обмена на стороне сайта

    • редакция битрикса “Малый бизнес” или “Бизнес”
    • настроить параметры обмена
    • создать пользователя и группу “Обмен с 1С” для обмена, настроить права
      • разрешить группе выполнять выгрузку товаров/заказов (в настройках параметров)
      • разрешить группе доступ на чтение папки /bitrix/admin/

    Что нужно для обмена на стороне 1С

    • установить модуль для обмена (зависит от версии 1С)
    • настроить адрес сайта и пользователя сайта из группы “Обмен с 1С”
    • настроить параметры выгрузки на стороне 1С (зависят от версии УТ)
      • Интеграция с 1С:УТ» ред. 10.3
      • Интеграция с «1С:УТ» ред. 11.1, ред. 11.2
    Читайте также:  настройка hamachi для red alert

    Полезные ссылки

    Структура каталога в 1С и на сайте

    Что делать если структура каталога в 1С не совпадает со структурой на сайте?

    В 1С можно задать какие товары и разделы выгружать.

    Часто в 1С товары хранятся не так, как они будут выводиться на сайте, поэтому можно на стороне 1С настроить виртуальный каталог для выгрузи на сайт: создать нужную структуру разделов и разложить по ним товары.

    Так же можно задать условия отбора товара (не все товары нужны на сайте) для выгрузки на сайт и свойства (в 1С много св-в, не все нужны на сайте).

    Виды выгрузок из 1С

    Полная выгрузка

    Происходит при выгрузке данных на сайт в первый раз, или при ручном запуске.

    • Выгружаются все товары.
    • Картинки выгружаются только у новых или измененных товаров.

    Краткая выгрузка

    Происходит часто, между полными, содержит только изменения по ценам и остаткам.

    Полная принудительная выгрузка

    Тоже самое, что и полная выгрузка, только выгружаются картинки абсолютно всех товаров, в обязательном порядке.

    Обычно используется только при отладке обмена.

    С чего начать интеграцию c 1C

    Если вы делаете новый сайт и планируете интеграцию с 1С в дальнейшем, то первым следует установить битрикс и сделать тестовый обмен. Вот, что это даст:

    • Будет создан тип иблока;
    • Будет создан иблок;
    • Будут созданы св-ва и справочники;
    • Будут созданы разделы каталога;
    • Будут созданы элементы каталога;
    • Будут созданы торговые предложения.

    Все это вместе поможет понять, какие данные у вас уже есть и где их искать. Сразу будет понятно, чего не хватает, а что выгрузилось совсем не так, как хотелось бы.

    Как завершить интеграцию

    Сопоставить структуры данных на сайте со структурой в 1С — вот главная цель интеграции.

    Чтобы успешно завершить интеграцию, когда у вас уже есть полностью работающий проект, с актуальными данными, то нужно добиться, чтобы выгрузка из 1С проиcходила:

    • В существующий инфоблок;
    • В существующие св-ва;
    • В существующие разделы инфоблока;
    • В существующие товары и торговые предложения;
    • В существующие типы цен.

    Все эти задачи решаются путем настройки одинаковых идентификаторов (XML_ID), то есть у вас должны совпадать все внешние коды на сайте с внешними кодами из 1С.

    Таким образом, если вы сначала сделали сайт, а потом решили прикрутить к нему обмен с 1С, то нужно будет получить все XML_ID из 1С и обновить их на сайте (написать служебный скрипт для этих целей).

    Так как на стороне 1С часто нет возможности поменять эти коды (по опыту общения с программистами 1С). Толковый 1сник может сформировать csv файл со списком разделов и кодами в 1С, далее надо обновить эти коды на сайте.

    Подведем итоги

    Начинать разработку сайта с настройки обмена с 1С по разным причинам не имеет смысла.

    Однако, если вы заранее знаете, что вам предстоит делать интеграцию — начните с изучения файлов выгрузки и тестовой выгрузки на сайт «как есть».

    Чем раньше вы поймете, что предстоит дорабатывать в обмене, чтобы все работало как надо, тем лучше.

    Скоро я планирую подготовить статьи по отладке выгрузки и кастомизации. Не переключайтесь.

    источник

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *