Перегруженные общие модули 1С: что показывает Analyzer 1C и как разнести модуль на части

19.10.26

Разработка - Рефакторинг и качество кода

Запустили Analyzer 1C 2.7.65 на промышленной конфигурации (596 модулей, 13 669 функций) и исследовали перегруженные функции (до 1887 строк), циклические зависимости и экран «Циклы» (кольцо из 64 модулей). Разобрали, почему популярные метрики (McCabe, связность) не представлены в продукте вендора, и составили пошаговый план разделения модуля. Привели проверенный платформой 8.3.27 пример до и после рефакторинга и выявили скрытую ловушку загрузки модулей с точкой в имени.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Инструменты анализа и эталон рефакторинга перегруженных модулей 1С
.zip 13,19Kb
2 5 800 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.
🧭 Управление качеством кода • Рефакторинг 1С • Analyzer 1C • Статический анализ
🎯 О чём это (в трёх тезисах)
🗸Практический опыт запуска Analyzer 1C 2.7.65 на промышленной конфигурации: 596 модулей, 13 669 функций, фильтр «Монстры» и кольцо из 64 циклически зависимых модулей ядра.
🗸Сопоставление ожиданий и реальности инструмента: какие метрики (McCabe, связность, зацепление) отсутствуют в продукте вендора и что показывают колонки «Строк», «Ветв.», «Вызовы» на реальных данных.
🗸Проверенный платформой план разделения модулей: пошаговый алгоритм декомпозиции, пример «до и после» без псевдокода и скрытая ловушка платформы 8.3.27 при загрузке модулей с точкой в имени.
🧪 Отчёт о тестировании на реальном стенде
Среда и дата13.10.2026, Windows 11 Pro, Intel Core i5-2400 3,10 ГГц (4 ядра), 7,9 ГБ ОЗУ, Docker Desktop 29.8.0, 1С:Предприятие 8.3.27.2130
Инструмент анализаAnalyzer 1C версии 2.7.65 (Marketplace ID 2669235), режим базового уровня
Объект анализаКонфигурация «CG:Управление онлайн торговлей» (версия 1.7.6.276): 27 подсистем, 596 модулей, 13 669 функций, 897 вызовов, 1 044 запроса к таблицам
Ключевые замерыДлиннейшая функция — 1 887 строк (модуль формы ЭДО); ядро циклов — 64 модуля (вес 3 838); выделено 6 слабейших рёбер для разрыва связей
Границы замераОдна промышленная нетиповая конфигурация; типовые решения вендора и конфигурации с минимумом модулей не оценивались
🧪 Отчёт о тестировании файла-компаньона
Архив1c-refactor-analyzer-companion.zip (1 SM, 13.5 КБ): README.md, РаботаСДокументами_Монолит.bsl, РаботаСДокументамиПроверки.bsl, РаботаСДокументамиПечатныеФормы.bsl, bsl_module_analyzer.py, test_naming_dot_trap.py, verify_companion.py
Среда и дата13.10.2026, Windows 11 Pro, Python 3.12, автономный прогон из распакованного архива
Что запускалосьpython verify_companion.py (тесты BSL-синтаксиса, цикломатической сложности, ацикличности графа и соглашений об именовании 1С)
Результат5 проверок из 5 пройдены успешно (100% PASS): чистота кодировок UTF-8, синтаксический баланс модулей 1С, снижение сложности, разрыв циклов по слабейшим рёбрам, валидация стандарта именования 1С:ИТС
Где скачатьВ блоке прикреплённых файлов статьи за 1 $m
🧠 Суть статьи

1С-разработчикам и архитекторам: как на основе объективных метрик статического анализа спланировать разделение перегруженных модулей, разорвать циклические зависимости в графе вызовов и избежать скрытых ловушек платформы при рефакторинге.

