Изменились параметры setscope() в БЭСТ5?
Select messages from
# through # FAQ
[/[Print]\]

-> Программирование в БЭСТ-4

#1: Изменились параметры setscope() в БЭСТ5? Author: ewgenLocation: Евгений PostPosted: 14 Sep 2007 15:05
    —
БЭСТ 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 работал первый вариан

#2: Re: Изменились параметры setscope() в БЭСТ5? Author: nordkLocation: Горбунов Константин PostPosted: 14 Sep 2007 15:24
    —
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",.......)

#3:  Author: ewgenLocation: Евгений PostPosted: 15 Sep 2007 08:13
    —
Спасибо! Работает.

Странно...
Я уже больше года пользуюсь именем индекса при установке скопа.
И все работало

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

#4:  Author: nordkLocation: Горбунов Константин PostPosted: 17 Sep 2007 12:00
    —
Ну что сказать....все ли корректно работало не знаю.
Возможно в Б4+ была защита от тех, кто имя индекса вписать
вдумает (не анализировал) или просто совпадения.
Одно могу сказать точно:
ЧИТАЙТЕ ВНИМАТЕЛЬНО ДОКУМЕНТАЦИЮ !!!
Если чего нет или непонятно - всегда можно спросить.



-> Программирование в БЭСТ-4


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group