Перейти к содержимому

Ошибка импорта метаданных при обмене с 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С: обмен пытается завести их все сразу, и упирается в предел до того, как дойдёт до товаров.

Причины

  1. Складов больше, чем позволяет редакция примерно 35% случаев

    ПризнакВ тексте ошибки «Количество импортированных складов превышает разрешённое».

    ПроверкаСчитаем склады в 1С и сверяем с лимитом своей редакции продукта в разделе «Обновление платформы».

    Что делатьОставляем в выгрузке 1С только нужные склады либо переходим на редакцию с многоскладовым учётом.

  2. В 1С есть группа номенклатуры без названия примерно 30% случаев

    ПризнакВ тексте ошибки «Не введено название раздела».

    ПроверкаИщем в справочнике номенклатуры 1С группы с пустым наименованием, включая помеченные на удаление.

    Что делатьДаём группе название в 1С: со стороны сайта подставить его нечем, раздел создаётся по присланным данным.

  3. В 1С сменили тип реквизита, который уже выгружался примерно 25% случаев

    ПризнакВ тексте ошибки «Неверный тип блока» или упоминание конкретного свойства.

    ПроверкаСверяем тип свойства на сайте с типом реквизита в 1С по совпадающему внешнему коду.

    Что делатьПересоздаём свойство на сайте с нужным типом и прежним внешним кодом: обмен тип не меняет.

  4. Обмен смотрит на нетоварный инфоблок примерно 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.bak
mkdir -p /home/bitrix/www/upload/1c_catalog
chown bitrix:bitrix /home/bitrix/www/upload/1c_catalog

Каталог пересоздаётся пустым, права возвращаются веб-серверу, и следующий сеанс начинается с чистого листа. Старые файлы держим до успешного обмена.

Если в файле пусто или он обрывается, проблема на стороне 1С и до разбора дело не дошло. Полный файл с корректной структурой при той же ошибке означает, что конфликт в базе сайта, а не в выгрузке: чаще всего это остатки прошлой неудачной попытки, и помогает обмен в чистый инфоблок с последующей сверкой.

Частые вопросы

Ошибка появляется только на боевом, на копии обмен проходит.

Значит дело в данных сайта, а не в файле 1С. На копии обычно другой набор свойств или другой инфоблок. Сверяют внешние коды свойств на обеих площадках: расхождение по XML_ID и даёт разный результат при одном и том же файле.

Можно ли пропустить метаданные и выгрузить только товары?

Нет. Метаданные описывают структуру, в которую кладутся товары, и обмен разбирает их первыми. Пропустить шаг нечем: без описания разделов и свойств товар некуда записывать.

После ошибки часть разделов уже создалась, это нормально?

Да, разбор идёт последовательно, и созданное до сбоя остаётся в базе. Повторный обмен допишет остальное, а дублей не будет: сопоставление идёт по внешнему коду.

Почему ошибка вернулась после переименования свойства в 1С?

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

Смежное

Первоисточник