NexxDigital - компьютеры и операционные системы

Достаточно часто, для диагностики обмена заказов, интернет-магазина на 1С Битрикс с 1С Управление Торговлей, нужно увидеть xml файл с заказами который сформирует сайт для следующей передачи в 1С. Есть два способа

Полуофициальный способ

Заключается в скачивании файла диагностики с официальной документации Битрикс. Просто закидываете файл в корень сайта, авторизуетесь администратором и открыаете этот файл в браузере

Увидите вот такое окно: в котором можно открыть XML файл заказов

Но данный скрипт не работает с Битрикс редакций выше 14.4. Лично у меня, выдает вот такую адракадабру. Дело в том, что скрипт не учитывет новый функционал заказов

Думаем как 1С УТ

По сути, метод заключается в иммитации работы 1С. Управление торговлей, просто выполняет ряд запросов к сайту, к скрипту 1c_exchange.php. В ответ получает xml файл с заказами в виде потоковых данных. Нам нужно, просто сымитировать эти запросы.

В командной PHP строке выполняем команды:
COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y"); COption::SetOptionString("sale", "secure_1c_exchange", "N");

Заходим на сайт администратором и последовательно выполняем запросы, не меняя окна браузера

http://ВАШ_САЙТ/bitrix/admin/1c_exchange.php?type=sale&mode=checkauth
http://ВАШ_САЙТ/bitrix/admin/1c_exchange.php?type=sale&mode=init
http://ВАШ_САЙТ/bitrix/admin/1c_exchange.php?type=sale&mode=query

После этого получим xml заказа прямо в окне браузера

Если не получилось по второму способу

Если вместо xml выдало ошибку доступа. Нужно чуть изменить ссылки. Однако скажу точно (проверено прямо перед написанием заметки). У меня второй способ сработал сразу на версии битрикс 16.5 со всеми обновлениями на 10 ноября 2016 года

Однако если нет:
Сначала нужно выполнить
http://ВАШ_САЙТ/bitrix/admin/1c_exchange.php?type=sale&mode=checkauth
В четвертой строке сайт вернет токен(session id)

Затем
http://ВАШ_САЙТ/bitrix/admin/1c_exchange.php?type=sale&mode=init + "&" + токен + "&version=2.08"

Затем
http://ВАШ_САЙТ/bitrix/admin/1c_exchange.php?type=sale&mode=query + "&" + токен

Вот в общем-то и все. Диагностируйте с удовольствием!

Протокол используется штатной процедурой обмена коммерческими данными между системой "1С:Предприятие", с одной стороны, и системой управления сайтом, с другой стороны.

Функционально обмен делится на два блока:

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

В обоих случаях инициатором обмена выступает система "1С:Предприятие". Обмен электронными документами осуществляется в соответствии с правилами и форматами, описанными в стандарте .

При инициализации взаимодействия устанавливается HTTP соединение. Система "1С:Предприятие" запрашивает у сайта необходимые параметры, такие, как максимальный объем пакета, поддержка сжатия и др.. На основании этих данных система 1С:Предприятие формирует XML сообщения и передает их на сайт.

Выгрузка на сайт

Данные для публикации на сайте выгружаются одним пакетом.

A. Начало сеанса


http://<сайт>/<путь> /1c_exchange.php?type=catalog&mode=checkauth.

  • слово "success" ;
  • имя Cookie;
  • значение Cookie.

Примечание.

B. Запрос параметров от сайта

1. zip=yes
или
zip=no

2. file_limit=<число> , где <число>

C. Выгрузка на сайт файлов обмена

Затем "1С:Предприятие" запросами с параметрами вида
http://<сайт>/<путь> /1c_exchange.php?type=catalog&mode=file&filename=<имя файла>
выгружает на сайт файлы обмена в формате CommerceML 2, посылая содержимое файла или его части в виде POST.

В случае успешной записи файла система управления сайтом выдает строку "success ".

D. Пошаговая загрузка данных

