Поиск по расширениям 1С (.cfe)
Расширения .cfe в Расширенной редакции индексируются вместе с основной конфигурацией. Метка [Расш] в результатах поиска. Что происходит под капотом.
Расширения конфигурации (.cfe) это удобный механизм для доработки типовой без снятия её с поддержки. Но когда расширений в базе больше двух, разобраться где какой код становится сложно. Особенно если AI-ассистент не видит расширений и предлагает решения только на основе основной конфигурации.
В Расширенной редакции расширения индексируются вместе с конфигурацией. Все запросы поиска и метаданных учитывают код расширений, а в результатах помечают принадлежность.
Что индексируется
Расширения подгружаются как .cfe файлы или напрямую с подключённой базы. Из файла извлекаются BSL-модули и метаданные расширения. Каждый модуль попадает в Bleve-индекс с дополнительными полями: имя расширения и тип (общий модуль, модуль формы, модуль объекта, и так далее).
Хранение и парсинг отделены от индексации. Модуль из расширения и модуль из основной конфигурации в индексе живут на одинаковых правах: разница только в метках.
Метка [Расш]
В выдаче поиска модули из расширений получают префикс [Расш] и имя расширения. Например, при поиске процедуры ПолучитьДанные AI увидит результаты вида:
ОбщийМодуль.РаботаСДокументами.ПолучитьДанные
[Расш] МойФункционал.ОбщийМодуль.РаботаСДокументамиДополнительно.ПолучитьДанные
[Расш] КастомОтчеты.ОбщийМодуль.РаботаСДокументами.ПолучитьДанные
Видно, что в основе процедура определена один раз, и поверх неё два расширения добавили свои варианты. Без метки эту картину пришлось бы собирать вручную через Конфигуратор.
Когда обновляется
Индекс расширений обновляется при подключении расширения к базе и при изменении модуля внутри расширения. Принудительно перечитать список и пересобрать индекс можно действием refresh_extensions инструмента system ({"action": "refresh_extensions"}). Это нужно если работаешь с базой через файловое подключение и в ней появилось новое расширение в обход стандартного жизненного цикла.
Поиск только по расширениям
Если нужно сузить выдачу до расширений, в вызове code_search с action: "text" задаётся параметр category со значением Расширения:
{"tool": "code_search", "action": "text", "query": "ПолучитьДанные", "category": "Расширения", "mode": "smart"}
Слово принимается в четырёх написаниях: Расширения, Расширение, Extensions, Extension. Регистр не важен. Это то же множество написаний, которое понимает параметр filter действия code_read с action: "metadata_tree", поэтому написание, выученное на одном инструменте, работает и на другом.
Это удобно когда ищешь именно кастомные доработки и не хочешь перебирать тысячи модулей основной конфигурации.
Отбор по расширениям работает не во всех режимах поиска одинаково. Режимы smart, regex и exact спрашивают индекс про пространство имён расширений напрямую и отвечают по нему полностью. Векторные режимы Профессиональной редакции устроены иначе: они ранжируют всю конфигурацию целиком, а отбор применяется уже к их ответу.
mode: "hybrid"вместе сcategory: "Расширения"не выполняется вовсе. Ответ был бы неполным, а число совпадений неверным, поэтому вызов отклоняется с объяснением и предложением повторить его сmode: "smart"и той жеcategory.mode: "semantic"отвечает, но его список расширений может оказаться неполным. Когда так происходит, к ответу добавляется оговорка с тем же советом: повторить запрос сmode: "smart"и той жеcategory.
Ограничения
Расширения должны быть подключены к базе и активированы. Заблокированные или неактивные расширения в индекс не попадают: их код может быть несовместим с текущей версией основной конфигурации, и индексирование привело бы к шуму.
Внешние обработки и отчёты (.epf, .erf) расширениями не считаются, для них работает отдельный механизм.
Где это полезно
Внедрения с десятками расширений, типичные для крупных франчайзи. Аудит чужой базы, где нужно быстро понять что доработано поверх типовой. Поиск регрессий после обновления типовой: какие модули в расширениях ссылаются на изменившиеся API основной конфигурации.