Novinky pro vývojáře březen-duben 2011
vydání: 20110517 - verze: 14
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()
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.