В общем ответ найден самостоятельно...
В настройке интеграции "/bitrix/admin/1c_admin.php?lang=ru" вкладка Заказы, должна стоять галочка "Создавать новые заказы и контрагенты из 1С"Как мне сказала Великая и Могучая ТехПоддержка:
Цитата |
---|
За выгрузку отвечает файл \bitrix\modules\sale\general\order_loader.php вам нужно отладкой этого файла найти где хранятся нужные вам данныех. |
А вот за работу с данными отвечает компонент "sale.export.1c". И что же нужно с ним сделать, смотрите далее...
Первым делом копируем компонент к себе в папку, например "/bitrix/components/my"
Открываем файл "/bitrix/components/my/component.php" и что мы видим?? Да видим мы кашу из кода который достаточно тяжело читать, не то что понимать. Но коли нам нужны пользователи из импорта которые у меня приходили файлом ищем вот такое условие:
Код |
---|
elseif($_GET["mode"] == "import" && $ABS_FILE_NAME) |
Кстати для отладки я создал небольшой файл который методом POST отправлял на страницу импорта все необходимые данные:
Код |
---|
<fo rm method="post" action="/bitrix/admin/1c_exchange.php?type=sale&mode=import&filename=contragents___f6078d41-69c4-4a96-9adf-92df5529f0e8.xml">
<input type="hidden" name="sessid" id="sessid" value="b786923acada551822ab74bef29c1b60" />
<input type="submit" value="Отправить" />
</form>
|
Файл должен лежать в папке "/upload/1c_exchange/contragents___f6078d41-69c4-4a96-9adf-92df5529f0e8.xml".
В файле "/bitrix/components/my/component.php" мы видим что все необходимы манипуляции с контрагентами проходят через класс "CSaleOrderLoader" который находится именно в том файле куда нас
послала направила ТП. Открываем его и видим еще более глубокую и изощренную кашу.
По сути мне нужна была только функция "CSaleOrderLoader::collectAgentInfo()" что бы нормализовать данные о пользователе. Но я ни как не мог догнать или мне было просто лень (хотя наверное все таки лень), как они туда приходят. Всю работу с пользователями приводит метод "CSaleOrderLoader::nodeHandler(CDataXML $value)" внутри которого и вызывается метод для нормализации.
Что же нужно с ними такими страшными сделать:
Я создал файл прям в папке с компонентом который скопировал в слою папку. В нем описал свой класс который унаследовал от класса "CSaleOrderLoader". В моем классе только один метод "nodeHandler()" а все остальные пусть выполняет родительский (тут надо казать разрабам Битрикса спасибо что они не сделали все методы приватными, иначе ... ну вы понимаете).
Вот результат:
/bitrix/components/my/component.phpКод |
---|
// ...
elseif($_GET["mode"] == "import" && $ABS_FILE_NAME)
{
if(file_exists($ABS_FILE_NAME) && filesize($ABS_FILE_NAME)>0)
{
if(!is_array($_SESSION["BX_CML2_EXPORT"]) || !array_key_exists("last_xml_entry", $_SESSION["BX_CML2_EXPORT"]))
$_SESSION["BX_CML2_EXPORT"]["last_xml_entry"] = "";
include_once(__DIR__."/class/Gorshok.php");
$position = false;
$loader = new Gorshok();
// $loader = new CSaleOrderLoader; // Это стандартный класс, он на не нужен
// ... все остальное пусть так и остается
}
}
// ...
|
/bitrix/components/my/class/Gorshok.php
Код |
---|
class Gorshok extends CSaleOrderLoader
{
public function nodeHandler(CDataXML $value)
{
$value = $value->GetArray();
if(!empty($value[GetMessage("CC_BSC1_DOCUMENT")]))
{
parent::nodeHandler($value); // это мне не надо было, пусть родитель мучается
}
elseif($this->arParams["IMPORT_NEW_ORDERS"] == "Y")
{
$value = $value[GetMessage("CC_BSC1_AGENT")]["#"];
$arAgentInfo = $this->collectAgentInfo($value);
// $arAgentInfo - вот тут у нас уже нормальные данные, прям тут можем их записывать в БД или еще чего нибудь
}
}
} |
Ну и в общем то все, там почти все данные по пользователи. Да я уже за одно то что так я могу более адекватные логину сформировать готов ее юзать!