29 сентября 2026 г.
Автоматическое написание тестов для 1С с помощью Claude Code и MCP-сервера Графон
Почему автоматическое написание тестов для 1С упирается в контекст
Типовая конфигурация 1С: ERP, УТ, ЗУП или КА — это гигабайты XML-метаданных и сотни тысяч строк BSL. Модули объектов, менеджеров, общие модули, формы, подписки на события и запросы связаны между собой. Если передать такую конфигурацию целиком в Claude Code или другой ИИ-агент, контекстное окно переполняется, стоимость токенов растёт в 10 раз, а агент начинает путать методы, типы и галлюцинировать.
Автоматическое написание тестов для 1С с помощью Claude Code требует не «всей конфигурации», а точного среза: сигнатуры целевой процедуры, её вызовы, структуры данных, движения по регистрам, подписки и запросы. Именно эту задачу решает локальный MCP-сервер Графон.
Как Графон сокращает контекст для Claude Code
Графон анализирует выгрузку 1С и строит локальный граф зависимостей. В графе есть узлы метаданных, модулей, процедур, функций, вызовов, подписок и запросов. Claude Code через MCP-протокол запрашивает только нужный фрагмент.
| MCP-инструмент Графона | Что возвращает | Зачем для тестов |
|---|---|---|
| get_object_context | метаданные объекта, модули, сигнатуры | фикстуры и подготовка данных |
| get_call_graph | вызываемые и вызывающие методы | моки и изоляция |
| get_event_subscriptions | подписки на события объекта | интеграционные тесты |
| get_query_sources | тексты запросов и их использование | проверка движений |
| get_test_candidates | процедуры с оценкой сложности | план покрытия |
| get_signature | точные параметры и типы | корректный вызов в BSL |
Пример MCP-запроса: mcp__grafon__get_object_context({"object":"Документ.ПродажаСервис"}). В ответ приходит не весь модуль, а только связанные процедуры, их сигнатуры и зависимости. Это сокращает токены до 10 раз и убирает галлюцинации.
Архитектура локального контура
- Scanner читает исходники 1С: XML, EDT-проект или выгрузку
src/cf. - Graph Builder строит граф вызовов, метаданных и запросов в локальной БД.
- MCP Server отдаёт граф по JSON-RPC через stdio.
- Claude Code планирует тесты и генерирует BSL.
- YAxUnit запускает тесты и возвращает отчёт.
- Feedback Loop: Claude Code запрашивает у Графона зависимости упавших тестов и уточняет код.
Данные конфигурации не нужно отправлять целиком в облако. Графон работает локально, а агенту передаются только релевантные сигнатуры.
Практический сценарий: тесты для проведения документа
Промпт для Claude Code:
«Сгенерируй YAxUnit-тесты для ОбработкаПроведения документа ПродажаСервис. Используй MCP Графон: get_object_context, get_call_graph, get_event_subscriptions. Покрой расчёт скидки, контроль остатков и движения по регистрам. Не меняй метаданные».
Графон возвращает сигнатуры и связи. Claude Code создаёт тест:
Процедура Тест_ОбработкаПроведения_ДвиженияПоРегиструПродажи() Экспорт
// Подготовка
Док = ЮТест.Данные().СоздатьДокумент("ПродажаСервис");
Док.Дата = ТекущаяДата();
Док.Контрагент = ЮТест.Данные().СоздатьЭлемент("Справочники.Контрагенты");
Док.Товары.Добавить(ЮТест.Данные().СоздатьЭлемент("Справочники.Номенклатура"), 2, 1000, 10);
Док.Записать(РежимЗаписиДокумента.Запись);
// Действие
Док.Записать(РежимЗаписиДокумента.Проведение);
// Проверка
Движения = ЮТест.Данные().НайтиДвижения("ПродажаСервис", Док.Ссылка, "РегистрНакопления.Продажи");
ЮТест.ОжидаетЧто(Движения).ИмеетДлину(1);
ЮТест.ОжидаетЧто(Движения[0].Количество).Равно(2);
ЮТест.ОжидаетЧто(Движения[0].Сумма).Равно(1800);
КонецПроцедуры
Для функции расчёта скидки:
Процедура Тест_РассчитатьСкидку_Скидка10Процентов() Экспорт
Параметры = Новый Структура;
Параметры.Вставить("Цена", 1000);
Параметры.Вставить("Количество", 2);
Параметры.Вставить("Скидка", 10);
Результат = ОбщегоНазначения.РассчитатьСкидку(Параметры);
ЮТест.ОжидаетЧто(Результат).Равно(1800);
КонецПроцедуры
Claude Code получает от Графона точный список зависимостей, поэтому не выдумывает несуществующие методы.
Сравнение: без Графона и с Графоном
| Параметр | Без MCP | С Графоном |
|---|---|---|
| Контекст на 1 объект | 120–250 тыс. токенов | 8–25 тыс. токенов |
| Время генерации теста | 8–20 минут | 1–3 минуты |
| Точность сигнатур | 60–70% | 95–99% |
| Галлюцинации | частые | редкие |
| Стоимость 100 тестов | 1× | 0,1× |
| Повторный прогон | весь контекст заново | инкрементально по графу |
Экономия токенов до 10 раз — это не маркетинг, а следствие архитектуры: вместо XML и всех модулей агент получает подграф.
Сценарии для ERP, УТ, ЗУП и КА
- ERP: тесты проведения документов, расчёта себестоимости, согласования.
- УТ: скидки, бонусы, резервы, контроль остатков.
- ЗУП: расчёт зарплаты, НДФЛ, взносы. Графон быстро находит связи с регистрами и общими модулями.
- КА: бюджетирование, лимиты, корректировки.
- Интеграции: HTTP-сервисы, обмены, очереди. MCP-инструмент
get_query_sourcesдаёт точные запросы.
Как внедрить за 30 минут
- Установите Графон с
https://grafonbase.ru. - Укажите путь к выгрузке конфигурации: EDT-проект или
src/cf. - Запустите индексацию командой
grafon index --src ./src --format edt. - Подключите MCP-сервер в Claude Code: команда
grafon, аргументыmcp --db ./grafon.db. - В промпте просите агента сначала вызвать
get_test_candidates, затемget_object_context. - Запустите YAxUnit и передайте отчёт обратно в Claude Code для итераций.
Лучшие практики
- Начинайте с 5–10 критичных процедур, а не со всей конфигурации.
- Ревьюйте сгенерированные тесты: ИИ не знает бизнес-ограничений, если они не описаны в коде.
- Используйте изоляцию данных YAxUnit, чтобы тесты не зависели от порядка запуска.
- Обновляйте граф Графона после изменения метаданных.
- Для клиентского кода и форм генерируйте отдельные сценарии.
Вывод
Автоматическое написание тестов для 1С с помощью Claude Code становится предсказуемым, когда агент получает точный контекст. Графон — локальный MCP-сервер, который строит граф зависимостей 1С и отдаёт только сигнатуры, вызовы, подписки и запросы. Это сокращает токены до 10 раз, ускоряет генерацию тестов и исключает галлюцинации. Попробуйте Графон на своём проекте: https://grafonbase.ru.