Ключевые идеи
  • Концентрация технического долга неравномерна: 85% тяжёлых функций (> 1 000 строк) сосредоточены всего в двух модулях конфигурации, поэтому разнесение нужно начинать с них.
  • Метка «Монстр» не сводится к длине: фильтр вендора помечает функции от 101 строки и отражает совокупную сложность структуры вызовов.
  • Кольцевые циклы разрываются по слабейшим рёбрам: матрица связей указывает точные точки разрыва между общими сервисами и подсистемой номенклатуры с минимальным риском регресса.
  • Синтаксический контроль платформы пропускает нетипизированные вызовы: проверка конфигурации не заменяет сценарного тестирования выполнения BSL-кода.
Главная мысль

Архитектурный рефакторинг в 1С должен опираться на объективные замеры графа вызовов и структуры зависимостей.

Для кого: разработчики и архитекторы 1С, которые ищут в конфигурации перегруженные функции и модули и планируют их безопасную декомпозицию.

Ключевые технологии: Analyzer 1C 2.7.65, платформа 1С:Предприятие 8.3.27, BSL, граф вызовов, циклические зависимости, модульное тестирование.

Важная оговорка. Исследование проведено на реальной промышленной конфигурации («CG:Управление онлайн торговлей» версии 1.7.6.276). Числа показывают, как выглядят перегруженные функции именно в ней; по ним нельзя судить о типовых конфигурациях вендора. Демо-конфигурации из учебных примеров для этой задачи непригодны из-за малого объёма кода.

1. Что Analyzer показывает про функции

В режиме «Анализ функций» над таблицей расположен переключатель «Все / Проблемные / Монстры / Расширения». У таблицы десять колонок: «Имя», «Тип», «Модуль», «Строк», «Ветв.», «Вызовы», «Запросов», «В цикле», «КНТ», «Эксп.». По данным API Analyzer (/api/hotspots/functions): «Строк» отражает длину функции, «Ветв.» — число ветвлений, «Вызовы» — исходящие вызовы, «Запросов» — число обращений к таблицам базы. Сортировать список можно по строкам, ветвлениям, исходящим вызовам и запросам.

Колонка «В цикле» в интерфейсе у самых длинных функций показывает значения 1–3, а соответствующее поле API у тех же функций равно нулю. Это разные показатели, и детальное расхождение мы не разбирали. Колонка «КНТ» по фактическим значениям («К» у процедур форм, «С» у серверных функций) указывает на клиентский и серверный контекст выполнения.

Рисунок 1. Таблица анализа функций общих модулей в Analyzer 1C

Рисунок 1. Таблица анализа функций конфигурации «CG:Управление онлайн торговлей» в Analyzer 1C (фильтр «Монстры», сортировка по числу строк)

2. Самые тяжёлые функции конфигурации

Топ-8 функций по числу строк во всей системе:

Строк Ветвлений Исходящих вызовов Запросов к СУБД
1 887 361 732 0
1 857 354 715 0
1 777 269 631 0
1 775 339 684 0
1 772 339 682 0
1 285 250 453 0
1 125 215 246 0
1 008 175 193 2

Первые шесть позиций — функции выгрузки печатных форм электронных документов, расположенные в модуле одной формы. В этом модуле 86 функций, длиннейшая достигает 1 887 строк, средняя длина составляет 150 строк. Среди общих модулей самая длинная функция лежит в модуле на 119 функций: 1 125 строк при средней длине 47.

Вывод для планирования рефакторинга. Самые тяжёлые функции собраны в немногих модулях конфигурации. Разнесение, которое даст наибольший практический эффект, начинается с модуля, где лежит несколько функций в тысячу строк и более. Модули с большим числом мелких функций требуют меньшего внимания на старте.

Рисунок 2. Общая схема архитектуры и распределение функциональной нагрузки

Рисунок 2. Архитектурный обзор конфигурации: концентрация технического долга в модулях форм ЭДО (до 1887 строк) и общем модуле ядра (1125 строк)

3. Что мы искали и не нашли

