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