Quad.Wiki
Ошибка "Элемент с таким символьным кодом уже существует"
Проблема
При импорте из файла XML (или программой QuadSync) сайт выдает ошибку "Элемент с таким символьным кодом уже существует"
Обратите внимание, что именно "Элемент" существует, а не "Раздел" или что-то другое, для раздела есть другая статья.
Решение
Ошибка появляется из-за того, что выгружается товар на сайт, у которого задан Символьный код (url) такой же, как у товара на сайте с таким же символьным кодом, но с другим Внешним кодом. Такая ситуация может быть из-за:
1. наличия в вашей базе нескольких товаров с одинаковым названием (не имеет значения, что они в разных группах)
2. наличия в базе программы нескольких товаров с одинаковым Внешним кодом и разным символьным кодом (как правило, при выгрузке на сайт используется для синхронизации используется поле Код, которое попадает во Внешний код товара, нужно найти в программе дубликаты по полю Код)
3. из-за изменений Названия товара в программе или Внешнего кода на сайте или в программе, что привело к расхождению с сайтом - нужно сделать, чтобы в программе и на сайте были одинаковые
- Определить из-за какого товара проблема
- Исправить у этого товара символьный код и/или внешний код
Если у вас не получается "на глаз" найти дублирующийся товар, или проблемный товар, то возможны следующие варианты:
1. Если вы выгружаете товары на сайт ежедневно, то проблема, скорее всего связана с товаром, который у вас добавился сегодня или связана с теми изменениями, которые вы делали сегодня на сайте. Увидеть дубль в программе можно через окно Поиск дубликатов.
Выберите Код, а затем Название, и найдите дубли. Товаров с дублирующимся кодом не должно быть вообще. Если они есть - значит вы что-то делаете не так или в программе что-то настроено не так и нужно разбираться почему так произошло, а не просто поменять Код у товара на другой. Если же дублируется название, то нужно переименовать товар (добавить например в название цвет или какой-то другой текст, который отличает один из дублирующихся товаров от другого) или просто удалить дубликаты соответствующей кнопкой в этом окне (при удалении дубликатов связи из удаляемого товара переносятся в товар, который остается, поэтому их вручную не нужно переносить и они не пропадут).
2. Если не получается найти проблемный товар, а в сообщении ошибки не указано название или внешний код или символьный код (битрикс на момент подготовки данной статьи не умел показывать эту информацию, а просто выдавал ошибку, по которой не возможно определить с каким товаром проблемы), то нужно изменить исходники сайта, чтобы он стал отображать более детально ошибку. При описанных ниже изменениях сломать на сайте что-то очень сложно, но, в любом случае, мы не отвечаем за то, что сайт ваш поломается или случится еще что-нибудь (если боитесь сами, то можете написать в службу поддержки битрикса, пусть они вам скажут на каком товаре появляется ошибка, ответа вы не получите, но, возможно, они через пару лет сделают нормальный информативный вывод ошибок). Можете так же сделать бекап сайта, перед тем как менять исходный код. Для включения в вывод ошибки информации о товаре нужно сделать следующее:
зайдите в админку сайта в раздел Контент / Структура сайта / Файлы и папки
перейдите в папку bitrix\modules\iblock\classes\general\ найдите файл iblockelement.php и откройте его для редактирования
скопируйте текст в блокнот и найдите в нем слово IBLOCK_DUP_ELEMENT_CODE, оно будет примерно на 4282-ой строке (со временем позиция эта может меняться). Рекомендуем вместо стандартного блокнота установить программу Notepad++ - в ней есть нумерация строк и работать более комфортно, чем в обычном блокноте.
замените всю эту строку
$this->LAST_ERROR .= GetMessage("IBLOCK_DUP_ELEMENT_CODE")."<br>";
на такую:
$this->LAST_ERROR .= GetMessage("IBLOCK_DUP_ELEMENT_CODE")."<br> CODE: ".$arFields["CODE"]."<br> ID: ".intval($ID)."<br> IBLOCK_ID: ".$IBLOCK_ID;
после этого скопируйте текст обратно в битрикс (или же можно, после того как нашли строку в блокноте, вернуться в админку битрикса и там по номеру перейти к этой строке и внести изменения) и сохраните.
Теперь сделайте импорт XML или заново запустите обновление в QuadSync - в результате в сообщении ошибки будет уже указан символьный и внешний коды товара, с которым есть проблемы
3. После того, как нашли, с каким из товаров проблемы, нужно исправить его символьный код либо удалить дублирующийся товар с сайта.
Если у вас и на сайте и в программе товар только один, и символьный код совпадает и в программе и на сайте (символьный код формируется из названия товара, и он будет совпадать если совпадает название товара на сайте и в программе), то это значит, что отличается Внешний код. Посмотрите на сайте внешний код товара (зайти в карточку товара) и разберитесь, почему в программе этот внешний код отличается.
Если вы не находите поле Внешний код в карточке товара, значит скорее всего нужно включить его отображение в разделе битрикса Настройки / Настройки продукта / Настройки модулей / Информационные блоки
После изменений сделайте полное обновление.
Другие материалы