Třída ZaznamDoklad
Třída slouží k práci s doklady. Obsahuje obchodní logiku prvotního dokladu.
Objekt je řízen databází - pracuje nad záznamem tabulky Doklady (viz vlastnost Data - object /očekává se form nebo recordset/ a vlastnost Recordset as Recordset). Je však možné pracovat též s odpojenou kopií dat. Odpojené kopie je vhodné používat tam, kde je potřeba šetřit zdroje - otevřené recordsety. Například pokud je potřeba předat kolekci dokladů pro další zpracování. Odpojený doklad však nemůže zajistit, že zpracovávaná data jsou stále aktuální - nepromítají se do něj změny, které proběhly po vytvoření kopie dat.
Objekt obsahuje všechny hodnoty záznamu doklad ve formě vlastností. Čtení a přiřazování hodnot prostřednictvím vlastností zajišťují:
1. obchodní logiku (např. přiřazení vlastnosti Firma vloží firmu do dokladu). |
2. konverzi typů (například Null na "" a naopak). |
Pokud potřebujete přistupovat k polím přímo, můžete použít vlastnost Data nebo Recordset. Tento postup bude výhodný například při kopírování dat z jednoho dokladu do druhého. Musíte ovšem mít zajištěnu obchodní logiku, kterou tímto postupem obcházíte (například můžete přiřadit hodnotu pole firma, ale nedojde k vložení firmy Doklad.Recordset!Firma.Value = "Bago").
Vlastnost Data (as Object) je určena pro přímé napojení třídy na formulář, ve kterém se upravuje doklad (formulář musí obsahovat všechna pole z tabulky Doklady). Třída potom zajišťuje obchodní logiku pro formulář.
Vlastnost Recordset (as Recordset) vrací referenci na stejný objekt jako Data, ale je typová. Třída zde slouží pro udržení obchodní logiky při úpravách dokladu v programu.
Příklad
Sub Priklad_VystavitDobropisNa5000sDPH()
On Error GoTo Chyba
Dim Dobropis As ZaznamDoklad
Set Dobropis = Doklady.NovyDoklad("Vydané doklady", dDV)
'použití funkce Doklady.NovyDoklad je ekvivalentní následujícím jednotlivým voláním
'CisloDokladu = Vario.Knihy("Dobropisy").NovyZaznam("0", HospodarskyRokRok(Date), dDV)
'If CisloDokladu = "" Then
' Err.Raise vbObjectError, , "Nepodařilo se založit nový doklad."
'End If
'Set Dobropis = New ZaznamDoklad
'Dobropis.OtevritRecordset CisloDokladu, UplneRizeni
'Dobropis.OtevritRecordsetPolozek PouzePridavat
With Dobropis.Recordset
.Edit
Dobropis.VlozitFirmu "Bago" 'Vloží firmu Bago
!Text = "Dobropisujeme vám poskytnutou slevu"
End With
With Dobropis.AktualniPolozkaDokladu
.Recordset.AddNew
.VychoziHodnotyNovePolozky 1
.Popis = "Dobropis"
.SazbaDPH = 19
.CenaSDPH = 5000
.Recordset.Update
End With
Dobropis.SoucetDokladu
Dobropis.Recordset.Update
GoTo Konec
Chyba:
Dim E As TVarioChyba
E = OpisChyby("Testy::VystavitDobropis")
Resume Pokracovat
Pokracovat:
GoSub Uklid
On Error GoTo 0
ZopakovatChybu E
Uklid:
On Error Resume Next
Dobropis.Recordset.Close
Dobropis.RecordsetPolozek.Close
Return
Konec:
On Error Resume Next
GoSub Uklid
End Sub