История о том, как Вася Пупкин спас квартальный отчет Марьи Ивановны

15.12.25

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

История о легендарном отчете на 11 000 строк, копеечном расхождении и костыле 2014 года, который пережил все обновления. О том, как Василий спас квартальное закрытие, не тронув ни единой строчки кода монолита

Акт I: Гром с ясного неба

Дело было в самый разгар квартального закрытия. Вася Пупкин мирно пил свой третий кофе, размышляя о высоком - о том, как бы переписать обработку обмена так, чтобы она не падала каждый раз в полночь. И тут, как гром среди ясного неба, раздался звонок. Вася взял трубку и уже через секунду лицо его приняло то самое выражение, которое бывает у человека, внезапно вспомнившего, что он забыл сделать что-то очень важное, для директора.

Василий! Немедленно! - голос главного бухгалтера Марьи Ивановны звенел, как системное предупреждение о блокировке базы.
В сводном отчёте за апрель, расхождение на одну копейку!
Сегодня последний день сдачи!
Срочно разберитесь и исправьте!

Вздохнув, Пупкин открыл конфигурацию. Он знал, о каком отчёте речь. Это был тот самый легендарный отчет, в модуле которого красовался артефакт эпохи - комментарий легендарного предшественника Димы, ушедшего в нирвану (или в фриланс) ещё во времена 8.2. Надпись гласила:

//Тут костыль. Не трогать до Второго Пришествия. Ну или до Вани. Ваня, если читаешь — привет.

А под комментарием была процедура РассчитатьЧТОТООЧЕНЬВАЖНОЕ(). Объём - ровно 11 000 строк. Это была не просто программа. Это была летопись, написанная руками десятков разработчиков за полтора десятилетия. Код времён 7.7 соседствовал с конструкциями 8.3, попытки рефакторинга утопали в паутине условий, а в самом центре, как чёрная дыра, находился цикл, который, по некоторым слухам, однажды самопроизвольно сгенерировал накладную.
 

Акт II: Погружение в лабиринт

Вооружившись крепким чаем и пачкой печенья "Юбилейное", Вася начал погружение. Первые несколько сотен строк были скучны, как документация к типовой конфигурации, инициализация переменных с именами:

Перем А;
Перем А_Старое;
Перем А_Новое_Но_Наверное_НеФакт;
...

А дальше начиналась магия.
Логические конструкции достигали невиданной сложности:

Если Найти(Контрагент, "ИП Сидоров") > 0   Тогда
    // Что-то очень важное для Сидорова
ИначеЕсли Найти(Контрагент, "РОГА И КОПЫТА") > 0 Тогда
    // Логика на случай, если в названии есть рога или копыта
...
КонецЕсли;

На отметке в две тысячи строк Вася обнаружил процедуру-призрак ОбработатьОсобыйСлучай(). Она вызывалась из множества мест, но вся её внутренность была закомментирована. Рядом красовалась записка:

//Здесь был баг. Мы его победили. Но стены остались. Удалять страшно.

А на строке 5500 его ждала перекличка поколений:

// Дима: тут баг был, я пофиксил. должно работать.
// Юра-2015: Проверил, вроде норм.
// Семен-2016: Кто пишет такие комментарии?!
// Неизвестный-2020: Ребята, тут явно нужен рефакторинг...

К концу дня Вася Пупкин смотрел в свой монитор стеклянным взглядом. Он начал думать категориями того кода, который пытался понять сегодня, весь день.

Фраза жены: "Если пойдешь в магазин, купи хлеба" мысленно оформилась у него как:

Если ПойтиВМагазин Тогда 
   КупитьХлеб = Истина; 
КонецЕсли;


Акт III: Озарение

На следующий день давление со стороны Марии Ивановны достигло критического уровня. Звонки следовали каждые полчаса, а иногда и чаще. И тогда, в момент наивысшего отчаяния, Васю осенило. Он оторвался от эпического полотна в 11 000 строк и посмотрел на окружение этого отчёта.

