14 октября 2026 г.
Контекстный срез модуля объекта 1С для исправления багов: точный контекст вместо гигабайтов XML
Почему ИИ-агенты теряют контекст на больших конфигурациях 1С
Когда вы открываете Claude Code, Cursor или Windsurf в репозитории с выгруженной конфигурацией ERP, УТ 11 или ЗУП, агент не понимает, что такое «модуль объекта». Он видит тысячи XML-файлов метаданных и десятки тысяч строк BSL. На задачу «исправь баг в проведении документа» агент по инерции читает весь модуль объекта, затем модуль менеджера, затем общие модули, на которые есть ссылки. Итог: 80–150 тысяч токенов на одну правку, 5–10 минут ожидания и высокая вероятность галлюцинации — например, агент вызывает несуществующий метод РасчитатьНДС, потому что видел похожее название в другом модуле.
Контекстное окно переполняется, стоимость растёт, а качество падает. Это классическая проблема «RAG по-старому»: слишком много нерелевантного кода.
Что такое контекстный срез модуля объекта
Контекстный срез — это минимально достаточный набор данных о модуле объекта 1С, который нужен ИИ-агенту для правки конкретного участка кода. В него входят:
- сигнатуры обработчиков событий модуля объекта (
ПриЗаписи,ОбработкаПроведения,ПередЗаписью); - тела только тех процедур и функций, что участвуют в цепочке вызова;
- сигнатуры внешних процедур из общих модулей, которые вызываются (без полного тела);
- состав табличных частей, реквизитов, измерений и связанных подписок на события;
- фрагменты текста запросов, которые реально исполняются в этом срезе.
Графон — это локальный инструмент и MCP-сервер для конфигураций 1С, который строит такой срез автоматически. Он индексирует всю конфигурацию один раз, а затем отдаёт агенту точечные данные по запросу, вместо того чтобы грузить XML целиком.
Как Графон строит граф зависимостей 1С
Графон разбирает выгрузку и строит ориентированный граф: узлы — это объекты метаданных, модули, процедуры, функции, подписки и запросы; рёбра — вызовы, чтение реквизитов, обращения к табличным частям, подписки. Парсер понимает BSL-синтаксис 1С: Процедура, Функция, Экспорт, директивы &НаСервере, &НаКлиенте, а также типовые конструкции Документы.РеализацияТоваровУслуг.Выбрать().
Благодаря графу агент формулирует запрос: «дай мне срез обработчика ПриЗаписи документа РеализацияТоваровУслуг глубиной 2» — и получает только нужные файлы и строки.
MCP-запросы: как получить срез за два вызова
Ниже пример реального обращения Claude Code к MCP-серверу Графона. Первый вызов — получить контекст модуля с конкретным обработчиком:
{
"method": "tools/call",
"params": {
"name": "get_object_module_context",
"arguments": {
"object": "Документ.РеализацияТоваровУслуг",
"handler": "ПриЗаписи",
"depth": 1,
"include": ["table_parts", "subscriptions"]
}
}
}
Второй — развернуть граф вызовов вглубь, чтобы увидеть общие модули:
{
"method": "tools/call",
"params": {
"name": "expand_call_graph",
"arguments": {
"root": "Документ.РеализацияТоваровУслуг.ПриЗаписи",
"depth": 2,
"kinds": ["common_module", "function"]
}
}
}
Агент получает компактный пакет: файл модуля объекта с одним обработчиком, сигнатуры двух функций из общих модулей и список подписок. Всё остальное остаётся в графе и в контекст не попадает.
Практический сценарий: исправление бага в модуле объекта
Дано: в модуле объекта документа РеализацияТоваровУслуг при повторной записи неправильно считается НДС.
Процедура ПриЗаписи(Отказ)
// Баг: при повторной записи СуммаНДС пересчитывается
// от уже начисленной суммы
СуммаНДС = РассчитатьНДС(СуммаДокумента);
Если СуммаНДС > МаксимальнаяСуммаНДС Тогда
Отказ = Истина;
Сообщить("Превышена максимальная сумма НДС");
КонецЕсли;
КонецПроцедуры
Функция РассчитатьНДС(Сумма)
Ставка = ПолучитьСтавкуНДС();
Возврат Сумма * Ставка / 100;
КонецФункции
Без Графона агент прочитает весь модуль (2500 строк), модуль менеджера, общий модуль РасчётНДС целиком, форму документа и подписки. С Графоном он получает только обработчик ПриЗаписи, сигнатуру РассчитатьНДС из общего модуля и текст функции ПолучитьСтавкуНДС. Агент видит, что баг — в повторном начислении, и предлагает корректную правку:
Процедура ПриЗаписи(Отказ)
Если ЭтоНовый() ИЛИ СуммаНДС = 0 Тогда
СуммаНДС = РассчитатьНДС(СуммаДокумента);
КонецЕсли;
КонецПроцедуры
Дальше — перезапись файла, инкрементальная переиндексация графа и проверка синтаксиса в Конфигураторе.
Сравнение: с Графоном и без
| Параметр | Без Графона | С Графоном |
|---|---|---|
| Токенов на задачу | 90 000–150 000 | 8 000–15 000 |
| Время ответа агента | 5–10 мин | 30–60 сек |
| Прочитанных файлов | 40–80 | 3–5 |
| Галлюцинации методов | Часто | Практически нет |
| Стоимость правки (Claude Sonnet) | ~$0,45 | ~$0,05 |
| Точность сигнатур | 60–70 % | 98 %+ |
Архитектура решения
Схема работы проста: конфигурация выгружается в файлы, Графон индексирует её в локальный граф (SQLite + векторный индекс), MCP-сервер поднимается рядом с IDE, ИИ-агент (Claude Code, Cursor, Windsurf, Roo Code) подключается по протоколу MCP. Все данные остаются локально — ничего не уходит в облако.
Ключевые компоненты:
- Парсер выгрузки 1С и BSL-кода.
- Построитель графа зависимостей.
- Инкрементальный индекс, обновляемый при изменении файлов.
- MCP-сервер с инструментами
get_object_module_context,expand_call_graph,find_subscriptions,search_query_context.
Чек-лист внедрения
- Выгрузите конфигурацию в файлы (Конфигуратор → Выгрузить в файлы).
- Запустите индексацию в Графоне один раз.
- Подключите MCP-сервер к Claude Code или Cursor через
.mcp.json. - В промпте явно просите срез: «используй
get_object_module_contextдляДокумент.X, обработчикY». - Ограничьте глубину графа (
depth ≤ 2) — это ускоряет ответ в разы. - Проверяйте финальный код через синтаксический контроль 1С.
Выводы
Контекстный срез модуля объекта 1С — это не «ещё один RAG», а точечная навигация по графу зависимостей. Графон делает её управляемой и детерминированной: агент получает ровно те сигнатуры и тела функций, что нужны для исправления бага. В результате расход токенов падает до 10 раз, скорость растёт, а галлюцинации исчезают. Для тимлидов это предсказуемый бюджет, для архитекторов — контроль над тем, какие участки кода попадают в контекст, для разработчиков — рабочий инструмент, который не мешает в ежедневной отладке.