Objekt TKAPDocument: Porovnání verzí

Z K.A.P.
Skočit na navigaciSkočit na vyhledávání
m
 
(Není zobrazeno 6 mezilehlých verzí od stejného uživatele.)
Řádek 93: Řádek 93:
 
     function LoadDocumentByDocNo(Sklad: word; Prijem: Boolean; Rok : Word; TypDokladu : byte;
 
     function LoadDocumentByDocNo(Sklad: word; Prijem: Boolean; Rok : Word; TypDokladu : byte;
 
                                 CisloDokladu: longint; LoadItems: Boolean): Boolean;
 
                                 CisloDokladu: longint; LoadItems: Boolean): Boolean;
     function GetCPYIndexesFromExchangeFile(FileName, Fields: String; GetCPYDoc, GetCPYReadedDoc: Boolean): TClientDataset;
+
    function LoadDocumentByID91(IDDoc91: string; LoadItems: Boolean): Boolean;
 +
     function GetCPYIndexesFromExchangeFile(FileName, Fields: String; GetCPYDoc, GetCPYReadedDoc: Boolean): TDataset; {vrací objekt TClientDataset}
 
     function LoadDocumentFromExchangeFile(FileName, ProtocolFileName: String; IndexCPY: longint;
 
     function LoadDocumentFromExchangeFile(FileName, ProtocolFileName: String; IndexCPY: longint;
 
                       ReadDocHeader, ReadDocMemo1, ReadBarCodes, ReadNewProducts, UpdateProducts, UpdatePurchasePrices, DeleteCPY: Boolean; LogText: String): Boolean;
 
                       ReadDocHeader, ReadDocMemo1, ReadBarCodes, ReadNewProducts, UpdateProducts, UpdatePurchasePrices, DeleteCPY: Boolean; LogText: String): Boolean;
Řádek 99: Řádek 100:
 
                       SaveRecommendedPrices, SaveBarCodes, SaveLocations, SaveDocMemo1 : Boolean; LogText: String) : longint;
 
                       SaveRecommendedPrices, SaveBarCodes, SaveLocations, SaveDocMemo1 : Boolean; LogText: String) : longint;
 
     function SaveDocumentHeaderToClientDataset(Fields: String): TDataset; {vrací objekt TClientDataset}
 
     function SaveDocumentHeaderToClientDataset(Fields: String): TDataset; {vrací objekt TClientDataset}
 +
    function LogText(TextValue, TextDescription, ItemName : AnsiString): Boolean;
 
     function CheckItemsBeforeSave(var ErrItemNo: longint): Boolean;
 
     function CheckItemsBeforeSave(var ErrItemNo: longint): Boolean;
 
     function SaveDocument: Boolean;
 
     function SaveDocument: Boolean;
Řádek 109: Řádek 111:
 
|''constructor Create(UpdatePrices: Boolean)'' ||Parametr UpdatePrices určuje, zda mají být ceny v dokladu počítány automaticky se zohledněním individuálních cen odběratele/dodavatele nebo budou určeny skriptem při přidávání jednotlivých položek. Vytvořené objekty nezapomeňte uvolnit pomocí metody Free.
 
|''constructor Create(UpdatePrices: Boolean)'' ||Parametr UpdatePrices určuje, zda mají být ceny v dokladu počítány automaticky se zohledněním individuálních cen odběratele/dodavatele nebo budou určeny skriptem při přidávání jednotlivých položek. Vytvořené objekty nezapomeňte uvolnit pomocí metody Free.
 
|-valign=top
 
|-valign=top
|''procedure InitNewOrder'' ||Reinicializuje objekt pro zpracování nové objednávky (tj. vynuluje se objednávka, smažou se požadavky i poznámky k objednávce). Tuto metoda se volá automaticky v rámci vytvoření objektu TKAPOrder.
+
|''procedure ClearLastError'' ||Vymazání informace o poslední detekované chybě (LastError).
 
|-valign=top
 
|-valign=top
|''function SetCustomer(ICO: String): Boolean'' ||Podle údaje IČO dohledá zákazníka a naplní hlavičku objednávky podle fakturačního místa z adresy. Pokud odběratel není nalezen, tak je odběratel v objednávce vynulován. Podle zákazníka jsou určeny i individuální ceny pro případ automatické aktualizace cen. Funkce vrací true, pokud je zákazník nalezen.
+
|''function InitNewDocument'' ||Reinicializuje objekt pro zpracování nového dokladu (tj. vynuluje se hlavička dokladu, smažou se operace i poznámky k dokaldu). Tuto metoda se volá automaticky v rámci vytvoření objektu TKAPDocument.
 
|-valign=top
 
|-valign=top
|''function LoadOrderHeaderFromDataset(Dataset: TDataset): Boolean'' ||Funkce načte z tabulky určené parametrem Dataset hlavičku objednávky. Struktura vstupní tabulky (jména polí) musí odpovídat struktuře tabulky SkladOBJ ze skladového programu. Pokud tabulka obsahuje pole MEMOA nebo MEMOB, tak jsou informace z tohoto pole přeneseny do vlastností MemoA, popř. MemoB (typu StringList). Pole EMAIL, RESPPERSON, PHONE, GUID, FAX, MOBILE, CONTACTEMAIL, SENDINFO jsou uložena ve formátu JménoPole=Hodnota do údaje MemoI. Pokud je ve vstupní tabulce definováno pole Mena a toto pole obsahuje cizí měnu, tak je automaticky dohledán v kurzovém lístku kurz a nastaví se příznaky pro používání cizí měny. Při přidávání položek jsou pak ceny uváděny v cizí měně.
+
|''function SetDocType(Prijem: Boolean; TypDokladu: byte): Boolean'' ||Nastaví typ dokladu pro daný doklad. Vrací false, pokud typ dokladu nebyl nalezen
 
