Исправляем ошибку 1с-битрикс «Не удалось обнаружить код вызова компонента»

Этот баг появляется довольно часто вне зависимости от версии битрикса. Внешне выглядит как окошко с текстом «Не удалось обнаружить код вызова компонента» и невозможность редактировать свойства\копировать шаблон. Далее будут приведены возможные причины возникновения ошибки и способы ее преодолеть.

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

Список факторов, при которых появлялась ошибка:

Несоответствие открывающих и закрывающих html тегов

Не отделенный вызов компонента, т.е. код подключения должен быть обособлен скобками <? ?>

Включенный в php флаг mbstring.func_overload = 2 при кодировке сайта cp1251

И совсем непонятные факторы без какой-либо причинно-следственной связи:
- имя класса «mail» в css
- тег ‹br /› перед вызовом компонента

Способы устранить ошибку

Удалить все комментарии в коде html

Явно указнать кодировку сайта в файле .htaccess, например «php_value mbstring.internal_encoding cp1251» или «php_value mbstring.internal_encoding UTF-8»

Вставить такую <?/**/?> конструкцию перед проблемным местом

Добавить и удалить несколько аналогичных компонентов рядом с неработающим

Заключить вызов компонента в отдельные <? ?>

Проверить и исправить расстановку html-тегов

Существует один разовый универсальный способ побороть ошибку. Разовость состоит в том, что по сути баг не исчезает, его можно временно «отключить» до перезагрузки страницы. Для этого открываем режим разработки bitrix в Mozilla (необходим установленный плагин FireBug), кликаем по иконке компонента и с помощью фаербага ищем нужную нам строчку — в ней будет присутствовать что-то вроде onclick=jsPopup.ShowDialog…

В середине этой строки ищем параметр src_line=число и меняем его на единицу (в общем случае нужное число можно посмотреть в исходном файле — оно будет равно номеру строки где заканчивается вызов компонента. Чаще всего достаточно отнять единицу от определенного автоматически, но неправильно битриксом).

Важно не перезагружать страницу! Теперь можно попробовать нажать на пункт меню — если число вписали правильно, откроется окно нужного действия.

Но самый лучший и правильный способ — обратиться в техподдержку. Как-никак продукт коммерческий и за недоработки надо отвечать…

Если вам понравилась статья, подписывайтесь на обновления блога по rss или присоединяйтесь в twitter

Поделиться ссылкой с друзьями:

Метки: ,

Категории: Bitrix

Комментарии (17)

  1. Да встречал такую петрушку, помогла запись в отдельные теги .

  2. Иногда бывает что иконка компоненты безумно дрожит при наведении на нее мышью. С чем это может быть связано?

  3. Встечалась такая ситуация когда несколько иконок друг над другом.

  4. Надежда:

    Спасибо, Алексей. Я новичок в битриксе. На ваш коротенький блог просто молюсь ))). Пишите, пожалуйста, еще. Вообще, если у вас будет время и желание — очень не хватает информации для новичков, как работать именно с кодом без визуального редактора. А многим разработчикам, я уверена, это ближе.

    Есть еще вопрос, с чем может быть связана (и как бороться) такая проблема: добавляешь визуальный компонент, а он вставляется просто как картинка, и в коде видно просто вставка изображения с иконкой компонента. Буду благодарна за ответ.

  5. Надежда, Вы обновили браузер Mozilla до последней версии, из-за этого такая ошибка. Разработчики Битрикс говорят, что менять придется очень много, поэтому быстрых обновлений не предвидится. Пока используем IE.

    Обновлять блог я сам бы рад, но не всегда хватает времени. Тем не менее, планы по развитию сайта есть, будем реализовавать:)

  6. Помог вариант с параметром php_value mbstring.internal_encoding cp1251 в .htaccess
    Спасибо!

  7. У меня ошибка появлялась если в HTML-коде были PHP-комментарии.

    Убрал — всё отлично стало работать, вернул — опять не работает.

  8. froZ:

    У меня баг пропал когда перед вызовом компонента вставил
    Мой моск отказывается понимать что ет за хрень такая….

  9. froZ:

    короче вставил пустые php комментарии…

  10. влад:

    у меня было это:
    «Не отделенный вызов компонента, т.е. код подключения должен быть обособлен скобками »
    Спасибо

  11. Серж:

    Мне помог только такой вариант:
    Это проблема редактора.
    Вам нужно в редакторе перейти в режим кода, всё скопировать, затем отменить изменения,а потом отредактировать файл не через редактор, а в режиме ПХП и вставить код. В большинстве случаев должно сработать!

  12. Xsanders:

    Мне помогло решение которое нашёл опытным путём.
    В админке откройте для редактирования в режиме php файл в котором размещён компонент, в моём случае header.php
    Также откройте его через ftp (на сервере как файл) и скопируйте оттуда код в форму редактирования php в админке.

  13. FEO:

    Мне не помогло php_value mbstring.internal_encoding cp1251 в .htaccess, добавил этот параметр в php.ini и заработало, но к сожалению не все хостинги разрешают такое

  14. Алексей:

    Мне помог вот этот способ.

    В файле /bitrix/php_interface/dbconn.php закомментировать строку

    define(«BX_UTF», true);

    //define(«BX_UTF», true);

    Я бы совсем не удалял данную строку, а просто комментировал на время разработки. Так как данная константа используется для обновления ядра и установки компонентов из marketplace.

  15. Алексей:
    22.01.2014 в 09:45
    Мне помог вот этот способ.

    В файле /bitrix/php_interface/dbconn.php закомментировать строку

    define(«BX_UTF», true);

    //define(«BX_UTF», true);

    Я бы совсем не удалял данную строку, а просто комментировал на время разработки. Так как данная константа используется для обновления ядра и установки компонентов из marketplace.
    —————————————————————————-

    Отлично мне тоже помог! Спасибо))

  16. Иван:

    Ошибка так же может возникать если в коде вызова компонента дописать параметры не объявленные в файле .parameters.php

  17. Установил последний 15 битрикс и первый же шаблон не заработал при вызове (новости). Оказалась причина в закомментированных строках в .htaccess:
    #php_value mbstring.func_overload 2
    #php_value mbstring.internal_encoding UTF-8
    Раскомментировал и все заработало. Но странно то, что во время установки, на шаге проверки параметров я создал .htaccess и там были записаны эти параметры, а после установки оказались закомментированы или перезаписан сам файл.
    Спасибо за статью, помогла!