Там, среди прочих внешних обработок, скромно лежал файл ДопОбработкаОтчета.epf. Висел он там с такими древними датами изменения, что, казалось, помнил ещё интерфейс Такси в виде концепта. Вася открыл его. И обомлел...

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

Процедура РассчитатьИТОГО()
    // Временный костыль от Димы, 2014г. Баг в 8.2.14. НЕ УДАЛЯТЬ!!!
    ИтоговаяСумма = ИтоговаяСумма * 0.99999999;
КонецПроцедуры

Вся титаническая работа гигантского модуля, все 11 000 строк его логики, в конечном счёте, умножались на этот самый коэффициент. Коэффициент, который должен был быть удалён после обновления платформы до 8.2.15, но благополучно пережил все миграции, подобно таракану после ядерной зимы. Та самая злополучная копейка и появлялась тогда, когда исходная сумма после всех вычислений оказывалась такой, что умножение на 0.99999999 давало разницу в одну копейку.
 

Акт IV: Финал (он же "Костыль поверх костыля")

Тронуть 11 000 строк? Это было бы святотатством, равносильным попытке переписать ядро типовой конфигурации. Удалить обработку Димы? Невозможно. Комментарий «НЕ УДАЛЯТЬ!» был написан с такой энергетикой, что даже система контроля версий, при попытке сделать коммит, не решилось бы на это.

Вася Пупкин поступил как истинный наследник легендарного Димы. Он открыл внешнюю обработку ДопОбработкаОтчета.epf и аккуратно дополнив наследие предка:

Процедура РассчитатьИТОГО()
    // Временный костыль от Димы, 2014г. Баг в 8.2.14. НЕ УДАЛЯТЬ!
    // ИтоговаяСумма = ИтоговаяСумма * 0.99999999;
    
    // Доп.костыль от Васи, 2025г. Исправлен копеечный баг. ТОЖЕ НЕ УДАЛЯТЬ!
    ИтоговаяСумма = Окр(ИтоговаяСумма, 2);
КонецПроцедуры

Он сохранил обработку под новым именем — ДопОбработкаОтчета_сКопейкой.epf, подключил её к отчёту вместо старой и запустил расчёт. Расхождение в копейку исчезло. Мария Ивановна успокоилась. В бухгалтерии воцарился мир, нарушаемый лишь привычным стуком клавиш.

А уже после, листая другие части конфигурации, Вася нашёл в модуле справочника "Номенклатура" ещё одно послание, будто бы оставленное специально для него:

// ВНИМАНИЕ! Тот, кто придёт рефакторить 11000 строк в отчёте "ТотСамый" - ищи не в глубине, а на поверхности. 
// И помни: лучше старый костыль, чем новый баг.
// Дима.
// P.S. Кофе в автомате снова нет. Несите свой.


Эпилог

Такова эта история. Порой решение сложной задачи в 1С - это не героический рефакторинг, а аккуратное наслоение. Мы не пишем новый код, мы делаем апгрейд истории. А гигантские монолиты в 11 000 строк и скромные обработки в три строки - это летопись нашей работы. Это не просто костыли, коллеги. Это технологические костыли - особый класс решений, где элегантность уступает место выживаемости, а чистота кода - исторической преемственности. Они обрастают легендами, комментариями и своим собственным жизненным циклом, становясь неотъемлемой частью нашей системы.

Эти костыли - наша общая память, боль и своеобразная гордость. Как шрам, который есть у каждого, кто хоть раз написал комментарий "временное решение" с мыслью "потом обязательно перепишу".

P.S. Мария Ивановна, оценив скорость решения, лично принесла Васе пирожок с капустой. Что, впрочем, не удивительно, она была женщиной отходчивой, хоть и очень строгой.

На этом всё. Коллеги, пусть ваши костыли будут технологичными, а наследие - понятным.
С наступающим НГ!

 

Другие статьи автора:

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

См. также

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

