|
![]() |
#1 |
Участник
|
А вы фильтруете по тем полям, по которым рассчитываете калкфилд? Если да, то по-моему следует сперва определить значения в этих полях с помощью калкфилда, а потом уже после наложения фильтра запускать цикл. Могу ошибаться, но мне кажется, что до вызова CALCFIELDS значения в этом поле пустые, стало быть и фильтр SETRANGE по этому полю вернёт вам пустую запись, и выражение IF FIND('-') ... возвратит FALSE. Сделайте так:
Record.CALCFIELDS(Field1,Field2,...); Record.SETRANGE(Field1,Value1,Value2) (или как там у вас) IF Record.FIND('-') THEN REPEAT {тело цикла} UNTIL Record.NEXT=0; |
|
![]() |
#2 |
Участник
|
Мало инфы ... Приведенные примеры разные абсолютно. И дело тут не в скорости работы. CALCFIELDS работает для записи. Не надо путать его с CALCSUMS.
|
|
![]() |
#3 |
Участник
|
Цитата:
Сообщение от Neovision
![]() А вы фильтруете по тем полям, по которым рассчитываете калкфилд? Если да, то по-моему следует сперва определить значения в этих полях с помощью калкфилда, а потом уже после наложения фильтра запускать цикл. Могу ошибаться, но мне кажется, что до вызова CALCFIELDS значения в этом поле пустые, стало быть и фильтр SETRANGE по этому полю вернёт вам пустую запись, и выражение IF FIND('-') ... возвратит FALSE. Сделайте так:
Record.CALCFIELDS(Field1,Field2,...); Record.SETRANGE(Field1,Value1,Value2) (или как там у вас) IF Record.FIND('-') THEN REPEAT {тело цикла} UNTIL Record.NEXT=0; ![]() Цитата:
Как я понимаю, 2-й - медленее 1-го, но в первом не получается расчитать вычисляемое поле (не срабатывает CALCFIELDS) - нули.
После FIND('-') запись позиционируется и CALCFIELD работает. Первый способ однозначно не подходит. |
|