Dotaz na datum

Top  Previous  Next

Seznam témat:

řešení

 

Řešení

Velmi často je potřeba se před tiskem sestavy zeptat uživatele na interval datumů (nebo alespoň na jeden datum). Tato situace se dá dobře řešit pomocí příkazu DATEBOX(<text>,<formát>,<výchozí hodnota>).  Zde je uveden příklad použití tohoto příkazu ve skriptu "před tiskem":

 

 

// dotaz na spodní mez intervalu (datum od) a ošetření odpovědi uživatele

// nejdříve se jako spodní mez intervalu naplní proměnná vd výchozí hodnotou,

// která odpovídá prvnímu dni období, do kterého je uživatel přihlášen

set vd = query('select period from dba._gusers')

 

// tečky v datumu se nahradí pomlčkami

Set vd = replacestr(vd,'.','-')

 

// Uživatel je dotázán na datum a je mu přednabídnuta hodnota vd

set var_dateod = datebox('Zadejte datum "od" pro soupis pohybů','dd-mm-yyyy',vd)

 

// výsledek odpovědi se zformátuje o předá do datovému zdroji "pohyby" do proměnné "qvar_dateod"

if (var_dateod <> '')

     set var_dateod = copy(var_dateod,7,4)+'-'+copy(var_dateod,4,2)+'-'+copy(var_dateod,1,2)

     SETQUERYPARAM('pohyby','qvar_dateod',var_dateod)

 

// pokud zmáčkne ESC, nebo datum vymaže, vezme se jako výchozí datum 1.1.1900

  else

     OKBOX('Nebylo zadáno datum, sestava bude k dnešnímu dni')

     set var_dateod = '1900-01-01'

     SETQUERYPARAM('pohyby','qvar_dateod',var_dateod)

  endif

 

// proměnná var_dateod se znovu zformátuje tak, aby se dala použít

// někde na sestavě (jiný důvod pro to již není)

set var_dateod =  copy(var_dateod, 8+pos('-',copy(var_dateod,8,1)),2)+' - '+ copy(var_dateod, 6,2-pos('-',copy(var_dateod,7,1))) +' - '+copy(var_dateod,1,4)

 

 

// Nyní bude dotaz na horní mez intervalu, ale tak, že se nabídne dnešní datum.

// Nejdříve se proměnná vd naplní dnešním datumem a rovnou v takovém formátu,

// který je možno předat do funkce DATEBOX

  Set vd =str(extractday(date))+'-' + str(extractmonth(date))+'-'+ str(extractyear(date))

  set var_date = datebox('Zadejte datum "do" pro soupis pohybů','dd-mm-yyyy',vd)

 

// Nyní se opět ošetří různé odpovědi uživatele a hodnota se předá datovému

// zdroji v požadovaném formátu.

  if (var_date <> '')

     set var_date = copy(var_date,7,4)+'-'+copy(var_date,4,2)+'-'+copy(var_date,1,2)

     SETQUERYPARAM('pohyby','qvar_date',var_date)

  else

     OKBOX('Nebylo zadáno datum, sestava bude k dnešnímu dni')

     set var_date = str(extractyear(date))+'-'+ str(extractmonth(date))+'-'+str(extractday(date))

     SETQUERYPARAM('pohyby','qvar_date',var_date)

  endif

 

// Na závěr se opět provede zformátování proměnné "var_date" pro účely tisku v záhlaví sestavy

set var_date =  copy(var_date, 8+pos('-',copy(var_date,8,1)),2)+' - '+ copy(var_date, 6,2-pos('-',copy(var_date,7,1))) +' - '+copy(var_date,1,4)

 

// Aktivovat dotaz !!!

Open('Dotaz1')

 

// kontrola dotazu

okbox(GETSQL('Dotaz1'))

 

 

 

Příklad 

následující sestava s použitím datumu

 

návrh sestavy

Ve skriptu je zadán postup popsaný v této kapitole

 

zadání skriptu

 

datový zdroj

 

volba data před zobrazením

 

 

zobrazení sestavy

 

 

 

Související témata