1. Главная страница » Компьютеры

Bitrix catalog import 1c

Автор: | 16.12.2019

Компонент выполняет импорт данных из 1С в формате CommerceML v2. Компонент является стандартным и входит в дистрибутив модуля.

В визуальном редакторе компонент расположен по пути Контент > Обмен с 1С > Импорт каталога из 1c.

Компонент относится к модулю Торговый каталог.

Секции настроек компонента:

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

Поле Параметр Описание
Основные параметры
Тип инфо-блока IBLOCK_TYPE В выпадающем списке списке перечислены все уже созданные в системе типы инфоблоков. При выборе пункта Создать по необходимости в случае отсутствия необходимого типа инфоблока, будет создан новый.
Параметр играет роль только при первом импорте каталога (когда он создается). При последующих операциях импорта того же каталога этот параметр игнорируется.
Сайты, к которым привязывать инфоблоки при создании SITE_LIST Указывается сайт(ы), к которому будут привязываться новые инфоблоки, создаваемые при импорте. Привязка может производиться либо к текущему сайту, либо к одному определённому сайту из имеющихся в системе.
Интервал одного шага в секундах (0 — выполнять загрузку за один шаг) INTERVAL Указывается интервал одного шага в секундах при импорте каталога в систему. 0 — выполнять загрузку за один шаг.
Группы пользователей, которым разрешена загрузка GROUP_PERMISSIONS Указывается группа(-ы) пользователей, обладающие правом загрузки каталога на сайт.
Вести предложения в отдельном инфоблоке USE_OFFERS [Y|N] При отмеченной опции предложения будут загружены в отдельный инфоблок.
Цены только в инфоблоке предложений FORCE_OFFERS [Y|N] Данная опция имеет смысл, если некоторые товары выгружаются без характеристик:

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

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

Хранение самих торговых предложений определяется опцией "Вести предложения в отдельном инфоблоке".

Импортировать с учетом типа инфоблока USE_IBLOCK_TYPE_ID [Y|N] При отмеченной опции данные будут импортированы с учетом типа инфоблока(ов). Не импортировать корневой раздел инфоблока, если он единственный SKIP_ROOT_SECTION [Y|N] При отмеченной опции корневой раздел инфоблока импортироваться не будет, если он единственный. Что делать с элементами, отсутствующими в файле импорта ELEMENT_ACTION Указывается действие с элементами, которые есть в системе, но отсутствуют в файле импорта:

  • N (ничего) — игнорировать, т.е. никаких действий не совершать;
  • A (деактивировать) — сделать такие элементы неактивными;
  • D (удалить) — удалить такие элементы.
Что делать с разделами, отсутствующими в файле импорта SECTION_ACTION Указывается действие с разделами, которые есть в системе, но отсутствуют в файле импорта:

  • N (ничего) — игнорировать, т.е. никаких действий не совершать;
  • A (деактивировать) — сделать такие разделы неактивными;
  • D (удалить) — удалить такие разделы.
Размер единовременно загружаемой части файла (в байтах) FILE_SIZE_LIMIT Указывается размер единовременно загружаемой части файла в байтах. Использовать контрольные суммы элементов для оптимизации обновления каталога USE_CRC [Y|N] При отмеченной опции при выгрузке полного каталога изменению подвергнуться только изменившиеся элементы, что значительно снизит нагрузку на сервер и позволит процедуре обновления отработать значительно быстрее. Использовать сжатие zip, если доступно USE_ZIP [Y|N] При отмеченной опции данные сжимаются ZIP форматом (если доступно). Это позволяет заметно уменьшить размер файлов. Отключить проверку источника запроса SKIP_SOURCE_CHECK [Y|N] При отмеченной опции отключается проверка источника запроса. Тегированный кеш инфоблока IBLOCK_CACHE_MODE Настройка управляет работой с тегированным кешем инфоблока при импорте. Картинка анонса Использовать настройки инфоблока для обработки изображений USE_IBLOCK_PICTURE_SETTINGS [Y|N] При отмеченной опции будут использоваться настройки инфоблока для обработки картинки анонса.При неотмеченной опции станут доступны дополнительные поля.

