Novinky pro vývojáře březen-duben 2011

vydání: 20110517 - verze: 12

Vážení vývojáři,

v Aktualizacích seznamujeme uživatele se změnami ve Variu. Na změny, které se týkají vývojářů, jsme doposud upozorňovali pouze v případech, kdy se dalo předpokládat významné ovlivnění funkčnosti doplňkových rozšíření. Chtěli bychom Vás však informovat také o změnách "pod kapotou", které by mohly být přínosné pro vývojáře rozšíření. Proto jsme připravili přehled nových funkcí, které mají obecné použití a přidali i nějaké tipy. Doufáme, že se Vám uvedené informace budou hodit, a že se přehled novinek pro vývojáře stane pravidelnou součástí aktualizací.

 

Doplněk SDK a export Akcí

Do doplňku SDK přibyla karta, která zobrazuje Akce. Pomocí tlačítek na této kartě lze vytvořit manifesty pro distribuci akcí.

Nová hodnota avErrVarovani (knihovna VarioLib.Dll)

Pro vyhození výjimky pomocí třídy Err můžete použít "měkčí" formu chyby:

Err.Raise avErrVarovani, , "Nějaké varování, například není množství na skladu"

Výjimky s číslem chyby avErrVarovani se v uživatelském rozhraní zobrazují jako varovné s "vykřičníkem". Výjimky vyhozené pomocí volání Err.Raise vbObjectError se zobrazí standardně jako kritické "s křížkem".

Nová funkce Vario.Databaze.AdHocDotazDBSQLDirect v knihovně VarioLib.dll

Public Function AdHocDotazDBSQLDirect(ByVal DB As Database, ByVal SQLDotazu As String, ParamArray Parametry()) As VarioLib.Data

Ekvivalentní funkce k funkci AdHocDotazDB, která pracuje přímo s databází na SQL serveru. AdHocDotazDB zpravidla poskytuje lepší výkon, ovšem její inicializace (první volání) vyžaduje více času. AdHocDotazDBSQLDirect se hodí zejména pokud voláte jeden dotaz pokaždé nad jinou databází nebo voláte dotazy nad velkým počtem různých databází.

Poznámka: funkce AdHocDotazDB vytváří dočasnou databázi s propojenými tabulkami, nad kterou vykonává dotazy, které nejsou předávací.

Nová metoda app.StatusText v knihovně Vario.mda

Sub StatusText(ByVal hourGlassOn As Boolean, Optional ByVal statusBarText As Variant)

 hourGlassOn - aktivuje/deaktivuje ukazatel "přesýpací hodiny"

 statusBarText - nastaví text na stavovém řádku aplikace

Upozornění: pro každé zapnutí hourGlassOn musí být voláno vypnutí. Metoda interně počítá počet zapnutí, aby bylo možné její vícenásobné volání. Výchozí text na stavovém řádku se nastaví voláním hodnoty "" parametru statusBarText.

Nová metoda mDoklad.UlozitDoklady v knihovně Doklad.mda

Sub UlozitDoklady()

Uloží všechny otevřené neuložené doklady a položky dokladů v dané instanci Varia. Lze použít před voláním transakce, která aktualizuje více dokladů naráz.

Metoda VystavitDoklady v knihovně Vario.mda změněna na funkci

Function VystavitDoklady(ByVal PozadovanaAkce As avAkceDoklady, ByVal Zdroj As Variant, Optional ByVal Rok As Integer, Optional ByVal CilovaKniha As String, Optional ByVal PreferovatSouvisejiciKnihy As Boolean, Optional ByVal SeskupitPodleKontaktu As Boolean, Optional ByVal ZobrazitSeznamVystavenychDokladu As Boolean, Optional ByVal PrednastavitStav As Boolean, Optional ByVal PouzitDoklad As String, Optional ByVal VystavitNaCentralu As Boolean) As Variant

Funkce vystavit doklady zajišťuje většinu operací, kde dochází k vystavení dokladů na základě jiného dokladu (fakturovat, vydat, atd.) v uživatelském rozhraní Varia. Nyní byla změněna na funkci, která má 2 možnosti návratové hodnoty. Pokud je parametrem Zdroj kolekce obsahující doklady vrací funkce kolekci vystavených dokladů (obě kolekce obsahují čísla dokladů). Je-li parametrem Zdroj číslo dokladu je i návratová hodnota číslo dokladu.

Vlastnost Sklad.ProduktyCache (knihovna VarioLib.dll) vrací defenzivní kopii

Public Property Get ProduktyCache() As ZaznamProduktyCache

Kvůli optimalizaci je vhodné vyzvedávat instance třídy ZaznamProdukt prostřednictvím třídy ZaznamProduktyCache. Interně byla třída změněna tak, aby vracela defenzivní kopie a případná změna vlastností produktu neměla vliv na ostatní vyzvednuté instance stejného produktu.

Instance dialogového okna Katalog a sklad

V knihovně Doklad.mda lze pomocí funkce DejInstanciFormulare("Katalog_a_sklad") získat instanci formuláře Katalog a sklad. Pomocí formuláře lze vybrat produkty a vybrané produkty zpracovat podle potřeby. Například:

    Dim VirtualniDoklad As ZaznamDoklad
    Dim FKaS As Form
    Dim I As Long
    Dim SQL As String
    Dim Kniha As String
    Dim Produkty
              
    Set VirtualniDoklad = New ZaznamDoklad
    VirtualniDoklad.CisloDokladu = GenerujKlic
    VirtualniDoklad.Doklad = "Výdejka"
    Kniha = mKnihy.DejPrvniKnihu(AgSkladoveDoklady, "SV")
    VirtualniDoklad.Kniha = Kniha
    VirtualniDoklad.Rok = Vario.HospodarskyRokRok(Date)
    VirtualniDoklad.Datum = Date
    VirtualniDoklad.TypDokladu = dSV
   
    Set FKaS = runrun(app.SlozkaVaria & "Moduly\Vario\doklad.dejinstanciformulare", "Katalog_a_sklad")
    FKaS.OtevritDoklad VirtualniDoklad
  
    I = FKaS.hWnd
    Do Until mPomucky.IsWindowVisible(I) = 0
        CekatNaInput
    Loop
  
    If Not FKaS.getZobraziDoklad Then
        GoTo Konec
    End If
      
    SQL = "Parameters parDoklad text;SELECT Produkt FROM KSPolozkyKVlozeni WHERE (Cislo_dokladu=[parDoklad])"
    Produkty = Vario.Databaze.AdHocDotaz(dbTemp, SQL, VirtualniDoklad.CisloDokladu).DejSloupec()

Tipy pro vývojáře

Year nebo HospodarskyRok

Pokud potřebujete zjistit aktuální Rok podle data, vždy zvažte, jestli jde o kalendářní rok nebo hospodářský rok. Pokud se to týká účetních dokladů nebo účetnictví, zřejmě půjde o hospodářský rok. Potom nepoužívejte funkci Year ale HospodarskyRok.

To samé platí pro zjištění prvního a posledního dne roku (HospodarskyRokZacatek / Konec).

Nepoužívejte Dir, MkDir, RmDir, Kill, a FileCopy

Ve Variu raději používejte ekvivalentní funkce knihovny Variolib SouborExistuje, SlozkaExistuje, MkDirExtended, RmDirExtended, KillExtended a FileCopyExtended. Tyto funkce mají ošetřené známé problémy a v případě chyby vrací chybovou hlášku obsahující cestu k souboru, na němž nastala chyba. To umožní uživateli nebo podpoře pochopit a vyřešit případný problém.