Костыль, рефакторинг или архитектура - делюсь своим видением того, как выбирать правильный инструмент под конкретную задачу. За годы в 1С я выработал алгоритм "трех зон", который помогает мне не только писать код, но и говорить с бизнесом на его языке. В статье рассказываю, когда временное решение оправдано, а когда оно становится миной замедленного действия. Никаких нотаций, только мой опыт принятия решений, где каждая строчка имеет цену. Буду рад, если моя система поможет вам по-новому взглянуть на привычную рутину.

19.12.2025    1690    GarriSoft    14    

17

Нейросети Рефакторинг и качество кода Программист Бесплатно (free)

ИИ для код-ревью – не просто модный тренд, а реальный инструмент, который уже помогает разработчикам экономить время и повышать качество кода. В статье разбираемся, как запустить локальную LLM на базе Ollama, подключить ее к Git через Webhook и Python-скрипт, а также какие параметры модели отвечают за точность и галлюцинации. Делимся схемой работы, настройками и результатами тестирования, доказывая, что автоматизированное код-ревью действительно может работать – даже без космического бюджета.

30.10.2025    4511    user2100900    4    

17

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

Ошибки в запросах совершают все – даже самые опытные разработчики. На реальных примерах из код-ревью показываем, какие промахи незаметно закладывают мины замедленного действия в коде и работе базы. Статья поможет взглянуть на привычные запросы под другим углом и составить собственный чек-лист для уверенной и чистой разработки.

28.10.2025    5314    vaillant    35    

16

Нейросети Рефакторинг и качество кода Обновление 1С Программист Бесплатно (free)

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

24.10.2025    3145    1c-izh    6    

8

Обновление 1С Рефакторинг и качество кода Механизмы платформы 1С 1С 8.3 Отраслевые 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 3.0 1С:Документооборот Абонемент ($m)

Конфигурация "Анализ конфигураций (версия 5)" - позволяет проверять любые конфигурации, расширения, отчеты и обработки на наличие ошибок, связанных с вызовом экспортных функций и процедур общих модулей и модулей менеджеров объектов. Проверяются ошибки: 1) Метод объекта не обнаружен 2) Недостаточно фактических параметров. 3) Слишком много фактических параметров. Рекомендуется выполнять при подготовке обновлений. Анализ расширений - позволяет выводить подробный количественный состав расширений по объектам, определить случаи пересечения одного и того же функционала в разных расширения, выявить использование в модулях аннотации "вместо".

10 стартмани

17.10.2025    6159    36    Suker86    18    

21

Рефакторинг и качество кода Программист 1С:Предприятие 8 1С:Библиотека стандартных подсистем Абонемент ($m)

Сервер SQL хранит у себя данные по текущему состоянию и выполнению запросов. Например, какой запрос сколько раз выполнялся и сколько времени было потрачено. В топ таких запросов часто будут попадать тяжелые запросы и неоптимальные - которые и нужно будет найти и оптимизировать.

1 стартмани

06.10.2025    1597    9    Alex_Smolensky    25    

4

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

Использование Библиотеки стандартных подсистем позволяет разработчикам 1С значительно ускорить процесс создания решений за счет готового универсального кода, поддерживаемого и обновляемого официальным вендором. В статье рассказывается про роль и применение «Библиотеки стандартных подсистем» (БСП), примеры интеграции и подключения подсистем.

23.09.2025    8190    AlexeyPROSTO_1C    1    

17

HighLoad оптимизация Рефакторинг и качество кода Программист Бесплатно (free)

Рассказываем о том, как не ухудшить производительность интеграционного решения в процессе разработки и рефакторинга, когда новых фич в коробке все больше, а требования по производительности все выше. На живом примере покажем реализованный подход с использованием таких инструментов, как Docker, Redash, Vanessa Automation.