Автоматически генерировать картинку анонса GENERATE_PREVIEW [Y|N] При отмеченной опции на основании фотографий, которые поступают из 1С, система будет самостоятельно генерировать картинку анонса (защита от поступления из 1С больших фотографий). Максимально допустимая ширина картинки анонса PREVIEW_WIDTH При отмеченной опции Автоматически генерировать картинку анонса в данном поле определяется максимальная ширина картинки анонса в пикселях. Максимально допустимая высота картинки анонса PREVIEW_HEIGHT При отмеченной опции Автоматически генерировать картинку анонса в данном поле определяется максимальная высота картинки анонса в пикселях. Изменять детальную картинку DETAIL_RESIZE [Y|N] При отмеченной опции на основании фотографий, которые поступают из 1С, система будет самостоятельно изменять детальную картинку (защита от поступления из 1С больших фотографий). Максимально допустимая ширина детальной картинки DETAIL_WIDTH При отмеченной опции Изменять детальную картинку в данном поле определяется максимальная ширина детальной картинки в пикселях. Максимально допустимая высота детальной картинки DETAIL_HEIGHT При отмеченной опции Изменять детальную картинку в данном поле определяется максимальная высота детальной картинки в пикселях. Транслитерация символьного кода из названия Транслитерировать при добавлении элемента или раздела TRANSLIT_ON_ADD [Y|N] При отмеченной опции при добавлении элемента или раздела будет происходить транслитерация символьного кода из его названия, станут доступны дополнительные поля.

Максимальная длина результата транслитерации TRANSLIT_MAX_LEN Указывается максимальная длина символьного кода при транслетирации из названия в символах. Приведение к регистру TRANSLIT_CHANGE_CASE Указывается к какому регистру будет приводиться результат при транслитерации символьного кода элемента или раздела:

  • — сохранить (регистр не меняется);
  • L — к нижнему регистру;
  • U — к верхнему регистру.
Замена для символа пробела TRANSLIT_REPLACE_SPACE Указывается каким символом будет заменяться пробел при транслитерации символьного кода элемента или раздела из названия. Замена для прочих символов TRANSLIT_REPLACE_OTHER Указывается каким символом будет заменяться прочие символы при транслитерации символьного кода элемента или раздела из названия. Удалять лишние символы замены TRANSLIT_DELETE_REPEAT_REPLACE [Y|N] При отмеченной опции будут удаляться повторяющиеся символы при транслитерации символьного кода из названия. Транслитерировать при обновлении элемента или раздела TRANSLIT_ON_UPDATE [Y|N] При отмеченной опции при обновлении элемента или раздела будет происходить транслитерация символьного кода из его названия, станут доступны дополнительные поля.

Максимальная длина результата транслитерации TRANSLIT_MAX_LEN Указывается максимальная длина символьного кода при транслетирации из названия в символах. Приведение к регистру TRANSLIT_CHANGE_CASE Указывается к какому регистру будет приводиться результат при транслитерации символьного кода элемента или раздела:

  • — сохранить (регистр не меняется);
  • L — к нижнему регистру;
  • U — к верхнему регистру.
Замена для символа пробела TRANSLIT_REPLACE_SPACE Указывается каким символом будет заменяться пробел при транслитерации символьного кода элемента или раздела из названия. Замена для прочих символов TRANSLIT_REPLACE_OTHER Указывается каким символом будет заменяться прочие символы при транслитерации символьного кода элемента или раздела из названия. Удалять лишние символы замены TRANSLIT_DELETE_REPEAT_REPLACE [Y|N] При отмеченной опции будут удаляться повторяющиеся символы при транслитерации символьного кода из названия.

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

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

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

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

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

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

После обработки заказов 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 .

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

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

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

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

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

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

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

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

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

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

    Читайте также:  Dsl 2640u стандартный пароль

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

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