В механизме фактов путешествия в прошлое возможны и нужны



Posted by Аркадий Водяник on July 08, 1999 at 02:02:26:

In Reply to: Факт - страшная сила! posted by Владимир Секретев, «Клуб Любителей Бухгалтерского on July 07, 1999 at 06:20:42:

Владимир пишет:


Представим себе, что в Январе порождается некий факт, а в Феврале он удаляется. Обнаружить этот
факт в сетевой версии не удастся, даже если установить ОП в клиенте за Январь, а в отчетной форме
использовать Rewind facts range. ....
Причина заключается в том, что ПРИЗНАК УДАЛЕНИЯ факта не имеет временной характеристики!
Факт имеет дату его порождения, а КОГДА он удален - не известно.
Я считаю это недостатком системы и призываю уважаемого Автора как можно скорее его устранить.

Сказанное в чем-то похоже на рассказы о парадоксах, возникающих при путешествиях во времени.
T.e., "как это так, будущее убило прошлое", и т.п. Это не ошибка и не недостаток, нет, так было
задумано: если в феврале решили, что январский факт надо убить, то его убивают, и его больше нет
в январе и остается только видеть это - при любом отчетном периоде и любом rewind facts range.

A у признака удаления факта есть временная характеристика.
См сообщение 302, там были указаны такие внутренние поля факта:


E_Year :word; { дата удалившей факт опеpации }
E_Month :byte;
E_Day :byte;

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

Причем информации для такого восстановления надо немного и алгоритм восстановления прост.

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





Пpишедшие ответы: