Передача дополнительной информации с сайта в 1С при обмене заказами
Передача дополнительной информации с сайта в 1С при обмене заказами
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Обмен заказами: больше информации для 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 заменяем:
Теперь при запросе к странице с компонентом с параметром mode=query можно увидеть свой модифицированный xml
Соответственно, на стороне 1С новые данные нужно также обрабатывать, но как это сделать - задача для программистов 1С
Кастомизированный компонент можно скачать здесь В functions.php нужно исправить методы CSaleExport2XML::GetContragentFields, CSaleExport2XML::GetOrderFields, CSaleExport2XML::GetBasketItemFields. Сейчас там только шаблоны.