А началось все довольно безобидно. Позвонил старый клиент у которого уже года 2-3 работает магазин в связке с 1С и пожаловался что обмен перестал работать. Полез я к нему в 1С и вижу, что обмен действительно падает причем с разными ошибками и на разных файлах.
Первое что сделали — перешли на более мощный тариф хостинга. Половина зоопарка ошибок исчезла. Однако ошибка
Выгрузка на сайт завершилась с ошибками.
import.xml: Произошла ошибка на стороне сервера. Получен неизвестный статус импорта.
Неверный тип файла, либо превышен максимальный размер файла
осталась и уходить не собиралась.
Пробовали выгружать и на тиражный магазин и на VDS на который другая 1С прекрасно все грузит — везде одна и та же ошибка.
В итоге обратились в поддержку Битрикса. Судя по оперативности и точности ответов поддержка знает о проблеме. А суть ответов была в следующем: поддержка вставила отладочную печать и попросила сделать выгрузку.
По результатам выгрузки в консоли 1С появилась отладочная информация вида

Отсюда можно видеть, что одна из картинок имеет mimetype: application/octet-stream (т.е. двоичные данные вместо структурированных).
Далее по названию картинки вычисляем (например, можно в import.xml поискать по названию картинки) нехороший товар, пересохраняем его картинку в любом графическом редакторе и все работает.
Кому интересно — вся отладка заключается в изменении файла /bitrix/modules/main/classes/general/file.php:
после каждого вызова
return GetMessage("FILE_BAD_TYPE");
нужно вставить
print_r($arFile);
Попросил поддержку исправить этот баг в импорте, но мы то с вами знаем сколько такие неважные исправления могут делаться. Поэтому я просто оставлю это сообщение здесь. Возможно кому-то поможет сэкономить время.
Выгрузка на сайт завершилась с ошибками. import.xml: Произошла ошибка на стороне сервера. Получен неизвестный статус импорта.
Увидели такую ошибку и думаете «в коде кто-то накосячил»? А вот совсем не факт.
Об удивительной причине по которой обмен 1С с сайтом может неожиданно перестать работать я и хочу рассказать.
А началось все довольно безобидно. Позвонил старый клиент у которого уже года 2-3 работает магазин в связке с 1С и пожаловался что обмен перестал работать. Полез я к нему в 1С и вижу, что обмен действительно падает причем с разными ошибками и на разных файлах.
Первое что сделали — перешли на более мощный тариф хостинга. Половина зоопарка ошибок исчезла. Однако ошибка
Выгрузка на сайт завершилась с ошибками.
import.xml: Произошла ошибка на стороне сервера. Получен неизвестный статус импорта.
Неверный тип файла, либо превышен максимальный размер файлаНеверный тип файла, либо превышен максимальный размер файла
осталась и уходить не собиралась.
Пробовали выгружать и на тиражный магазин и на VDS на который другая 1С прекрасно все грузит — везде одна и та же ошибка.
В итоге обратились в поддержку Битрикса. Судя по оперативности и точности ответов поддержка знает о проблеме. А суть ответов была в следующем: поддержка вставила отладочную печать и попросила сделать выгрузку.
По результатам выгрузки в консоли 1С появилась отладочная информация вида
Array ( [name] => 04f5da44f3fe11e297cb002215a2039c_04f5da47f3fe11e297cb002215a2039c.jpg [size] => 3789 [tmp_name] => /home/i/mysite/public_html/upload/tmp/1ec/04f5da44f3fe11e297cb002215a2039c_04f5da47f3fe11e297cb002215a2039c.jpg [type] => application/octet-stream [COPY_FILE] => Y [description] => [copy] => 1 [MODULE_ID] => iblock )
Отсюда можно видеть, что одна из картинок имеет mimetype: application/octet-stream.
Далее по названию картинки вычисляем (например, можно в import.xml поискать по названию картинки) нехороший товар, пересохраняем его картинку в любом графическом редакторе и все работает.
Кому интересно — вся отладка заключается в изменении файла /bitrix/modules/main/classes/general/file.php:
после каждого вызова
return GetMessage("FILE_BAD_TYPE");
нужно вставить
Попросил поддержку исправить этот баг в импорте, но мы то с вами знаем сколько такие неважные исправления могут делаться. Поэтому я просто оставлю это сообщение здесь. Возможно кому-то поможет сэкономить время.
Назад в раздел
Обмен с битрикс «сайтом» |
Я |
17.08.20 — 14:30
import___19e25806-af84-4466-886c-09afbc566612.xml: Произошла ошибка на стороне сервера. Получен неизвестный статус импорта.
Ответ сервера:
<br><font color=#ff0000>MySQL Query Error: 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)
)
</font>[[1813] Tablespace for table ‘`lavka`.`b_xml_tree_import_1c`’ exists. Please DISCARD the tablespace before IMPORT]<br><br>
<table cellpadding=»1″ cellspacing=»0″ width=»35%» bgcolor=»#9C9A9C»>
<tr>
<td><table cellpadding=»5″ cellspacing=»0″ width=»100%»>
<tr>
<td bgcolor=»#FFFFFF» align=»center»>
<FONT face=»Verdana, Arial, Helvetica, sans-serif» size=»-1″>
<font color=»#FF0000″><b>DB query error.</b></font><br>
Please try later.
</font><br>
</form>
<form method=»post» action=»https://www.1c-bitrix.ru/support/»>;
<input type=»hidden» name=»last_error_query» value=»File: /var/www/hozmag/data/www/hozmag-econom.ru/bitrix/modules/main/include/dbquery_error.php
Query: create table b_xml_tree_import_1c
Добрый день, кто нибудь сталкивался с такой проблемой?
1 — 17.08.20 — 14:53
Не ужели никто?
2 — 18.08.20 — 00:41
Попробуй удалить соответствующий .idb файл в папке бд
3 — 18.08.20 — 00:41
* .ibd
4 — 18.08.20 — 00:42
5 — 18.08.20 — 10:14
(2) да вот в том то и проблема что там пусто, нет этих файлов
6 — 18.08.20 — 11:00
Без предыстории ничего, кроме как проблемы на стороне MySQL сервера сайта, обозначить нельзя.
Раньше работало?
Сервер с MySQL твой?
Ребут сервера помогает?
Если «да, да, нет» — гуглить «Проверка, восстановление и оптимизация баз MySQL». База иногда устаёт, нужно её в себя привести. Делается из любого менеджера MySQL по правому клику на названии базы. Например, DBForge Studio For MySQL.
7 — 18.08.20 — 11:19
(6) Да работало до обновления «сайта»
8 — 18.08.20 — 11:21
У вас обслуживанием сайта кто занимается? Вот им и адресуйте данный вопрос.
9 — 18.08.20 — 11:21
(8) «да, да, нет»
10 — 18.08.20 — 11:28
(8) они отправляют на сторону 1с
11 — 18.08.20 — 11:28
Типа того что идет два одновременных обмена. И бла бла бла
12 — 18.08.20 — 11:29
(11) Так это важные вводные данные. Да, битрикс не умеет работать паралельно, надо пилить, на стороне 1С дешевле
13 — 18.08.20 — 11:30
(12) нет двух обменов одновременно.
14 — 18.08.20 — 11:32
(13) логи включите на стороне 1С и высылайте разработчикам сайта. Если там параллельный обмен, будет видно. Не понятно, что тут смотреть.
15 — 18.08.20 — 11:39
(14) да уже высылал — толку 0
16 — 18.08.20 — 11:46
(15) ты же сам говоришь, что тебе указали на зацикливание. Сам-то смотрел логи? чтобы начало обмена шло строго после окончания? Если всё ок, то подключайте административный инструмент)
17 — 18.08.20 — 11:47
(16) Ну конечно смотрел. Какой из инструментов то?
18 — 18.08.20 — 14:24
(17) вероятно, имеется в виду волшебный пендель через руководство в сторону поддержки сайта. Пусть дадут лог, по которому они увидели двойной обмен.
Нужно изучать данные, которые приходят на сайт. Обмен с Битриксом — штука невероятно рукожопно написанная, и всегда доставляет много проблем. Мы в похожем случае достаём из бэкапа копию 1С на тот момент, когда всё точно работало, и запускаем обмен. Сравниваем логи. Чтобы локализовать проблему.
Если из старой копии обмен идёт — то проблема у нас. Чего, кстати, ни разу не бывало.
19 — 18.08.20 — 14:55
(18) Уже пробовал, с копией та же хрень
20 — 18.08.20 — 14:56
Сейчас пробую залить на сайт через xml
21 — 18.08.20 — 15:28
Жесть. Уже все перепробовал — результат 0
22 — 19.08.20 — 07:40
(21) Осталось попробовать достать из бэкапа копию сайта и базы MySQL до обновления и проверить обмен. Снова обновить Битрикс потом — не проблема.
А вообще здесь нужно обоюдное участие всех заинтересованных лиц, дебажить как со стороны 1С, так и со стороны Битрикса.
Возможно придётся приглашать почасовых специалистов, которые умеют это делать.
23 — 19.08.20 — 07:43
была такая ошибка, возникала из-за двух одновременных обменов с сайтом. Один обмен запускался с рабочей базы, другой из копии. Проверьте все копии баз, может где-то включен обмен по расписанию
dmitryds
24 — 19.08.20 — 09:42
(21) а если почистить таблицу b_xml_tree_import_1c?
Если не поможет вообще удалить…
само собой сначала бэкап
Заказать сайт
Обратившись ко мне вы получите надежного и сведущего исполнителя, который быстро и качественно реализует любую задачу для Вас и Вашего бизнеса.
Настройки подключения к 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('BitrixMainDataManagedCache')) {
(new BitrixMainDataManagedCache())->cleanAll();
}
if (class_exists('CStackCacheManager')) {
(new CStackCacheManager())->CleanAll();
}
if (class_exists('BitrixMainDataStaticHtmlCache')) {
BitrixMainDataStaticHtmlCache::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);
Выгрузка на сайт завершилась с ошибками. import.xml: Произошла ошибка на стороне сервера. Получен неизвестный статус импорта.
1С вернул код ответа Ошибка открытия файла
Если вы убедились, что на жестком диске место есть, у вашего скрипта есть права доступа к папке /upload/ и сама папка существует, то попробуйте отключить сжатие при обмене с 1С.
Перейдите по ссылке /bitrix/admin/1c_admin.php?lang=ru&tabControl_active_tab=edit_catalog или используя навигацию Магазин > Настройки > Интеграция с 1С и снимите галочку с опции Использовать сжатие zip, если доступно
Теги:
1С Битриксphp
Чтобы осуществить выгрузку в разные типы инфоблока, следует поместить несколько компонентов catalog.import.1c на разные страницы.
Например 2 страницы: http://mysite.ru/1c_import_1.php http://mysite.ru/1c_import_2.php На обеих страницах настраиваем компонент catalog.import.1c -указываем в параметрах разные типы инфоблоков и взводим флажок «Импортировать с учетом типа инфоблока».
Затем при настройке импорта в 1с, для выгрузки в нужный тип инфоблока указываем разные файлы: http://mysite.ru/1c_import_1.php либо http://mysite.ru/1c_import_2.php
Пример файла:
SetTitle(«import1»); ?> IncludeComponent(«bitrix:catalog.import.1c», «», array( «IBLOCK_TYPE» => «test1», «SITE_LIST» => array( 0 => «-«, 1 => «s1», ), «INTERVAL» => «30», «GROUP_PERMISSIONS» => array( 0 => «1», 1 => «6», 2 => «3», 3 => «4», 4 => «5», 5 => «7», 6 => «2», ), «GENERATE_PREVIEW» => «N», «DETAIL_RESIZE» => «N», «USE_OFFERS» => «N», «USE_IBLOCK_TYPE_ID» => «Y», «ELEMENT_ACTION» => «N», «SECTION_ACTION» => «N», «FILE_SIZE_LIMIT» => «204800», «USE_CRC» => «N», «USE_ZIP» => «N» ), false ); ?>