+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Обмен заказами: больше информации для 1С

Привет,

Этот пост является следствием частных запросов в ТП по поводу передачи дополнительной информации с сайта в 1С при обмене заказами. Такая потребность часто возникает при решении специфических задач клиентов.

И конечно, задачу нельзя решить стандартно, т.е. просто сделав какую-нибудь маленькую настройку, чтобы было всё ок.
Дело в том, что xml формируется стандартным методом CSaleExport::ExportOrders2Xml(), который нельзя править - ядро магазина однако. Выходом в данной ситуации является написание своего метода формирования xml, включающий в себя нужные данные по заказам, контрагентам и составу заказа. В общем, предложу свой вариант решения.
Суть решения - написание своей функции на основе CSaleExport::ExportOrders2Xml() с минимальными измнениями и замена в компоненте вызова стандартной функции на вызов своей.
Кастомизируем стандартный компонент обмена заказами bitrix:sale.export.1c.
Копируем его в своё пространство имён. В папке с компонентом создаём файл functions.php и в component.php подключаем данный файл:

include('functions.php');


Далее в functions.php оформляем класс CSaleExport2XML и вставляем в него функцию ExportOrders2Xml() (просто копируем её из файла /bitrix/modules/sale/general/export.php). Затем пишем 3 функции нашего класса для получения определённых данных. Вот примерные шаблоны:

function GetBasketItemFields($arBasketItem)     {  
    return "<привет>C_arter_test_item_info</привет>\n";     
 }          
function GetOrderFields($arOrder)     {            
   return "<привет>C_arter_test_order_info</привет>\n";      
}         
 function GetContragentFields($arUser)     {            
      return "<привет>C_arter_test_user_info</привет>\n";     
 }

CSaleExport2XML::GetBasketItemFields() - в метод передаётся массив позиции товара корзины, используя эти данные, нужно сформировать текст xml с нужными вам данными по позиции из состава заказ. Функция должна возвращать текст сформированного xml.

CSaleExport2XML::GetContragentFields() - передаётся массив данных пользователя-заказчика.
CSaleExport2XML::GetOrderFields() - передаётся массив заказа. Далее по аналогии с позицией состава заказа.


В этих функция можно использовать API для получения нужных данных.
Ну а теперь в методе CSaleExport2XML::ExportOrders2Xml()  в нужных местах вставляем вызов этих методов:
<?=$this->GetOrderFields($arOrder);?>
Это нужно делать так, чтобы текст xml, который возвращает функция, попал в нужный блок итогового xml-файла.

Далее правим файл component.php. Предварительно я решил добавить возможность дополнительной фильтрации компонента. В параметрах компонента можно задать параметр "FILTER" - массив фильтрации, который будет использован при выборке заказов для xml-файла. В файле component.php заменяем:
CSaleExport::ExportOrders2Xml($arFilter, false, $arParams["REPLACE_CURRENCY"]);
на
$arFilter=array_merge($arFilter,$arParams['FILTER']);  
$xmlOrder=new CSaleExport2XML;  
$xmlOrder->ExportOrders2Xml($arFilter, false, $arParams["REPLACE_URRENCY"]); 

Теперь при запросе к странице с компонентом с параметром mode=query можно увидеть свой модифицированный xml


Соответственно, на стороне 1С новые данные нужно также обрабатывать, но как это сделать  - задача для программистов 1С :)

Кастомизированный компонент можно скачать здесь
В functions.php нужно исправить методы CSaleExport2XML::GetContragentFields, CSaleExport2XML::GetOrderFields, CSaleExport2XML::GetBasketItemFields. Сейчас там только шаблоны.

Всем пока;)


Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA