AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.03.2007, 11:48   #1  
unalexia is offline
unalexia
Участник
 
79 / 10 (1) +
Регистрация: 28.12.2005
Angry
Какой код 1) или 2) правильный?
1) SETRANGE(...)
CALCFIELDS(...)
IF FIND('-') THEN REPEAT
....
UNTIL NEXT=0;

2) SETRANGE(...)
IF FIND('-') THEN REPEAT
CALCFIELDS(...)
....
UNTIL NEXT=0;

Как я понимаю, 2-й - медленее 1-го, но в первом не получается расчитать вычисляемое поле (не срабатывает CALCFIELDS) - нули.
Старый 06.03.2007, 12:07   #2  
Marisha is offline
Marisha
Участник
 
42 / 10 (1) +
Регистрация: 03.11.2011
FlowField-ы необходимо пересчитывать при переходе между записями. Грубо говоря нужно активизировать значение.
Т. е. 1-ый способ не то чтобы быстрее, он просто не подходит.
Старый 06.03.2007, 12:08   #3  
murick is offline
murick
Участник
Аватар для murick
 
59 / 10 (1) +
Регистрация: 10.04.2006
А вы фильтруете по тем полям, по которым рассчитываете калкфилд? Если да, то по-моему следует сперва определить значения в этих полях с помощью калкфилда, а потом уже после наложения фильтра запускать цикл. Могу ошибаться, но мне кажется, что до вызова CALCFIELDS значения в этом поле пустые, стало быть и фильтр SETRANGE по этому полю вернёт вам пустую запись, и выражение IF FIND('-') ... возвратит FALSE. Сделайте так:

Record.CALCFIELDS(Field1,Field2,...);
Record.SETRANGE(Field1,Value1,Value2) (или как там у вас)
IF Record.FIND('-')
THEN REPEAT

{тело цикла}

UNTIL Record.NEXT=0;
Старый 06.03.2007, 12:38   #4  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Мало инфы ... Приведенные примеры разные абсолютно. И дело тут не в скорости работы. CALCFIELDS работает для записи. Не надо путать его с CALCSUMS.
Старый 06.03.2007, 15:58   #5  
OntheJump is offline
OntheJump
Участник
 
165 / 10 (1) +
Регистрация: 31.10.2006
Цитата:
Сообщение от Neovision Посмотреть сообщение
А вы фильтруете по тем полям, по которым рассчитываете калкфилд? Если да, то по-моему следует сперва определить значения в этих полях с помощью калкфилда, а потом уже после наложения фильтра запускать цикл. Могу ошибаться, но мне кажется, что до вызова CALCFIELDS значения в этом поле пустые, стало быть и фильтр SETRANGE по этому полю вернёт вам пустую запись, и выражение IF FIND('-') ... возвратит FALSE. Сделайте так:

Record.CALCFIELDS(Field1,Field2,...);
Record.SETRANGE(Field1,Value1,Value2) (или как там у вас)
IF Record.FIND('-')
THEN REPEAT

{тело цикла}

UNTIL Record.NEXT=0;
Если на на FlowField наложен фильтр то его значение вычисляется автоматически

Цитата:
Как я понимаю, 2-й - медленее 1-го, но в первом не получается расчитать вычисляемое поле (не срабатывает CALCFIELDS) - нули.
unalexia, первый метод не работает, т.к. в момент когда вы вызываете CALCFIELD запись еще не спозиционирована (т.е. не определены ключевые поля).
После FIND('-') запись позиционируется и CALCFIELD работает.

Первый способ однозначно не подходит.
Старый 07.03.2007, 09:47   #6  
unalexia is offline
unalexia
Участник
 
79 / 10 (1) +
Регистрация: 28.12.2005
все ясно. всем спасибо. просто меня смутило то, что в отчетах обычно CALCFIELDS ставится в триггере OnPreDataItem() а не в OnAfterGetRecord() и все работает...
Старый 07.03.2007, 10:27   #7  
Marisha is offline
Marisha
Участник
 
42 / 10 (1) +
Регистрация: 03.11.2011
Странно... а я не нахожу команду CalcFields в тригере OnPreDatаItem... а вот в OnAfterGetRecord как раз есть.
Старый 17.03.2007, 00:15   #8  
yashina is offline
yashina
Участник
 
11 / 10 (1) +
Регистрация: 09.07.2006
Цитата:
Сообщение от unalexia Посмотреть сообщение
все ясно. всем спасибо. просто меня смутило то, что в отчетах обычно CALCFIELDS ставится в триггере OnPreDataItem() а не в OnAfterGetRecord() и все работает...
Не путайте с CREATETOTALS.Это он указывается в OnPreDatаItem
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:38.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.