В популярных статьях о статическом анализе встречаются метрики, которых в Analyzer 1C 2.7.65 нет в перечне режимов, колонках таблицы функций или метриках API:

  • цикломатическая сложность McCabe под явным названием (ближайший аналог — колонка «Ветв.»);
  • связность (cohesion) и зацепление (coupling) с нормализованной шкалой от 0 до 1;
  • отдельный показатель «обращения к глобальным переменным»;
  • глубина вложенности операторов как обособленная метрика.

Мы исследовали штатный состав экранов продукта. Если какая-то из перечисленных метрик присутствует в недокументированных режимах, поделитесь опытом в комментариях.

Числовые пороги вида «модуль свыше 2 000 строк — жёлтая зона, 5 000 — красная» мы намеренно не приводим: у них нет формального источника в стандартах разработки 1С. В исследованной базе отдельные функции превышают 1 000 строк, однако суммарный размер модуля в строках вендором не лимитируется.

4. Что такое «монстр»

Фильтр «Монстры» в интерфейсе присутствует, и визуальная красная метка на функциях проставляется. В руководстве вендора монстром названа функция с сотнями и тысячами вызовов. На наших замерах картина иная: колонка «Вызовы» отражает исходящие вызовы, а признак is_god (по API) установлен у 43 из 300 функций верхнего списка по длине. Алгоритм выставления метки вендором не раскрывается: среди помеченных есть функции от 101 строки, а среди непомеченных встречаются функции до 335 строк. Признак не сводится к одной лишь длине строки. Использовать фильтр как ориентир первоочередных кандидатов на рефакторинг полезно, однако объяснять его читателю простой формулой без консультации с вендором некорректно.

5. Циклические зависимости

Режим «Циклы» показывает кольца модулей по убыванию веса (вес — совокупное число вызовов вдоль кольца), интерактивный граф и перечень «Где разорвать» со слабейшими рёбрами. В нашей системе обнаружено три кольца: 64 модуля (235 рёбер, вес 3 838), 3 модуля (вес 8) и 2 модуля (вес 6). Для архитектора это важный ориентир: крупное кольцо невозможно разорвать одним действием, начинать декомпозицию следует со слабейших связей с весом 1–2.

Рисунок 3. Граф циклических зависимостей модулей и слабейшие рёбра

Рисунок 3. Режим «Циклы» в Analyzer 1C: кольцо из 64 модулей ядра (вес 3838) и таблица слабейших связей для пошаговой развязки

6. План разделения общего модуля

Практический порядок декомпозиции на основе собранных метрик:

  1. Инвентаризация функций. Выписать функции перегруженного модуля и сгруппировать их по доменным направлениям: проведение, печатные формы, интеграционный обмен, проверки, расчёты, служебные алгоритмы.
  2. Определение границ ответственности. Каждое доменное направление выносится в отдельный общий модуль. Функции, вызывающие друг друга внутри домена, остаются вместе; перекрёстные связи контролируются по графу вызовов.
  3. Минимизация интерфейса. Делать экспортными исключительно те процедуры и функции, к которым обращаются внешние потребители. Вспомогательные методы остаются локальными.
  4. Пошаговая итерация. Выносить функционал строго по одному направлению, выполняя синтаксический контроль платформы и автоматизированные тесты после каждого шага.
  5. Корректные имена модулей. Имя общего модуля не должно содержать точку (см. поведение платформы в разделе 7). Концепция «Область.Назначение» недопустима; корректный стандарт: РаботаСДокументамиПроверки, РаботаСДокументамиПечатныеФормы.

7. Пример: до и после, проверенный платформой

В исходных теоретических примерах нередко встречается вызов вида ТабДок.ВывестиСтроку(Док.Номер). У объекта ТабличныйДокумент такого метода не существует: в рантайме платформа генерирует исключение «Метод объекта не обнаружен (ВывестиСтроку)». Штатная проверка модулей (/CheckModules) ошибку пропускает, так как параметр не типизирован. Синтаксический контроль не гарантирует работоспособности кода.

Проверенный рабочий вариант (до рефакторинга):

