View previous topic :: View next topic
Author
Message
ewgen Joined: 23 Nov 2002 Posts: 339 Location: Евгений Occupation: (инженер программист) Interests: Надым
Posted: 14 Sep 2007 15:05 Post subject: Изменились параметры setscope() в БЭСТ5?
БЭСТ 5/3.3/32
В файле bases_00.dbf для файла main.dbf существует индекс:
Code: Tag_nomer: 02
Tag_name: TAG_TASK
Index: TASK+DTOS(DATAOPER)+UPPER(NNDOC)
NETUSE("_main",LoadPath()+"\main.dbf",,.F.)
_main->(ORDSETFOCUS("TAG_TASK")) //это работатет
...
Пытаюсь поставить скоп по модулю зарплата, по определенному месяцу.
первый вариант:
Code: _main->(setscope("TAG_TASK",
"14"+dtos(ctod("01/"+b+"/"+g)),
"14"+dtos(EOM(ctod("01/"+b+"/"+g))))) //не работает.
второй вариант (работает):
Code: _main->(setscope("02",
"14"+dtos(ctod("01/"+b+"/"+g)),
"14"+dtos(EOM(ctod("01/"+b+"/"+g))))) //работает
В БЭСТ 4+/12/35 работал первый вариан
Back to top
nordk Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 14 Sep 2007 15:24 Post subject: Re: Изменились параметры setscope() в БЭСТ5?
ewgen wrote: :
Code: _main->(setscope("TAG_TASK",
"14"+dtos(ctod("01/"+b+"/"+g)),
"14"+dtos(EOM(ctod("01/"+b+"/"+g))))) //не работает.
второй вариант (работает):
Code: _main->(setscope("02",
"14"+dtos(ctod("01/"+b+"/"+g)),
"14"+dtos(EOM(ctod("01/"+b+"/"+g))))) //работает
В БЭСТ 4+/12/35 работал первый вариант.
Ни первый ни второй вариант ни в Б5 ни в Б4 не правильно.
(Не соответствует документации)
Quote: SetScope(cScope,xScope,xScope1,aOrder) – задание ключевого интервального фильтра
· cScope выражение для ключевой фильтрации в виде символьной строки для вычисления (путем макроподстановки) значения ключа при фильтрации.
Первый параметр SCOPE() не имя индекса а старшая часть индексного ключа должны быть.
У Вас индексный ключ
Code: TASK+DTOS(DATAOPER)+UPPER(NNDOC)
Вот и пишите из него
Code: _main->(setscope("TASK",.......)
Back to top
ewgen Joined: 23 Nov 2002 Posts: 339 Location: Евгений Occupation: (инженер программист) Interests: Надым
Posted: 15 Sep 2007 08:13 Post subject:
Спасибо! Работает.
Странно...
Я уже больше года пользуюсь именем индекса при установке скопа.
И все работало
Code: function main()
private a,b,sum
private aSet,aSetKey
dbpush()
aSet:=SaveSet()
aSetKey:=SaveSetKey()
NETUSE("_main",LoadPath()+"\main.dbf",,.F.)
_main->(ORDSETFOCUS("summa_data"))
a:=str(1000,19,3)
b:=str(2000,19,3)
sum:=0
_main->(SETSCOPE())
_main->(SETSCOPE("summa_data",a,b))
_main->(DBGOTOP())
while (_main->(!EOF()))
sum:=sum+_main->summa
_main->(DBSKIP())
enddo
sayandwait("Сумма по проводкам от 1000 до 2000 составляет_"+str(sum))
_main->(DBCLOSEAREA())
RestSetKey(aSetKey)
RestSet(aSet)
dbpop()
return nil
Даже когда создавал собственные индексы, в первый параметр скопа писал их имя.
Code: NETUSE("_iznos",LoadPath()+"\oc\iznos.DBF",,.F.)
_iznos->(ordcreate(LoadPath()+"\oc\_iznos","uoc",UPPER("unioc+dtos(period)")))
_iznos->(dbsetindex(LoadPath()+"\oc\_iznos.cdx"))
_iznos->(ORDSETFOCUS("uoc"))
_iznos->(setscope(UPPER("uoc"),_coc->unioc+"20010101",_coc->unioc+"20011231"))
_iznos->(dbgotop())
s:=0
while _iznos->(!eof())
s:=s+_iznos->summa
_iznos->(dbskip())
enddo
Back to top
nordk Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 17 Sep 2007 12:00 Post subject:
Ну что сказать....все ли корректно работало не знаю.
Возможно в Б4+ была защита от тех, кто имя индекса вписать
вдумает (не анализировал) или просто совпадения.
Одно могу сказать точно:
ЧИТАЙТЕ ВНИМАТЕЛЬНО ДОКУМЕНТАЦИЮ !!!
Если чего нет или непонятно - всегда можно спросить.
Back to top
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
Powered by phpBB © phpBB Group