Проблемы формы "Балансовые счета" в "Отчетах ЦБ"

Измайлов Феликс
Чеботарев Игорь

Сразу хотелось бы предупредить всех читателей, что данный материал не является истиной в первой инстанции. Просто нам хотелось бы поделиться своим опытом, добытым с немалым трудом в процессе работы с модулем "Отчеты ЦБ". Возможно, кому-то это окажется полезным. Опять-таки не факт, что наши изыскания полностью верны. Если вы обнаружите какие-то ошибки и замечания, с удовольствием выслушаем их и подкорректируем статью.

Итак, небольшое вступление о том, какие именно требования предъявляются к балансу банка, сдаваемому в ЦБ, и что в реальности получается при расчете в "Отчетах ЦБ" (необходимо учесть, что в ЦБ баланс сдается в тысячах, причем необходимо сдавать как ежедневный, так и ежемесячный баланс, а это разные периоды расчета, разные суммы, которые и округляться будут по другому. Необходимо совпадение исходящих остатков ежедневного баланса за последний день месяца и ежемесячного):

1. Исходящие остатки за предыдущий день должны совпадать с входящими остатками за текущий.
2. Есть набор счетов (например, 30102, 30110 и т.п.) у которых значение остатка в тысячах должно строго соответствовать остаткам в рублях округленным по правилам округления (к сожалению, не можем точно указать нормативный документ, регламентирующий это, но это не так и важно - главное, что он есть).
3. Существуют "парные" счета - счету в активе соответствует счет в пассиве. Остатки по таким счетам, а также обороты должны совпадать (это справедливо только для сводного баланса).
4. Если в рублях значение переменной равно 0.00, то в тысячах она не может быть ничем кроме 0 (после расчета это не всегда так).
5. Расхождение между рублями округленными по правилам округления до тысяч и рассчитанным значением в тысячах не должно превышать 1 единицы.
6. Совпадение валюты баланса (дебет равен кредиту, актив - пассиву).

Что же происходит при расчете балансов банка?

Начнем с того, что сама система хранения рассчитанных балансов не совсем логична. На каждый период расчета для одного филиала требуется порядка 30000 записей. Умножаем это на количество периодов, потом на количество филиалов и понимаем, почему cy_mreal.dbt имеет такие гигантские размеры (при длине записи в 38 байт!!!).

Далее перейдем к расчету. Так, чтобы пересчитать какой-то день, сперва удаляются рассчитанные переменные, затем они рассчитываются заново и добавляются в файл. Вполне логично, что расчет занимает гораздо больше времени, чем положено (к слову сказать, удаление переменных было убрано в 5 или 6 патче сборки 5.00.85 "Отчетов ЦБ"). Третий момент, на который стоит обратить внимание - входящие остатки за текущий день нигде не хранятся, а исходящие остатки за предыдущий день никак не учитываются. Это приводит к тому, что первое из требований не соблюдается. Все это относится к форме "Балансовые счета".

Расчет баланса в тысячах, и, как следствие, нормализация - задачи весьма нетривиальные. Алгоритм работы известен только разработчикам. А выходные данные, получаемые в результате расчета, в исходном виде нас не устраивали, т.к. практически все требования к балансу банка нарушались фактически ежедневно. Приходилось править ошибки вручную. В течение нескольких месяцев отлаживалась система контроля ошибок расчета, которая в итоге из нескольких разрозненных макросов вылилась в удобную утилиту с подробным отчетом. Следующий этап, видимо, будет заключаться в написании оболочки для редактирования переменных баланса, т.к. делать это в "Отчетах ЦБ" очень не удобно. Но это все дело будущего.

Экспериментальным путем мы выяснили, что процедура Нормализация "В тысячах 5" (которую надо делать после расчета формы) сбивает схождение исходящих и входящих остатков. Если сделать повторный расчет формы, то данное расхождение устраняется. Это наблюдается и при работе на сводных данных.

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

Что нужно делать для исправления всех вышеназванных недочетов, если банк многофилиальный? Благодаря системе контроля ошибок в представленном макросе, разосланным во все филиалы, исправление ошибок нужно осуществлять непосредственно в подсистеме "Отчеты ЦБ".

После исправления всех ошибок рассчитанных балансов в филиалах и головном банке, в сводных данных автоматически выполняются 1, 4 и 6 пункты требования (наиболее многочисленные ошибки возникают именно по первому пункту). В некоторых случаях на 5 пункт можно закрыть глаза. Таким образом, львиная доля проблем решается на местах, и трудозатраты на выверку сдаваемых данных значительно сокращаются.

В заключении хотелось бы отметить пару недостатков, которые очень напрягают при работе с "Отчетами ЦБ". Может быть, разработчики обратят на них свое внимание и исправят в одном из будущих патчей:

1. Ужасно напрягает при своде данных снимать "кресты" с ранее обработанных периодов. Как правило, требуется свести один, два периода и гораздо проще поставить пару "крестов", чем снимать их с десятков (а то и сотен) предыдущих периодов.
2. После свода сбиваются предыдущие периоды у филиалов в ежедневных балансах - вместо предыдущего дня подставляется предыдущий месяц.

Думаю, нет сомнений, что макрос для тестирования корректности данных мы выложили на сайте. Скачать его можно отсюда
checkrcb.rar (3,3 Кб)