1Процедура СформироватьПечатнуюФормуИПроверить(Док, ТабДок) Экспорт
2	// Проверка заполнения
3	Если Не ЗначениеЗаполнено(Док.Контрагент) Тогда
4		ВызватьИсключение "Не указан контрагент";
5	КонецЕсли;
6
7	// Формирование печатной формы
8	ТабДок.Очистить();
9	ТабДок.Область(1, 1).Текст = Док.Номер;
10КонецПроцедуры

После разделения: модуль РаботаСДокументамиПроверки:

1Функция ПроверитьЗаполнениеПередПечатью(Док) Экспорт
2	Результат = Новый Структура("Ошибка, ТекстОшибки", Ложь, "");
3	Если Не ЗначениеЗаполнено(Док.Контрагент) Тогда
4		Результат.Ошибка = Истина;
5		Результат.ТекстОшибки = "Не указан контрагент";
6		Возврат Результат;
7	КонецЕсли;
8	Результат.Ошибка = Ложь;
9	Возврат Результат;
10КонецФункции

и модуль РаботаСДокументамиПечатныеФормы:

1Процедура СформироватьПечатнуюФорму(Док, ТабДок) Экспорт
2	ТабДок.Очистить();
3	ТабДок.Область(1, 1).Текст = Док.Номер;
4КонецПроцедуры

Результаты проверки на платформе 8.3.27.2130: пакетный запуск /CheckModules -ThinClient -Server -ExternalConnection проходит без предупреждений и ошибок. Вызов методов через внешнее COM-соединение с тестовой структурой документа выполняется корректно. Имя модуля с точкой (РаботаСДокументами.Проверки) при пакетной загрузке XML-выгрузки платформа молча пропустила: код возврата 0, диагностических сообщений нет, однако новый модуль в дереве метаданных базы не появился. При разделении модулей через файлы выгрузки именования с точкой недопустимы.

📎 Файл к статье

В прикреплённом архиве — 1c-refactor-analyzer-companion.zip (1 $m):

  • РаботаСДокументами_Монолит.bsl — исходный нерефакторенный модуль-монолит с антипаттерном «Божественный объект» (смешение валидации и формирования табличного документа);
  • РаботаСДокументамиПроверки.bsl — эталонный модуль проверок по стандартам 1С:ИТС с чистым интерфейсом ПроверитьЗаполнениеПередПечатью(Док);
  • РаботаСДокументамиПечатныеФормы.bsl — выделенный модуль вывода печатных форм СформироватьПечатнуюФорму(Док, ТабДок);
  • bsl_module_analyzer.py — автономный консольный статический анализатор кода 1С (расчёт LOC, веса ветвлений, выявление циклических зависимостей модулей и расчёт слабейших рёбер для их разрыва);
  • test_naming_dot_trap.py — модульные тесты ловушки наименования модулей с точкой (РаботаСДокументами.Проверки) и эмуляция платформенного роутинга 1С;
  • verify_companion.py — сквозной проверочный скрипт автоматического аудита всех материалов архива (100% PASS);
  • README.md — подробная инструкция по исследованию и применению шаблонов на реальных базах.

Файл прикреплен в верхней части страницы в блоке скачивания материалов.

8. Что не проверено

  • Поведение Analyzer 1C на компактных конфигурациях: на одной установке действует ограничение в одну систему.
  • Внутренний алгоритм фильтра «Монстры», точная семантика колонки «КНТ» и расхождение колонки «В цикле» со значениями REST API.
  • Экран «Граф вызовов» на всей конфигурации (в этой статье детально исследовался экран «Циклы»).
  • Штатный экспорт отчётов в форматы Excel или HTML: в проверенных режимах кнопка экспорта не обнаружена.
  • Долгосрочный эффект рефакторинга на скорость сопровождения: эмпирические замеры не проводились.
  • Метрики типовых конфигураций вендора (ERP, УТ 11, БП 3.0): исследованная конфигурация — отраслевая.

