No Image

Выгрузка заказов из битрикс в 1с

СОДЕРЖАНИЕ
7 просмотров
10 марта 2020

Компонент служит для экспорта заказов в "1С:Предприятие" в формате CommerceML v2. Компонент стандартный и входит в дистрибутив модуля.

В визуальном редакторе компонент расположен по пути: Магазин > Экспорт заказов > Экспорт заказов в "1С:Предприятие".

Компонент относится к модулю Интернет-магазин.

Описание параметров

Поле Параметр Описание
Основные параметры
Сайт, заказы которого выгружать в "1С:Предприятие" SITE_LIST Указывается сайт(ы), заказы которого(ых) будут выгружены. Привязка может производиться либо к текущему сайту, либо к одному определённому сайту из имеющихся в системе.
Создавать новые заказы и контрагенты из 1С IMPORT_NEW_ORDERS Y|N] При отмеченной опции новые заказы и контрагенты из 1С будут добавляться на сайт при выполнении процедуры обмена заказами.
Сайт, на который добавлять новые заказы и контрагенты SITE_NEW_ORDERS Указываются сайты, на которые будут добавляться новые заказы и контрагенты.
Выгружать только оплаченные заказы EXPORT_PAYED_ORDERS [Y|N] При отмеченной опции будут выгружаться только оплаченные заказы.
Выгружать только заказы c разрешенной доставкой EXPORT_ALLOW_DELIVERY_ORDERS [Y|N] При отмеченной опции будут выгружаться только заказы c разрешенной доставкой.
Менять статусы заказов по информации из 1С CHANGE_STATUS_FROM_1C [Y|N] При отмеченной опции статусы заказов на сайте будут изменяться в соответствии с данными из 1С (т.е. изменяется статус заказа в 1С и после выполнения обмена данными статус заказа на сайте будет изменен на тот, который был задан в 1С).
Выгружать заказы начиная со статуса EXPORT_FINAL_ORDERS Указывается статус, начиная с которого будут выгружаться товары:

  • NПринят;
  • FВыполнен.
Заменять валюту при выгрузке в "1С:Предприятие" на REPLACE_CURRENCY При выгрузке валюта товаров будет заменена на указанную. Конвертация при этом не происходит.
Группы пользователей, которым разрешена выгрузка GROUP_PERMISSIONS Указывается группа(-ы), пользователи которых имеют права на выгрузку заказов в 1С.
Использовать сжатие zip, если доступно USE_ZIP [Y|N] При отмеченной опции данные сжимаются ZIP форматом (если доступно). Это позволяет заметно уменьшить размер файлов.
Интервал одного шага в секундах (0 – выполнять загрузку за один шаг) INTERVAL Указывается интервал одного шага в секундах при экспорте заказов в 1С. – выполнять загрузку за один шаг.
Размер единовременно загружаемой части файла (в байтах) FILE_SIZE_LIMIT Указывается размер единовременно загружаемой части файла в байтах.

Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Прошлый пост вдохновил меня написать более подробную заметку про обмен Битрикса с 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&sess >. На этом этапе сайт отдаёт настройки обмена со стороны сайта.

Для получения списка заказов запрашивается URL /bitrix/admin/1c_exchange.php?type=sale&mode=query&sess >. Выгружаются заказы с полями 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".

Читайте также:  Sony hdr fx7e цена

После обработки заказов 1С для завершения обмена запрашивает URL /bitrix/admin/1c_exchange.php?type=sale&mode=success&sess >. При этом в свойство "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&sess >. На этом этапе в сессии инициализируется массив данных обмена $_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&sess >. Запрос продолжается, пока файлы не будут переданы полностью.

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 .

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

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

    Читайте также:  Access автоматическое заполнение полей

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

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

    Осталось только загрузить реальный каталог из 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:

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

    Читайте также:  Divinity original sin 2 как перенести сохранения

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

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

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

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

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

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

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

    Структура каталога в 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С по разным причинам не имеет смысла.

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

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

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

    Комментировать
    7 просмотров
    Комментариев нет, будьте первым кто его оставит

    Это интересно
    No Image Компьютеры
    0 комментариев
    No Image Компьютеры
    0 комментариев
    No Image Компьютеры
    0 комментариев
    No Image Компьютеры
    0 комментариев
    Adblock detector