Все статьи

22 сентября 2026 г.

Индексация больших конфигураций 1С (ERP, КА, ЗУП) для AI-ассистентов через MCP и граф зависимостей

Почему "скормить конфигурацию целиком" больше не работает

Типовая конфигурация 1С:ERP Управление предприятием 2.5 в формате выгрузки XML — это ~40–60 ГБ файлов, из них 2–4 ГБ — модули на BSL. ЗУП 3.1 и КА 2 уступают не сильно: сотни тысяч строк кода, тысячи объектов метаданных, десятки тысяч форм. Если попытаться передать это в контекст Claude Code, Cursor или Windsurf напрямую — вы упираетесь в три стены:

  1. Контекстное окно. Даже 200k токенов не вмещают и 0.5% конфигурации. RAG по файлам без структурного анализа возвращает случайные похожие модули.
  2. Стоимость. Один вопрос по доработке документа реализуется примерно в 150–300 тыс. токенов при наивном подходе. Это десятки долларов за итерацию.
  3. Галлюцинации. Агент видит метод ЗаполнитьПоУмолчанию() в трёх разных объектах и вызывает несуществующее ЗаполнитьПоУмолчаниюРасширенно().

Проблема не в модели. Проблема в отсутствии графа зависимостей между объектами метаданных, процедурами, подписками на события и запросами. Именно этот граф строит Графон — локальный инструмент и 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 и требованиями ФСТЭК.

Типовой сценарий:

  1. Выгрузка конфигурации в XML через Конфигуратор → Выгрузить конфигурацию в файлы.
  2. Первичная индексация — от 20 минут (УТ) до 3–5 часов (ERP с расширениями).
  3. Запуск MCP-сервера: grafon serve --project ./erp_2_5 --transport stdio.
  4. Прописывание сервера в claude_desktop_config.json / .cursor/mcp.json / настройках Windsurf.
  5. Дополнительно можно индексировать расширения — они линкуются в тот же граф с флагом extended: true.

Инкрементальная переиндексация — секунды: Графон смотрит git diff или mtime файлов и обновляет только затронутые подграфы.

Ограничение: индекс строится под конкретную конфигурацию. Если у вас ERP + КА + ЗУП в одном проекте, лучше держать три инстанса MCP и переключать агента между ними — граф не смешивается.

Итог

Индексация больших конфигураций 1С для AI-ассистентов — это не про "засунуть больше в контекст". Это про структурную навигацию по графу зависимостей. ERP, КА и ЗУП слишком велики для любой модели; но они прекрасно описываются графом из метаданных, вызовов, подписок и запросов.

Графон закрывает три проблемы одной поставкой: переполнение контекста, перерасход токенов в 10 раз и галлюцинации API. Для команд, которые уже используют Claude Code, Cursor или Windsurf на 1С, это переход из режима "угадай конфигурацию" в режим "получи точный срез из графа". Подключение занимает вечер, экономия — постоянная.