Выгрузка товаров 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’]);
   }
}