Итак передо мной встала задача импортировать 36 000 с хвостом товаров из 1С-Битрикс в 1С УТ 11.1.6. Битрикс обновлен до самой свежей версии, на 1С УТ установлено битриксоидовское дополнение.
Начав настраивать импорт каталога с сайта заказчика в 1С УТ я, как обычно, сделала множество открытий:
1) Уникальность рабочих наименований.
Когда у нас на сайте 36 000 товаров в 300х разделах, их наименования, естественно, не уникальны. В 1С УТ же по-умолчанию включен контроль их уникальности, в следствии чего импорт товаров через помощник импорта товаров с сайта завершается с ошибкой.
Открываем конфигурацию 1С УТ в режиме предприятия, идем в Администрирование — Настройка параметров системы — Номенклатура Снимаем галочку «Контроль уникальности…»
2) Список свойств, которые могут быть импортированы — не описан пока в документации, поэтому пришлось выявить его, почитав код обработки «Помощник импорта товаров». Это:
CML2_ARTICLE — артикул
CML2_BASE_UNIT — базовая единица
Помимо этого в тексте обработки перебираются и записываются в дополнительные сведения о номенклатуре все остальные свойства с префиксом CML2_
Для того, чтобы сайт корректно отдал эти свойства 1С-ке, в настройке свойств инфоблоков свойствам нужно задать соответствующие внешние коды:
3) Меня так же интересовал момент, предусматривает ли обработка апдейт элемента номенклатуры — или только вставку и по какому полю контролируется наличие элемента в справочнике.
Апдейта нет — только вставка.
В качестве уникального идентификатора номенклатуры используется
Номенклатура.Б_Идентификатор = СтрокаТовара.Ид;
В это ИД товара Битрикс вписывает XML_ID товара, если оно задано и обычное ID товара, если XML_ID не задано. У меня XML_ID были заданы, так я изначально наполняла сайт заказчика через свой модуль импорта из YML файлов, предоставленных поставщиком.
Если у вас на сайте не заданы XML_ID — рекомендую их сгенерировать — к примеру, можно сделать их равными ID. Какой смысл? Это решит в дальнейшем проблему обмена в другую сторону и проблему с обменом заказами.
4) Механизм — нужно протестировать перед финальной загрузкой, которая даже на очень мощном сервере будет длиться очень долго.
На стороне сайта я тестирую выгрузку так:
— авторизуюсь на сайте
— вбиваю в строку браузера запрос:
http://адрес_сайта/bitrix/admin/1c_exchange.php?type=get_catalog&mode=init
получаю
zip=yes
— вбиваю следующий запрос:
http://адрес_сайта/bitrix/admin/1c_exchange.php?type=get_catalog&mode=query
Сайт отдает кусочек xml-файла. Он не выглядит как xml-файл — это нормально — он не целый и не завершенный. 1С-ка когда прихоит на сайт за каталогом посылает этот запрос до тех пор, пока не заберет весь файл по кусочкам.
Однако, то, как выгружаются товары — мы видим, проверяем, выгружается ли все так, как нужно.
Далее мне необходимо как-то сначала протестировать импорт на стороне 1С Предприятия на маленьком кусочке. Потому что, если все 36 000 товаров загрузятся неправильно, потом можно успеть состариться, пока дождешься их удаления — мы ведь проапдейтить их в следующий проход импорта не сможем. Я хочу протестировать обмен сначала на 100-200х товаров — думаю, этого будет достаточно. Для этого я копирую компонент экспорта каталога catalog.export.1c в свое пространство имен.
В своем кастомном компоненте я нахожу место
elseif($_GET[«mode»] == «query»)
{
И дописываю:
if ($_SESSION[«BX_CML2_EXPORT»][«current»]>100) $_SESSION[«BX_CML2_EXPORT»][«step»]=4;
Делаю свой скрипт обмена 1c_exchange2.php, в котором подключаю свой компонент вместо стандартного.
elseif($type==»get_catalog»)
{
$APPLICATION->IncludeComponent(«bedrosova:catalog.export.1c», «», Array(
«IBLOCK_ID» => COption::GetOptionString(«catalog», «1CE_IBLOCK_ID», «»),
«INTERVAL» => COption::GetOptionString(«catalog», «1CE_INTERVAL», «-«),
«ELEMENTS_PER_STEP» => COption::GetOptionString(«catalog», «1CE_ELEMENTS_PER_STEP», 100),
«GROUP_PERMISSIONS» => explode(«,», COption::GetOptionString(«catalog», «1CE_GROUP_PERMISSIONS», «1»)),
«USE_ZIP» => COption::GetOptionString(«catalog», «1CE_USE_ZIP», «Y»),
)
);
}
Мой скрипт 1c_exchange2.php будет отдавать 1С-ке только 100+N товаров. N – количество товаров, выгружаемых за 1 шаг. Вписываю в помощнике импорта адрес своего скрипта и запускаю импорт.
После того, как товары загружены — начинается загрузка картинок. На этом этапе может вывалиться ошибка «Реквизит для группы не найден» — она может возникнуть, если есть группа с таким же уникальным айдишником, как товар (на стороне сайта придется дополнительно перепроверять сквозную уникальность XML_ID групп и товаров).
Радуемся — товары успешно загрузились в 1С Предприятие УТ. У них есть наименование, артикул, привзяка к группе, картинка, а так же дополнительные свойства — в дополнительных сведениях. Когда потом с сайта придут заказы — 1С однозначно идентифицирует товары заказа по XML_ID, а складовщик посмотрит на картинку — и не ошибется при отгрузке.
Помощник импорта товаров в 1с с сайта на Битрикс — в целом пригоден для одноразовой загрузки номенклатуры без дополнительной кастомизации. Единственное, плохо, что обработка выполняется очень медленно. Я расстрою тех, кто собирался развернуть 1С УТ на своем ноутбуке.
Но для москвичей это не проблема. Ведь в вашем городе живет и работает мой надежный партнер Вячеслав Мишаков (тел. 8 499 70 77 118) — руководитель компании КМ Системс. Специалисты КМ Системс соберут для вас сервер под 1С Предприятие УТ, идеально подходящий для последующей синхронизации с 1С Битрикс. Ребята сами привезут к вам сервер, настроят его, установят 1С Предприятие, подключат его к локальной сети, разграничат доступ для ваших сотрудников, будут оказывать регулярную техподдержку сервера. Для тех, кто еще не созрел для покупки собственного сервера, КМ Системс предлагает разместить 1С Предприятие в их датацентре. Захожу на их сервера, чтобы интегрировать 1С Предприятие клиентов с 1С-Битрикс и радуюсь — не работа, а удовольствие.
Один комментарий на «“Импорт товаров из 1С-Битрикс в 1С Предприятие УТ 11 — опыт использования стандартного функционала”»
Цены он при этом не выгружает с сайта?