9. Источники

  • Карточка решения: Analyzer 1C на Маркетплейсе Infostart (руководство пользователя использовано для верификации названий режимов).
  • Метрики и снимки получены на реальном стенде 13.10.2026, скрипты и данные проверки зафиксированы в репозитории проекта.

Обсуждение

Какие функции и модули в вашей практике признаются перегруженными и по каким признакам: количество строк, число ветвлений цикломатической сложности, частота вызовов или регулярность коммитов? Каких метрик вам не хватает в инструментах статического анализа 1С? Поделитесь вашим опытом в комментариях.

 
Нинель Адольевна Щербакова
Нинель Адольевна Щербакова (Ninel_S)
Архитектор • SRE & DevOps инженер • HighLoad 1С
Автор 70 публикаций на Infostart. Разработчик NOPik, SRE-Suite-for-1C и мультиагентных ассистентов для платформы 1С:Предприятие.

Данные замеров сняты на реальном стенде 13.10.2026 с одной конфигурации; результаты отражают метрики исследуемой системы.

Вступайте в нашу телеграмм-группу Инфостарт

Analyzer 1C рефакторинг 1С общие модули анализ функций граф вызовов циклические зависимости метрики кода BSL статический анализ поддержка конфигурации 1С-разработчик технический долг

См. также

Инструментарий разработчика Рефакторинг и качество кода Разработчик 1С 8.3 Абонемент ($m)

Проверила, что Analyzer 1C 2.7.65 умеет по руководству и по ответам его REST: граф вызовов, запросов и прав есть; готовых проверок правил команды и CLI для них в исследованной поставке не нашла. Записала договорённости команды правилами, сняла базовую линию на типовой УТ 11.5 (1776 старых нарушений по шести правилам) и на «Нано-УТ» заложила 5 новых: проверка нашла все пять, ложных 0. Прилагаются инструмент с 92 тестами и материалы опыта.

1 стартмани

29.10.2026    367    Ninel_S    0    

2

Рефакторинг и качество кода Разработчик 1С:Предприятие 8 Россия Бесплатно (free)

Одна проверка в обработчике кнопки может выглядеть достаточной, пока ту же операцию не вызовут из другого места. На примере управляемой формы разберём, почему так происходит, как разместить проверку в общей серверной функции и чем отличается удобная проверка ввода от обязательного условия выполнения операции.

29.10.2026    295    YA_777378709    0    

4

Рефакторинг и качество кода Разработчик Бесплатно (free)

Рассказываем, почему качественный код – это не техническая прихоть, а актив, который помогает бизнесу быстрее адаптироваться к изменениям и запускать новые фичи без бесконечного преодоления техдолга. Показываем, как объяснить бизнесу ценность рефакторинга через понятные признаки: замедление разработки, неточные оценки, страх перед legacy и хрупкость системы. Разбираем, почему неправильный рефакторинг может быть дороже его отсутствия, какие анти-паттерны ломают процесс и как не превратить улучшения в бесконечную переделку ради переделки. Объясняем, как сделать рефакторинг частью культуры команды: договориться с бизнесом, научить разработчиков видеть проблемные места, закрепить правила и поддерживать улучшения на уровне тимлидов, архитекторов и всей команды.

28.10.2026    395    Pavel791    0    

2

Рефакторинг и качество кода HighLoad оптимизация Системный администратор Разработчик Стажер 1С 8.3 Абонемент ($m)

Если к HTTP-сервису 1С обращаются сразу несколько программ, сколько запросов в секунду он успеет обработать? Я опубликовала простой HTTP-сервис на нашей "подопытной" конфигурации «Нано-УТ» (файловая база, Apache, без прав администратора) и нагрузила его скриптом на Python. Ответ: около 15-16 запросов в секунду, сколько бы клиентов ни обращалось одновременно. Запросы ждут своей очереди, и при 32 клиентах ответ приходит через 2 секунды вместо 64 мс. Заодно разобрала скрипт из первого варианта статьи: он «проверял» сервер, который отвечал по одному, и считал ошибки вместе с успешными ответами. В архиве исправленный скрипт, учебный сервер, HTTP-сервис для 1С и инструкция по запуску.