|-valign=top
 
|-valign=top
|''function LoadOrderItemsFromDataset(Dataset: TDataset; var ErrorOnRow: longint): Boolean'' ||Funkce načte z tabulky určené parametrem Dataset položky objednávky. Jména polí mohou být následující: Autokod nebo GUID (nepovinné jednoznačné označení záznamu), Kod nebo ProductCode (kód zboží z tabulky skladových karet), Pocet nebo Quantity (objednaný počet MJ), BaleniX nebo QuantityP (objednaný počet balení - důležité pro výpočet vázaných obalů; pokud pole není definováno, tak se počet balení určí automaticky), Cena nebo Price (cena bez DPH za MJ; pokud je nastavena automatická aktualizace cen, tak se toto pole ignoruje), Identifik nebo Comment (nepovinné pole, max. 30 znakový komentář k položce). Pokud některá položka objednávky nejde importovat, tak je do údaje ErrorOnRow uloženo pořadové číslo řádku, kde nastala chyba (od 1). Předchozí řádky zůstávají načteny.
+
|''function SetPartner(ICO: String): Boolean'' ||Podle údaje IČO dohledá odběratele nebo dodavatele a naplní hlavičku dokladu podle fakturačního místa z adresy. Pokud partner není nalezen, tak je partner v dokladu vynulován. Podle partnera jsou určeny i individuální ceny pro případ automatické aktualizace cen. Funkce vrací true, pokud je partner nalezen.
 
|-valign=top
 
|-valign=top
|''procedure ClearItems'' ||Tato procedura vymaže seznam položek objednávky.
+
|''function LoadDocHeaderFromDataset(Dataset: TDataset): Boolean'' ||Funkce načte z tabulky určené parametrem Dataset hlavičku dokladu. Struktura vstupní tabulky (jména polí) musí odpovídat struktuře tabulky SkladDOK ze skladového programu. Pokud tabulka obsahuje pole MEMO1, MEMO2 nebo MEMOEXP, tak jsou informace z tohoto pole přeneseny do vlastností Memo1, Memo2, MemoExp (typu StringList).
 
|-valign=top
 
|-valign=top
|''procedure DeleteItem(Index: integer)'' ||Tato procedura vymaže jednu položku objednávky (číslováno od 0).
+
|''function LoadDocItemsFromDataset(Dataset: TDataset; var ErrorOnRow: longint): Boolean'' ||Funkce načte z tabulky určené parametrem Dataset položky objednávky. Jména polí mohou být následující: Autokod nebo GUID (nepovinné jednoznačné označení záznamu), Kod nebo ProductCode (kód zboží z tabulky skladových karet), Pocet nebo Quantity (počet MJ), Cena nebo Price (cena bez DPH za MJ; pokud je nastavena automatická aktualizace cen, tak se toto pole ignoruje), DPH nebo VAT (hodnota DPH za celý řádek). Pokud některá položka dokladu nejde importovat, tak je do údaje ErrorOnRow uloženo pořadové číslo řádku, kde nastala chyba (od 1). Předchozí řádky zůstávají načteny.
 
|-valign=top
 
|-valign=top
|''function ItemsCount: integer'' ||Funkce vrací počet položek objednávky.
+
|''procedure AddPayment(PaymentDate: TDateTime; Payment : Double)'' ||Přidá platbu k dokladu
 
|-valign=top
 
|-valign=top
|''property Items(Index: integer): TKAPOrderItem'' ||Funkce vrací objekt typu TKAPOrderItem umožňující číst a měnit hodnoty jedné položky objednávky.
+
|''procedure ClearItems'' ||Tato procedura vymaže seznam operací dokladu.
 
|-valign=top
 
|-valign=top
|''function AddOrderItem(Kod: String; Pocet, PocetBal: Double; AutoPocetBal: Boolean; Cena: Double; Identifikace: String): Boolean'' ||Funkce přidá jednu položku objednávky. Krta určená kódem zboží musí existovat v seznamu skladových karet, počet musí být nenulový. Pokud je nastavena automatická aktualizace cen, tak se parametr Cena ignoruje a cena je určena automaticky programem se zohledněním individuální ceny odběratele. Pokud je parametr AutoPocetBal nastaven na true, tak se parametr PocetBal ignouje a počet balení je určen automaticky.
+
|''procedure DeleteItem(Index: integer)'' ||Tato procedura vymaže jednu operaci dokladu(číslováno od 0).
 
|-valign=top
 
