19 сентября 2026 г.
Локальный граф метаданных 1С vs полная выгрузка в файлы: почему ИИ-агент тонет в XML и как это исправить
Почему полная выгрузка конфигурации 1С в файлы перестала работать
Классический сценарий: конфигурацию выгружают в XML через Конфигуратор → Выгрузить конфигурацию в файлы или 1С:Хранилище → Выгрузить в файлы, подключают папку к Cursor, Windsurf или Claude Code и ждут чуда. Чуда не происходит. Типовая ERP 2.5 в выгрузке — это 4–7 ГБ XML, 250 000+ файлов, десятки тысяч модулей BSL, десятки миллионов строк кода на встроенном языке.
ИИ-агент, которому дали такой репозиторий, сталкивается с тремя стенами:
- Переполнение контекстного окна. Даже 200K токенов не вмещают модуль
ОбщегоНазначения,БухгалтерскийУчетиУправлениеСкладомодновременно. Агент выбирает случайные фрагменты и теряет связи. - Перерасход токенов. Каждый запрос «найди, кто вызывает
ПровестиДокумент» превращается в чтение сотни связанных модулей. Реальная стоимость сессии вырастает в 5–10 раз. - Галлюцинации. Без графа вызовов агент путает методы менеджеров объектов с общими модулями, изобретает несуществующие процедуры, «вспоминает» сигнатуры из ERP 2.4 при работе с 2.5.
Полная выгрузка в файлы — это не структура знаний, это свалка исходников. Она годится для Git и диффов, но не для ИИ-агента.
Что такое локальный граф метаданных
Локальный граф метаданных — это индекс, построенный один раз по выгрузке 1С и хранящий не файлы, а связи между сущностями. Вершины графа:
- объекты метаданных (
Справочник.Номенклатура,Документ.РеализацияТоваровУслуг,Обработка.ВыгрузкаТоваров); - модули (объект, менеджер, форма, общий модуль, HTTP-сервис);
- процедуры и функции BSL с сигнатурами и параметрами;
- подписки на события (
ПередЗаписью,ПриПроведении,ПриСозданииНаСервере); - запросы и используемые в них таблицы;
- роли, права, RLS-шаблоны;
- вызовы сервер↔клиент (директивы
&НаСервере,&НаСервереБезКонтекста,&НаКлиенте).
Ребра графа — это: ВЫЗЫВАЕТ, ВЫЗЫВАЕТСЯ_ИЗ, ПОДПИСАН_НА, ЧИТАЕТ_ТАБЛИЦУ, ПЕРЕОПРЕДЕЛЯЕТ, ВЫГРУЖАЕТ_В_ФОРМУ, ОБРАЩАЕТСЯ_К_HTTP.
Grafon — это локальный инструмент и MCP-сервер, который строит такой граф по выгрузке конфигурации 1С и отдаёт его ИИ-агенту через протокол Model Context Protocol. Агент больше не читает файлы — он делает точечные запросы к графу.
Архитектура Графона
[Выгрузка 1С в файлы]
│
▼
[Парсер XML метаданных + BSL AST]
│
▼
[Индексатор: вершины + рёбра → локальное хранилище]
│
▼
[MCP-сервер Grafon] ──stdio/SSE──► Claude Code / Cursor / Windsurf / Roo Code
Этапы:
- Индексация. Графон разбирает
Configuration.xml,.mdобъектов,Ext/ObjectModule.bsl,Forms//Ext/Form/Module.bsl. Строит дерево метаданных и AST модулей. - Разрешение связей. Сопоставляет вызовы
ОбщегоНазначения.ЗначениеРеквизитаОбъекта()с реальными определениями, разворачивает подписки, определяет, какие формы дёргают какие экспортные функции. - Хранение. Локальный индекс (SQLite + графовые adjacency-таблицы) на диске разработчика. Никакой телеметрии, никакой отправки кода на сервер.
- MCP-слой. Набор инструментов, которые агент вызывает как обычные функции.
MCP-инструменты Графона в работе
Реальные запросы, которые делает Claude Code или Cursor:
{
"method": "tools/call",
"params": {
"name": "grafon.resolve_symbol",
"arguments": {
"query": "ОбщегоНазначения.ЗначениеРеквизитаОбъекта",
"configuration": "ERP25"
}
}
}
Ответ — сигнатура, файл, строка, список вызывающих:
{
"symbol": "ОбщегоНазначения.ЗначениеРеквизитаОбъекта",
"signature": "(Ссылка, ИмяРеквизита, ТолькоПоСсылке = Ложь) Экспорт",
"definedIn": "CommonModules/ОбщегоНазначения/Ext/Module.bsl:1487",
"callers": 412,
"modules": ["Документ.РеализацияТоваровУслуг", "Обработка.ЗакрытиеМесяца", "..."]
}
Ключевые инструменты MCP:
grafon.find_object— найти объект метаданных по имени или описанию.grafon.slice— выдать точный срез: N вызывающих + саму процедуру, без остального модуля.grafon.callers— все, кто вызывает функцию (включая через подписки).grafon.subscriptions— какие подписки срабатывают наПриПроведениидокумента.grafon.query_tables— какие таблицы читает конкретный запрос.grafon.diff_impact— что сломается, если поменять сигнатуру.
Пример сценария правки:
// Агент хочет изменить процедуру
// и запрашивает у Графона контекст
// grafon.slice(module="Документ.РеализацияТоваровУслуг.МодульОбъекта",
// proc="ОбработкаПроведения",
// depth=2)
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Товары.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.Товары.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Количество = ТекСтрокаТовары.Количество;
КонецЦикла;
// Подписка: Документы.РеализацияТоваровУслуг.ПередЗаписью
// Модуль подписки: ОбщегоНазначения.Подсистемы.Продажи
EndПроцедуры
Агент получает ровно этот фрагмент и соседние вызовы, а не весь 4 000-строчный модуль.
Сравнение: полная выгрузка vs Графон
| Метрика | Полная выгрузка в файлы | Локальный граф Графон |
|---|---|---|
| Размер структуры, попадающей в контекст | 4–7 ГБ, 250 000+ файлов | индексирован локально, в контекст идут килобайты |
| Токенов на типовую задачу «найти и поправить процедуру» | 180 000 – 340 000 | 12 000 – 22 000 |
| Время до первого ответа агента (ERP 2.5) | 6–15 мин (сканирование репо) | 4–20 сек (MCP-запрос) |
| Галлюцинации сигнатур | высокие | практически исключены (граф знает реальные определения) |
| Стоимость сессии Claude Sonnet | ×1 (базовая) | ×0.1 (в 10 раз меньше токенов) |
| Работа с подписками на события | ручной grep, ошибки | точный список подписок и их модулей |
| Кроссплатформенность | нужен Git + IDE | MCP работает в Claude Code, Cursor, Windsurf, Roo Code |
| Приватность | файлы остаются у вас | индекс строится локально, код не покидает машину |
Цифры по токенам и времени — усреднённые замеры на ERP 2.5.11 и УТ 11.4 с контекстом Claude Sonnet 200K.
Практические сценарии
1. Правка общих модулей
Задача: оптимизироватьОбщегоНазначения.ЗначениеРеквизитаОбъекта. Без графа вы рискуете «сломать» 412 вызывающих. Графон показывает полный список и типы параметров вызовов — можно безопасно менять.
2. Анализ воздействия перед обновлением
Перед переходом на релиз ERP 2.5 → 2.6 агент запрашиваетgrafon.diff_impact и получает список процедур, где изменились сигнатуры.
3. Разбор подписок на события
Классическая боль — найти, кто на самом деле «прилетает» вПередЗаписью документа. Графон отдаёт все подписки, порядок срабатывания и модули.
4. Генерация тестов
Имея граф, агент пишет модульные тесты (в стиле YAxUnit), опираясь на реальные сигнатуры и фикстуры данных.5. Онбординг
Новый разработчик в команде задаёт вопрос «как проводится реализация?» через Claude Code + Графон и получает точный путь вызовов, а не 200 страниц документации.Как запустить локальный граф
# 1. Выгрузить конфигурацию в файлы из Конфигуратора
2. Указать путь Графону
grafon index --src ./erp25_xml --name ERP25
3. Подключить MCP-сервер к Claude Code
claude mcp add grafon --command "grafon mcp --config ./erp25.grafon"
Дальше в Cursor / Windsurf / Roo Code прописывается тот же MCP-эндпоинт. Агент сам вызывает инструменты Графона, когда нужно «посмотреть контекст».
Итог
«Полная выгрузка в файлы» и «локальный граф метаданных» решают разные задачи. Выгрузка — это формат хранения исходников для Git и сборки. Граф — это формат знаний для ИИ-агента. Если вы уже платите за токены Claude, Cursor или Windsurf в проекте на ERP, УТ, ЗУП или КА — переход на локальный граф Графон даёт 10-кратное сокращение токенов, секунды вместо минут на ответ и предсказуемое поведение агента без галлюцинаций. Выгрузку оставьте, граф — подключите сверху.