воскресенье, 13 февраля 2011 г.

А вот и функции для накопления итогов в БД. Тут и создание сводного файла, и добавление записи.
 
//
// ФУНКЦИЯ НАКОПЛЕНИЯ ИТОГОВ В СВОДНОМ ФАЙЛЕ
// ПАРАМЕТРЫ : ключевое значение,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)

Комментариев нет: