18 сентября 2026 г.
Как ИИ-агенту разобраться в типовой конфигурации УТ 11: граф зависимостей, MCP и экономия токенов в 10 раз
Почему ИИ-агент «слепнет» на типовой УТ 11
Типовая «Управление торговлей 11» — это не один проект, а гигантский монолит из нескольких тысяч объектов метаданных. В поставке УТ 11.5 содержится:
- ~3 500 объектов метаданных (справочники, документы, регистры, общие модули, обработки);
- свыше 700 общих и объектных модулей;
- более 1 200 000 строк кода на языке BSL;
- выгрузка в XML-файлы конфигурации — это 4–8 ГБ на диске.
Когда вы открываете такой проект в Claude Code, Cursor или Windsurf и просите: «Найди, где формируется себестоимость товаров в документе РеализацияТоваровУслуг», — происходит катастрофа:
- Агент начинает индексировать всё дерево и наполнять контекст «на всякий случай».
- Контекстное окно (даже 200k токенов у Claude) переполняется уже на этапе чтения двух-трёх модулей.
- Агент начинает галлюцинировать: выдумывает методы
РассчитатьСебестоимость(), которых нет, путает модулиМенеджерДокументаиМодульОбъекта. - Стоимость одного запроса вырастает в 8–15 раз из-за кэш-промахов и повторных чтений.
Проблема не в модели. Проблема в том, что языковые модели не умеют эффективно навигировать по конфигурации, в которой больше связей, чем файлов.
Что именно нужно ИИ-агенту от УТ 11
Агенту не нужно «всё». Ему нужен точный срез — минимальное подмножество метаданных, достаточное для ответа на вопрос:
| Что спрашивает разработчик | Что реально нужно агенту |
|---|---|
| Где рассчитывается себестоимость? | 1 процедура + 3–5 вызываемых функций + подписки на события |
| Какие реквизиты у документа РеализацияТоваровУслуг? | 1 объект метаданных + справочники типов его реквизитов |
| Кто подписан на ПередЗаписью у регистра «ТоварыНаСкладах»? | Список подписок + 2–4 обработчика |
| Как устроен учёт НДС в реализации? | Граф вызовов от формы до регистров |
Проблема в том, что связи между этими сущностями неявные: часть — в XML метаданных, часть — в BSL-коде (ОбщегоНазначения.ЗначениеРеквизитаОбъекта(), ПодключаемыеКоманды, ПодпискиНаСобытия). Без графа зависимостей агент вынужден открывать всё подряд.
Графон: локальный MCP-сервер поверх графа 1С
[Графон](https://grafonbase.ru) — это локальный инструмент, который один раз анализирует конфигурацию (ERP, УТ, ЗУП, КА, отраслевые) и строит граф зависимостей метаданных, функций, процедур, подписок и запросов. Далее этот граф публикуется как MCP-сервер — стандартный протокол, с которым умеют работать Claude Code, Cursor, Windsurf, Roo Code.
Ключевая идея: агент больше не читает файлы напрямую. Он задаёт вопрос графу — и получает ровно тот набор файлов и сигнатур, который нужен.
Архитектура
┌────────────────────┐ MCP (stdio / SSE) ┌──────────────────────┐
│ Claude Code / │ ─────────────────────────────▶ │ Графон MCP-server │
│ Cursor / Windsurf │ ◀───────────────────────────── │ │
└────────────────────┘ JSON: сигнатуры, file paths └──────────┬───────────┘
│
┌─────────────▼────────────┐
│ Локальный граф Rust/SQLite │
│ • objects (3 500) │
│ • modules (700+) │
│ • procedures (120 000+) │
│ • calls / subscriptions │
│ • query references │
└─────────────┬────────────┘
│
┌─────────────▼────────────┐
│ XML + BSL исходники УТ 11 │
└──────────────────────────┘
Сервер работает полностью локально: исходники УТ 11, граф и индекс не покидают ваш компьютер. В облако уходят только срезы, которые агент явно запрашивает.
Пример: найти себестоимость в УТ 11 — без Графона и с ним
Допустим, запрос: «Почему в документе РеализацияТоваровУслуг в проводках неверная себестоимость?».
Сценарий без Графона
Агент Claude Code получает задачу и делает так:
Read: Documents/РеализацияТоваровУслуг/Ext/ObjectModule.bsl (~4 200 строк)
Read: Documents/РеализацияТоваровУслуг/Forms/ФормаДокумента/... (~2 800 строк)
Read: CommonModules/УправлениеСебестоимостью/Ext/Module.bsl (~11 500 строк)
Read: CommonModules/УчетЗатрат/Ext/Module.bsl (~7 300 строк)
Grep: "Себестоимость" across Documents/ (все документы)
Read: Documents/Прочее... (несколько лишних модулей)
Итого: ~120 000 токенов на один вопрос. Агент всё равно пропускает важный вызываемый модуль и уверенно придумывает несуществующий метод УправлениеСебестоимостью.РассчитатьПоДокументу().
Сценарий с Графоном
Агент делает всего три MCP-вызова:
// tools/call
{
"name": "find_symbol",
"arguments": { "query": "Себестоимость", "scope": "Documents.РеализацияТоваровУслуг" }
}
Ответ Графона:
{
"symbols": [
{ "fqn": "Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.РассчитатьСебестоимость",
"kind": "procedure", "file": "Documents/РеализацияТоваровУслуг/Forms/ФормаДокумента/Ext/Form/Module.bsl",
"line": 1420 },
{ "fqn": "ОбщийМодуль.УправлениеСебестоимостью.ПодготовитьДанныеДляРасчета",
"kind": "function", "file": "CommonModules/УправлениеСебестоимостью/Ext/Module.bsl",
"line": 2380 }
]
}
Второй вызов — получить граф вызовов от найденного метода:
{
"name": "call_graph",
"arguments": {
"symbol": "ОбщийМодуль.УправлениеСебестоимостью.ПодготовитьДанныеДляРасчета",
"depth": 2
}
}
Третий — вытащить подписки на события, влияющие на запись:
{
"name": "get_subscriptions",
"arguments": { "event": "ПередЗаписью", "object": "Документ.РеализацияТоваровУслуг" }
}
После этого агент читает только указанные файлы в указанных диапазонах строк. Итог: ~11 000 токенов, а ответ точный, потому что опирается на реальный граф вызовов, а не на «угадайку».
Таблица сравнения: с Графоном и без
| Метрика | Без Графона | С Графоном | Улучшение |
|---|---|---|---|
| Токенов на один вопрос по УТ 11 | 90 000 – 150 000 | 8 000 – 15 000 | ×10 |
| Время до первого корректного ответа | 3–6 минут | 20–45 секунд | ×6 |
| Стоимость (при $3/M input у Claude Sonnet) | $0.27–0.45 | $0.024–0.045 | ×10 |
| Точность ссылок на методы | 40–60% | 98%+ | стабильно |
| Галлюцинации методов BSL | Часто | Практически исключены | — |
| Нужно грузить всю конфигурацию в контекст | Да | Нет | — |
Практический кейс: разбор подписки на событие
Возьмём реальную задачу тимлида: «Найди все подписки на ПриПроведении документа РеализацияТоваровУслуг и покажи, какие из них меняют регистр ТоварыОрганизаций».
Агент через MCP делает вызов:
{
"name": "trace_event",
"arguments": {
"event": "ПриПроведении",
"object": "Document.РеализацияТоваровУслуг",
"affects_register": "AccumulationRegister.ТоварыОрганизаций"
}
}
Графон возвращает упорядоченный список обработчиков с пометкой, какие из них пишут в указанный регистр через Движения.ТоварыОрганизаций. Далее агент запрашивает тело только этих подписчиков — обычно это 3–6 коротких процедур.
Вот пример такой подписки из типовой УТ 11, которую часто ищут:
// ОбщийМодуль.УправлениеСебестоимостью.ПриПроведенииРеализацииТоваровУслуг
Процедура ПриПроведенииРеализацииТоваровУслуг(Документ, Отказ) Экспорт
Если Не УчетнаяПолитика.УчетТоваровПоСкладам() Тогда
Возврат;
КонецЕсли;
Движения = Документ.Движения;
Движения.ТоварыОрганизаций.Прочитать();
Для Каждого СтрокаТЧ Из Документ.Товары Цикл
Движение = Движения.ТоварыОрганизаций.Добавить();
Движение.Период = Документ.Дата;
Движение.Регистратор = Документ.Ссылка;
Движение.Номенклатура = СтрокаТЧ.Номенклатура;
Движение.Склад = Документ.Склад;
Движение.Количество = СтрокаТЧ.Количество;
// Себестоимость подтягивается из партионного учёта:
Движение.Стоимость = ПартионныйУчет.СтоимостьСписания(
СтрокаТЧ.Номенклатура, Документ.Склад, СтрокаТЧ.Количество);
КонецЦикла;
КонецПроцедуры
Без графа агент, увидев вызов ПартионныйУчет.СтоимостьСписания(), с вероятностью ошибётся в параметрах — а с Графоном он получает сигнатуру:
// Сигнатура из графа
Function ПартионныйУчет.СтоимостьСписания(
Номенклатура: СправочникСсылка.Номенклатура,
Склад: СправочникСсылка.Склады,
Количество: Число,
Партия: СправочникСсылка.ПартииНоменклатуры = Неопределено
) Экспорт
И вызовет метод правильно с первого раза.
Как подключить Графон к Claude Code и Cursor
Claude Code
В ~/.config/claude/mcp.json:
{
"mcpServers": {
"grafon-ut11": {
"command": "grafon",
"args": ["mcp", "--project", "/projects/UT11.5"]
}
}
}
Claude Code сразу видит инструменты find_symbol, call_graph, get_subscriptions, trace_event, find_register_writes и другие.
Cursor
В .cursor/mcp.json проекта:
{
"mcpServers": {
"grafon": {
"command": "grafon",
"args": ["mcp", "--project", "${workspaceFolder}"]
}
}
}
После перезапуска Cursor агент при выборе инструмента предпочтёт find_symbol вместо слепого grep по гигабайту XML.
Windsurf / Roo Code
Настройка аналогичная: указывается команда запуска MCP-сервера и путь к выгрузке конфигурации (Designer-формат, файлы *.xml + Ext/Module.bsl). Первичная индексация УТ 11 занимает от 4 до 12 минут, дальнейшее обновление инкрементальное по изменённым файлам.
Что даёт граф зависимостей на практике
- Локализация багов. Вместо чтения дерева агент идёт по цепочке вызовов от точки входа до записи в регистр.
- Аудит подписок. Быстрый ответ на вопрос «что ещё срабатывает при проведении этого документа».
- Онбординг. Новый разработчик просит агента построить карту модуля — и получает её из графа, а не из 11 000 строк.
- Рефакторинг. Проверка: где вызывается метод, какие типы параметров передаются фактически.
- Безопасность данных. Конфигурация не уходит в облако: MCP-сервер локальный, срезы формируются на вашем железе.
Подводные камни и как их избегать
- Формы с директивой
&НаКлиенте. Графон различает контекст клиента и сервера и не даст агенту предложить вызов серверного метода из клиентского кода. - Расширения. Если используете расширения УТ 11, укажите
--include-extensionsпри индексации, чтобы граф объединял методы основной конфигурации и расширений. - Динамические вызовы
Вычислить()иВыполнить(). Такие связи строятся эвристически; Графон помечает их в ответе какdynamic: true, чтобы агент не делал поспешных выводов. - Общие модули с флагами компиляции. Флаг
ВызовСервера/Клиентучитывается в сигнатурах.
Итог
ИИ-агент не станет экспертом по УТ 11 от того, что вы дадите ему больше контекста — наоборот, качество упадёт. Экспертиза рождается из точного графа зависимостей, по которому агент навигирует так же, как это делает опытный 1С-архитектор: от точки входа к вызываемым процедурам, от подписок к обработчикам, от запроса к регистрам.
Графон превращает 8 ГБ XML УТ 11 в структурированный MCP-интерфейс. Результат — стабильное сокращение токенов в 10 раз, ускорение ответов и почти нулевой уровень галлюцинаций. Для команд, которые уже используют Claude Code, Cursor или Windsurf на боевых проектах 1С, это разница между «игрушкой» и рабочим инструментом.
Запустить локальный MCP-сервер и проиндексировать свою конфигурацию можно на [grafonbase.ru](https://grafonbase.ru).