Очень важно понять. что 1с отправляет запросы к сайту. и отправляет post запросом файлы для синхронизации. И при обращении в битрикс происходит ответ со строкой успеха или же xml файл.
Теперь пару моментов.
Для начала делаем копию этого файла
bitrix/admin/1c_exchange.php, заменяем на bitrix/admin/1c_exchange_custom.php.
в нем меняем путь
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/1c/1c_exchange.php");
?>
1c_exchange- это копия файлика из предыдущего.
нас интересует место
1 2 3 4 5 6 7 8 9 |
if($type=="sale") { $APPLICATION->IncludeComponent("bitrix:sale.export.1c", "", Array( .... ) ); } |
копируем компонент в папку local и меняем код на
1 2 3 4 5 6 7 8 9 |
if($type=="sale") { $APPLICATION->IncludeComponent("bitrix:ftask_sale.export.1c", "", Array( .... ) ); } |
копирование происходит как . ищем компонент sale.export.1c.
создаем в папке Local папку components далее папку bitrix и в ней вашеимякомпонентыsale.export.1c.
Теперь, мы работаем исключителько с нашими файлами.
Если надо изменить вывод xml , которую отдает битрикс.
То делаем так.
находим создание экземляра класса в коде компоненты
1 2 |
// $export = new CSaleExport(); кастомизировали класс $export = new CFtaskSaleExport(); |
и его заменяем на CFtaskSaleExport
куда либо создаем файл класса CFtaskSaleExport — мы наследуемся от CSaleExport- заменяя что нам надо
Например.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php use Bitrix\Sale\BusinessValue; use Bitrix\Sale\BusinessValueConsumer1C; //правим xml class CFtaskSaleExport extends CSaleExport { static function OutputXmlDocument($typeDocument,$xmlResult, $document=array()) { global $DB; ?> <?ob_start();?> <<?=CSaleExport::getTagName("SALE_EXPORT_DOCUMENT")?>><? switch($typeDocument) { case 'Order': ?> <<?=CSaleExport::getTagName("SALE_EXPORT_ID")?>><? /*ftask 1*/ echo $document["ID_1C"]; .... } // этот класс при желании тоже правим. Тоже отнаследовал, по сути скопировал код. т.в этой функции используется верхняя. Иначе наследования не будет нормального static function ExportOrders2Xml($arFilter = Array(), $nTopCount = 0, $currency = "", $crmMode = false, $time_limit = 0, $version = false, $arOptions = Array()) { ... тут весь код оригинальной функции } } |
Добавляем класс в битрикс в Init.php
\Bitrix\Main\Loader::registerAutoLoadClasses(null, [
‘CFtaskSaleExport’ => ‘/bitrix/php_interface/include/1c/CFtaskSaleExport.php’,//
]);
Далее помещаем нужный файлик из ic пришедший в папку upload/1c_exchange и в браузере запускаем
http://site.test/bitrix/admin/1c_exchange_custom.php?type=sale&filename=имяФайла.xml&mode=query&sessid=22379f0baa695302228fc892f566711ef
параметр filename=имяФайла — это например файлик лежит 78dfs-34540-wer-sdfsdf.xml , то заменяем filename=78dfs-34540-wer-sdfsdf.xml
sessid=22379f0baa695302228fc892f566711ef -берем сессию админа из браузера. (только правильную, иначе будет ошибка доступа)
А теперь, при желании можно дебажить , кастомизировать… и т.д. Таким образом- можно запустить локально выгрузку.