
В системе долго жил унаследованный набор финансовых отчётов — рабочий, но написанный для более старой версии платформы и местами устаревший под неё. Переписали как собственный код: Оборотно-сальдовую ведомость, Главную книгу, Расчёты с контрагентами, Баланс, Отчёт о прибылях и убытках, Активы, Бюджет, налоговый и журнальный аудит — и заодно нашли несколько реальных проблем, которые раньше просто никто не заметил.
Отчёт, который всегда показывал ноль
Отчёт о движении денежных средств существовал в системе как пункт меню, но ни один денежный счёт не был привязан ни к одной статье движения — «поступления», «выплаты» и так далее. Отчёт формально работал и всегда показывал нули. Написали прямой метод классификации: каждая проводка по кассе и расчётному счёту относится к операционной, инвестиционной или финансовой деятельности по счёту встречной стороны, переводы между своими денежными счетами исключаются, а движения с несколькими встречными счетами делятся пропорционально. Сошлось до копейки с фактическим остатком денег на конец периода и со строкой баланса.
Отчёт, который зависал
Расчёты с контрагентами и Главная книга на длинном периоде считались минутами: для каждого счёта или партнёра код заново пробегал по всем проводкам периода — квадратичная сложность. Сгруппировали проводки один раз в словарь по счёту и партнёру вместо пересканирования на каждой итерации. Восьмимесячный период на реальных данных (569 партнёров, 29 счетов) стал считаться меньше секунды вместо зависания.
Функции, которые ни разу не срабатывали
В коде активов и бюджета обнаружились два места, написанные под более старый интерфейс платформы: создание записи ожидало данные одним словарём, а текущая версия всегда передаёт список, и вызов пересчёта валюты обращался к методу, которого в платформе давно нет. Ни то ни другое не всплывало раньше просто потому, что этими функциями ещё никто не пользовался — активов и бюджетов в системе пока не заводили. Проверили на модельных примерах: линейная амортизация, амортизация с неполным первым месяцем, ускоренный метод — суммы по строкам сходятся точно.
Свой экран вместо только PDF
Дополнительно собрали интерактивный экран отчётов — свёрнутые и развёрнутые группы строк, сравнение периодов, выгрузка в Excel и переход из строки отчёта прямо в проводки. Раньше отчёты открывались только мастером с параметрами и уходили сразу в PDF; теперь сначала — живой экран, а PDF остаётся кнопкой на нём же.
Итог
Десять отчётов переехали на собственный код без изменения поведения там, где оно было верным, и с реальным исправлением там, где оно не работало. Самый неожиданный результат — рабочий отчёт о движении денег, которого фактически не было.