Все статьи

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. Парсер выгрузки 1С и BSL-кода.
  2. Построитель графа зависимостей.
  3. Инкрементальный индекс, обновляемый при изменении файлов.
  4. 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 раз, скорость растёт, а галлюцинации исчезают. Для тимлидов это предсказуемый бюджет, для архитекторов — контроль над тем, какие участки кода попадают в контекст, для разработчиков — рабочий инструмент, который не мешает в ежедневной отладке.