Przykład - suma wyrażenia ze zbioru rekordów
Suma wyrażenia ze zbioru rekordów
Przykładowy skrypt
Przykład pokazuje w jaki sposób można utworzyć skrypt wyliczający sumę wyrażenia dla zadanego zbioru.
Założenia:
W module Media na wybranym zasobie mamy zestaw liczników.
W tych licznikach wykorzystujemy pole KLASA do przechowywania identyfikatora węzła.
Chcemy wyliczyć sumę danej rozliczeniowej węzła dla węzłów określonych przez te liczniki.
Parametry:
Nazwa skryptu: 'Suma danej rozliczeniowej węzła'
pZAS - identyfikator zasobu
pDRW - identyfikator danej rozliczeniowej węzła
pDATA - data/na dzień
Kod:
! Zebranie pola MEL:KLASA w TPS
USTAW('MEL', T:GatherRanged(163,'MEL:KeyZasTypNr','MEL:id_zas='&PAR('pZAS')&'|MEL:Typ=ZW|MEL:NrLicz=','MEL:id_zas='&PAR('pZAS')&'|MEL:Typ=ZW|MEL:NrLicz=z','MEL:klasa','LENC(MEL:Klasa)>0') )
! Zebranie pola MEL:KLASA w SQL
!SQL2FS('SELECT KLASA FROM ME_LICZNIKI__MEL WHERE ID_ZAS='&PAR('pZAS')&' AND TYP=''ZW''')
! Wyliczenie sumy
ECHO( LOOP( PAR('MEL') ,'DanaRozliczeniowaWezla3(I,'&PAR('pDRW')&','&PAR('pDATA')&')','I','SUM') )
Przykładowe wywołanie:
SKRYPT('Suma danej rozliczeniowej węzła','PZAS='&ZAS:ID_ZAS&'|PDRW=1|PDATA='&GLO:DataAkt)
Dodatkowe informacje:
Jeżeli pole KLASA zawierałoby kod węzła (nie zalecane), to potrzebna jest konwersja z kodu (i typu węzła) na identyfikator:
ECHO( LOOP( PAR('MEL') ,'DanaRozliczeniowaWezla3( DajIDWezla(ZAS:ID_ADMG,I,'ZW') ,'&PAR('pDRW')&','&PAR('pDATA')&')','I','SUM') )
Funkcja T:GatherRanged zadziała również w przypadku SQL, ale będzie działać nieefektywnie (wolno).
---