9 октября 2026 г.
Граф вызовов экспортных процедур 1С: как архитектору увидеть всю конфигурацию за минуты
Почему архитектору 1С нужен граф вызовов, а не поиск по тексту
В конфигурациях уровня ERP, УТ 11, ЗУП КОРП или КА 2 содержится от 300 до 900 тысяч строк кода на BSL. Разбросаны они по общим модулям, модулям менеджеров, объектов, форм, команд и подписок. Когда архитектору нужно понять, кто вызывает экспортную процедуру ОбщегоНазначения.ЗаписатьДанныеВЖурналРегистрации или как устроена точка входа РаботаСЗаказами.СоздатьЗаказНаОсновании, обычный текстовый поиск превращается в бесконечный обход результатов Ctrl+Shift+F.
Проблема в том, что текстовый поиск не различает:
- реальный вызов из кода и упоминание в комментарии или строке запроса;
- вызов процедуры с тем же именем из другого общего модуля;
- прямое обращение и вызов через
Выполнить()илиОбщегоНазначения.ВыполнитьМетодКонфигурации(); - переопределение экспортного метода в расширении (
.cfe).
Для архитектора критично видеть именно граф вызовов экспортных процедур — направленный граф, где узлы это методы и модули, а рёбра — фактические вызовы с учётом области видимости, экспортности и контекста исполнения.
Что такое граф вызовов экспортных процедур 1С
Формально это ориентированный граф G = (V, E), где:
V— множество методов: экспортные процедуры и функции общих модулей, модулей менеджеров, модулей объектов, обработчиков подписок на события;E— множество рёбер(u, v), если методuсодержит вызовv;- каждое ребро аннотировано контекстом: сервер/клиент, привилегированный режим, наличие в расширении, тип соединения.
Такой граф позволяет архитектору отвечать на вопросы, которые в обычной конфигурации требуют часов ручной работы:
- Какие экспортные методы общего модуля
Продаживызываются из клиентского контекста? (риск нарушения клиент-серверного разделения) - Через какие цепочки
ЗаказКлиента.ОбработкаЗаполнениядоходит до записи в регистр? - Какие экспортные процедуры вообще не вызываются — мёртвый код на сотни тысяч символов?
- Какие методы вызываются чаще всего — точки с максимальной связностью для рефакторинга?
Как построить граф вручную vs через Графон
Классический путь: выгрузить конфигурацию в XML через «Конфигуратор → Выгрузить в файлы», затем писать самописный парсер BSL. На практике это упирается в три стены:
- парсер должен тянуть AST BSL, а не regex, иначе ловит вызовы в комментариях и строках запросов;
- нужно учитывать
Выполнить,Вычислить, отражения черезОбщегоНазначения.ВыполнитьМетодКонфигурации; - расширения (
.cfe) многократно накладываются на базовую конфигурацию и переопределяют часть рёбер.
Графон (https://grafonbase.ru) решает это готовым MCP-сервером. Он индексирует всю конфигурацию локально (без выгрузки кода в облако), строит граф метаданных, вызовов, подписок и запросов и отдаёт ИИ-агенту или разработчику точный срез через MCP (Model Context Protocol).
Архитектура Графона
[Выгрузка 1С в XML] ---> [Индексатор Графона] ---> [Локальный граф: метаданные + вызовы + подписки + запросы]
|
v
[MCP-сервер] <--- JSON-RPC ---> [Claude Code / Cursor / Windsurf / Roo Code]
Индексатор парсит модули в AST, строит таблицу символов с учётом области видимости (Экспорт, &НаСервере, &НаКлиенте), разрешает вызовы через объектную модель платформы и сохраняет результат в локальный граф. Никакой синхронизации с внешними сервисами — всё работает на машине архитектора.
Практика: анализ экспортных процедур подсистемы «Продажи»
Допустим, у нас есть экспортный метод в общем модуле:
// ОбщийМодуль.Продажи.СоздатьРеализациюТоваровИУслуг
//
// Формирует документ на основании заказа. Используется подсистемами
// Закупки, Склад, Взаиморасчеты.
//
Функция СоздатьРеализациюНаОсновании(ЗаказКлиента, ЭтоЗаказПоставщику = Ложь) Экспорт
Если НЕ ЗначениеЗаполнено(ЗаказКлиента) Тогда
ВызватьИсключение НСтр("ru = 'Не передан заказ-основание'");
КонецЕсли;
Документ = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
ЗаполнитьШапку(Документ, ЗаказКлиента);
Документ.Записать(РежимЗаписиДокумента.Проведение);
ОбработкаСобытий.СозданиеЗаказаНаОсновании(Документ, ЗаказКлиента);
Возврат Документ;
КонецФункции
Через Графон агент отправляет MCP-запрос:
{
"jsonrpc": "2.0",
"method": "graph.callers",
"params": {
"module": "ОбщийМодуль.Продажи",
"method": "СоздатьРеализациюНаОсновании",
"depth": 3,
"includeExtensions": true
}
}
И получает не весь общий модуль (12 000 строк), а только сигнатуры вызывающих методов из базовой конфигурации и всех активных расширений:
{
"callers": [
{"context": "Документ.РеализацияТоваровУслуг.МодульОбъекта.ОбработкаЗаполнения", "line": 214},
{"context": "ОбщийМодуль.УправлениеПродажами.СоздатьРеализациюИзЗаказа", "line": 88},
{"context": "Обработка.СозданиеСвязанныхДокументов.МодульОбъекта", "line": 430}
],
"callees": [
"ОбщийМодуль.Продажи.ЗаполнитьШапку",
"Документы.РеализацияТоваровУслуг.СоздатьДокумент",
"ОбщийМодуль.ОбработкаСобытий.СозданиеЗаказаНаОсновании"
]
}
Именно эти срез-данные и экономят контекстное окно ИИ-агента. Вместо загрузки 200 МБ XML конфигурации агент видит 30 строк JSON, релевантных задаче.
Сравнение: без Графона и с Графоном
| Сценарий | Без Графона (raw XML + LLM) | С Графоном (MCP) |
|---|---|---|
| Токенов на запрос «кто вызывает метод X» | 120 000 – 400 000 | 1 500 – 4 000 |
| Время ответа агента | 40 – 90 с | 2 – 5 с |
| Ложные связи из комментариев/строк | до 30 % | 0 % (AST) |
| Учёт расширений .cfe | вручную | автоматически |
| Галлюцинации по несуществующим методам | регулярно | отсутствуют |
| Стоимость 1 запроса (Sonnet 4.5) | ~$1.20 – $4.00 | ~$0.02 – $0.05 |
На конфигурации ERP 2.5 с 620 000 строк BSL разница по токенам достигает 10x, а по времени — 20x. Это и есть ключевая экономика: архитектор проводит не 3–4 сессии ревью в день, а 30+.
Сценарии, где граф вызовов незаменим
1. Оценка влияния изменений (impact analysis)
Перед рефакторингом РаботаСКурсамиВалют.ПересчитатьСумму архитектор запрашивает у Графона транзитивное замыкание исходящих вызовов на глубину 5 уровней. Получает список из 47 методов, 12 модулей и 6 подписок, которые прямо или косвенно затронуты.
2. Аудит клиент-серверного взаимодействия
Проверка: какой экспортный метод общего модуля вызывается без &НаСервере из клиентского контекста. Граф помечает такие рёбра специальным тегом context: client, и отклонения от архитектурных правил видны сразу.
3. Поиск мёртвого кода
Экспортные процедуры без входящих рёбер (кроме точек входа: подписок, HTTP-сервисов, операций обмена) — кандидаты на вынос в расширение или удаление. В типовой ERP такой анализ даёт 5–15 % избыточного кода.
4. Работа ИИ-агента в Claude Code
Когда Claude Code через MCP-сервер Графона получает задачу «добавить контроль остатков в создание реализации», агент делает три точных MCP-запроса и правит ровно те файлы, которые нужно. Ни переполнения контекста, ни галлюцинаций про несуществующие методы ОбщегоНазначения.ПроверитьОстатки.
Как начать
- Установить Графон локально и указать путь к выгрузке XML конфигурации.
- Дождаться индексации (для ERP 2.5 — около 4–8 минут на NVMe).
- Подключить MCP-сервер к Claude Code, Cursor, Windsurf или Roo Code.
- Открыть граф вызовов экспортных процедур через встроенный визуализатор или запросить срез у агента.
Документация и установка: https://grafonbase.ru
Граф вызовов экспортных процедур 1С — это не «красивая картинка» для презентации. Это рабочий инструмент архитектора, который одновременно ускоряет ревью, снижает расход токенов ИИ-агентов в 10 раз и делает рефакторинг больших конфигураций предсказуемым.