Никак не могу понять как можно ускорить работу интерфейса, в котором пытаюсь вычислить входящее сальдо по 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-долгая история
А если сформировать, например стандартный интерактивный отчет в модуле ФРО, то он формируется мягко говоря НАМНОГО быстрее, чем мой интерфейс.
Как бы ускорить? (Бухг. функции в VIP)
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный гость
- Сообщения: 52
- Зарегистрирован: 28 июн 2006, 08:45
- Откуда: Уфа
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Ключевое по смыслу выделено.Bulat-bash писал(а):Никак не могу понять как можно ускорить работу интерфейса, в котором пытаюсь вычислить входящее сальдо по 10 счету на дату по каждой МЦ, для которой это сальдо есть
Априорно Вы же не знаете, имеется ли сальдо на дату для какой-либо МЦ, что ставить под сомнение целесообразность прохода по всему каталогу МЦ. Проще тогда проанализировать сальдо/обороты и по засветимшимся в них МЦ произвести расчет.
Примерно вот так :
1) выборка ближайшего по дате сальдо по 10
2) выборка оборотов по 10 с даты п.1 по дату на которую нужен отчет
3) засветившиеся МЦ в п.1 и п.2 - во времянку и потом по ней проход и расчет.
Должно быть быстрее, чем просто перебор всего каталога МЦ и расчета по всем.
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Я это делаю так:
_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;
...
Работает быстро
_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;
...
Работает быстро
-
- Постоянный гость
- Сообщения: 52
- Зарегистрирован: 28 июн 2006, 08:45
- Откуда: Уфа