17 октября 2026 г.
Рефакторинг процедур проведения документов 1С с помощью ИИ: практическое руководство с Графон MCP
Почему процедуры проведения — идеальный кандидат для ИИ-рефакторинга
ОбработкаПроведения в типовых конфигурациях (ERP 2.5, УТ 11, ЗУП 3.1, КА 2) — это классическое легаси «в квадрате»: 300–1500 строк на документ, вложенные движения по 5–15 регистрам, прямые запросы, дублирующаяся логика контроля остатков и побочные эффекты в общих модулях. Ручной рефакторинг такого кода дорог и рискован: одна неучтённая подписка на ПриЗаписи — и проведение начнёт «плыть» в промышленной эксплуатации.
ИИ здесь даёт реальный рычаг: декомпозировать 800-строчную монолитную процедуру на методы, вынести контроль остатков в общий модуль, добавить управляемые блокировки и убрать дублирующиеся запросы. Но есть нюанс — «ванильные» ИИ-агенты на 1С стабильно ломаются.
Три причины, по которым Claude Code без MCP сдаётся на 1С
- Переполнение контекста. Метаданные средней ERP в XML — это гигабайты. Модуль объекта
РеализацияТоваровУслугвместе с общими модулямиОбщегоНазначения,УправлениеЗапасами,РасчетСебестоимости— десятки тысяч строк. Агент либо обрезает код, либо теряет связность. - 10x перерасход токенов. На каждую итерацию агент заново загружает десятки тысяч лишних строк соседних документов, которые к задаче не относятся.
- Галлюцинации контрактов. Агент «додумывает» сигнатуру
Движения.ТоварыНаСкладах.Добавить()и путает параметры, если в контексте оказалось несколько регистров с похожими именами.
Что даёт Графон агентy
Графон — локальный MCP-сервер, который индексирует конфигурацию и строит граф зависимостей: метаданные → модули → процедуры → вызовы → подписки → запросы. Агент через MCP запрашивает только точный срез: сигнатуру нужной процедуры + её прямые зависимости, без чтения гигабайтов XML.
{
"method": "mcp/call",
"params": {
"name": "grafon.dependencies",
"arguments": {
"object": "Документ.РеализацияТоваровУслуг",
"procedure": "ОбработкаПроведения",
"depth": 2
}
}
}
Ответ приходит в виде компактного среза файлов (обычно 3–8 КБ текста вместо 300–500 КБ), пригодного для немедленного рефакторинга.
Практический сценарий: «РеализацияТоваровУслуг»
До рефакторинга (фрагмент):
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ТоварыНаСкладах.Записывать = Истина;
Для Каждого Строка Из Товары Цикл
Движение = Движения.ТоварыНаСкладах.Добавить();
Движение.Период = Дата;
Движение.Склад = Склад;
Движение.Номенклатура = Строка.Номенклатура;
Движение.Количество = -Строка.Количество;
Движение.Стоимость = -Строка.Сумма;
КонецЦикла;
// 700 строк: запросы остатков, дублирующаяся логика, отсутствие блокировок
КонецПроцедуры
Запрос к агенту через граф:
> Claude, через Grafon проанализируй ОбработкаПроведения у РеализацияТоваровУслуг.
Найди: дубли запросов к ТоварыНаСкладах, отсутствие управляемых блокировок,
вызовы из общих модулей. Предложи декомпозицию с сохранением контракта.
Результат после рефакторинга:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
УстановитьПривилегированныйРежим(Истина);
ЗаблокироватьДанныеДляПроведения();
СформироватьДвиженияПоТоварам();
СформироватьДвиженияПоВзаиморасчетам();
КонтрольОстатков(Отказ);
КонецПроцедуры
Процедура ЗаблокироватьДанныеДляПроведения()
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах");
Элемент.Режим = РежимБлокировкиДанных.Исключительный;
Элемент.ИсточникДанных = Товары;
Элемент.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
Элемент.ИспользоватьИзИсточникаДанных("Склад", "Склад");
Блокировка.Заблокировать();
КонецПроцедуры
Процедура СформироватьДвиженияПоТоварам()
Движения.ТоварыНаСкладах.Записывать = Истина;
Для Каждого Строка Из Товары Цикл
Движение = Движения.ТоварыНаСкладах.Добавить();
ЗаполнитьЗначенияСвойств(Движение, Строка);
Движение.Период = Дата;
Движение.Склад = Склад;
Движение.Количество = -Строка.Количество;
Движение.Стоимость = -Строка.Сумма;
КонецЦикла;
КонецПроцедуры
Агент опирался на граф Графона: он «видел» только ОбработкаПроведения, вызываемые процедуры и подписки на ПриЗаписи, — и не галлюцинировал с именами регистров.
Сравнение: с Графоном и без
| Параметр | Без Графона | С Графоном MCP |
|---|---|---|
| Размер контекста на итерацию | 200–600 КБ XML/BSL | 3–10 КБ среза |
| Токенов на полный рефакторинг | 180 000–350 000 | 18 000–35 000 |
| Стоимость в Claude Sonnet (≈) | $3–6 | $0,30–0,60 |
| Время до рабочего патча | 15–40 мин | 3–8 мин |
| Галлюцинации контрактов | частая проблема | практически исключены |
| Понимание подписок на события | теряется | явно в графе |
Разница в 8–10 раз по токенам достигается за счёт того, что агент не тащит в контекст соседние документы, формы и общие модули, не относящиеся к задаче.
Типовые MCP-запросы для рефакторинга проведения
grafon.find_callers— кто вызываетОбработкаПроведения(подписки, обработчики, сервисы).grafon.event_subscriptions— все подписки наПриЗаписи,ПередЗаписью,ПриПроведениидля документа.grafon.query_usage— в каких процедурах процедуры проведения выполняется запрос к региструТоварыНаСкладах(для поиска дублей).grafon.affected_by_change— обратный граф: если переименовать метод, что сломается.grafon.metadata_registers— состав движений документа по метаданнымRegisterRecords.
Чек-лист внедрения
- Установить Графон локально и проиндексировать конфигурацию (ERP/УТ/ЗУП/КА).
- Подключить MCP-сервер в Claude Code, Cursor или Windsurf.
- Прогнать
grafon.event_subscriptionsна целевой документ — зафиксировать контракт. - Выполнить рефакторинг по методу «сначала граф, потом патч»: сначала срез зависимостей, потом код.
- Проверить через
grafon.affected_by_change, что ни одна подписка не сломана. - Прогнать регресс на тестовой базе с журналом проведения.
Рефакторинг процедур проведения 1С с помощью ИИ перестаёт быть лотереей, когда у агента есть дисциплинированный доступ к графу зависимостей. Графон — тот самый ограничитель контекста, который превращает «умного, но рассеянного» агента в предсказуемого инженера-рефакторщика.