|-valign=top
|''function LoadOrderByOrderNo(Sklad: word; Prijem: Boolean; CisloObjednavky: longint; LoadItems: Boolean): Boolean'' ||Funkce načte z databáze objednávku určenou číslem skladu a číslem objednávky. Parametr Prijem nastavte na false (čili požadavky); Pokud údaj Sklad bude mít hodnotu 0, tak se použije aktuální číslo skladu. Parametr LoadItems určuje, zda načtou i položky objednávky. Funkce vrací true, pokud je objednávka nalezena a načtena.
+
|''function ItemsCount: integer'' ||Funkce vrací počet operací (položek) dokladu
 
|-valign=top
 
|-valign=top
|''function LoadOrderByGUID(GUID: AnsiString; LoadItems: Boolean): Boolean'' ||Funkce dohledá GUID a pokud je nalezen, tak načte odpovídající objednávku. GUID se ukládá jen pro externí objednávky a je uložen ve formě textu GUID=hodnota v tabulce MEMO ve vazbě na danou objednávku. Pro použití této funkce je nutné mít aktuální (rozšířenou) verzi indexů pro tabulku MEMO.
+
|''property Items[Index: integer]: TKAPDocItem'' ||Funkce vrací objekt typu TKAPDocItem umožňující číst a měnit hodnoty jedné operace dokladu.
 
|-valign=top
 
|-valign=top
|''function SaveOrder: Boolean'' ||Funkce uloží hlavičku objednávky (u nových objednávek přidělí číslo dle číselné řady požadavků), položky a poznámky uložené v MemoA, memoB a MemoI. Pokud je vrácena hodnota true, tak je objednávka uložena do databáze. Může se ale stát, že se uloží objednávka s položkami, ale poznámky se nepodaří uložit (podrobnosti je v tomto případě možné zjistit z pole LastError). Pokud je vrácena hodnota false, tak se objednávku nepovedlo uložit (a není uložena ani hlavička, ani položky). Ukládat lze jen nové objednávky nebo objednávky, které byly kompletně načteny včetně požadavků.
+
|''function AddDocItem(ProductCode: string; Quantity, Price, VATtotal: Double): Boolean'' ||Funkce přidá jednu operaci dokladu. Karta určená kódem zboží musí existovat v seznamu skladových karet, počet musí být nenulový. Pokud je nastavena automatická aktualizace cen, tak se parametr Cena ignoruje a cena je určena automaticky programem se zohledněním individuální ceny partnera. VATTotal vyjadřuje celkovou hodnotu DPH za celou operaci dokladu.
 +
|-valign=top
 +
|''function LoadDocumentByDocNo(Sklad: word; Prijem: Boolean; Rok : Word; TypDokladu : byte; CisloDokladu: longint; LoadItems: Boolean): Boolean'' ||Funkce načte z databáze doklad určený číslem skladu, příjmem, rokem, typem a číslem dokladu. Parametr Prijem nastavte na true pro příjmové doklady a false pro dodací doklady. Parametr LoadItems určuje, zda načtou i operace dokladu. Funkce vrací true, pokud je doklad nalezena a načtena.
 +
|-valign=top
 +
|''function LoadDocumentByID91(ID91: AnsiString; LoadItems: Boolean): Boolean'' ||Funkce dohledá a načte doklad podle [[Struktura interních čárových kódů|identifikačního řetězce znaků]] (obvykle zjištěného za pomocí čtečky čárových kódů).
 +
|-valign=top
 +
|''function GetCPYIndexesFromExchangeFile(FileName, Fields: String; GetCPYDoc, GetCPYReadedDoc: Boolean): TDataset;'' ||Funkce načte z přenosového souboru seznam hlaviček dokladů, které přenosový soubor obsahuje. Pole Fields určuje seznam polí ze struktury DOKLAD, které mají být vráceny ve výsledném datasetu. Navíc je možné vyžádat pole CPYIndex (index uloženého dokladu pro případné načtení), CPYState pro stav dokladu (0=nezpracovaný; 1=načtený doklad), CPYDate, CPYTime (datum a čas zpracování). Pokud je pole Fields prázdné, tak jsou vrácena všechna možná pole. GetCPYDoc=true vrací záznamy jen pro dosud nezpracované doklady, GetCPYReadedDoc=true vrací záznamy pro dříve zpracované (načtené) doklady. Výsledný dataset na závěr nezapomeňte uvolnit pomocí metody Free.
 +
|-valign=top
 +
|''function LoadDocumentFromExchangeFile(FileName, ProtocolFileName: String; IndexCPY: longint; ReadDocHeader, ReadDocMemo1, ReadBarCodes, ReadNewProducts, UpdateProducts, UpdatePurchasePrices, DeleteCPY: Boolean; LogText: String): Boolean'' ||Načte doklad z přenosového souboru podle čísla indexu. FileName je jméno přenosového souboru. ProtocolFileName je jméno souboru s protokolem (pokud je prázdné, tak se vytvoří protokol PRENOS.LOG v uživatelské složce). ReadDocHeader povoluje kompletní načtení hlavičky dokladu. ReadDocMemo1 povoluje načtení poznámky k dokladu do Memo1. ReadBarCodes povoluje automatický import čárových kódů uložených v přenosovém souboru s dokladem. ReadNewProducts povoluje automatické založení skladové karty dle přenosového souboru. UpdateProducts povoluje aktualizaci skladových karet dle nastavení programu. UpdatePurchasePrices povoluje aktualizaci doporučených cen dle přenosového souboru. DeleteCPY zajistí smazání dokladu z přenosového souboru. LogText je informace ukládaná k importovanému dokladu do LOG.BTR (prázdný text zajistí automatický log)
 +
