Import danych > Import specjalny (format 3.0) > Elementy języka szablonów > Przetwarzanie danych przy pomocy szablonu

Drukuj

Przetwarzanie danych przy pomocy szablonu

Wczytanie porcji danych wejściowych

Z pliku wejściowego dane są odczytywane sekwencyjnie, porcjami po jednej sekcji wejściowej. W zależności od formatu danych może to być jedna linia danych lub wiele linii tworzących całość informacji np. o jednym kontrahencie lub dokumencie. Dla każdej wczytanej sekcji danych identyfikowana jest jej nazwa. Dla formatów AM, AMS oraz POLKA nazwa sekcji jest podana w pliku danych, dla formatu SDF, CDF, COMMA nazwa sekcji wejściowej jest pusta (nie ma jej jawnie podanej w wierszu danych). Oczywiście oprócz identyfikacji nazwy są rozpoznawane wszystkie pola danych oraz dokonywana jest konwersja kodów polskich liter. Tak przygotowane dane wejściowe są gotowe do przetwarzania przez szablon.

 

Identyfikacja procedury przetwarzania  

Szablon składa się z jednej lub wielu procedur przetwarzających wczytane dane wejściowe. Dla każdej różnej sekcji wejściowej (dla każdej sekcji o innej nazwie) można utworzyć w szablonie oddzielną procedurę przetwarzającą te dane. Mechanizm ten umożliwia przetwarzanie z jednego pliku danych informacji różnego rodzaju. Przykładowo w jednym pliku mogą znajdować się dokumenty handlowe oraz kartoteki, oczywiście pod warunkiem, że będą znajdować się w sekcjach o różnych nazwach. Procedury przetwarzające w szablonie zaczynają się słowem SECTION i dwoma parametrami w nawiasie, po których następuje znak początku sekcji (otwierający nawias klamrowy), a kończą się znakiem końca sekcji (zamykający nawias klamrowy).  Wszystko co znajduje się pomiędzy znakiem początku i końca sekcji jest zbiorem reguł przetwarzania w danej procedurze.

 

Przykład:

Section(„Faktura VAT”, „dokument”)

{

 $numer = [numer własny]

}

 

Po określeniu nazwy sekcji wejściowej jest odszukiwana w szablonie procedura, której pierwszy parametr jest taki sam jak nazwa  sekcji wejściowej. Jeśli w szablonie nie ma takiej procedury, której pierwszy parametr odpowiada nazwie sekcji wejściowej, wówczas odszukiwana jest procedura, która ma pierwszy parametr pusty (puste cudzysłowy). Ta odszukana procedura będzie przetwarzała dane wczytanej sekcji wejściowej.

Podczas poszukiwania właściwej procedury w szablonie ignorowana jest wielkość liter w nazwie sekcji, pomijane są białe znaki (spacje, tabulatory) z początku i końca nazwy, a białe znaki w środku nazwy sekcji są zamieniane na jedną spację.

 

Tworzenie sekcji wyjściowej

Po zidentyfikowaniu właściwej procedury w szablonie może zostać utworzona sekcja wyjściowa, która będzie zawierać dane przetworzone przez szablon, a które w konsekwencji zostaną wprowadzone do programu Finanse i Księgowość. Drugi parametr  procedury SECTION określa nazwę sekcji wyjściowej. Jeśli nazwa ta nie zostanie podana, wówczas nie jest tworzona automatycznie sekcja wyjściowa (musi być utworzona jawnie np. poleceniem MakeSec). Program Finanse i Księgowość rozpoznaje i akceptuje następujące nazwy sekcji wyjściowych:

Dokument – Odpowiada dokumentowi w buforze.

Zapis – Odpowiada pojedynczemu zapisowi na dokumencie, a konkretnie jednej kwocie po jednej stronie konta. Może być użyta wyłącznie jako podsekcja sekcji Dokument.

Rejestr – Odpowiada pojedynczemu rejestrowi VAT w dokumencie. Może być użyta wyłącznie jako podsekcja sekcji Dokument.

Kontrahent – Odpowiada kontrahentowi w kartotece kontrahentów stałych. Może występować samodzielnie lub jako podsekcja sekcji Dokument.

Incydentalny – Odpowiada kontrahentowi w kartotece kontrahentów incydentalnych. Może występować samodzielnie lub jako podsekcja sekcji Dokument.        

Pracownik – Odpowiada pracownikowi w kartotece pracowników. Może występować samodzielnie lub jako podsekcja sekcji Dokument.