На последнем шаге по запросу из "1С:Предприятия" производится пошаговая загрузка данных по запросу с параметрами вида http://<сайт>/<путь> /1c_exchange.php?type=catalog&mode=import&filename=<имя файла>

Во время загрузки система управления сайтом может отвечать в одном из следующих вариантов.

1. Если в первой строке содержится слово "progress " - это означает необходимость послать тот же запрос еще раз. В этом случае во второй строке будет возвращен текущий статус обработки, объем загруженных данных, статус импорта и т.д.

2. Если в ответ передается строка со словом "success ", то это будет означать сообщение об успешном окончании обработки файла.

Примечание.

Примеры файлов выгрузки

Обмен информацией о заказах

Заказы, оформленные на сайте, загружаются в систему "1С:Предприятие".

Последовательность действий при работе с заказом

1. Заказ оформляется на сайте

2. При передаче в систему "1С:Предприятие" в заказе устанавливается категория "Заказ с сайта".
При формировании заказа в системе "1С:Предприятие" записываются номер и дата заказа, с которыми он оформлен на сайте. Поиск контрагента осуществляется по ИНН или наименованию, в зависимости от указанных настроек.

3. При загрузке заказа производится поиск договора с контрагентом. Договор ищется среди существующих договоров с клиентом, с признаком ведения взаиморасчетов по заказам (по указанной в настройках загрузки Организации). Если не находится ни один договор, то создается новый.

4. При загрузке заказа загружаются все его свойства, переданные с сайта. Свойства ищутся в системе "1С:Предприятие" по наименованию. Если с таким наименованием свойства нет, то заводится новое свойство со значениями типа строка или число.

5. Заказ может модифицироваться в системе "1С:Предприятие", при этом его изменения будут выгружаться на сайт

6. Если заказ оплачивается или отгружается в системе "1С:Предприятие", то состояния заказа по оплате и по отгрузке выгружаются на сайт только при полном выполнении операции (полной оплате и полной отгрузке). До этого момента заказ считается не оплаченным и не отгруженным.

7. При попытке в системе "1С:Предприятие" изменить заказ, по которому произведена оплата или отгрузка, заказ на сайт не загрузится как измененный. При этом пользователь получит об этом сообщение.

8. После каждой выгрузка заказа на сайт, на стороне сайта определяются значения его категорий (ссылка на категории). Эти значения устанавливаются в системе "1С:Предприятие" так, как они присвоены заказу на сайте

A. Начало сеанса

Выгрузка данных начинается с того, что система "1С:Предприятие" отправляет http-запрос следующего вида:
http://<сайт>/<путь> /1c_exchange.php?type=sale&mode=checkauth.

В ответ система управления сайтом передает системе «1С:Предприятие» три строки (используется разделитель строк "\n"):

  • слово "success" ;
  • имя Cookie;
  • значение Cookie.

Примечание. Все последующие запросы к системе управления сайтом со стороны "1С:Предприятия" содержат в заголовке запроса имя и значение Cookie.

B. Уточнение параметров сеанса

В ответ система управления сайтом передает две строки:

1. zip=yes , если сервер поддерживает обмен в zip-формате - в этом случае на следующем шаге файлы должны быть упакованы в zip-формате
или
zip=no - в этом случае на следующем шаге файлы не упаковываются и передаются каждый по отдельности.

2. file_limit=<число> , где <число> - максимально допустимый размер файла в байтах для передачи за один запрос. Если системе "1С:Предприятие" понадобится передать файл большего размера, его следует разделить на фрагменты.

C. Получение файла обмена с сайта

Затем на сайт отправляется запрос вида
http://<сайт>/<путь> /1c_exchange.php?type=sale&mode=query.

Сайт передает сведения о заказах в формате . В случае успешного получения и записи заказов "1С:Предприятие" передает на сайт запрос вида
http://<сайт>/<путь> /1c_exchange.php?type=sale&mode=success

