Битрикс: обмен с 1С
Последние записи
Настройки подключения к 1С должны быть произведены согласно официальной документации
Ошибка [1813] Tablespace '`sitemanager `.`b_xml_tree_import_1c`' exists.
b_xml_tree_import_1c
- это временная таблица динамически создаваемая во время импорта. Под импортом понимается любой XML
импорт, а не только выгрузка из 1С
В очень редких случаях таблица повреждается так сильно, что пропадает возможность ее создавать и удалять. Об этом свидетельствует номер errno: 184
. Диагностировать этот случай легко. Удостоверьтесь, что в БД отсутствует таблица b_xml_tree_import_1c
и попробуйте исполнить код:
create table b_xml_tree_import_1c
(
ID int(11) not null auto_increment,
PARENT_ID int(11),
LEFT_MARGIN int(11),
RIGHT_MARGIN int(11),
DEPTH_LEVEL int(11),
NAME varchar(255),
VALUE longtext,
ATTRIBUTES text,
PRIMARY KEY (ID)
)
Если вы получаете ошибку, то перейдите в хранилище mysql на сервере. Найдите таблицу b_xml_tree_import_1c.frm
и удалите ее.
Исправляем перезапись описание товара при обмене с 1С
$eventManager->addEventHandler("iblock", "OnBeforeIBlockElementUpdate", ['Stsol\Exchange\1C', 'OnBeforeIBlockElementUpdateHandler']);
public static function OnBeforeIBlockElementUpdateHandler(&$arFields)
{
if (@$_REQUEST['mode']=='import')
{
unset($arFields['DETAIL_TEXT']); // Не перезаписывать детальное описание элементов из 1С
}
Очистка кеша после импорта
В файле init.php
добавляем
//При начале импорта из 1С устанавливаем сессионную переменную
AddEventHandler(
'catalog',
'OnBeforeCatalogImport1C',
function ()
{
$_SESSION["1C_UPDATE"] = true;
}
);
//При окончании импорта из 1С устанавливаем сессионную переменную
AddEventHandler(
'catalog',
'OnSuccessCatalogImport1C',
function ()
{
$_SESSION["1C_UPDATE"] = false;
define('BX_BUFFER_USED', true);
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
define('NO_AGENT_STATISTIC', true);
define('STOP_STATISTICS', true);
define('SITE_ID', 's1');
BXClearCache(true);
if (class_exists('\Bitrix\Main\Data\ManagedCache')) {
(new \Bitrix\Main\Data\ManagedCache())->cleanAll();
}
if (class_exists('\CStackCacheManager')) {
(new \CStackCacheManager())->CleanAll();
}
if (class_exists('\Bitrix\Main\Data\StaticHtmlCache')) {
\Bitrix\Main\Data\StaticHtmlCache::getInstance()->deleteAll();
}
}
);
Запуск импорта вручную
Для этого нужно перейти по адресу: https://site.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=import.xml
Так же импорт можно запустить из отладочного файла /bx_1c_import.php
, что намного удобнее, но небезопасно! Переименуйте его и удалить сразу после использования
Включение отладки
В файле /bitrix/php_interface/dbconn.php
добавляем константу
define("BX_CATALOG_IMPORT_1C_PRESERVE", true);
Для каждого обновляемого файла получим массив вида
Host: site.ru:443
Date: 2020-06-29 09:23:48
Module: ------------UPDATE-----------
Array
(
[ACTIVE] => Y
[PROPERTY_VALUES] => Array
(
)
[339] => Array
(
[n0] => Array
(
[VALUE] => 5055185210794
[DESCRIPTION] =>
)
)
[340] => Array
(
[n0] => Array
(
[VALUE] => 5678000-01109
[DESCRIPTION] =>
)
)
[342] => Array
(
[n0] => Array
(
[VALUE] => Товар
[DESCRIPTION] => ВидНоменклатуры
)
[n1] => Array
(
[VALUE] => Товар
[DESCRIPTION] => ТипНоменклатуры
)
[n2] => Array
(
[VALUE] => Набор для вышивания "Поле маков". По картине Стива Томса ("Poppy Field", Steve Thoms). 25х25 см
[DESCRIPTION] => Полное наименование
)
[n3] => Array
(
[VALUE] => 1933.83
[DESCRIPTION] => Цена
)
[n4] => Array
(
[VALUE] => 0
[DESCRIPTION] => Вес
)
)
)
[TMP_ID] => 1765642395
[XML_ID] => 583b6b8d-d8f1-11e0-9980-1c6f65bc8a97
[NAME] => Набор для вышивания MAIA Поле маков
[DETAIL_TEXT] => Размер:25*25см (состав: канва Aida 16, цветная схема, нитки Anchor, игла, инструкция), счетный крест
[DETAIL_TEXT_TYPE] => text
[PREVIEW_TEXT] => Набор для вышивания "Поле маков". По картине Стива Томса ("Poppy Field", Steve Thoms). 25х25 см
[PREVIEW_TEXT_TYPE] => text
[DETAIL_PICTURE] => Array
(
[name] => 583b6b8d-d8f1-11e0-9980-1c6f65bc8a97_2b668b28-d6b7-11e5-afc8-001e676a37f6.jpg
[size] => 84906
[tmp_name] => /home/bitrix/www/upload/1c_catalog/import_files/58/583b6b8d-d8f1-11e0-9980-1c6f65bc8a97_2b668b28-d6b7-11e5-afc8-001e676a37f6.jpg
[type] => image/jpeg
[external_id] => 825a18b4d6a465891654f1227d1968e4
[description] => 09
[MODULE_ID] => iblock
[old_file] => 122987
)
[PREVIEW_PICTURE] => Array
(
[name] => 583b6b8d-d8f1-11e0-9980-1c6f65bc8a97_2b668b28-d6b7-11e5-afc8-001e676a37f6.resize1.jpg
[size] => 40462
[tmp_name] => /home/bitrix/www/upload/1c_catalog/import_files/58/583b6b8d-d8f1-11e0-9980-1c6f65bc8a97_2b668b28-d6b7-11e5-afc8-001e676a37f6.resize1.jpg
[type] => image/jpeg
[external_id] => 825a18b4d6a465891654f1227d1968e4
[description] => 09
[MODULE_ID] => iblock
[old_file] => 122986
)
[IBLOCK_SECTION] => Array
(
[0] => 1217
)
[BASE_WEIGHT] => 0
[MODIFIED_BY] => 1
[WF] => N
[SEARCHABLE_CONTENT] => НАБОР ДЛЯ ВЫШИВАНИЯ MAIA ПОЛЕ МАКОВ
НАБОР ДЛЯ ВЫШИВАНИЯ "ПОЛЕ МАКОВ". ПО КАРТИНЕ СТИВА ТОМСА ("POPPY FIELD", STEVE THOMS). 25Х25 СМ
РАЗМЕР:25*25СМ (СОСТАВ: КАНВА AIDA 16, ЦВЕТНАЯ СХЕМА, НИТКИ ANCHOR, ИГЛА, ИНСТРУКЦИЯ), СЧЕТНЫЙ КРЕСТ
[PREVIEW_PICTURE_ID] => 136021
[DETAIL_PICTURE_ID] => 136022
[ID] => 116896
[IBLOCK_ID] => 22
[RESULT] => 1
)
Поиск проблемного файла при получении во время импорта из 1С ответа Файл не является графическим
В файле /bitrix/modules/main/classes/general/file.php
перед каждым
return GetMessage("FILE_BAD_FILE_TYPE");
вставляем:
print_r($arFile)
Получим массив вида
[
[name] => 493d6d81-6ebb-11e3-8f8e-001e676a37f6_493d6d83-6ebb-11e3-8f8e-001e676a37f6.jpg
[size] => 1051
[tmp_name] => /home/bitrix/www/upload/1c_catalog/import_files/49/493d6d81-6ebb-11e3-8f8e-001e676a37f6_493d6d83-6ebb-11e3-8f8e-001e676a37f6.jpg
[type] => image/jpeg
[external_id] => b6c6e1bf0372a666323fd0a000999734
[description] => PN-0146947
[MODULE_ID] => iblock
[old_file] =>
]
Теперь в файле import.xml
мы можем найти id
проблемного товара по имени изображения
Если вы не хотите, чтобы ошибки повторялись и вам некритично их отсутствие при работе с админкой, то вы можете пропустить их обработку, что позволит скрипту импорта продолжить далее при их возникновении.
Вместо print_r
добавьте в файл /bitrix/modules/main/classes/general/file.php
такой код
$log = '///////////////////////////////////////////////////////////////n';
$log .= date('Y-m-d H:i:s') . ' ' . print_r($arFile, true);
//$log .= str_replace(array(' ', PHP_EOL), '', print_r($arFile, true)); //Для вывода в одну строку
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/log.txt', $log . PHP_EOL, FILE_APPEND);
1С вернул код ответа Ошибка открытия файла
Если вы убедились, что на жестком диске место есть, у вашего скрипта есть права доступа к папке /upload/
и сама папка существует, то попробуйте отключить сжатие при обмене с 1С.
Перейдите по ссылке /bitrix/admin/1c_admin.php?lang=ru&tabControl_active_tab=edit_catalog
или используя навигацию Магазин > Настройки > Интеграция с 1С
и снимите галочку с опции Использовать сжатие zip, если доступно
Комментарии