|-valign=top
 +
|''function SaveDocumentToExchangeFile(FileName: String; SaveRecommendedPrices, SaveBarCodes, SaveLocations, SaveDocMemo1 : Boolean; LogText: String) : longint'' ||Uloží doklad do přenosového souboru. FileName je jméno přenosového souboru. SaveRecommendedPrices zajistí uložení doporučených cen. SaveBarCodes uloží informace o čárových kódech ke kartám. SaveLocations povoluje uložení identifikací umístění. SaveDocMemo1 uloží Memo1 do přenosového souboru k dokladu. LogText je informace ukládaná k importovanému dokladu do LOG.BTR (prázdný text zajistí automatický log)
 +
|-valign=top
 +
|''function SaveDocumentHeaderToClientDataset(Fields: String): TDataset'' ||Uloží hlavičku dokladu do nově vytvořeného datasetu. Pole Fields určuje seznam polí ze struktury DOKLAD, které mají být vráceny ve výsledném datasetu. Navíc je možné vyžádat pole Memo1, Memo2 a MemoExp. Výsledný dataset na závěr nezapomeňte uvolnit pomocí metody Free.
 +
|-valign=top
 +
|''function CheckItemsBeforeSave(var ErrItemNo: longint): Boolean'' ||Provede standardní kontroly operací před evidováním dokladu na základně nastavení typu dokladu a přístupových práv uživatele. V případě chyby je číslo problematické operce vráceno v parametru ErrItemNo a popis chyby je v LastError.
 +
|-valign=top
 +
|''function LogText(TextValue, TextDescription, ItemName : AnsiString): Boolean'' ||Funkce uloží textovou informaci do LOG souboru - ve vazbě na zpracovávaný doklad. Záznam lze uložit pouze pro doklady, které již byly uloženy nebo které byly načteny z databáze. TextValue má max. 80 znaků, TextDescription má 30 znaků a ItemName max.10 znaků - pokud není vyplněno, automaticky se nastaví na LOG)
 +
|-valign=top
 +
|''function SaveDocument: Boolean'' ||Funkce uloží hlavičku dokladu (u nových dokladů přidělí číslo dle číselné řady), operace a poznámky uložené v Memo1, Memo2 a MemoExp. Pokud je vrácena hodnota true, tak je doklad uložen do databáze. Může se ale stát, že se uloží doklad s operacemi, ale poznámky se nepodaří uložit (podrobnosti je v tomto případě možné zjistit z pole LastError). Pokud je vrácena hodnota false, tak se doklad nepovedlo uložit (a není uložena ani hlavička, ani operace). Ukládat lze jen nové doklady nebo doklady, které byly kompletně načteny včetně operací.
 
|}
 
|}
  
Řádek 139: Řádek 159:
  
 
  TKAPDocItem = class
 
  TKAPDocItem = class
     constructor Create;  {objekt není možné přímo vytvářet - k objektu se lze dostat pomocí TKAPOrder.Items[Index] }
+
     constructor Create;  {objekt není možné přímo vytvářet - k objektu se lze dostat pomocí TKAPDocument.Items[Index] }
     property ProductCode: string; {Kód zboží}
+
     property ProductCode: string; {Kód zboží - max. 16 znaků}
 
     property Quantity: Double; {Počet MJ}
 
     property Quantity: Double; {Počet MJ}
 
     property Price: Double; {Cena za MJ bez DPH}
 
     property Price: Double; {Cena za MJ bez DPH}
Řádek 150: Řádek 170:
 
     property DeliveryDate: longint; {datum dodávky}
 
     property DeliveryDate: longint; {datum dodávky}
 
     property Flags: word; {jen pro čtení - příznaky operace}
 
     property Flags: word; {jen pro čtení - příznaky operace}
 +
    property IsPurchase: Boolean; {jen pro čtení - určuje, zda je operace nákupní}
 +
    property ProductType: byte; {jen pro čtení - typ karty: účet, zboží, výrobek, ...}
 +
    property UsedPackages: String; {použité obaly - max. 4 znaky}
 +
    property IsNew: Boolean; {jen pro čtení - určuje, zda jde o novou operaci}
 +
    property Location: String; {identifikace umístění}
 +
    property Comment: String; {poznámka k operaci - max. 30 znaků}
 +
    property ExtPricesStr: String; {informace o doporučených cenách: základní cena & dop.cena & dop.cena+DPH}
 +
    property ExtPricesID: longint; {pomocná číselná informace-původní číslo dodávky}
 +
    property IndPriceName: String; {označení individuální ceny - max.10 znaků}
 +
    property DiscountStr: String; {informace o slevě}
 +
    property SpecialProductName: String; {speciální název karty}
 +
    property XCode: String; {speciální kód karty}
 +
  end;
 +
 +