D. Отправка файла обмена на сайт

Затем система "1С:Предприятие" отправляет на сайт запрос вида
http://<сайт>/<путь> /1c_exchange.php?type=sale&mode=file&filename=<имя файла>
,
который загружает на сервер файл обмена, посылая содержимое файла в виде POST.

В случае успешной записи файла система управления сайтом передает строку со словом "success ". Дополнительно на следующих строчках могут содержаться замечания по загрузке.

Примечание. Если в ходе какого-либо запроса произошла ошибка, то в первой строке ответа системы управления сайтом будет содержаться слово "failure", а в следующих строках - описание ошибки, произошедшей в процессе обработки запроса.
Если произошла необрабатываемая ошибка уровня ядра продукта или sql-запроса, то будет возвращен html-код.

Примеры файлов обмена информацией

Представленный протокол используется для интеграции системы "1С:Предприятие" с системами

Настройка обмена данными

Для включения обмена данными с сайтом перейдите вАдминистрирование -Обмен данными и отметьте флажок “Обмен данными с сайтами ”.

Рис. 1. Обмен данными с сайтами.

Далее нужно включить использование заказов клиентов. Для этого перейдите вАдминистрирование -Продажи и в разделе “Оптовые продажи ” отметьте флажок “Заказы клиентов ”.


Рис. 2. Заказы клиентов.

После чего создайте типовое соглашение для выгрузки цен. Перейдите вМаркетинг -Типовые соглашения с клиентами . Создайте новое или измените существующее соглашение. Соглашение должно быть действующим, с пустым сегментом партнёров и доступно внешним пользователям.


Рис. 3. Создание типового соглашения.

Создание узла обмена с веб-сайтом

Чтобы создать узел обмена с сайтом, перейдите вАдминистрирование -Обмен данными и кликните ссылку “Узлы обмена с сайтами ”. В открывшемся окне нажмите кнопку “Создать ”.


Рис. 4. Создание узла обмена с сайтом.

Поля “Наименование ” и “Код узла ” заполняются автоматически при сохранении. При необходимости их можно задать самостоятельно. Следует отметить флажок “Выгрузка товаров ”, если планируется выгрузка товаров на сайт и флажок “Обмен заказами ”, если планируется загрузка заказов с сайта. Далее нужно указать адрес сайта, имя пользователя и пароль. Адрес сайта должен быть в следующем формате: “http://ваш_сайт/admin/exchange/auto/ ” (важно убедиться, что после слова “auto” стоит “/”).

Для проверки соединения можно воспользоваться кнопкой “Проверить соединение... ”. Если все параметры указаны верно, то появится сообщение “Соединение успешно установлено ”. В противном случае - нужно проверить правильность адреса и параметров доступа.

После того как будет сделана проверка соединения - укажите режим контроля изменений. В режиме “Полная выгрузка ” выгружаются все товары и заказы, соответствующие условиям выгрузки. Режим “Выгружать только изменённые объекты ” проводит автоматический контроль изменений, произошедших с момента последней удачной выгрузки. Все изменения выгружаются на сайт.


Рис. 5. Параметры узла обмена с сайтом.

При необходимости можно настроить периодический обмен данными. Для этого установите флажок “Использовать периодический обмен данными ”. После установки флажка автоматически откроется форма настройки расписания обмена:


Рис. 6. Расписание обмена.

Если флажки “ Выгрузка товаров ” и “ Обмен заказами ” отмечены - необходимо провести настройку выгрузки товаров и обмена заказами соответственно.

Настройка выгрузки товаров

Перейдите на вкладку “Выгрузка товаров Выгрузка товаров ” на вкладке “Основные настройки ”).


Рис. 7. Флажок “Выгрузка товаров”.

