Все статьи

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 раз и убирает галлюцинации.

Архитектура локального контура

  1. Scanner читает исходники 1С: XML, EDT-проект или выгрузку src/cf.
  2. Graph Builder строит граф вызовов, метаданных и запросов в локальной БД.
  3. MCP Server отдаёт граф по JSON-RPC через stdio.
  4. Claude Code планирует тесты и генерирует BSL.
  5. YAxUnit запускает тесты и возвращает отчёт.
  6. 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 минут

  1. Установите Графон с https://grafonbase.ru.
  2. Укажите путь к выгрузке конфигурации: EDT-проект или src/cf.
  3. Запустите индексацию командой grafon index --src ./src --format edt.
  4. Подключите MCP-сервер в Claude Code: команда grafon, аргументы mcp --db ./grafon.db.
  5. В промпте просите агента сначала вызвать get_test_candidates, затем get_object_context.
  6. Запустите YAxUnit и передайте отчёт обратно в Claude Code для итераций.

Лучшие практики

  • Начинайте с 5–10 критичных процедур, а не со всей конфигурации.
  • Ревьюйте сгенерированные тесты: ИИ не знает бизнес-ограничений, если они не описаны в коде.
  • Используйте изоляцию данных YAxUnit, чтобы тесты не зависели от порядка запуска.
  • Обновляйте граф Графона после изменения метаданных.
  • Для клиентского кода и форм генерируйте отдельные сценарии.

Вывод

Автоматическое написание тестов для 1С с помощью Claude Code становится предсказуемым, когда агент получает точный контекст. Графон — локальный MCP-сервер, который строит граф зависимостей 1С и отдаёт только сигнатуры, вызовы, подписки и запросы. Это сокращает токены до 10 раз, ускоряет генерацию тестов и исключает галлюцинации. Попробуйте Графон на своём проекте: https://grafonbase.ru.