===Objekt TKAPDocType===
 +
 +
  TKAPDocType = class {objekt není možné přímo vytvářet - k objektu se lze dostat pomocí TKAPDocument.DocType}
 +
    property Prijem : Boolean;
 +
    property Poradi : byte;
 +
    property TypDokladu : byte;
 +
    property Vaha : byte;
 +
    property Nazev : String;
 +
    property Popis : String;
 +
    property SkupinaCislovani : String;
 +
    property Oznaceni : String;
 +
    property Vyber: String;
 +
    property Flags[Index: integer]: longint;
 +
    property Dobropis : Boolean;
 +
    property DanovyDoklad : Boolean;
 +
    property VstupDPH : Boolean;
 +
    property DopocitatDPH : Boolean;
 +
    property PocitatSlevy : byte;
 +
    property KratkyVstup  : Boolean;
 +
    property KalkulaceCen : byte;
 +
    property VyhledaniNakupniCeny: byte;
 +
    property ZobrazeniOperaci : byte;
 +
    property TypZaokrouhleni : byte;
 +
    property Zaokrouhlovani : byte;
 +
    property PocetKopii : byte;
 +
    property SekceHlavicka : String;
 +
    property SekceRadek : String;
 +
    property KontaceCelkemKonto : String;
 +
    property KontaceZboziKonto : String;
 +
    property KontaceDanKonto : String;
 +
    property KontacePlatba0Konto : String;
 +
    property KontacePlatba1Konto : String;
 +
    property KontacePlatba2Konto : String;
 +
    property KladneZaokrouhleni : String;
 +
    property ZaporneZaokrouhleni : String;
 +
    property PrevadetDoUcetnictvi: byte;
 +
    property Uhrada              : byte;
 +
    property DruhUctovaniFaktoring: byte;
 +
    property TypDoUcta          : byte;
 +
    property DruhUctovani        : byte;
 +
    property Sleva              : Double;
 +
    property TypCeny            : byte;
 +
    property PristupNovyDoklad  : byte;
 +
    property PristupOpravaDokladu: byte;
 +
    property BankovniUcet        : byte;
 +
    property ZakazaneTypyUhrady  : byte;
 
   end;
 
   end;

Aktuální verze z 21. 5. 2015, 22:24

Pomocí objektu TKAPDocument lze ve skriptovacím programovacím jazyku pracovat s příjmovými i dodacími doklady. Objekt je dostupný pouze ve skladovém programu. Při vytvoření nové instance objektu se otevřou tabulky SKLADKAR, SKLADZAS a MEMO a pomocí těchto tabulek pak program zjišťuje požadované informace. Doporučujeme proto nevytvářet současně mnoho instancí třídy TKAPDocument a v případě, že se objekty již nevyužívají, tak je uvolnit.

Objekt TKAPDocument

