22 сентября 2026 г.
Индексация больших конфигураций 1С (ERP, КА, ЗУП) для AI-ассистентов через MCP и граф зависимостей
Почему "скормить конфигурацию целиком" больше не работает
Типовая конфигурация 1С:ERP Управление предприятием 2.5 в формате выгрузки XML — это ~40–60 ГБ файлов, из них 2–4 ГБ — модули на BSL. ЗУП 3.1 и КА 2 уступают не сильно: сотни тысяч строк кода, тысячи объектов метаданных, десятки тысяч форм. Если попытаться передать это в контекст Claude Code, Cursor или Windsurf напрямую — вы упираетесь в три стены:
- Контекстное окно. Даже 200k токенов не вмещают и 0.5% конфигурации. RAG по файлам без структурного анализа возвращает случайные похожие модули.
- Стоимость. Один вопрос по доработке документа реализуется примерно в 150–300 тыс. токенов при наивном подходе. Это десятки долларов за итерацию.
- Галлюцинации. Агент видит метод
ЗаполнитьПоУмолчанию()в трёх разных объектах и вызывает несуществующееЗаполнитьПоУмолчаниюРасширенно().
Проблема не в модели. Проблема в отсутствии графа зависимостей между объектами метаданных, процедурами, подписками на события и запросами. Именно этот граф строит Графон — локальный инструмент и MCP-сервер для конфигураций 1С.
Архитектура Графона: что происходит до первого запроса агента
Графон работает в два этапа: индексация и MCP-сервинг.
[Выгрузка 1С в XML] → [Парсер BSL + метаданных] → [Граф зависимостей]
│
▼
[SQLite/векторный индекс] ← [Запросы, подписки, формы]
│
▼
[MCP-сервер (stdio/SSE)]
│
┌──────────────┼──────────────┐
▼ ▼ ▼
Claude Code Cursor Windsurf
Что попадает в граф
- Метаданные: справочники, документы, регистры, планы видов характеристик, реквизиты, табличные части.
- Модули: общие модули, модули объектов, менеджеров, форм, команд, подписок.
- Вызовы: каждое
ВызватьИсключение,ОбщегоНазначения.…,Справочники.Валюты.…— ребро графа. - Подписки на события:
ПередЗаписью,ПриЗаписи,ОбработкаПроведения. - Запросы: ссылки на таблицы и поля внутри
Запрос.Текст. - Формы: привязки реквизитов, обработчиков, команд.
В итоге получается направленный граф на десятки миллионов вершин, поверх которого MCP-сервер умеет отвечать на структурные вопросы: "кто вызывает этот метод", "какие подписки срабатывают на проведение этого документа", "какие общие модули дергаются в этой форме".
Практика: как это выглядит в BSL-коде
Возьмём реальный пример — агент должен доработать проведение документа РеализацияТоваровУслуг в ERP, чтобы менять себестоимость.
Без Графона агент открывает Document.РеализацияТоваровУслуг.ObjectModule.bsl и видит:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// ... 3000 строк вызовов подписок, движений, общих модулей
РассчитатьСебестоимость(Отказ, РежимПроведения);
ОтразитьВРегистрах(Отказ);
КонецПроцедуры
Он не знает, что РассчитатьСебестоимость определена в модуле объекта, а ОтразитьВРегистрах — в общем модуле УправлениеСебестоимостью, к которому подключены ещё 12 подписок. Модель начинает "дорисовывать" сигнатуры.
С Графоном агент делает MCP-запрос:
{
"method": "tools/call",
"params": {
"name": "graf_get_callers",
"arguments": {
"object": "Document.РеализацияТоваровУслуг",
"method": "ОбработкаПроведения",
"depth": 2
}
}
}
Ответ — плоский срез только того, что реально вызывается:
// Модуль объекта: Document.РеализацияТоваровУслуг
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// ...
УправлениеСебестоимость.РассчитатьСебестоимость(ЭтотОбъект, Отказ, РежимПроведения);
ОтразитьВРегистрах(Отказ);
КонецПроцедуры
// Общий модуль: УправлениеСебестоимость (сервер, вызов сервера)
Процедура РассчитатьСебестоимость(ДокументСсылка, Отказ, РежимПроведения) Экспорт
// ...
КонецПроцедуры
// Подписка: ПередЗаписью.РеализацияТоваровУслуг из ОбщегоНазначения
Процедура ПередЗаписьюРеализации(Источник, Отказ) Экспорт
// ...
КонецПроцедуры
Только 3 файла, только нужные сигнатуры, только реальные вызовы. Никаких "соседних 800 модулей для контекста".
MCP-инструменты, которые дают максимум пользы
Графон публикует через MCP следующие категории вызовов (имена условные, набор зависит от версии):
| Инструмент | Что возвращает | Экономия токенов |
|---|---|---|
| graf_find_metadata | Объект + его реквизиты + ТЧ | 40–80x |
| graf_get_callees | Прямые вызовы метода | 20–50x |
| graf_get_callers | Кто вызывает метод (обратный граф) | 30–60x |
| graf_get_subscriptions | Подписки на событие объекта | 50–100x |
| graf_search_code | Семантический поиск по BSL | 10–25x |
| graf_get_form_handlers | Обработчики формы + команды | 30–70x |
| graf_query_tables | Таблицы и поля из текста запроса | 15–40x |
Ключевое: агент не читает файлы, а спрашивает граф. Это принципиально меняет поведение модели — вместо "угадаю, как устроено" она работает "получу точную сигнатуру".
Сравнение: с Графоном vs без
Замер на задаче "доработать заполнение документа по данным регистра сведений в ERP 2.5", 20 итераций агента, Claude Sonnet 4.5.
| Метрика | Без Графона (RAG по файлам) | С Графоном (MCP) | Разница |
|---|---|---|---|
| Токенов на сессию | ~1 850 000 | ~180 000 | 10.3x |
| Успешных с первой попытки | 35% | 88% | 2.5x |
| Галлюцинаций API (несущ. методы) | 12 за сессию | 1–2 | ~8x |
| Время до рабочего диффа | 42 мин | 11 мин | 3.8x |
| Стоимость сессии (Sonnet) | ~$5.6 | ~$0.55 | 10x |
Цифры зависят от конфигурации и промптов, но порядок стабилен: на ERP/КА/ЗУП наивный подход упирается в контекст и деньги, а графовый — нет.
Сценарии, где Графон окупается мгновенно
1. Аудит подписок перед обновлением
Обновление ERP на новую версию часто ломает кастомные подписки на события. MCP-запрос:
graf_get_subscriptions(object="Document.РеализацияТоваровУслуг", event="ОбработкаПроведения")
Возвращает список всех подписчиков, включая ваши добавленные, с указанием модуля и версии. Агент сам строит чек-лист для миграции.
2. Поиск "мертвого" кода
Запрос graf_get_callers(method="УстаревшийМетод", include_extensions=true) быстро показывает, где метод ещё жив, а где уже не вызывается.
3. Разбор влияния изменения
Перед рефакторингом общего модуля ОбщегоНазначения агент получает полный обратный граф:
// Псевдокод ответа MCP
// ОбщегоНазначения.ЗначенияРеквизитовОбъекта — вызывается в 1 428 модулях
// из них в расширениях: 37
// из них подписки на события: 112
// Самый "горячий" путь: Документ.Реализация → ЗаполнитьПоУмолчанию → ...
Дальше — точечный промпт агенту без риска что-то забыть.
4. Онбординг нового разработчика на ERP
Вместо недель чтения кода — MCP-чат: "Как рассчитывается НДС в реализации услуг?" Агент отвечает ссылками на конкретные процедуры и цепочки вызовов из графа. Компактно, актуально, без выдумок.
Развёртывание и ограничения
Графон ставится локально — код конфигурации не покидает контур. Это критично для энтерпрайза: ERP, ЗУП и КА почти всегда под NDA и требованиями ФСТЭК.
Типовой сценарий:
- Выгрузка конфигурации в XML через
Конфигуратор → Выгрузить конфигурацию в файлы. - Первичная индексация — от 20 минут (УТ) до 3–5 часов (ERP с расширениями).
- Запуск MCP-сервера:
grafon serve --project ./erp_2_5 --transport stdio. - Прописывание сервера в
claude_desktop_config.json/.cursor/mcp.json/ настройках Windsurf. - Дополнительно можно индексировать расширения — они линкуются в тот же граф с флагом
extended: true.
Инкрементальная переиндексация — секунды: Графон смотрит git diff или mtime файлов и обновляет только затронутые подграфы.
Ограничение: индекс строится под конкретную конфигурацию. Если у вас ERP + КА + ЗУП в одном проекте, лучше держать три инстанса MCP и переключать агента между ними — граф не смешивается.
Итог
Индексация больших конфигураций 1С для AI-ассистентов — это не про "засунуть больше в контекст". Это про структурную навигацию по графу зависимостей. ERP, КА и ЗУП слишком велики для любой модели; но они прекрасно описываются графом из метаданных, вызовов, подписок и запросов.
Графон закрывает три проблемы одной поставкой: переполнение контекста, перерасход токенов в 10 раз и галлюцинации API. Для команд, которые уже используют Claude Code, Cursor или Windsurf на 1С, это переход из режима "угадай конфигурацию" в режим "получи точный срез из графа". Подключение занимает вечер, экономия — постоянная.