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

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+ товаров в рознице без хаоса и ошибок — клиент-серверное решение, где сканируешь ШК в магазине и сразу получаешь КМ на принтере, независимо от кассового ПО. Практический опыт, регламент и готовый комплект кода внутри.

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

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

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Рефакторинг и качество кода Программист 1С 8.3 1С 8.5 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Абонемент ($m)

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

2 стартмани

08.07.2026    399    4    NikolayMaerov    0    

4

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

На проекте сложного обновления 1С:ERP 2.4.14.181 до версии 2.5.22.106 нам было нужно уложить обновление в технологическое окно 48 часов (выходные). Исходный замер, с учетом промежуточных релизов 2.5.8.443, 2.5.12.270, 2.5.17.234, 2.5.22.106, показал требуемое время в 659 часов…

07.07.2026    2348    1c-izh    19    

19

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

Обновление ролей в расширении 1С отличается от аналогичного процесса в основной конфигурации. Ситуация осложняется, когда доработки вносятся не в «обычное», а в поставляемое расширение.

26.06.2026    825    1c-izh    3    

5

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

Code review в 1С часто превращается в спор вкусов: “мне не нравится”, “переделай”, “так не делают”. В статье разбираю другой подход: проверять не разработчика, а риск для системы. Показываю, как формулировать замечания без токсичности, где заканчивается личное предпочтение и начинается реальная проблема, почему ревью должно развивать разработчика, а не только исправлять код

24.06.2026    760    NikolayMaerov    4    

6

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

Показываем, как встроить ИИ-помощника в code review 1С без Git, SonarQube и EDT – только с Конфигуратором, RAG-контекстом и набором MCP-инструментов. Разбираем архитектуру решения на Open Web UI и OpenRouter, методику сравнения моделей по Precision, Recall, BonusRate и PenaltyRate, а также объясняем, почему контекст влияет на качество ревью сильнее, чем выбор самой модели. На реальных примерах показываем, какие ошибки ИИ находит хорошо, где все еще нужен архитектор и почему на старте пилота время ревью может не сократиться, а вырасти. В финале делимся метриками внедрения и выводами для команд, которые хотят повторить такой подход у себя.

17.06.2026    1024    NVyunova    1    

3

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

Кажется, что code-review с помощью искусственного интеллекта устроено просто: достаточно отправить код в LLM, задать промт и получить список замечаний. На практике такой подход быстро упирается в недетерминированность результата, неверную оценку критичности ошибок в 1С-коде и рекомендации, которые сложно отличить от полезных замечаний. Описываем гибридный подход к автокод-ревью: статический анализатор работает вместе с LLM, а база знаний из стандартов 1С превращается в набор машиночитаемых норм. Такая архитектура помогает снизить количество галлюцинаций, точнее определять критичность нарушений и постепенно развивать качество ревью через итеративное пополнение правил.

09.06.2026    1962    Repich    5    

9

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

Чем активнее развивается старая система, тем страшнее бывает её менять. Снаружи всё выглядит живым: релизы выходят, бизнес получает новые функции, пользователи работают. Но внутри уже появляются фразы, после которых разговор заканчивается: «это лучше не трогать», «там когда-то всё упало», «давайте сделаем рядом». И в какой-то момент становится непонятно: система ещё развивается — или команда уже просто учится обходить опасные места.

04.06.2026    1050    IgorVasilyev    29    

5

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

MetaVision for 1C PRO — профессиональная версия статического анализатора и визуализатора кода. Загружает выгрузки конфигураций, расширения и внешние файлы, за секунды строит графы функций, находит уязвимости безопасности и подсвечивает проблемы производительности. В арсенале: визуализация логики в виде графов условий, циклов, транзакций и вызовов, статический аудит безопасности с поиском RCE, SSRF, COM-инъекций и паролей в коде, выявление запросов в циклах и вложенных блокировок, полнотекстовый поиск по всем модулям, встроенный редактор с конвертером запросов и автоформатированием, а также честная статистика по объектам и функциям. Главное новшество PRO — до пяти конфигураций одновременно с мгновенным переключением, наложение до пяти расширений как в конфигураторе, анализ внешних файлов в единой связке с основной конфигурацией и пять тем оформления. Инструмент для тех, кто ведёт несколько проектов параллельно и хочет видеть полную картину в одном окне — быстро, наглядно и безопасно.

7 стартмани

19.05.2026    3348    35    KHoroshulinAV    7    

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

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

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

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

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

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

С наступающим!
Успехов тебе в обходе костылей!
12. DmitryKlimushkin 15.12.25 20:56 Сейчас в теме
2. ixijixi 2156 15.12.25 10:31 Сейчас в теме
Такова эта история
И больше никакова!
akR00b; ef42; 0x00; +3 Ответить
3. GarriSoft 643 15.12.25 10:36 Сейчас в теме
(2)
История, конечно, такова, а вот понятие юмора - у всех разное.
13. Suker86 86 15.12.25 22:35 Сейчас в теме
Зачетно, жизненно !
Недавно краем глаза увидел расчет отложенного налога от 1С с округлением, они копейку гоняют туда сюда, она вылезает в итоге в той строке, где налога вообще не должно быть, забавно. Раз в квартал копейка вылезает :) Причем там такие комменты от 1С, прямым текстом пишут в комментах - не трогай. Округление по вертикали, по горизонтали, а считает всё равно неверно :)
14. GarriSoft 643 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 643 16.12.25 09:54 Сейчас в теме
(15)
Вот это я понимаю - настоящая байка из склепа!
Код, который учитывает длину фамилии, это явно чей-то очень изысканный костыль.

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

Хотя, может быть, это уже не программирование вовсе, а высшая нумерология от 1С!
Может быть, тот разработчик из 1С верил, что звезды и количество букв в фамилии влияют на бюджет страны сильнее, чем Налоговый кодекс, времена тогда были не простые.
18. rozer 323 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 Сейчас в теме
Класс! Прочитал на одном дыхании) спасибо!
Для отправки сообщения требуется регистрация/авторизация