TKAPDocument = class
   property Sklad: word;  {doklady lze evidovat pouze v aktuálním skladu; načíst lze ale i doklady z jiných skladů}
   property Prijem: Boolean; {vlastnosti Prijem a Typ dokladu jsou pouze pro čtení - lze je nastavit pomocí SetDocType}
   property Rok : integer; { Vlastnost Rok odpovídá roku z data odeslání dokladu }
   property TypDokladu : byte;
   property CisloDokladu: longint;
   property Vaha: byte;  {pouze pro čtení}
   property UcetniMesic: byte;
   property DatumOdeslano: TDateTime;
   property Jmeno: String;
   property Jmeno2: String;
   property Ulice: String;
   property Mesto: String;
   property PSC: String;
   property Ucet: String;
   property Banka: String;
   property KonstantniSymbol: String;
   property VariabilniSymbol: String;
   property SpecifickySymbol: String;
   property CisloDL: String;
   property CisloObjednavky: String;
   property DatumObjednavky: TDateTime;
   property DatumPrijato: TDateTime;
   property DatumZaplaceno: TDateTime; {Vlastnosti DatumZaplaceno a Zaplaceno se aktualizují pomocí AddPayment}
   property Zadano: TDateTime; {pouze pro čtení}
   property DatumZdanPlneni: TDateTime;
   property Priznaky : word;
   property Uhrada : byte;
   property PocetTisku : byte; {pouze pro čtení}
   property PocetOprav : byte; {pouze pro čtení}
   property FaktBankUcet : byte;
   property Splatnost : word;
   property CisloBankVypisu: word;
   property Stredisko : word;
   property Podnik : byte;
   property ICO: String;
   property DIC: String;
   property Zakazka: String;
   property Vystavil: String;
   property Celkem: Double; {pouze pro čtení}
   property Zaplaceno: Double; {Vlastnosti DatumZaplaceno a Zaplaceno se aktualizují pomocí AddPayment}
   property Mena: String;
   property Kurz: Double;
   property Sleva: Double;
   property ProcPenale: Double;
   property PocetPalet : Double;
   property CasZadano : TDateTime; {pouze pro čtení}
   property PosledniZmena : TDateTime; {pouze pro čtení}
   property Preprava : String;
   property Poznamka : String;
   property PASIdObj      : longint;
   property Bonus         : Double;
   property ExtID         : String;
   property IndivCena     : String;
   property ID            : String;
   property Vyskladnil    : String;
   property StavExpedice  : byte;
   property DatExpedice   : TDateTime;
   property TypDopravy    : byte;
   property Priznaky2     : longint;
   property Priznaky3     : word;
   property CenovePasmo   : byte {TTypCeny};
   property DocType: TKAPDocType;  {pouze pro čtení - odkazuje na automaticky vytvořený objekt popisující typ dokladu}
   property Memo1         : TStringList;
   property Memo2         : TStringList;
   property MemoExp       : TStringList;
   property LastError: String; {pouze pro čtení}
   property RaiseExcept: Boolean; {true=při výskytu chyby se vyvolá výjimka; false=chyby se zapisují jen do LastError (výchozí) }
   property IgnoreRights  : Boolean; {určuje, zda jsou při evidování dokladu ignorována některá omezení daná přístupovými právy}
   property AutoNumber    : Boolean; {automatické číslování dokladu}
   property UpdatePrices  : Boolean; {automatická aktualizace cen při přidání položky pomocí AddDocItem}
   property DeliveryNo    : word; { číslo dodávky pro nové operace }
   property DeliveryDate  : TDateTime; { datum dodávky pro nové operace }
   property AutoDeliveryNo: Boolean; { určuje, zda číslo dodávky bude určeno automaticky nebo na základě vlastností DeliveryNo a DeliveryDate }
   property Items[Index: integer]: TKAPDocItem;  {pole objektů zpřístupňující jednotlivé operace dokladu}
   constructor Create(UpdatePrices: Boolean);
   destructor Destroy;
   procedure ClearLastError;
   function InitNewDocument(Prijem: Boolean; TypDokladu: byte): Boolean;
   function SetDocType(Prijem: Boolean; TypDokladu: byte): Boolean;
   function SetPartner(ICO: String): Boolean;
   function LoadDocHeaderFromDataset(Dataset: TDataset): Boolean;
   function LoadDocItemsFromDataset(Dataset: TDataset; var ErrorOnRow: longint): Boolean;
   procedure AddPayment(PaymentDate: TDateTime; Payment : Double);
   procedure ClearItems;
   procedure DeleteItem(Index: longint);
   function ItemsCount: longint;
   function AddDocItem(ProductCode: string; Quantity, Price, VATtotal: Double): Boolean;
   function LoadDocumentByDocNo(Sklad: word; Prijem: Boolean; Rok : Word; TypDokladu : byte;
                                CisloDokladu: longint; LoadItems: Boolean): Boolean;
   function LoadDocumentByID91(IDDoc91: string; LoadItems: Boolean): Boolean;
   function GetCPYIndexesFromExchangeFile(FileName, Fields: String; GetCPYDoc, GetCPYReadedDoc: Boolean): TDataset; {vrací objekt TClientDataset}
   function LoadDocumentFromExchangeFile(FileName, ProtocolFileName: String; IndexCPY: longint;
                     ReadDocHeader, ReadDocMemo1, ReadBarCodes, ReadNewProducts, UpdateProducts, UpdatePurchasePrices, DeleteCPY: Boolean; LogText: String): Boolean;
   function SaveDocumentToExchangeFile(FileName: String;
                     SaveRecommendedPrices, SaveBarCodes, SaveLocations, SaveDocMemo1 : Boolean; LogText: String) : longint;
   function SaveDocumentHeaderToClientDataset(Fields: String): TDataset; {vrací objekt TClientDataset}
   function LogText(TextValue, TextDescription, ItemName : AnsiString): Boolean;
   function CheckItemsBeforeSave(var ErrItemNo: longint): Boolean;
   function SaveDocument: Boolean;
 end;