Urzad – Odpowiada urzędowi skarbowemu w kartotece urzędów.

Rachunek – Odpowiada rachunkowi bankowemu w kartotece rachunków bankowych.

Transakcja – Odpowiada nowej transakcji na dokumencie. Może być użyta wyłącznie jako podsekcja sekcji Dokument lub Zapis.

Rozliczenie – Odpowiada rozliczeniu transakcji na dokumencie. Może być użyta wyłącznie jako podsekcja sekcji Dokument lub Zapis.

 

Przetworzenie danych z sekcji wejściowej

Zawartość procedury w szablonie, czyli wszystko pomiędzy znakami początku i końca procedury jest zbiorem poleceń, które są wykonywane sekwencyjnie (polecenie po poleceniu) i powodują przetworzenie danych wejściowych, czyli w konsekwencji przepisaniu danych (po ewentualnej zmianie formatu, podzieleniu, połączeniu itp.) z sekcji wejściowej do sekcji wyjściowej.  Podstawowym poleceniem przypisującym polu wyjściowemu wartość z pola wejściowego jest polecenie podstawienia.

 

Przykład:

 $treść = [opis dokumentu]

 

W powyższym przykładzie polu wyjściowemu o nazwie treść przypisano wartość z pola wejściowego o nazwie opis dokumentu. Pola wyjściowe są zawsze identyfikowane przez znak $ na początku nazwy pola. Pola wejściowe są zawsze identyfikowane przez podanie ich nazwy w nawiasach kwadratowych. Znakiem podstawienia jest znak równości (=) W przypadku nazw pól wejściowych nie ma znaczenia wielkość liter, którymi zapisana jest nazwa, ponadto białe znaki z początku i końca nazwy są ignorowane, a białe znaki w środku nazwy zamieniane są na jedną spację.

Dostęp do pól wejściowych jest swobodny, co oznacza że do wartości pól możemy odwoływać się w dowolnej kolejności (niezależnie od kolejności pól w danych wejściowych) oraz do jednego pola można odwoływać się wielokrotnie w danej procedurze. Do niektórych pól wejściowych (nieużywanych) możemy nie odwoływać się w ogóle.

Dostęp do pól wyjściowych jest również swobodny, co oznacza że do tych pól możemy odwoływać się w dowolnej kolejności i dowolną ilość razy, np. wielokrotnie modyfikować zawartość jednego pola. Do niektórych pól wyjściowych możemy nie odwoływać się w ogóle.

Możemy tworzyć dowolną ilość pól wyjściowych o dowolnych nazwach. Procedury importu nie sprawdzają i nie ostrzegają jeśli utworzone pole nie ma swojego odpowiednika w bazach danych programu. Przykładowo w sekcji Kontrahent możemy utworzyć pole Zawód, ale pole to zostanie zignorowane, gdyż w kartotece kontrahentów w programie Finanse i Księgowość nie ma  pola o nazwie Zawód. Wszystkie rozpoznawalne nazwy pól poszczególnych sekcji wyjściowych, wraz z regułami ich wypełniania są opisane w dalszej części dokumentu.

 

Podsekcje w danych wejściowych

W sekcji wejściowej może znajdować się dowolna liczba podsekcji. Przykładowo w sekcji dokumentu mogą znajdować się podsekcje zapisów, rejestrów VAT oraz rozrachunków. Aby móc przetwarzać dane również w podsekcjach, należy w szablonie, wewnątrz procedury przetwarzającej sekcję wejściową umieścić odpowiednie podprocedury.

Podprocedury mają dokładnie taką samą składnię jak procedury, a umieszczane są wewnątrz procedur (stąd ich nazwa).

 

Przykład:

Section(„Faktura VAT”, „dokument”)

{

 $numer = [numer własny]

 Section(„Odbiorca”, „Kontrahent”)

 {

         $nazwa = [nazwa odbiorcy]

 }

}

 

W powyższym przykładzie w procedurze obsługującej sekcję wejściową o nazwie Faktura VAT znajduje się podprocedura obsługująca podsekcję danych wejściowych o nazwie Odbiorca.

Jeśli w trakcie wykonywania kolejnych poleceń procedury zostanie zidentyfikowana podprocedura, wówczas wykonywane są kolejno następujące kroki:

w danych wejściowych zostanie odszukana podsekcja o nazwie takiej, jak pierwszy argument podprocedury (w naszym przykładzie  będzie to podsekcja Odbiorca).  Jeśli nie odnajdziemy podsekcji wejściowej o takiej nazwie, wówczas generowany jest błąd wykonania. Jeśli pierwszy argument podprocedury będzie pusty, wówczas w sekcji wejściowej jest odnajdywana pierwsza w kolejności podsekcja. Wszystkie pola znalezionej podsekcji stają się dostępne poleceniom podprocedury w szablonie.

Drugi parametr  podprocedury określa nazwę podsekcji wyjściowej, która ma zostać utworzona. Jeśli nazwa ta nie zostanie podana, wówczas nie jest tworzona automatycznie sekcja wyjściowa (może być utworzona jawnie np. poleceniem MakeSec). Utworzona w ten sposób podsekcja wyjściowa jest umieszczana wewnątrz sekcji wyjściowej (tworząc analogiczną strukturę jak sekcje i podsekcje wyjściowe)

Wszystkie polecenia podprocedury w szablonie są wykonywane sekwencyjnie, analogicznie jak polecenia głównej procedury.

 

W trakcie wykonywania poleceń podprocedury, dostępne są wyłącznie pola z odnalezionej podsekcji wejściowej. W szczególności nie można odwołać się bezpośrednio do pól głównej sekcji  wejściowej. (jakkolwiek jest możliwe przekazanie wartości wybranych pól poprzez zmienne szablonu).

Wszystkie zmienne wyjściowe (pola sekcji wyjściowej) są umieszczane w nowoutworzonej podsekcji wyjściowej.  Istnieje możliwość odwołania się bezpośrednio do pól głównej sekcji wyjściowej, w tym celu nazwę pola wyjściowego należy poprzedzić podwójnym znakiem $, np. $$nazwa.

Jeśli nie podamy nazwy podsekcji wyjściowej, wówczas podsekcja ta nie zostaje utworzona i wówczas wszystkie pola wyjściowe są tworzone w głównej (bieżącej) sekcji wyjściowej.

Po zakończeniu wykonywania poleceń podprocedury następuje zamknięcie podsekcji danych wejściowych (staje się ona już niedostępna dla szablonu) oraz zamknięcie sekcji wyjściowej (ona również staje się niedostępna z szablonu). Jeśli po końcu podprocedury znajdują się inne polecenia procedury głównej, są one dalej wykonywane sekwencyjnie, aż do końca procedury. Dla tych poleceń znów dostępne są wszystkie pola sekcji wejściowej oraz wszystkie pola sekcji wyjściowej.

 

Podprocedury mogą być wielokrotnie „zagnieżdżane”, to znaczy umieszczane jedna w drugiej, stosownie do zagnieżdżania kolejnych podsekcji w danych wejściowych. Przykładowo w sekcji Dokument może być umieszczona podsekcja Zapis, a w niej następna podsekcja o nazwie Transakcja, odpowiadająca nowej transakcji dla tego zapisu. W szablonie musimy wówczas utworzyć procedurę do obsługi sekcji Dokument, w niej umieścić podprocedurę do obsługi podsekcji Zapis, a w niej z kolei podprocedurę do obsługi podsekcji Transakcja.

 

Zasady wykonywania kolejnych zagnieżdżonych podprocedur są identyczne jak pierwszej podprocedury.

 

Przetwarzanie wielu sekcji o tej samej nazwie

Import specjalny umożliwia analizowanie wielu podsekcji o identycznej nazwie, umieszczonych w jednej sekcji wejściowej. Przykładem mogą być podsekcje Zapis w sekcji Dokument. W przypadku raportu kasowego może być ich nawet kilkaset w jednym dokumencie.

Przetwarzanie powtarzających się podsekcji może być przeprowadzone na dwa sposoby:

Dodanie trzeciego parametru podprocedury o wartości REPEAT (powtarzaj), powoduje cykliczne odszukanie i przetworzenie wszystkich podsekcji wejściowych o nazwie podanej jako pierwszy parametr  podprocedury. Dopiero po przetworzeniu wszystkich podsekcji wejściowych sterowanie przekazywane jest do poleceń umieszczonych po znaku końca podprocedury.

Umieszczenie podprocedury wewnątrz pętli programowej While, w tym wypadku podprocedura zostanie wykonana tyle razy, ile zostanie określone w warunku sterującym pętlą. Aby przetworzyć wszystkie podsekcje wejściowe, w warunku sterującym pętli While można umieścić polecenie sprawdzające, czy istnieje następna podsekcja wejściowa.