02.09.2025    3245    user1827916    1    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DmitryKlimushkin 132 15.12.25 10:09 Сейчас в теме
Прочитал текст, попробовал перенести на реальность... Не легло.
Я, так понимаю, уже где-то корпоративы тренировочно-разминочные начались?) Киньте Марь Иванне ссылку на мою страничку, а то её этот Вася разорит на пирожках, ничего толкового так и не сделав)
4. GarriSoft 307 15.12.25 10:44 Сейчас в теме
(1)
Вам явно повезло, что ваша реальность проще!
Видимо, в ней нет legacy-кода, который читается как исторический роман с непредсказуемым финалом.
akR00b; pavlov_dv; +2 Ответить
5. DmitryKlimushkin 132 15.12.25 11:15 Сейчас в теме
(4) Ну, я-то на работе не балуюсь)
Если серьёзно, то уже достаточно давно я действую по поговорке:
- Ты сильный! Ты - справишься!
- Я - умный! Я даже браться за такое не буду...
Я либо берусь за решение самой проблемы в самой её первопричине, либо предоставляю ковыряться во всех этих "легациях" молодым и ретивым) Опыт показал, что перекладывание старья с боку на бок только старых блох беспокоит, никак не решая самой проблемы.
6. GarriSoft 307 15.12.25 11:26 Сейчас в теме
(5)
Понятно. Вы - умный. Вы даже за такое браться не будете, но Вася тоже не дурак - он сильный, справился и с легаси и со всем остальным.
Повезло же тем, кто может выбирать, пока другие разгребают задачи и делятся пирожками с коллегами.
Мир в балансе!
7. DmitryKlimushkin 132 15.12.25 11:36 Сейчас в теме
(6) А тут места для смеха и нет совсем, всё так и есть. Наступит момент, когда выплатишь все ипотеки, вырастишь и поставишь на ноги всех иждивенцев, а жить сможешь просто на пассивный доход. Тогда можешь работать только там, где интересно. А браться за любую ИТ-корягу уже и необязательно, легче заявление написать.
8. GarriSoft 307 15.12.25 11:45 Сейчас в теме
(7)
Не все могут попасть на уровень "Пошел ты!", но некоторым все же удается.
из к/ф "Игрок":
"
Кто-то о чем то просит, - Пошел ты!
Шеф разозлил, - Пошел ты!
"
отрывок: https://vk.com/video-182763495_456240013?t=1m30s

В этом и есть главный парадокс. Чтобы достичь уровня "Пошёл ты", нужно сначала долго и успешно говорить "Да, сделаю".
Вася как раз на этом этапе. А когда-нибудь и он, глядя на свои старые костыли, скажет новому Васе: "Ты сильный! Ты справишься!".
akR00b; ef42; +2 Ответить
9. GarriSoft 307 15.12.25 14:25 Сейчас в теме
(7)
Дмитрий, если говорить серьезно, то я прекрасно понимаю и разделяю ваше стремление к архитектурной чистоте и имея за плечами 28 лет опыта в 1С, я полностью согласен: костыли - это боль.

Но разница, как мне кажется, вот в чём:
Вы достигли права отказаться от подобных "коряг". И, наверное, это заслужено.
Я же написал шуточную историю о том, как необходимо было поставить этот "технологический костыль", чтобы обеспечить квартальное закрытие и удержать бизнес на плаву.

В этом и заключается мудрость "Сеньора-помидора": знать, когда нужно все переписать, а когда - сделать максимально быстро и безопасно то, что принесёт результат бизнесу прямо сейчас.
В этом и была суть этой байки из склепа

И самое главное, не стоит расценивать эту историю, как пропаганду нетрадиционных методик написания кода (говнокода).
Award; akR00b; +2 Ответить
10. DmitryKlimushkin 132 15.12.25 19:33 Сейчас в теме
(9) Ты нечаянно тряхнул соль на мою незажившую рану) Я и рад бы посмеяться, но накануне лазил по тем участкам кода, когда, прям, кровь из глаз. Ну, ты знаешь, да?) Я прочёл твой позитивный посыл не в том настроении - не принимай моё брюзжание на свой счёт!
11. GarriSoft 307 15.12.25 20:31 Сейчас в теме
(10)
Дмитрий, я прекрасно тебя понимаю!
У каждого Сеньора есть такая "незажившая рана", куда лучше не лезть без крепкого кофе. ;)

Всё в порядке, я и сам иногда брюзжу. Главное, наш опыт - это наша сила.