Funkce Popis
constructor Create(UpdatePrices: Boolean) Parametr UpdatePrices určuje, zda mají být ceny v dokladu počítány automaticky se zohledněním individuálních cen odběratele/dodavatele nebo budou určeny skriptem při přidávání jednotlivých položek. Vytvořené objekty nezapomeňte uvolnit pomocí metody Free.
procedure ClearLastError Vymazání informace o poslední detekované chybě (LastError).
function InitNewDocument Reinicializuje objekt pro zpracování nového dokladu (tj. vynuluje se hlavička dokladu, smažou se operace i poznámky k dokaldu). Tuto metoda se volá automaticky v rámci vytvoření objektu TKAPDocument.
function SetDocType(Prijem: Boolean; TypDokladu: byte): Boolean Nastaví typ dokladu pro daný doklad. Vrací false, pokud typ dokladu nebyl nalezen
function SetPartner(ICO: String): Boolean Podle údaje IČO dohledá odběratele nebo dodavatele a naplní hlavičku dokladu podle fakturačního místa z adresy. Pokud partner není nalezen, tak je partner v dokladu vynulován. Podle partnera jsou určeny i individuální ceny pro případ automatické aktualizace cen. Funkce vrací true, pokud je partner nalezen.
function LoadDocHeaderFromDataset(Dataset: TDataset): Boolean Funkce načte z tabulky určené parametrem Dataset hlavičku dokladu. Struktura vstupní tabulky (jména polí) musí odpovídat struktuře tabulky SkladDOK ze skladového programu. Pokud tabulka obsahuje pole MEMO1, MEMO2 nebo MEMOEXP, tak jsou informace z tohoto pole přeneseny do vlastností Memo1, Memo2, MemoExp (typu StringList).
function LoadDocItemsFromDataset(Dataset: TDataset; var ErrorOnRow: longint): Boolean Funkce načte z tabulky určené parametrem Dataset položky objednávky. Jména polí mohou být následující: Autokod nebo GUID (nepovinné jednoznačné označení záznamu), Kod nebo ProductCode (kód zboží z tabulky skladových karet), Pocet nebo Quantity (počet MJ), Cena nebo Price (cena bez DPH za MJ; pokud je nastavena automatická aktualizace cen, tak se toto pole ignoruje), DPH nebo VAT (hodnota DPH za celý řádek). Pokud některá položka dokladu nejde importovat, tak je do údaje ErrorOnRow uloženo pořadové číslo řádku, kde nastala chyba (od 1). Předchozí řádky zůstávají načteny.
procedure AddPayment(PaymentDate: TDateTime; Payment : Double) Přidá platbu k dokladu
procedure ClearItems Tato procedura vymaže seznam operací dokladu.
procedure DeleteItem(Index: integer) Tato procedura vymaže jednu operaci dokladu(číslováno od 0).
function ItemsCount: integer Funkce vrací počet operací (položek) dokladu
property Items[Index: integer]: TKAPDocItem Funkce vrací objekt typu TKAPDocItem umožňující číst a měnit hodnoty jedné operace dokladu.
function AddDocItem(ProductCode: string; Quantity, Price, VATtotal: Double): Boolean Funkce přidá jednu operaci dokladu. Karta určená kódem zboží musí existovat v seznamu skladových karet, počet musí být nenulový. Pokud je nastavena automatická aktualizace cen, tak se parametr Cena ignoruje a cena je určena automaticky programem se zohledněním individuální ceny partnera. VATTotal vyjadřuje celkovou hodnotu DPH za celou operaci dokladu.
function LoadDocumentByDocNo(Sklad: word; Prijem: Boolean; Rok : Word; TypDokladu : byte; CisloDokladu: longint; LoadItems: Boolean): Boolean Funkce načte z databáze doklad určený číslem skladu, příjmem, rokem, typem a číslem dokladu. Parametr Prijem nastavte na true pro příjmové doklady a false pro dodací doklady. Parametr LoadItems určuje, zda načtou i operace dokladu. Funkce vrací true, pokud je doklad nalezena a načtena.
function LoadDocumentByID91(ID91: AnsiString; LoadItems: Boolean): Boolean Funkce dohledá a načte doklad podle identifikačního řetězce znaků (obvykle zjištěného za pomocí čtečky čárových kódů).
function GetCPYIndexesFromExchangeFile(FileName, Fields: String; GetCPYDoc, GetCPYReadedDoc: Boolean): TDataset; Funkce načte z přenosového souboru seznam hlaviček dokladů, které přenosový soubor obsahuje. Pole Fields určuje seznam polí ze struktury DOKLAD, které mají být vráceny ve výsledném datasetu. Navíc je možné vyžádat pole CPYIndex (index uloženého dokladu pro případné načtení), CPYState pro stav dokladu (0=nezpracovaný; 1=načtený doklad), CPYDate, CPYTime (datum a čas zpracování). Pokud je pole Fields prázdné, tak jsou vrácena všechna možná pole. GetCPYDoc=true vrací záznamy jen pro dosud nezpracované doklady, GetCPYReadedDoc=true vrací záznamy pro dříve zpracované (načtené) doklady. Výsledný dataset na závěr nezapomeňte uvolnit pomocí metody Free.
function LoadDocumentFromExchangeFile(FileName, ProtocolFileName: String; IndexCPY: longint; ReadDocHeader, ReadDocMemo1, ReadBarCodes, ReadNewProducts, UpdateProducts, UpdatePurchasePrices, DeleteCPY: Boolean; LogText: String): Boolean Načte doklad z přenosového souboru podle čísla indexu. FileName je jméno přenosového souboru. ProtocolFileName je jméno souboru s protokolem (pokud je prázdné, tak se vytvoří protokol PRENOS.LOG v uživatelské složce). ReadDocHeader povoluje kompletní načtení hlavičky dokladu. ReadDocMemo1 povoluje načtení poznámky k dokladu do Memo1. ReadBarCodes povoluje automatický import čárových kódů uložených v přenosovém souboru s dokladem. ReadNewProducts povoluje automatické založení skladové karty dle přenosového souboru. UpdateProducts povoluje aktualizaci skladových karet dle nastavení programu. UpdatePurchasePrices povoluje aktualizaci doporučených cen dle přenosového souboru. DeleteCPY zajistí smazání dokladu z přenosového souboru. LogText je informace ukládaná k importovanému dokladu do LOG.BTR (prázdný text zajistí automatický log)
function SaveDocumentToExchangeFile(FileName: String; SaveRecommendedPrices, SaveBarCodes, SaveLocations, SaveDocMemo1 : Boolean; LogText: String) : longint Uloží doklad do přenosového souboru. FileName je jméno přenosového souboru. SaveRecommendedPrices zajistí uložení doporučených cen. SaveBarCodes uloží informace o čárových kódech ke kartám. SaveLocations povoluje uložení identifikací umístění. SaveDocMemo1 uloží Memo1 do přenosového souboru k dokladu. LogText je informace ukládaná k importovanému dokladu do LOG.BTR (prázdný text zajistí automatický log)
function SaveDocumentHeaderToClientDataset(Fields: String): TDataset Uloží hlavičku dokladu do nově vytvořeného datasetu. Pole Fields určuje seznam polí ze struktury DOKLAD, které mají být vráceny ve výsledném datasetu. Navíc je možné vyžádat pole Memo1, Memo2 a MemoExp. Výsledný dataset na závěr nezapomeňte uvolnit pomocí metody Free.
function CheckItemsBeforeSave(var ErrItemNo: longint): Boolean Provede standardní kontroly operací před evidováním dokladu na základně nastavení typu dokladu a přístupových práv uživatele. V případě chyby je číslo problematické operce vráceno v parametru ErrItemNo a popis chyby je v LastError.
function LogText(TextValue, TextDescription, ItemName : AnsiString): Boolean Funkce uloží textovou informaci do LOG souboru - ve vazbě na zpracovávaný doklad. Záznam lze uložit pouze pro doklady, které již byly uloženy nebo které byly načteny z databáze. TextValue má max. 80 znaků, TextDescription má 30 znaků a ItemName max.10 znaků - pokud není vyplněno, automaticky se nastaví na LOG)
function SaveDocument: Boolean Funkce uloží hlavičku dokladu (u nových dokladů přidělí číslo dle číselné řady), operace a poznámky uložené v Memo1, Memo2 a MemoExp. Pokud je vrácena hodnota true, tak je doklad uložen do databáze. Může se ale stát, že se uloží doklad s operacemi, ale poznámky se nepodaří uložit (podrobnosti je v tomto případě možné zjistit z pole LastError). Pokud je vrácena hodnota false, tak se doklad nepovedlo uložit (a není uložena ani hlavička, ani operace). Ukládat lze jen nové doklady nebo doklady, které byly kompletně načteny včetně operací.

