Чёрный пояс 1С. Общий модуль или модуль объекта: где живёт бизнес-логика и три беды через год | infolimp.ru

Чёрный пояс 1С. Общий модуль или модуль объекта: где живёт бизнес-логика и три беды через год

16 мая 2026 · infolimp.ru

Автор: 1С Инсайдер · роль: практик 1С · проверка: типовые конфигурации и рабочие сценарии · 0 комментариев

Вы наверняка слышали этот спор за обедом не раз: один коллега зашивает всю бизнес-логику в общие модули, другой — раскладывает по модулям объектов и долго объясняет, почему так. Оба правы и оба ошибаются — в разных частях правды. Тема выглядит вкусовой, пока проект маленький; на конфигурации с пятилетним стажем доработок цена неверного выбора видна в каждом PR-ревью и в каждом рефакторинге. Давайте разберём по-взрослому, где живёт бизнес-логика, и какие три беды настигают «всё в общем модуле» примерно через год после первой доработки.

Что мы на самом деле сравниваем

Общий модуль и модуль объекта — это не «два места, где можно держать процедуру». Это две модели владения кодом:

Когда коллега говорит «вынеси в общий модуль, чтобы переиспользовать» — он имеет в виду первый сценарий. Когда другой говорит «оставь в модуле объекта» — он защищает второй. Разногласие возникает, когда конкретный кусок логики попадает в серую зону: вроде бы про документ, но и похожий есть у другого документа.

Три беды «всё в общий модуль» через год

СимптомЧто под капотомЦена
Модуль вырос до 4–6 тысяч строк «Бог-модуль»: ни одна правка не безопасна, потому что неизвестно, кто ещё вызывает PR-ревью занимает день, регрессионные баги в неочевидных местах
Граф вызовов невозможно прочитать Любая процедура вызывается отовсюду, неявные зависимости между подсистемами Любой рефакторинг под угрозой; новичок в команде боится трогать модуль
Бизнес-логика оторвана от данных Поведение, скажем, документа РеализацияТоваровУслуг ищется не в его модуле, а в каком-нибудь служебном общем модуле Новый разработчик три дня ищет, где «по правде» проводится документ

Где проходит граница

Кандидат на общий модуль

Процедура заслуживает места в общем модуле, если выполняет одно из условий:

Кандидат на модуль объекта

В модуле объекта логике место, если справедливо хотя бы одно:

Безопасный приём: тонкий модуль объекта + чистая утилита

// В модуле объекта документа РеализацияТоваровУслуг — тонкий обработчик
// в роли «диспетчера»: знает структуру документа, делегирует расчёт
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Если Не ЗначениеЗаполнено(Контрагент) Тогда
        Отказ = Истина;
        Возврат;
    КонецЕсли;

    // Чистая утилита из общего модуля — не знает про документ Реализация
    СуммаНДС = РасчётНалогов.ВычислитьНДС(СуммаДокумента, СтавкаНДС);
    НДСДокумента = СуммаНДС;
КонецПроцедуры

Обратите внимание: знание «у документа есть реквизит Контрагент, реквизит СтавкаНДС» живёт в модуле объекта. Знание «как считать НДС от суммы» — в общем модуле, и оно одинаково для трёх десятков разных документов. Никто не пересекается, граф вызовов читается, рефакторить можно по частям.

Старший товарищ, у которого больше шрамов: если вы стоите перед выбором и неясно — отложите процедуру в модуль объекта. Перенести её потом в общий модуль, когда станет ясно, что она там нужна, — пять минут работы и одна правка в одном месте вызова. Обратное движение — из перегруженного общего модуля в десяток модулей объектов — две недели и двадцать осторожных PR.

Чек-лист принятия решения

  1. Эта процедура работает с конкретным типом объекта или нет? Если с конкретным — модуль объекта.
  2. Она вызывается из обработчика платформы (ПриЗаписи, ПередПроведением и т.п.)? Если да — модуль объекта.
  3. Она читает состояние или его меняет? Если меняет — модуль объекта.
  4. Она вызывается из трёх и более разных мест, не связанных одним типом объекта? Если да — общий модуль.
  5. В её сигнатуре есть параметры «достаточно полные», чтобы не нужно было лезть «обратно» в исходный объект? Если да — кандидат в общий модуль.
  6. Если процедуру вынести в общий модуль, потребует ли это передавать «весь объект» как параметр? Если да — оставьте её в модуле объекта.
  7. Когда сомневаетесь — модуль объекта. Перенос «вверх» дешевле обратного.

Типичные ошибки, которые видны через год

Профессиональные решения для 1С и marketplace-интеграций — каталог отчётов и инструментов на витрине НОПи.

Перейти в каталог решений →