На вкладке укажите организацию - владельца каталога (это организация, от имени которой происходит выгрузка на сайт) и коэффициент перерасчёта веса (используется при перерасчёта веса товаров из единиц, в которых указан вес в УТ в единицы, в которых вес учитывается на сайте). Установите флажок “ Выгружать файлы изображений ”, если планируется выгрузка картинок товаров на сайт. Если будет производиться выгрузка произвольных файлов, присоединённых к номенклатуре - установите флажок “ Выгружать прочие файлы ”. При необходимости построить классификатор групп товаров по справочнику “ Виды номенклатуры ” - установите флажок “ ”. При не установленном флажке группы будут выгружаться из справочника “ Номенклатура ”.


Таблица каталогов заполняется также по необходимости. В ней содержатся строки, соответствующие информационному блоку на сайте.


Рис. 8. Таблица каталогов.

В колонках “ Каталог ” и “ Группы номенклатуры ” задайте имя каталога и фильтр выгрузки групп соответственно. Состав выбираемых групп зависит от флажка “ Классифицировать по видам номенклатуры ”. Если данный флажок установлен, то группы выбираются из справочника “ Виды номенклатуры ”. Иначе, выбор происходит из справочника “ Номенклатура ”. В случае, если конкретные группы не выбраны (указано “ Все ”) - выгружаются все группы. Колонка “ Идентификатор каталога ” задаёт идентификатор, по которому устанавливается связь выгружаемых данных с конкретным информационным блоком на сайте.

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


Рис. 9. Настройка отбора.

Настройка обмена заказами

Перейдите на вкладку “Обмен заказами ” (данная вкладка доступна, если отмечен флажок “Обмен заказами ” на вкладке “Основные настройки ”).

Рис. 10. Флажок “Обмен заказами”.


Настройте способ идентификации контрагентов - это режим поиска контрагентов при загрузке заказов на сайт. Предоставляется два варианта поиска:по наименованию и по комбинацииИНН + КПП . Укажите виды номенклатурыТовар (с этим видом номенклатуры будут записываться новые товары) иУслуга (с этим видом номенклатуры будут записываться новые услуги). Укажите единицу измерения для новой номенклатуры. Создаваемые товары записываются с этой единицей измерения. По необходимости - заполните группу новой номенклатуры. В эту группу помещаются товары и услуги, создаваемые при загрузке заказов с сайта. Укажите соглашение, с которым будут создаваться документы “Заказ клиента ”. Если это требуется - укажите организацию и менеджера, от имени которых будут создаваться данные документы.

Дополнительные параметры обмена заказами настраиваются на вкладке “Дополнительно ”.


Рис. 11. Вкладка “Дополнительно”.

На данной вкладке Вы можете:

· установить режим записи и проведения документов “Заказ клиента ”;

· настроить параметры отмены заказов (если заказ отменён, то соответствующая информация появится в УТ).

Параметры отмены заказов:

· статус заказа “Отменён ” - это значение статуса, получаемого с сайта (обычно равно “Отменён ”);

· поле “Причина отмены заказа” (содержит причину отмены, которая заполняется в соответствующем поле документа “Заказ клиента ”);

· соответствие статусов заказа (если соответствия настроены, при загрузке заказов будет проводиться попытка установки соответствующего статуса документа “Заказ клиента ”).


Выполнение обмена данными

Запустить обмен данными вручную, можно нажав кнопку “Выполнить обмен данными ” в форме узла, либо в форме списка узлов. По его окончании будет выдано соответствующее сообщение.

Рис. 12. Кнопка “Выполнить обмен данными”.


Чтобы процесс обмена запускался автоматически, настройте расписание автоматического обмена и сохраните настройки узла обмена данными. В том случае, если на сервере “1С: Предприятия ” включено выполнение регламентных заданий, обмен будет происходить автоматически, по установленному расписанию. Если используется файловый вариант работы УТ, то для выполнения автоматического обмена должен быть запущен специальный сеанс, обрабатывающий регламентные задания.

Для включения обмена данными с сайтом перейдите в Администрирование - Обмен данными и отметьте флажок “”.

Рис. 1. Обмен данными с сайтами.


