10.07.2008, 12:22
|
#16
|
Участник
Регистрация: 28.11.2005
Адрес: Москва
|
Цитата:
Сообщение от Arahnid
Если даже вообще убрать все условия и просто отмножить проводки, то получается порядка 40 минут. Если использовать SQL время идет секундами. Может кто пдскажет тогда альтернативное решение трансляции с полученим того же результата, что и трансляция. Проблема ремени стоит у нас остро.
Обычно на вставке кучи записей тормоза в Аксапте бывают по нескольким причинам:- куча тяжеловесных проверок или сопутствующей логики на insert();
- настроенное логирование таблицы;
- выполнение кода, переключающегося в другую компанию (на удивление тормозная операция);
Видимо, в вашем случае дело в последнем пункте, если вы не написали кучу кода в LedgerTrans.insert() и не включали логирование этой таблицы. Тогда выходом может быть оптимизация алгоритма трансляции с тем, чтобы он работал не по одной проводке за раз, а сразу на пачке проводок (с использованием, к примеру, RecordInsertList как буфера-накопителя создаваемых проводок), тем самым сокращая число переключений между компаниями. Посмотрите, к примеру, на методы validateTrans() в классах-наследниках RTSLLedgerConvert (RTSLLedgerTransConvert, RTSLDimensionConvert, RTSLCurrencyConvert) - там дергается changecompany(), и это, получается, происходит по несколько раз для каждой транслируемой проводки. Неудивительно, что процесс трансляции при этом даже на простейших правилах проходит очень долго.
|
|