Безумие
Периодически возникает надобность делать алгоритмы, имитирующие мышление бухгалтера или воссоздающие информацию по ее некой производной, введенной руками в базу данных. Напрягает страшно.
Например: есть связанные проводки по обоим сторонам счета, связь между которыми находится в голове бухгалтера и иногда в базе данных. Задача - заменить две связанные проводки на одну, исключив этот самый счет. В лучшем случае - соответствие проводок 1-1, 1-N. В самом мрачном случае - M-N и заодно еще часть проводок сторнирована, а часть положена противоположно другим. Мрачность усугубляется тем, что проводки лежат в старой системе, из которой я гружу данные в свою, и которая не накладывает никаких ограничений на смысл прокладываемых проводок.
Еще был гротеск, когда такие проводки пришлось сворачивать не имея информации о связи вообще. Только зная что она есть, т.е. внутренний счет закрывается под ноль. Решил подбором сумм с обоих сторон - т.е. все связи все таки были вида 1-N или N-1. Алгоритм подбирал для каждой суммы подходящие слагаемые с другой стороны.
Докатился еще до использования проводок вида Д(-) -> Д(+) или К(-) -> К(+), т.е. проводки только по дебету или только по кредиту. Такие проводки хороши тем, что не увеличивают обороты, если использовать их для внутренних перемещений внутри счета, и для некоторых случаев гораздо красивее отражают хозяйственную операцию, нежели обычные проводки.
Например: есть связанные проводки по обоим сторонам счета, связь между которыми находится в голове бухгалтера и иногда в базе данных. Задача - заменить две связанные проводки на одну, исключив этот самый счет. В лучшем случае - соответствие проводок 1-1, 1-N. В самом мрачном случае - M-N и заодно еще часть проводок сторнирована, а часть положена противоположно другим. Мрачность усугубляется тем, что проводки лежат в старой системе, из которой я гружу данные в свою, и которая не накладывает никаких ограничений на смысл прокладываемых проводок.
Еще был гротеск, когда такие проводки пришлось сворачивать не имея информации о связи вообще. Только зная что она есть, т.е. внутренний счет закрывается под ноль. Решил подбором сумм с обоих сторон - т.е. все связи все таки были вида 1-N или N-1. Алгоритм подбирал для каждой суммы подходящие слагаемые с другой стороны.
Докатился еще до использования проводок вида Д(-) -> Д(+) или К(-) -> К(+), т.е. проводки только по дебету или только по кредиту. Такие проводки хороши тем, что не увеличивают обороты, если использовать их для внутренних перемещений внутри счета, и для некоторых случаев гораздо красивее отражают хозяйственную операцию, нежели обычные проводки.
no subject
:)
Только один вопрос - какова была вероятность непрааильного подбора?
no subject
no subject
А о смысле там и говорить не приходится - 75 проводок по обоим сторонам счета без малейших намеков "что это такое"
no subject
Просто уменя было, - БД по внутренностям компов.
Но "заказчики" сделали одну ошибку, - они сначала вбили данные (запускается програмка на нужном компе - собирает нужную инфу и складывает в файл, полсе эти файлы либо руками в сервак вводятся, либо ч ерез web-интрфейс вгружаются) а плотом начали комы нумеровать.