1 стартмани

23.10.2026    467    Ninel_S    3    

2

Рефакторинг и качество кода EDT СКД Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)

Одиннадцать граблей схем компоновки, которые не видно в конструкторе и не ловит EDT, на реальных отчетах БП КОРП. Формат числа задается в двух местах, и условное оформление варианта перебивает формат поля. Ресурс складывает штуки с часами, и помогает выражение «только когда единица одна». Ресурс пуст в детальных записях, параметр не появляется в шапке без userSettingID, valueListAllowed ломает границы периода, Остатки и СрезПоследних с параметром периода падают с «Несоответствием типов», title без xsi:type дает «Исключение XDTO» при загрузке. В конце код проверки схемы из файла до обновления базы, сводная таблица и чеклист.

16.10.2026    421    Konstmax13    2    

2

Инструментарий разработчика Нейросети Рефакторинг и качество кода EDT Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)

Как ИИ-агент (Claude Code) работает в живом EDT-проекте 1С:Бухгалтерии КОРП 3.0: из чего собрать стенд с MCP-сервером для EDT, как ставить задачи агенту, где он ломает проект и какие проверки это ловят. Реальные случаи: рукописные метаданные, ронявшие конфигуратор; четыре дня зависшего обновления из-за порядка блоков в Rights.rights; ошибки, которые EDT пропускает, а платформа нет; сплошная сверка вместо «вроде работает». В приложении шаблон CLAUDE.md, шаблон правила, чеклист перед обновлением базы и скрипты проверки ролей и схем СКД.

15.10.2026    3333    Konstmax13    11    

11

Рефакторинг и качество кода Тестирование QA Разработчик 1С 8.3 Абонемент ($m)

Инженерный анализ влияния (Impact Analysis) при изменении общего метода в 1С:Предприятии: почему штатный поиск ссылок скрывает 99% зависимостей и как обратный обход графа вызовов выявляет 370 скрытых потребителей на глубине 3 уровней. В статье — верификация сквозной цепочки обмена с маркетплейсом; в архиве-компаньоне — автономный BFS-анализатор на Python, слепки графа и план регрессионного тестирования.

1 стартмани

12.10.2026    268    Ninel_S    0    

2

Нейросети Рефакторинг и качество кода Разработчик 1С 8.3 Абонемент ($m)

На примере ревью BSL-кода в Codex поймём, почему замечания о скидке и округлении требуют контракта функций. Для исходного и исправленного модулей выполнены 14 проверок поведения на 1С:Предприятии 8.3.27.2130: исходник прошёл 8 из 14, исправленный код - 14 из 14. В этой практической статье - условия постановки опыта, а в архиве - оба заключения агентов и код.

1 стартмани

12.10.2026    409    Ninel_S    2    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. vis_tmp 33 19.10.26 11:06 Сейчас в теме
Подскажите какой практический вред от т.н. "перегруженных модулей"?
Как и чем они вредят работе конфигурации?
2. Ninel_S 214 19.10.26 11:24 Сейчас в теме
Спасибо, Ваш вопрос очень важен для нас ;-)

Вред по видам и типам в следующем:

Вред для пользователя - платформа компилирует общий модуль целиком при первом обращении в сеансе. Вызов одной маленькой функции загружает в память весь модуль, на клиенте его код ещё и передаётся по сети. В исследованной базе самые длинные функции (до 1 887 строк) лежат в модуле формы, а он компилируется при каждом открытии формы.

Вред для разработки - захват одного модуля в хранилище блокирует всех, при обновлении типовой конфигурации сравнение-объединение идёт по тысячам строк, &ИзменениеИКонтроль в расширении ломается от любой правки поставщика, а через кольцо из 64 модулей правка в одном месте даёт регрессию в другом.

Скорость работы пользователя я на стенде не замеряла. Если интересно, сравню время первого вызова и память rphost до и после разделения.
Для отправки сообщения требуется регистрация/авторизация