ECOTRON: Data Storage Services


 
Základní popis
Datové jádro ECOTRON disponuje funkcemi a makry pro zápis dokladů do databáze a jejich export. Používá paměťové úložiště (XIF objekt),  sloužící k oddělení vrstvy generující data zapisovaného dokladu od vrstvy, která doklad realizuje v samotné databázi. Stejně tak při exportu dokladu je vytvořeno úložiště s daty dokladu. Výsledkem je pružný nástroj, který dokáže generovat, kopírovat, replikovat, importovat a exportovat doklady nezávisle na požadovaném vnějším formátu.

Zápis nového dokladu
Generování se skládá z následujících kroků
  1. Inicializace úložiště voláním @DSW_INIT() 
  2. Inicializace hlavičky dokladu voláním @DSW_NEWDOC() 
  3. Definice položek hlavičky dokladu voláním @DSW_DOC()
  4. Inicializace řádku voláním @DSW_NEWROW() 
  5. Definice položek řádku dokladu voláním @DSW_ROW()
  6. Finalizace úložiště voláním @DSW_DONE() 
  7. Realizace dokladu voláním @DS_LOADDOK() 

Pro každý doklad je tedy potřeba volat @DSW_NEWDOC(),  pro každý řádek dokladu @DSW_NEWROW().

Následující příklad vytváří nový bankovní výpis:

#include ecotronh.x

long CREATE_BA( long cursor, long ROK, const string PREFIX, long & CDOK )
{
    try
        @DSW_INIT()

        @DSW_NEWDOC( ROK, 'BA', PREFIX, '' )
// BEGIN ROW
            @DSW_NEWROW()
                @DSW_ROW( 'ORD', '10' ) 
                @DSW_ROW( 'DAT_PLAT', '1.5.2004' ) 
                @DSW_ROW( 'DBOP', '10' ) 
                @DSW_ROW( 'CR_DB', 'C' ) 
                @DSW_ROW( 'DEV', '1000' ) 
                @DSW_ROW( 'MENA', 'KČ' ) 
                @DSW_ROW( 'KURZ', '1' ) 
                @DSW_ROW( 'KC', '
1000' ) 
                @DSW_ROW( 'BAN_SPOJ', '12354655/0300' ) 
                @DSW_ROW( 'VAR_SYMB', '9999445' ) 
                @DSW_ROW( 'SPEC_SYMB', '' ) 
                @DSW_ROW( 'KON_SYMB', '' ) 
                @DSW_ROW( 'PARC', '9999445' ) 
                @DSW_ROW( 'PARTNER', 'ALFA-REX' ) 
                @DSW_ROW( 'STRED', '' ) 
                @DSW_ROW( 'KJ', '' ) 
                @DSW_ROW( 'POZN', '' ) 
                @DSW_ROW( 'DPH', '0' ) 
                @DSW_ROW( 'PUV_MENA', '' ) 
                @DSW_ROW( 'PUV_DEV', '' ) 
                @DSW_ROW( 'PUV_KURZ', '' ) 
// END ROW

// BEGIN ROW 
            @DSW_NEWROW()
                @DSW_ROW( 'ORD', '20' ) 
                @DSW_ROW( 'DAT_PLAT', '1.5.2004' ) 
                @DSW_ROW( 'DBOP', '10' ) 
                @DSW_ROW( 'DEV', '12000' ) 
                @DSW_ROW( 'MENA', 'KČ' ) 
                @DSW_ROW( 'KURZ', '1' ) 
                @DSW_ROW( 'KC', '
12000' ) 
                @DSW_ROW( 'BAN_SPOJ', '42354655/0300' ) 
                @DSW_ROW( 'VAR_SYMB', '29999445' ) 
                @DSW_ROW( 'SPEC_SYMB', '' ) 
                @DSW_ROW( 'KON_SYMB', '' ) 
                @DSW_ROW( 'PARC', '29999445' ) 
                @DSW_ROW( 'PARTNER', 'GAMMA-REX' ) 
                @DSW_ROW( 'STRED', '' ) 
                @DSW_ROW( 'KJ', '' ) 
                @DSW_ROW( 'POZN', '' ) 
                @DSW_ROW( 'DPH', '0' ) 
                @DSW_ROW( 'PUV_MENA', '' ) 
                @DSW_ROW( 'PUV_DEV', '' ) 
                @DSW_ROW( 'PUV_KURZ', '' ) 
// END ROW

        @DSW_DONE()
// REALIZE
        @DS_LOADDOK( cursor, ROK, 'BA', PREFIX, CDOK )
    catch
        xret( -1 )
    end
    xret( 0 )
}

 

Export dokladů
Export provádí funkce @DS_STORE( long cursor, const string DDOK, const string WHERE, string DWHERE, long & COUNT ), která vytvoří paměťové úložiště a zapíše do něj doklady zadaného typu DDOK splňující výběrové podmínky WHERE. Podmínka DWHERE umožnuje specifikovat kriteria i pro řádky detailů. S úložištěm lze dále pracovat pomocí XIF operátorů, například jej uložit do souboru, odeslat, načíst apod. Do parametru COUNT funkce zapíše počet exportovaných dokladů.

Následující příklad exportuje bankovní výpisy:

#include ecotronh.x

long EXPORT_BA( long cursor )
{
    long   
COUNT
    try
   
    
@DS_STORE( cursor, 'BA', 'DAT_EXP IS NULL', '', COUNT ) 
        xsqlprepadnexec( cursor, 'UPDATE BA01 SET DAT_EXP=#now[] WHERE DAT_EXP IS NULL' ) 
       
xifsaveas( 'c:\\export_ba.xif' )
    catch
        xret( -1 )
    end
    xret( 0 )
}


Import dokladů z úložiště
Import provádí funkce @DS_LOAD( long cursor, long ROK, const string DDOK, const string PREFIX, long & COUNT ), která z paměťového úložiště načte doklady zadaného typu DDOK. Je-li ROK nenulový, bude použit namísto roku definovaného úložištěm,  to samé platí pro PREFIX. Do parametru COUNT funkce zapíše počet importovaných dokladů.

Následující příklad importuje bankovní výpisy z úložiště vytvořeného předchozím exportem:

#include ecotronh.x

long IMPORT_BA( long cursor )
{
    long    COUNT, xif
    try
        xifload( xif, 'c:\\export_ba.xif' )
        @DS_LOAD( cursor, 0, 'BA', '', COUNT ) 
        xsqlcommit( cursor )
    catch
        xret( -1 )
    end
    xret( 0 )
}