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