Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Этот пост является следствием частных запросов в ТП по поводу передачи дополнительной информации с сайта в 1С при обмене заказами. Такая потребность часто возникает при решении специфических задач клиентов.
И конечно, задачу нельзя решить стандартно, т.е. просто сделав какую-нибудь маленькую настройку, чтобы было всё ок.
Дело в том, что xml формируется стандартным методом CSaleExport::ExportOrders2Xml(), который нельзя править - ядро магазина однако. Выходом в данной ситуации является написание своего метода формирования xml, включающий в себя нужные данные по заказам, контрагентам и составу заказа. В общем, предложу свой вариант решения.
Суть решения - написание своей функции на основе CSaleExport::ExportOrders2Xml() с минимальными измнениями и замена в компоненте вызова стандартной функции на вызов своей.
Кастомизируем стандартный компонент обмена заказами bitrix:sale.export.1c.
Копируем его в своё пространство имён. В папке с компонентом создаём файл functions.php и в component.php подключаем данный файл:
Далее в functions.php оформляем класс CSaleExport2XML и вставляем в него функцию ExportOrders2Xml() (просто копируем её из файла /bitrix/modules/sale/general/export.php). Затем пишем 3 функции нашего класса для получения определённых данных. Вот примерные шаблоны:
CSaleExport2XML::GetBasketItemFields() - в метод передаётся массив позиции товара корзины, используя эти данные, нужно сформировать текст xml с нужными вам данными по позиции из состава заказ. Функция должна возвращать текст сформированного xml.
CSaleExport2XML::GetContragentFields() - передаётся массив данных пользователя-заказчика.
CSaleExport2XML::GetOrderFields() - передаётся массив заказа. Далее по аналогии с позицией состава заказа.
В этих функция можно использовать API для получения нужных данных.
Ну а теперь в методе CSaleExport2XML::ExportOrders2Xml() в нужных местах вставляем вызов этих методов:
Это нужно делать так, чтобы текст xml, который возвращает функция, попал в нужный блок итогового xml-файла.
Далее правим файл component.php. Предварительно я решил добавить возможность дополнительной фильтрации компонента. В параметрах компонента можно задать параметр "FILTER" - массив фильтрации, который будет использован при выборке заказов для xml-файла. В файле component.php заменяем:
на
Теперь при запросе к странице с компонентом с параметром mode=query можно увидеть свой модифицированный xml

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