Viz příklad Příklady PASCAL

Objekt TKAPDocItem

TKAPDocItem = class
   constructor Create;   {objekt není možné přímo vytvářet - k objektu se lze dostat pomocí TKAPDocument.Items[Index] }
   property ProductCode: string; {Kód zboží - max. 16 znaků}
   property Quantity: Double; {Počet MJ}
   property Price: Double; {Cena za MJ bez DPH}
   property VATTotal: Double; {celková hodnota DPH za danou operaci}
   property VATPercent: Double; {Procento DPH}
   property QuantitySold: Double; {jen pro čtení - počet kusů vydaný z dané nákupní operace}
   property PurchasePrice: Double; {Nákupní cena - pro vydané dobropisy}
   property DeliveryNumber: word; {číslo dodávky}
   property DeliveryDate: longint; {datum dodávky}
   property Flags: word; {jen pro čtení - příznaky operace}
   property IsPurchase: Boolean; {jen pro čtení - určuje, zda je operace nákupní}
   property ProductType: byte; {jen pro čtení - typ karty: účet, zboží, výrobek, ...}
   property UsedPackages: String; {použité obaly - max. 4 znaky}
   property IsNew: Boolean; {jen pro čtení - určuje, zda jde o novou operaci}
   property Location: String; {identifikace umístění}
   property Comment: String; {poznámka k operaci - max. 30 znaků}
   property ExtPricesStr: String; {informace o doporučených cenách: základní cena & dop.cena & dop.cena+DPH}
   property ExtPricesID: longint; {pomocná číselná informace-původní číslo dodávky}
   property IndPriceName: String; {označení individuální ceny - max.10 znaků}
   property DiscountStr: String; {informace o slevě}
   property SpecialProductName: String; {speciální název karty}
   property XCode: String; {speciální kód karty}
 end;

Objekt TKAPDocType

 TKAPDocType = class {objekt není možné přímo vytvářet - k objektu se lze dostat pomocí TKAPDocument.DocType}
   property Prijem : Boolean;
   property Poradi : byte;
   property TypDokladu : byte;
   property Vaha : byte;
   property Nazev : String;
   property Popis : String;
   property SkupinaCislovani : String;
   property Oznaceni : String;
   property Vyber: String;
   property Flags[Index: integer]: longint;
   property Dobropis : Boolean;
   property DanovyDoklad : Boolean;
   property VstupDPH : Boolean;
   property DopocitatDPH : Boolean;
   property PocitatSlevy : byte;
   property KratkyVstup  : Boolean;
   property KalkulaceCen : byte;
   property VyhledaniNakupniCeny: byte;
   property ZobrazeniOperaci : byte;
   property TypZaokrouhleni : byte;
   property Zaokrouhlovani : byte;
   property PocetKopii : byte;
   property SekceHlavicka : String;
   property SekceRadek : String;
   property KontaceCelkemKonto : String;
   property KontaceZboziKonto : String;
   property KontaceDanKonto : String;
   property KontacePlatba0Konto : String;
   property KontacePlatba1Konto : String;
   property KontacePlatba2Konto : String;
   property KladneZaokrouhleni : String;
   property ZaporneZaokrouhleni : String;
   property PrevadetDoUcetnictvi: byte;
   property Uhrada              : byte;
   property DruhUctovaniFaktoring: byte;
   property TypDoUcta           : byte;
   property DruhUctovani        : byte;
   property Sleva               : Double;
   property TypCeny             : byte;
   property PristupNovyDoklad   : byte;
   property PristupOpravaDokladu: byte;
   property BankovniUcet        : byte;
   property ZakazaneTypyUhrady  : byte;
 end;