Выгрузка товаров 1с в битрикс

Послезное:

Проблемы:

https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=42&LESSON_ID=4933#mistake_1

Интеграция с 1С: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=42&CHAPTER_ID=04912

http://dermanov.ru/exp/bitrix-integration-with-1c-brief-introduction/


Первую общую выгрузку из 1C в битрикс, лучше разбить:

  1. Выгрузить XML из 1С
  2. Загрузить полученные файлы на FTP и запустить импорт XML
  3. Импортировать оба файла import.xml, потом offers.xml

Можно включить «режим отладки” обмена — отключить перезапись файлов в папке /upload/1c_catalog. Таким образом можно отключить удаление файлов выгрузки после завершения обмена.

Для этого нужно объявить константу в файле dbconn.php:


define(«BX_CATALOG_IMPORT_1C_PRESERVE», true);


Проблема: медленный импорт из 1C

  1. в инфоблоке ВЫКЛЮЧИТЬ:* —  данная рекомендация для XML актуальна
    1. Индексировать разделы для модуля поиска
    2. Индексировать элементы для модуля поиска
  2. в Проактивной защите :
    1. отключить хранение сессий в базе
    2. и смену идентификатора сессии.

 

Настройки модуля

Торговый каталог

НЕТ — Разрешать сохранять товары без цен:

НЕТ — Разрешать сохранять товары, у которых заполнены не все диапазоны цен:

НЕТ — Показывать вкладку Торговый каталог для товаров, имеющих торговые предложения

ДА — Устанавливать параметр «НДС включен в цену» при создании новых товаров и предложений (не работает, если выгружается из 1С)


ДА — Включить количественный учет

НЕТ —  Разрешить покупку при отсутствии товара (включая разрешение отрицательного количества товара)

НЕТ —  Разрешить подписку при отсутствии товара


НЕТ — Включить складской учет

Складской учет внутри Битрикса — это как раз тот случай когда у вас нет 1С, и вы пытаетесь простенький учет вести с помощью Битрикса, если у вас есть 1С и вы планируете ее интегрировать с Битрикс, эту галочку нужно обязательно отключить.

НЕТ — Включить резервирование


Информационные блоки

ДА Показывать код загрузки из внешних источников (нужен для понимания в какой инфоблок будет грузится товары из 1С и видеть коды товаров)


Магазин > Настройки > Интеграция с 1С

ДА Использовать контрольные суммы элементов для оптимизации обновления каталога

НЕТ — Использовать сжатие zip, если доступно

если сервер мощный то можно включить, на слабом сервере будет делаться чуть дольше, но зато без ошибок

ДА Не менять код (название) типа цены, если используется внешний код (XML_ID)


Магазин > Настройки > Цены > Типы цен

  1. Установить Внешний код такой же который выгружается из 1С
  2. Группы пользователей, имеющие права на просмотр этого типа цен (для разных групп своя цена)

init.php

// НДС включен в цену

AddEventHandler(«sale», «OnProductAdd», «OnProductAdd»);

function OnProductAdd($ID,$Fields){

$res=Array(«VAT_INCLUDED»=>’Y’);

CCatalogProduct::Update($ID,$res);

}

// событие, вызываемое после окончания обмена одним XML-файлом.

AddEventHandler(«catalog», «OnSuccessCatalogImport1C», «MyOnSuccessImport»);

function MyOnSuccessImport($arEvent){

CModule::IncludeModule(‘iblock’);

$obEl = new CIBlockElement();

$res = CIBlockElement::GetList(false, array(«IBLOCK_ID»=>4,»PREVIEW_PICTURE»=>false,»ACTIVE»=>’Y’), Array(«ID»));

while($ar_fields = $res->GetNext()){  $obEl->Update($ar_fields[«ID»] , array(‘ACTIVE’ => ‘N’)); }}

// удаляем картинки которые приходят из выгрузки , если в 1С их нету, а магазин грузят вручную

AddEventHandler(«iblock», «OnBeforeIBlockElementUpdate»,»DoNotUpdate»);
function DoNotUpdate(&$arFields)
{
   if ($_REQUEST[‘mode’]==’import’)
   {
       unset($arFields[‘PREVIEW_PICTURE’]);
       unset($arFields[‘DETAIL_PICTURE’]);
   }
}
AddEventHandler(«iblock», «OnBeforeIBlockElementAdd»,»DoNotAdd»);
function DoNotAdd(&$arFields)
{
   if ($_REQUEST[‘mode’]==’import’)
   {
       unset($arFields[‘PREVIEW_PICTURE’]);
       unset($arFields[‘DETAIL_PICTURE’]);
   }
}