А вот и функции для накопления итогов в БД. Тут и создание сводного файла, и добавление записи.
//
// ФУНКЦИЯ НАКОПЛЕНИЯ ИТОГОВ В СВОДНОМ ФАЙЛЕ
// ПАРАМЕТРЫ : ключевое значение,aлиас области свода,добавляемый массив,
function disk_add(key_V,sel,mas)
local i,s
s:=select()
if ! empty(sel)
dbselectarea(sel)
endif
if !dbseek(key_V)
dbappend()
REPLACE key WITH key_V //******************************
endif
aeval(mas,{|x,i|fieldput(i+1,x+fieldget(i+1))})
dbselectarea(s)
return(NIL)
#define DEF_TYP "C"
#define DEF_LEN 12
#define DEF_DEC 1
#define DEF_FCNT 10
#define DEF_NAME "_svod.dbf"
//
// ФУНКЦИЯ СОЗДАНИЯ СВОДНОГО ФАЙЛА
// ПАРАМЕТРЫ :
// ИМЯ,ТИП КЛЮЧА,ДЛИНА КЛЮЧА,КОЛИЧЕСТВО ГРАФ,массив форматов{{длина,дес.}, ...}
//_svod.dbf, "C", 10 , DEF_FCNT , {...,{DEF_LEN,DEF_DEC},...}
function disk_CREATE(name,KEY_TYP,KEY_LEN,NUM,mas)
LOCAL I,FNUM,FLEN,FDEC,S,SS,NM,STRU:={}
SS:=SELECT()
IF NAME==NIL
NAME:=DEF_NAME
ENDIF
IF KEY_TYP==NIL
KEY_TYP:="C"
ENDIF
IF KEY_LEN==NIL
KEY_TYP:=10
ENDIF
if valtype(mas)#"A"
mas:={}
endif
if (fnum:=max(num,len(mas)))==0
fnum:=DEF_FCNT
endif
aadd(stru,{"KEY",KEY_TYP,KEY_LEN,0})
for i:=1 to fnum
nm:="P"+alltrim(str(i))
flen:=if(i<=len(mas).and.valtype(mas[i,1])="N",mas[i,1],DEF_LEN)
fdec:=if(i<=len(mas).and.valtype(mas[i,2])="N",mas[i,2],DEF_DEC)
aadd(stru,{nm,"N",flen,fdec})
endfor
dbcreate(name,stru)
use (name) new exclusive
index on key to _tmp_ind
s:=SELECT()
DBSELECTAREA(SS)
return (S)
Комментариев нет:
Отправить комментарий