Ошибка импорта метаданных при обмене с 1С
Обмен с 1С обрывается на первом же шаге, и в окне выгрузки появляется строка «Ошибка импорта метаданных».
Как проверить
Читаем полный текст ошибки в логе:
# метаданные разбираются до товаров, поэтому нужная строка в начале логаgrep -m5 -A2 'метаданн' /home/bitrix/www/upload/1c_catalog/*.logВ окне 1С сообщение обрезано, а в логе оно целиком. Сообщение почти всегда продолжается уточнением: «Не введено название раздела», «Неверный тип блока», «Количество импортированных складов превышает разрешённое». Именно хвост и называет причину, само по себе слово «метаданные» её не выдаёт.
Смотрим, какой инфоблок обмен считает целевым:
$type = COption::GetOptionString('catalog', '1C_IBLOCK_TYPE_ID');echo "тип каталога для обмена: {$type}\n";
$list = CIBlock::GetList([], ['TYPE' => $type]);while ($iblock = $list->Fetch()) { printf("%4d %-28s товарный=%s\n", $iblock['ID'], $iblock['NAME'], CCatalog::GetByID($iblock['ID']) ? 'да' : 'нет');}Метаданные - это описание структуры: разделы, свойства, склады, типы цен. Обмен разбирает их до товаров, и любое несоответствие останавливает сеанс целиком.
Считаем склады и типы цен:
$stores = CCatalogStore::GetList([], ['ACTIVE' => 'Y'], []);$types = CCatalogGroup::GetList([], [], []);echo "складов {$stores}, типов цен {$types}\n";
// лимит редакции: пусто означает, что ограничения нетecho COption::GetOptionString('catalog', 'default_store_limit', '-'), "\n";Именно на складах и типах цен чаще всего упирается лимит редакции продукта. Число складов на сайте сверяют с числом в выгрузке 1С: обмен пытается завести их все сразу, и упирается в предел до того, как дойдёт до товаров.
Причины
-
Складов больше, чем позволяет редакция примерно 35% случаев
ПризнакВ тексте ошибки «Количество импортированных складов превышает разрешённое».
ПроверкаСчитаем склады в 1С и сверяем с лимитом своей редакции продукта в разделе «Обновление платформы».
Что делатьОставляем в выгрузке 1С только нужные склады либо переходим на редакцию с многоскладовым учётом.
-
В 1С есть группа номенклатуры без названия примерно 30% случаев
ПризнакВ тексте ошибки «Не введено название раздела».
ПроверкаИщем в справочнике номенклатуры 1С группы с пустым наименованием, включая помеченные на удаление.
Что делатьДаём группе название в 1С: со стороны сайта подставить его нечем, раздел создаётся по присланным данным.
-
В 1С сменили тип реквизита, который уже выгружался примерно 25% случаев
ПризнакВ тексте ошибки «Неверный тип блока» или упоминание конкретного свойства.
ПроверкаСверяем тип свойства на сайте с типом реквизита в 1С по совпадающему внешнему коду.
Что делатьПересоздаём свойство на сайте с нужным типом и прежним внешним кодом: обмен тип не меняет.
-
Обмен смотрит на нетоварный инфоблок примерно 10% случаев
ПризнакОшибка появилась сразу после смены настроек, до этого обмен работал.
ПроверкаПроверяем, что у целевого инфоблока включён торговый каталог, а его тип совпадает с настройкой обмена.
Что делатьВозвращаем в настройках модуля тип каталога, для которого заведён торговый каталог.
Если ничего не помогло
Разбираем присланный файл руками: метаданные лежат в отдельном узле в начале
import.xml, и по нему видно, что именно 1С считает структурой каталога.
# первые узлы файла: классификатор, группы, свойства, складыhead -c 4000 /home/bitrix/www/upload/1c_catalog/import*.xml | tr '>' '>\n' | grep -E '<(Классификатор|Группы|Свойства|Склад)'Чистим хвост неудачной попытки перед повтором:
# файлы прошлого сеанса мешают: обмен пытается доразобрать их и падает там жеmv /home/bitrix/www/upload/1c_catalog /home/bitrix/www/upload/1c_catalog.bakmkdir -p /home/bitrix/www/upload/1c_catalogchown bitrix:bitrix /home/bitrix/www/upload/1c_catalogКаталог пересоздаётся пустым, права возвращаются веб-серверу, и следующий сеанс начинается с чистого листа. Старые файлы держим до успешного обмена.
Если в файле пусто или он обрывается, проблема на стороне 1С и до разбора дело не дошло. Полный файл с корректной структурой при той же ошибке означает, что конфликт в базе сайта, а не в выгрузке: чаще всего это остатки прошлой неудачной попытки, и помогает обмен в чистый инфоблок с последующей сверкой.
Частые вопросы
Ошибка появляется только на боевом, на копии обмен проходит.
Значит дело в данных сайта, а не в файле 1С. На копии обычно другой набор свойств или другой инфоблок. Сверяют внешние коды свойств на обеих площадках: расхождение по XML_ID и даёт разный результат при одном и том же файле.
Можно ли пропустить метаданные и выгрузить только товары?
Нет. Метаданные описывают структуру, в которую кладутся товары, и обмен разбирает их первыми. Пропустить шаг нечем: без описания разделов и свойств товар некуда записывать.
После ошибки часть разделов уже создалась, это нормально?
Да, разбор идёт последовательно, и созданное до сбоя остаётся в базе. Повторный обмен допишет остальное, а дублей не будет: сопоставление идёт по внешнему коду.
Почему ошибка вернулась после переименования свойства в 1С?
Переименование в 1С часто меняет и внешний код реквизита. Обмен не находит прежнего свойства, пытается создать новое с тем же кодом на сайте и упирается в конфликт.
Смежное
- Обмен: выгрузка товаров и номенклатуры - оглавление подтемы
- Выгрузка свойств товара из 1С - типы свойств и внешние коды
- Обмен с 1С и HTTP - устройство обмена целиком