Test formuły

Zmodyfikowano dnia 2014/10/28 11:24 przez Wojtek — Skategoryzowana jako: GW-MAX

Formuły SQL jest to mechanizm budowania dowolnych formuł w których wartość jest pobierana z polecenia SQL

Polecenie SQL musi mieć następującą składnie: select LP, WARTOŚĆ - gdzie LP jest liczbą narzucającą kolejność a WARTOŚĆ jest wartością jaką będziemy zwracać jako wynik formuły W przypadku jak polecenie zwraca więcej niż jeden rekord, program sortuje po LP i skleja pole WARTOŚĆ jako ciąg znaków, ten mechanizm daje łatwy sposób implementacji list

Dostępne makra:
  1. ^yko:id|macro^ - Zwraca identyfikator kartoteki kontrahenta YKO_Id int
  2. ^yuk:id|macro^ - Zwraca identyfikator umowy YUK_Id int

Algorytm działania jest następujący:

Przykładowe polecenia:

Przykład pobierający z adresu kontrahenta telefon (wykorzystuje makro do umowy)


Select YUK_ID, Case 
                 When isnull( YAK_Telefon1, '') <> '' then 'Telefon: '+YAK_Telefon1
               Else ''
               End 
From YUmowa_Kontrahent, dbo.YKontrahent, dbo.YAdres_Kontrahent
 Where YUK_Id = ^yuk:id|macro^ and 
       YUK_IdKontrahent=YKO_Id and 
       YKO_IdAdres=YAK_Id and
       isnull( YKO_Archiwum,0)=0 and 
       isnull( YUK_Archiwum,0)=0

Przykład formatujący tekst w zależności czy umowa jest na czas określony czy nie


Select 1, Case 
            When isnull( YUK_Data_Obowiazuje_Do, 0)= 0 Then ' NA CZAS NIEOKREŚLONY'   
          Else ' OKREŚLONY DO DNIA ' + Convert( varchar(20), Convert( datetime, YUK_Data_Obowiazuje_Do-36163), 110)
          End 
From YUmowa_Kontrahent 
 Where YUK_Id = ^yuk:id|macro^

Przykład pokazujący idee budowania wartości. Wywołanie w teście zwraca łańcuch znaków " A - 11 B - 22" jak widać połączył dwa polecenia select


select 1, ' A - ' + Str( ^yko:id|macro^ )
union all
select 2, ' B - ' + Str( ^yuk:id|macro^)

Kolejny przykład gdzie jako wartość formuły zwracana jest lista przecinkowa zawartych umów z kontrahentem


Select Row_Number() Over( Order By YUK_NrUmowy) , Case Row_Number() Over( Order By YUK_NrUmowy) When 1 Then '' Else ', ' End + YUK_NrUmowy
 From dbo.YUmowa_Kontrahent 
 Where YUK_IdKontrahent = ^yko:id|macro^