Страница 1 из 1

Как бы ускорить? (Бухг. функции в VIP)

Добавлено: 27 фев 2008, 18:47
Bulat-bash
Никак не могу понять как можно ускорить работу интерфейса, в котором пытаюсь вычислить входящее сальдо по 10 счету на дату по каждой МЦ, для которой это сальдо есть
для этого
_loop katmc
{
//взял из форума http://www.tyumbit.ru/gal_forum/viewtop ... 800030eb17

my_formula:='..здесь пишу бух формулу....'
FormExInit; //
Result := 0;
ResultBV:= 0;
ResultKol:= 0;
FormExAddKey('&1', trim(my_formula), '', '', '');
if (FormExStartCount(0))
FormExGetKeyValues('&1', Result, ResultBV, ResultKol)
else {
Result := 0;
ResultBV := 0;
ResultKol:= 0;
FormExDone;
}
}
Отрабатывает все правильно, но очень много МЦ поэтому цикл по katmc-долгая история
А если сформировать, например стандартный интерактивный отчет в модуле ФРО, то он формируется мягко говоря НАМНОГО быстрее, чем мой интерфейс.

Добавлено: 27 фев 2008, 19:30
Den
Вряд ли Вы посчитаете сальдо быстрее,чем стандартная старая добрая
Calc_NewSaldo...

Добавлено: 28 фев 2008, 09:36
Goblin
Bulat-bash писал(а):Никак не могу понять как можно ускорить работу интерфейса, в котором пытаюсь вычислить входящее сальдо по 10 счету на дату по каждой МЦ, для которой это сальдо есть
Ключевое по смыслу выделено.
Априорно Вы же не знаете, имеется ли сальдо на дату для какой-либо МЦ, что ставить под сомнение целесообразность прохода по всему каталогу МЦ. Проще тогда проанализировать сальдо/обороты и по засветимшимся в них МЦ произвести расчет.

Примерно вот так :
1) выборка ближайшего по дате сальдо по 10
2) выборка оборотов по 10 с даты п.1 по дату на которую нужен отчет
3) засветившиеся МЦ в п.1 и п.2 - во времянку и потом по ней проход и расчет.

Должно быть быстрее, чем просто перебор всего каталога МЦ и расчета по всем.

Добавлено: 28 фев 2008, 11:00
Nikos
Я это делаю так:
_loop saldofnd
{
if tsOk = getlast saldomc where ((
0 == saldomc.sp and
saldofnd.cmc == saldomc.cmc and
saldofnd.cpodr == saldomc.cpodr and
saldofnd.cmol == saldomc.cmol and
saldofnd.cparty == saldomc.cparty and
dateOst >>= saldomc.dsaldo))
ordered by index SALDOMC04
{
if ((SALDOMC.KOL * SALDOMC.SRPRICE) > 0.001)
{
InsertOstatki;
...

Работает быстро

Добавлено: 28 фев 2008, 11:02
Nikos
Прошу прощения - перепутал с сальдо по складам...

Добавлено: 28 фев 2008, 12:14
Bulat-bash
Спасибо за ответы!
Попробую совместить советы Dena и Goblina-
Расчитаю сальдо Calc_NewSaldo и скину во времянку засветившиеся МЦ - должно получиться быстрее! javascript:emoticon(' :) ')
Еще раз спасибо!