Рис. 2. Заказы клиентов.

После чего создайте типовое соглашение для выгрузки цен. Перейдите в Маркетинг - Типовые соглашения с клиентами . Создайте новое или измените существующее соглашение. Соглашение должно быть действующим, с пустым сегментом партнёров и доступно внешним пользователям.

Рис. 3. Создание типового соглашения.

Создание узла обмена с веб-сайтом

Чтобы создать узел обмена с сайтом, перейдите в Администрирование - Обмен данными и кликните ссылку “Узлы обмена с сайтами ”. В открывшемся окне нажмите кнопку “Создать ”.


Рис. 4. Создание узла обмена с сайтом.

Поля “Наименование ” и “Код узла ” заполняются автоматически при сохранении. При необходимости их можно задать самостоятельно. Следует отметить флажок “Выгрузка товаров ”, если планируется выгрузка товаров на сайт и флажок “Обмен заказами ”, если планируется загрузка заказов с сайта. Далее нужно указать адрес сайта, имя пользователя и пароль. Адрес сайта должен быть в следующем формате: “http://ваш_сайт/admin/exchange/auto/ ” (важно убедиться, что после слова “auto” стоит “/”).

Для проверки соединения можно воспользоваться кнопкой “Проверить соединение... ”. Если все параметры указаны верно, то появится сообщение “Соединение успешно установлено ”. В противном случае - нужно проверить правильность адреса и параметров доступа.

После того как будет сделана проверка соединения - укажите режим контроля изменений. В режиме “Полная выгрузка ” выгружаются все товары и заказы, соответствующие условиям выгрузки. Режим “Выгружать только изменённые объекты ” проводит автоматический контроль изменений, произошедших с момента последней удачной выгрузки. Все изменения выгружаются на сайт.



Рис. 5. Параметры узла обмена с сайтом.

При необходимости можно настроить периодический обмен данными. Для этого установите флажок “Использовать периодический обмен данными ”. После установки флажка автоматически откроется форма настройки расписания обмена:


Рис. 6. Расписание обмена.

Если флажки “Выгрузка товаров ” и “Обмен заказами ” отмечены - необходимо провести настройку выгрузки товаров и обмена заказами соответственно.

Настройка выгрузки товаров

Перейдите на вкладку “Выгрузка товаров Выгрузка товаров ” на вкладке “Основные настройки ”).



Рис. 7. Флажок “Выгрузка товаров”.

На вкладке укажите организацию - владельца каталога (это организация, от имени которой происходит выгрузка на сайт) и коэффициент перерасчёта веса (используется при перерасчёта веса товаров из единиц, в которых указан вес в УТ в единицы, в которых вес учитывается на сайте). Установите флажок “Выгружать файлы изображений ”, если планируется выгрузка картинок товаров на сайт. Если будет производиться выгрузка произвольных файлов, присоединённых к номенклатуре - установите флажок “Выгружать прочие файлы ”. При необходимости построить классификатор групп товаров по справочнику “Виды номенклатуры ” - установите флажок “”. При не установленном флажке группы будут выгружаться из справочника “Номенклатура ”.

Таблица каталогов заполняется также по необходимости. В ней содержатся строки, соответствующие информационному блоку на сайте.


Рис. 8. Таблица каталогов.

В колонках “Каталог ” и “Группы номенклатуры ” задайте имя каталога и фильтр выгрузки групп соответственно. Состав выбираемых групп зависит от флажка “Классифицировать по видам номенклатуры ”. Если данный флажок установлен, то группы выбираются из справочника “Виды номенклатуры ”. Иначе, выбор происходит из справочника “Номенклатура ”. В случае, если конкретные группы не выбраны (указано “Все ”) - выгружаются все группы. Колонка “Идентификатор каталога ” задаёт идентификатор, по которому устанавливается связь выгружаемых данных с конкретным информационным блоком на сайте.

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



Рис. 9. Настройка отбора.


Настройка обмена заказами

