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

28.01.26

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

История о легендарном отчете на 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. Мария Ивановна, оценив скорость решения, лично принесла Васе пирожок с капустой. Что, впрочем, не удивительно, она была женщиной отходчивой, хоть и очень строгой.

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

 

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

Маркировка в "древней" УТ 10.3 (10.3.6.8) и полноценный ТСД (Online) или как обойтись без перехода на УТ 11.5
Как подключить маркировку в древней УТ 10.3 без перехода на УТ 11.5 - все необходимые объекты, модули и доработки
Автоматическое обновление токенов Честного Знака в 1С
Автоматическое обновление токенов Честного Знака в 1С - готовое решение для УТ, КА, ERP, УНФ, Розницы и Бухгалтерии, которое избавляет от ручных обновлений и остановки процессов.
Дубликатор кодов маркировки (КИЗ) DataMatrix: Расширение 1С с проверкой в Честном Знаке (копирует ЛЮБЫЕ КИЗы!)
Автоматическое обновление токенов Честного Знака в 1С - готовое решение для УТ, КА, ERP, УНФ, Розницы и Бухгалтерии, которое избавляет от ручных обновлений и остановки процессов.
Маркировка остатков товаров на складе: Как сделать все быстро и без ошибок (мой практический опыт)
Маркировка остатков 10 000+ товаров без ошибок — готовое решение, которое исключает человеческий фактор, автоматизирует процесс и работает напрямую с 1С. Пошаговый опыт и готовое расширение внутри.
Маркировка остатков в распределенной рознице: Как промаркировать более 100 тыс. товаров в нескольких десятках магазинов без хаоса и ошибок
Маркировка остатков 100 000+ товаров в рознице без хаоса и ошибок — клиент-серверное решение, где сканируешь ШК в магазине и сразу получаешь КМ на принтере, независимо от кассового ПО. Практический опыт, регламент и готовый комплект кода внутри.

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

См. также

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

Разбираемся, что такое чистые функции и почему именно они становятся основой простого, понятного и адаптивного кода в 1С. Показываем, как выделение бизнес-логики в чистые функции упрощает переиспользование и делает модульное тестирование быстрым и эффективным, а также объясняем, почему без них сложно применять TDD. Демонстрируем на практических примерах, как перейти от «гвоздями прибитого» кода к архитектуре с минимальными зависимостями и удобной поддержкой.

02.04.2026    543    alex_sayan    13    

2

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

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

20.03.2026    794    ksnik    4    

5

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

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

17.03.2026    1510    IgorVasilyev    51    

26

Рефакторинг и качество кода Программист 1С:Предприятие 8 1С:Комплексная автоматизация 2.х 1C:ERP Бесплатно (free)

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

09.02.2026    1636    Eugen-S    10    

4

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

В статье рассказываю, как писать код 1С в VS Code с помощью бесплатных AI-моделей 🤖 Используем GLM-4.7 через Roocode + Cerebras (до 1 миллион токенов в день). Подключаем бесплатные MCP. Генерируем новый код и смотрим, как AI справляется с задачами.

06.02.2026    13552    Ibrogim    77    

50

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

Некоторые задачи можно и нужно делегировать ИИ, а простые задачи можно отдавать бесплатным моделям. В статье коротко рассказываю про расширение roocode для vscode, инструмент openrouter и реальную задачу по рефакторингу кода.

02.02.2026    12524    Ibrogim    54    

49

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

Открываешь код и глаз начинает дёргается? Я собрал личный список ТОП-10 самых раздражающих и опасных ошибок в 1С, с примерами, юмором и практическими рекомендациями, как писать так, чтобы потом не было мучительно больно.

31.01.2026    3602    GarriSoft    89    

6

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

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

19.12.2025    2569    GarriSoft    14    

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

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

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

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

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

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

С наступающим!
Успехов тебе в обходе костылей!
12. DmitryKlimushkin 176 15.12.25 20:56 Сейчас в теме
2. ixijixi 2143 15.12.25 10:31 Сейчас в теме
Такова эта история
И больше никакова!
akR00b; ef42; 0x00; +3 Ответить
3. GarriSoft 459 15.12.25 10:36 Сейчас в теме
(2)
История, конечно, такова, а вот понятие юмора - у всех разное.
13. Suker86 79 15.12.25 22:35 Сейчас в теме
Зачетно, жизненно !
Недавно краем глаза увидел расчет отложенного налога от 1С с округлением, они копейку гоняют туда сюда, она вылезает в итоге в той строке, где налога вообще не должно быть, забавно. Раз в квартал копейка вылезает :) Причем там такие комменты от 1С, прямым текстом пишут в комментах - не трогай. Округление по вертикали, по горизонтали, а считает всё равно неверно :)
14. GarriSoft 459 15.12.25 22:46 Сейчас в теме
(13)
Это не копейка, коллега, это призрак прошлого архитектора!
Он будет появляться раз в квартал, напоминая, что идеальный код требует жертв, пока его не отрефакторят. Но, как мы знаем, это будет не сегодня.
Но тут главное - чтобы Марья Ивановна была довольна! 😉
hercules; +1 Ответить
20. SemandCheb 1 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 почему у Семина неправильно считается НДФЛ в мае, а у Петрова в июне.
После обновления ошибка ушла, а в пояснениях к релизу обнаружил: ндфл неправильно считался, если количество букв в фамилии сотрудника совпадало с номером месяца расчёта.
Жаль что не было времени разобраться и свободных дискет. Но когда-нибудь я найду тот релиз и посмотрю на код!
jan-pechka; rozer; GarriSoft; +3 Ответить
16. GarriSoft 459 16.12.25 09:54 Сейчас в теме
(15)
Вот это я понимаю - настоящая байка из склепа!
Код, который учитывает длину фамилии, это явно чей-то очень изысканный костыль.

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

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