Статья #4

Рефакторинг legacy-кода в конфигурациях 1С

Проблема

Старые конфигурации 1С часто содержат:
- Дублирование кода
- Отсутствие модульности
- Устаревшие практики (например, использование глобального контекста)
- Плохая читаемость
- Отсутствие комментариев

Как Claude Code помогает

1. Автоматический анализ проблем

"Проанализируй модуль ОбщийМодуль.bsl и выяви:
- Дублирующийся код
- Слишком длинные функции (>50 строк)
- Неиспользуемые переменные
- Устаревшие конструкции
- Нарушения стандартов 1С"

2. Рефакторинг функций

До рефакторинга:

Процедура ОбработкаДокумента(Док)
    Если Док.Проведен Тогда
        Для Каждого Строка Из Док.Товары Цикл
            Запрос = Новый Запрос;
            Запрос.Текст = "ВЫБРАТЬ Цена ИЗ РегистрСведений.Цены ГДЕ Номенклатура = &Ном";
            Запрос.УстановитьПараметр("Ном", Строка.Номенклатура);
            Рез = Запрос.Выполнить();
            // ... много кода
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

Задача для Claude Code:

"Отрефактори эту процедуру:
1. Вынеси запрос цены в отдельную функцию
2. Добавь обработку ошибок
3. Оптимизируй работу с запросами (один запрос вместо цикла)
4. Добавь описание функции в формате JSDoc"

После рефакторинга:

// Обрабатывает документ и обновляет цены товаров
//
// Параметры:
//  Док - ДокументСсылка - Ссылка на обрабатываемый документ
//
// Возвращаемое значение:
//  Булево - Истина если обработка прошла успешно
//
Функция ОбработатьДокумент(Док) Экспорт

    Если Не Док.Проведен Тогда
        Возврат Ложь;
    КонецЕсли;

    Попытка
        ТаблицаЦен = ПолучитьЦеныТоваров(Док.Товары.ВыгрузитьКолонку("Номенклатура"));
        ОбновитьЦеныВДокументе(Док, ТаблицаЦен);
        Возврат Истина;
    Исключение
        ЗаписьЖурналаРегистрации("Ошибка обработки документа",
            УровеньЖурналаРегистрации.Ошибка,,,
            ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        Возврат Ложь;
    КонецПопытки;

КонецФункции

// Получает цены для списка номенклатуры одним запросом
Функция ПолучитьЦеныТоваров(МассивНоменклатуры)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Цены.Номенклатура КАК Номенклатура,
    |    Цены.Цена КАК Цена
    |ИЗ
    |    РегистрСведений.Цены.СрезПоследних(&Дата, Номенклатура В (&СписокНоменклатуры)) КАК Цены";

    Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
    Запрос.УстановитьПараметр("СписокНоменклатуры", МассивНоменклатуры);

    Возврат Запрос.Выполнить().Выгрузить();

КонецФункции

3. Извлечение дублирующегося кода

"Найди весь дублирующийся код в модулях папки /src/CommonModules/
и вынеси его в общие функции"

4. Модернизация устаревших конструкций

"Замени все использования глобального контекста на параметры функций.
Замени устаревшие функции работы со строками на современные аналоги."

5. Добавление типизации

"Добавь аннотации типов для всех параметров и возвращаемых значений
в модуле используя синтаксис 1С:EDT"

Пошаговый план рефакторинга

  1. Анализ кодовой базы

    • Метрики качества кода
    • Выявление проблемных областей
    • Приоритизация задач
  2. Создание тестов

    • Покрытие критичного функционала тестами
    • Регрессионное тестирование
  3. Постепенный рефакторинг

    • Работа небольшими итерациями
    • Проверка после каждого изменения
  4. Документирование

    • Обновление документации
    • Добавление комментариев к коду

Инструменты контроля качества

Интеграция с SonarQube для 1С:

# Запуск анализа с последующим рефакторингом
sonar-scanner && claude code "Исправь все критичные замечания из SonarQube"

Метрики улучшения

После рефакторинга типичные улучшения:
- Уменьшение дублирования кода: на 40-60%
- Сокращение длинных функций: на 70-80%
- Улучшение читаемости: субъективная оценка команды
- Снижение технического долга: измеряется в часах разработки

Интересно узнать больше?

Посмотрите другие статьи о том, как AI ускоряет разработку 1С

Перейти к блогу