Перейдите на вкладку “Обмен заказами ” (данная вкладка доступна, если отмечен флажок “Обмен заказами ” на вкладке “Основные настройки ”).



Рис. 10. Флажок “Обмен заказами”.

Настройте способ идентификации контрагентов - это режим поиска контрагентов при загрузке заказов на сайт. Предоставляется два варианта поиска: по наименованию и по комбинации ИНН + КПП .

Внимание : По умолчанию в системе работает поиск по наименованию. Если Вам нужно сделать поиск по комбинации ИНН + КПП, то для обеспечения такой логики придётся кастомизировать шаблон выгрузки заказов.

Укажите виды номенклатуры Товар (с этим видом номенклатуры будут записываться новые товары) и Услуга (с этим видом номенклатуры будут записываться новые услуги). Укажите единицу измерения для новой номенклатуры. Создаваемые товары записываются с этой единицей измерения. По необходимости - заполните группу новой номенклатуры. В эту группу помещаются товары и услуги, создаваемые при загрузке заказов с сайта. Укажите соглашение, с которым будут создаваться документы “Заказ клиента ”. Если это требуется - укажите организацию и менеджера, от имени которых будут создаваться данные документы.

Дополнительные параметры обмена заказами настраиваются на вкладке “Дополнительно ”.



Рис. 11. Вкладка “Дополнительно”.

На данной вкладке Вы можете:

  • установить режим записи и проведения документов “Заказ клиента ”;
  • настроить параметры отмены заказов (если заказ отменён, то соответствующая информация появится в УТ).

Параметры отмены заказов:

  • статус заказа “Отменён ” - это значение статуса, получаемого с сайта (обычно равно “Отменён ”);
  • поле “Причина отмены заказа” (содержит причину отмены, которая заполняется в соответствующем поле документа “Заказ клиента ”);
  • соответствие статусов заказа (если соответствия настроены, при загрузке заказов будет проводиться попытка установки соответствующего статуса документа “Заказ клиента ”).

Внимание : При каждом изменении статуса заказа в UMI.CMS для этого заказа устанавливается флаг "Выгружать заказ в 1С при следующем сеансе связи". При синхронизации выгружаются только заказы, для которых этот флаг установлен true. После выгрузки флаг снимается. При необходимости можно поставить флаг для заказа в модуле "Интернет-магазин" на вкладке Заказы, предварительно добавив отображение этого свойства в таблицу заказов.


Выполнение обмена данными

Запустить обмен данными вручную, можно нажав кнопку “Выполнить обмен данными ” в форме узла, либо в форме списка узлов. По его окончании будет выдано соответствующее сообщение.



Рис. 12. Кнопка “Выполнить обмен данными”.

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

// old school: COption::SetOptionString("sale", "secure_1c_exchange", "N"); // d7 style: \Bitrix\Main\Config\Option::set("sale", "secure_1c_exchange", "N");

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

Далее идёт инициализация обмена , 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:

// Не забудьте убрать эту строку после отладки во избежание переполнения сервера define("BX_CATALOG_IMPORT_1C_PRESERVE", true);

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

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.

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

    Метод CIBlockXMLFile::ReadXMLToDatabase().

  1. Индексация временной таблицы;
  2. Импорт метаданных;
  3. Импорт разделов;
  4. Деактивация разделов и пересчёт левой и правой границ для разделов;
  5. Импорт элементов;
  6. Деактивация элементов;
  7. success.

Некоторые шаги могут выполняться за несколько запросов, порциями по несколько секунд (это время настраивается параметров "Интервал одного шага в секундах" в настройках интеграции с 1С в админке Битрикса).

Модификация

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

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

If (isset($_GET["type"], $_GET["mode"]) && $_GET["type"] === "catalog" && $_GET["mode"] === "import") { // ... }

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

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

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

// old school: COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y"); // d7 style: \Bitrix\Main\Config\Option::set("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y");

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



Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ:
NexxDigital - компьютеры и операционные системы