Обмен товарами с 1С

Рейтинг: -0.2475  
На голосовании
Предложил Aleks_mdma 02.05.2012 13:26:25

Обмен товарами с 1С

Идея сделать возможным использовать кастомизированный файл cml2.php создав его копию которая не будет затираться при обновлении, т.к. иногда требуется сделать измененный вариант обмена данными.
В нашем случае, нам надо принудительно давать цену на диапазон, а не использовать встроенный в 1С механизм установки скидок. Нам приходится после каждого обновления движка заменять данный файл на кастомизированный.
Рейтинг: 0.1327  
Ответил Рябинков Артем 05.05.2012 12:21:50
Импорт из 1С реализован с помощью компонентов. Очень несложно взять системный компонент, перенести его в другое пространство имен и кастомизировать как угодно.

Рейтинг: 0  
Диденко Денис 02.05.2012 18:04:57
Что мешает сделать файл mycml2.php?
Рейтинг: 0  
Aleks_mdma 02.05.2012 18:10:48
Ничего не мешает добавить, но нет возможности сказать битриксу пользоваться этим файлом :-)
Рейтинг: 0  
Диденко Денис 02.05.2012 18:31:36
Посмотрите как добавлены существующие системы импорта, и добавьте свою.
Рейтинг: 0.2115  
Aleks_mdma 11.05.2012 09:51:10
Добрый день Артем!
С таким вариантом пробовали - не помогает, т.к. все-равно используется глобальный модуль iblock, а в частности для разбора данны XML файла используется файл cml2.php, который лежит в папке /bitrix/modules/iblock/classes/general
Вот вся проблема стоит в том, что не получается скопировать этот файл и заставить кастомизированный компонент использовать копию этого файла.
А без изменений файла cml2.php не получается реализовать задуманный варинан выгрузки товарных предложений.
Рейтинг: 0  
Неудахин Артур 14.05.2012 23:19:52
Объясняю как сделать по шагам.
1. в файле /bitrix/php_interface/init.php пишем

include_once(dirname(__FILE__)."/classes/cml2_custom.php");// кастомизированный класс импорта. Копируем и кастомизируем класс под свои задачи.
2. копируем компонент импорта catalog.import.1c в свои компоненты, кастомизируем данный компонент.  В частности, вместо вызова стандартного класса, вызываем свой класс.
$obCatalog = new CIBlockCMLImport_custom;
3. Настраиваем вызов кастомного компонента для 1С.
Собственно все.

Иногда проще не кастомизировать класс, а воспользоваться событиями, в которых исправлять нужные поля и свойства перед обновлением элемента.