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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Bulat-bash
Постоянный гость
Сообщения: 52
Зарегистрирован: 28 июн 2006, 08:45
Откуда: Уфа

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

Сообщение 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-долгая история
А если сформировать, например стандартный интерактивный отчет в модуле ФРО, то он формируется мягко говоря НАМНОГО быстрее, чем мой интерфейс.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Вряд ли Вы посчитаете сальдо быстрее,чем стандартная старая добрая
Calc_NewSaldo...
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Сообщение Goblin »

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

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

Должно быть быстрее, чем просто перебор всего каталога МЦ и расчета по всем.
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение 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;
...

Работает быстро
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Прошу прощения - перепутал с сальдо по складам...
Bulat-bash
Постоянный гость
Сообщения: 52
Зарегистрирован: 28 июн 2006, 08:45
Откуда: Уфа

Сообщение Bulat-bash »

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