С наступающим!
Успехов тебе в обходе костылей!
12. DmitryKlimushkin 132 15.12.25 20:56 Сейчас в теме
2. ixijixi 2097 15.12.25 10:31 Сейчас в теме
Такова эта история
И больше никакова!
akR00b; ef42; 0x00; +3 Ответить
3. GarriSoft 307 15.12.25 10:36 Сейчас в теме
(2)
История, конечно, такова, а вот понятие юмора - у всех разное.
13. Suker86 62 15.12.25 22:35 Сейчас в теме
Зачетно, жизненно !
Недавно краем глаза увидел расчет отложенного налога от 1С с округлением, они копейку гоняют туда сюда, она вылезает в итоге в той строке, где налога вообще не должно быть, забавно. Раз в квартал копейка вылезает :) Причем там такие комменты от 1С, прямым текстом пишут в комментах - не трогай. Округление по вертикали, по горизонтали, а считает всё равно неверно :)
14. GarriSoft 307 15.12.25 22:46 Сейчас в теме
(13)
Это не копейка, коллега, это призрак прошлого архитектора!
Он будет появляться раз в квартал, напоминая, что идеальный код требует жертв, пока его не отрефакторят. Но, как мы знаем, это будет не сегодня.
Но тут главное - чтобы Марья Ивановна была довольна! 😉
hercules; +1 Ответить
20. SemandCheb 19.12.25 22:32 Сейчас в теме
(13) Почти такая же история с УХ 3.2.
В коде регламентного задания по переоценки валютных заявок на оплату когда
сравнивают "Выразить(результат деления 1 КАК Число(15,7)" с "результат деления 2"

ГДЕ
	(ВЫРАЗИТЬ(ЕСТЬNULL(КурсВалютыВзаиморасчетов.Курс * КурсВалютыОплаты.Кратность, 0) / ЕСТЬNULL(КурсВалютыВзаиморасчетов.Кратность * КурсВалютыОплаты.Курс, 1) КАК ЧИСЛО(15, 7))) <> ВТ_ОперацииСДатамиКурсов.КурсПлатежа / ВТ_ОперацииСДатамиКурсов.КратностьПлатежа
15. polos75 16.12.25 09:25 Сейчас в теме
Вспомнил, как долго искал в зуп 7.7 почему у Семина неправильно считается НДФЛ в мае, а у Петрова в июне.
После обновления ошибка ушла, а в пояснениях к релизу обнаружил: ндфл неправильно считался, если количество букв в фамилии сотрудника совпадало с номером месяца расчёта.
Жаль что не было времени разобраться и свободных дискет. Но когда-нибудь я найду тот релиз и посмотрю на код!
rozer; GarriSoft; +2 Ответить
16. GarriSoft 307 16.12.25 09:54 Сейчас в теме
(15)
Вот это я понимаю - настоящая байка из склепа!
Код, который учитывает длину фамилии, это явно чей-то очень изысканный костыль.

Хорошо, что дискет тогда не хватило, а то этот код мог бы изменить ваше мировоззрение навсегда!

Хотя, может быть, это уже не программирование вовсе, а высшая нумерология от 1С!
Может быть, тот разработчик из 1С верил, что звезды и количество букв в фамилии влияют на бюджет страны сильнее, чем Налоговый кодекс, времена тогда были не простые.
18. rozer 314 17.12.25 17:22 Сейчас в теме
(15) только это был ЗиК тогда а не зуп )
21. polos75 23.12.25 12:16 Сейчас в теме
(18) Точно, уже руки отвыкли печатать: зик, тис...
Один клиент до сих пор на зик 7.7 сидит и слезать не хочет, программирую ещё.
19. SemandCheb 19.12.25 22:17 Сейчас в теме
(15) Скорее всего совпали имена переменных, одна из которых использовалась в качестве индекса для обращения, а в другой подсчитывалось коло-во символов в фамилии
17. akR00b 25 17.12.25 08:08 Сейчас в теме
Класс! Прочитал на одном дыхании) спасибо!
Для отправки сообщения требуется регистрация/авторизация