Import danych > Import specjalny (format 3.0) > Wzorcowe szablony importu specjalnego

Drukuj

Wzorcowe szablony importu specjalnego

Szablony aktualnie wykorzystywane

FK2005.AMS

Szablon służy do wczytywania danych w formacie AMS, który został opracowany jako podstawowy format wymiany danych pomiędzy programami systemu Symfonia. Obsługuje wszystkie rodzaje informacji możliwych do zaimportowania do programu FK:

Dokumenty księgowe, w tym

Dekretacje

Rejestry VAT

Rozrachunki

Kartoteki programu FK

Kontrahenci

Pracownicy

Urzędy

 

SRTRW.AMS

Szablon służy do wczytywania danych w formacie AMS z programu Symfonia Środki Trwałe.

 

PLACE.AMS

Szablon służy do wczytywania danych w formacie AMS z programu Symfonia Płace.

 

HMFK.AMS

Szablon służy do wczytywania danych w formacie AMS z programu Symfonia 2.0 Handel.

Poniżej obszerne omówienie poszczególnych instrukcji.

Blok definicji

#opis  "Dane z programu Handel, format FK 3.0", "*.TXT (Pliki tekstowe)"  //

#format  "AMS"  //

#opisy  ""  //

#Disable  "2"  //poziom ostrzeżeń 1 (m.in. bez ostrzeżenia "Pole nie znalezione")

#POWIELONE_NAZWY  "0"  //0-zapisuje bez pytania; 1-pyta czy zapisać; 2-nie zapisuje

 

Tworzenie sekcji wyjściowej kontrahenta (w FK), gdy napotkamy sekcję wejściową (w pliku danych) o tej samej nazwie. Sekcja zostanie utworzona niezależnie od tego w jakim poziomie zagłębienia sekcji wejściowych będzie się znajdowała.

Section( "Kontrahent", "Kontrahent")

{

 $klucz   = SUM0([id],-65535)

 

Nadawca jako klucza powiązania używa id ze swojego pliku danych zmniejszonego o 65535 (o offset do 1-ego numeru)

$skrot                = [kod]

$nazwa                = [nazwa]

$miejscowosc        = [miejscowosc]

$gmina                = [rejon]

 

IF ( REX( [nip], "{[rRpP]}/:{*$}" ) )

{

 IF ( EQUAL( TRANSLATE(@rex1, "U"), "P"))

         $pesel = @rex2

 ELSE

         $regon = @rex2

}

ELSE

{

 $nip = [nip]

}

 

W powyższym ciągu instrukcji na podstawie zawartości pola nip w pliku danych nadawca decyduje czy w FK odpowiada to nipowi, peselowi czy też regonowi

 IF( EXIST( "dom") )

 {

         $ulica                = [ulica]

         $NumerDomu        = [dom]

         $NumerMieszk= [lokal]

 }

 ELSE

 {

         IF( REX([ulica], "-{*}({[0-9///-]##:b()|[A-Q]})(:b[//\\.,]|(m[,.]+)|():b{[0-9]##:b[A-Z]|()})|()$"))

         {

                 $ulica                = @rex1

                 $NumerDomu        = @rex2

                 $NumerMieszk= @rex3

         }

         ELSE

                 $ulica                = [ulica]

 }

 

 $kod               = [kodpocz]

 $telefon1          = [tel1]

 $telefon2           = [tel2]

 $telefax        = [fax]

 IF( equal([badres], "") )

         $w_banku1         = [bnazwa]

 ELSE

         $w_banku1         = CAT([bnazwa], ", ", [badres])

 $rachunek1         = [bkonto]

 $nazwisko           = [nazwisko]

 $imie             = [imie]

 $fk_ident        = [khfk]

 

 $regon                = [regon]

 $pesel                = [pesel]

 

 $idKraj                = [idKraj]        

 $krajKod = [krajKod]

 

 $statusUE        = [statusUE]

 

 $limit                = [limit]

 $limitKwota        = [limitKwota]

 $limitWaluta        = [limitWaluta]

 $znacznik        = [znacznik]

 

 $www                = [www]

 $email                = [email]

 

 $aktywny        = [aktywny]

}

 

Section( "Pracownik", "Pracownik")

{

 $klucz                        = SUM0([id],-65535)

 $nazwisko                = [nazwisko]

 $imie1                        = [imie]

 $imie2                        = [naglowek]        //imie2

 $telefon                = [tel1]

 $st_miejscowosc        = [miejscowosc]

 

 $st_kod                        = [kodpocz]

 $st_poczta                = [miejscowosc]

 $rch_symbol                = [bnazwa]

 $rch_numer                = [bkonto]

 

 $aktywny        = [aktywny]

 $skrot                = [kod]

}

 

Section( "Urząd", "Urzad")

{

 $skrot                = [kod]

 $klucz                        = SUM0([id],-65535)

 $nazwa                        = [nazwa]

 

 IF( EXIST( "dom") )

 {

         $ulica                = [ulica]

         $NumerDomu        = CAT([dom], " / ", [lokal])

//                $NumerMieszk= [lokal]

 }

 ELSE

 {

         IF( REX([ulica], "-{*}({[0-9///-]##:b()|[A-Q]})(:b[//\\.,]|(m[,.]+)|():b{[0-9]##:b[A-Z]|()})|()$"))

         {

                 $ulica                = @rex1

                 $NumerDomu        = CAT(@rex2, " / ", @rex3)

 //                $NumerMieszk= @rex3

         }

         ELSE

                 $ulica                = [ulica]

 }

 

 $kod                          = [kodpocz]

 $miejsce                = [miejscowosc]

 $symbol                        = [bnazwa]

 $rachunek                = [bkonto]

 

 $aktywny        = [aktywny]

}

 

Section("dokument", "")

{

 if( NOT(equal( [anulowany], "1")) )

 {

         MakeSec("dokument")

         {

                 @opisy = ""

                 Info("Dokument: ", [kod])

                 $ObslugujJak         = [obsluguj jak]

                 $klucz                = [symbol FK]

                 $nazwa                = [FK nazwa]

                 $rodzaj_dok                = [rodzaj_dok]

                 $naliczenie_VAT        = [naliczenie_VAT]

 

                 switch( [obsluguj jak] )

                 {

                 case "RK"

                                    Info("konto kasy: ", [KontoKasy])

                         if( equal([KontoKasy], "") )

                         {

                                 Ask("Dokument nie posiada zdefiniowanego konta kasy.",

                                         "Ponieważ nie można określić strony dla konta kasy,",

                                         "pole kwoty pozostanie puste. DefBtn:&OK=2 Ico:!")

                         }

                 case "DP"

                 case "WB"

                 case "DIM"

                 case "DEX"

                                 @opisy        = 1

                         $tresc        = [opis FK]

                         break

                 case else

                                 if (!Def("opisy"))

                                    {

                                 Def("opisy", Ask("Czy importować opisy faktur VAT i rachunków? DefBtn:&Tak=10 Btn:&Nie=C Ico:?") )

                             }

                                    if( Equal( Def("opisy"), "10") )

                                 {

                                        @opisy = 1

                                 $tresc        = [opis FK]

                         }

                 }

 

                 if ( Equal([rodzaj_dok], "zakupu") )

                 {

                         if ( Equal([obsluguj jak], "WNT") )

                         {

                                 $DataDok        = Date([data])

                                 $DataOper        = Date([data])

                         }

                         else

                         {

                                 $DataDok        = Date([datasp])

                                 $DataOper        = Date([datasp])

                         }

                 }

                 else

                 {

                         if ( Equal([rodzaj_dok], "magazynowy") )

                         {

                                 $DataDok        = Date([datasp])

                                 $DataOper        = Date([data])

                         }

                         else

                         {

                                 $DataDok        = Date([data])

                                 $DataOper        = Date([datasp])

                         }

                 }

 

                 $Kwota                = [kwota]

 

                 $Sygnatura        = [Sygnatura]

 

                 $SaldoPoczRK        = [SaldoPRK]

         //        $SaldoZapRK        = sum0([SaldoZRK],[SaldoPRK])

                 $SaldoZapRK        = [SaldoZRK]

                 $KontoKasy        = [KontoKasy]

 

                 $NazwaKor        = [NazwaKor]

                 $DataKor        = Date([DataKor])

                 $Datawpl        = Date([Datawpl])

                 IF(NOT (equal([plattermin], "")) )

                 {

                         @plattermin        = Date([plattermin])

                 }

 

                 switch( [obsluguj jak] )

                 {

                 case "DIM"

                         break

                 case else

                         IF ( NOT(equal([waluta], "")) )

                         {

                                 if ( !equal([wkwota], "") )

                                 {

                                         $wkwota = [wkwota]

                                         $waluta = [waluta]

                                         $kurs =        [kurs]

                                         $typkursu = 3

                                 }

                         }

                 }

 

                 //analizujemy wszystkie sekcje - mogą być wymieszane

                 Section("", "", "REPEAT")        //REPEAT: analizujemy wszystkie podsekcje

                 {

                         switch( Translate( Name(), "L") )

                         {

                         case "dane nabywcy"

                         case "dane sprzedawcy"

                                 if (!equal([khid], 0))

                                 {

                                         MakeSec("Kontrahent")

                                         {

                                                 $klucz          = SUM0([khid],-65535)

                                                 if (!Equal([fk_ident], "0"))

                                                         $fk_ident = [fk_ident]   //uzgodniony numer FK

                                                 IF ( REX( [khnip], "{[rRpP]}/:{*$}" ) )

                                                 {

                                                         // na dokumencie  piszemy tyko NIP , więć nic nie robimy

                                                 }

                                                 ELSE

                                                 {

                                                         $NIP          = [khnip]

                                                 }

 

                                         }        

 

                                 }

                                 else

                                 {        

                                         if( !equal( [khnip], "") )

                                         {

                                                 MakeSec("Incydentalny")

                                                 {

                                                         $klucz                = [khnip]

                                                         $NIP                = [khnip]

                                                         $nazwa                = [khnazwa]

                                                         $miejscowosc= [khmiasto]

                                                         $ulica                = [khadres]

                                                         IF( EXIST( "khdom") )

                                                         {

                                                                 $NumerDomu        = [khdom]

                                                                 $NumerMieszk= [khlokal]

                                                         }

                                                         $kod               = [khkodpocz]

                                                 }        

                                         }

                                         else

                                         if( !equal( [khnazwa], "") )

                                         {

                                                 MakeSec("Incydentalny")

                                                 {

                                                         $klucz                = [khnazwa]

                                                         $NIP                = [khnip]

                                                         $nazwa                = [khnazwa]

                                                         $miejscowosc= [khmiasto]

                                                         $ulica                = [khadres]

                                                         IF( EXIST( "khdom") )

                                                         {

                                                                 $NumerDomu        = [khdom]

                                                                 $NumerMieszk= [khlokal]

                                                         }

                                                         $kod               = [khkodpocz]

                                                 }        

                                         }

                                 }        

                                 break

                         case "zapis"

                                 MakeSec("zapis")

                                 {

                                         $strona                = Rex([strona], "MA", 1) //WN=0 (""), MA=1

                                         $kwota                = [kwota]

                                         $Konto                = [Konto]

                                         $NumerDok        = [NumerDok]

                                         $IdDlaRozliczen = [IdDlaRozliczen]

                                         if ( Equal(@@opisy, 1) )

                                         {

                                                 $Opis                = [opis]

                                                 $typopisu        = 1   //opis bezpośrednio

                                         }

                                         $ZapisRownolegly        = [ZapisRownolegly]

                                         $pozycja                 = [Pozycja]

 

                                         IF ( NOT(equal([waluta], "")) )

                                         {

                                                 $wkwota = [wkwota]

                                                 $waluta = [waluta]

                                                 $kurs =        [kurs]

                                                 $typkursu = 3

                                         }

                                 }

                                 break

                         case "rejestr"

                                 IF( Equal(Equal($$obslugujJak, "FWN"), Equal($$obslugujJak, "DP")) )

                                 {

                                         MakeSec("rejestr")

                                         {

                                                 IF( EXIST( "skrot") )

                                                         $Klucz                = CAT([skrot], ",", "ZW", ",", [stawka1])

                                                 ELSE

                                                         $Klucz                = CAT($$klucz, ",", "ZW", ",", [stawka1])

 

                                                 switch ( [ABC] )

                                                         {

                                                         case "2"

                                                                 $ABC                = 2        //B

                                                                 break

                                                         case "4"

                                                                 $ABC                = 4        //C

                                                                 break

                                                         case "8"

                                                                 $ABC                = 8        //D

                                                                 break

                                                         case else

                                                                 $ABC                = 1        //A

                                                                 break

                                                         }

 

                                                 switch( Translate( $$rodzaj_dok, "L") )

                                                         {

                                                         case "sprzedaży"

                                                                 switch( [metoda_vat] )

                                                                 {

                                                                 case "0"

                                                                         $oczek = 0

                                                                         break

                                                                 case "1"

                                                                         switch( $$ObslugujJak )

                                                                         {

                                                                         case "FKS"

                                                                         case "RKS"

                                                                                 $oczek = 0

                                                                                 break

                                                                         case else

                                                                                 $oczek = 2

                                                                                 break

                                                                         }

                                                                         break

                                                                 case "2"

                                                                         $oczek = 0

                                                                         break

                                                                 }

                                                                 break

                                                         case "zakupu"

                                                                 switch( $$naliczenie_VAT )

                                                                 {

                                                                 case "0"

                                                                         $oczek = 0

                                                                         break

                                                                 case "1"

                                                                         $oczek = 1

                                                                         break

                                                                 case "3"

                                                                         $oczek = 2

                                                                         break

                                                                 case "4"

                                                                         $oczek = 2

                                                                         break

                                                                 case "5"

                                                                         $oczek = 2

                                                                 }

                                                                 break                                        

                                                         }

                                                 $okres                = [okres]

                                                 $netto                = [netto1]

                                                 $vat                = [vat1]

                                                 $brutto                = [brutto1]

                                                 $stawka                = [stawka1]

                                                 $sumanetto        = [sumanetto]

                                                 $sumavat        = [sumavat]

//                                                        $brutto                = SUM2([sumanetto], [sumavat])

                 //                                $podatek        = [37]        //Podatek;

                 //                                $dozaplaty        = [38]        //DoZapłaty;

 

                                                 $typ                = "ZW"

 // ponizsze poznum od v5.20 mozna wyrzucic - robi to import

                                                 switch ( $$obslugujJak )

                                                 {

                                                         case "FVS"

                                                         case "FVZ"

                                                         case "RUS"

                                                         case "RUZ"

                                                                 $poznum = -1

                                                         break

                                                 }

                                         }

                                 }

                                 break

                         case "transakcja"

                                 MakeSec("transakcja")

                                 {

                                         $ustawowe                = 1         //odsetki ustawowe

                                         $zaliczka                = 0                //Zaliczka

                                         $idDlaRozliczen         = [idDlaRozliczen]

                                         $termin                        = [termin]        //Termin;

                                 }

                                 break

                         case "rozliczenie"

                                 MakeSec("rozliczenie")

                                 {

                                         $dSymbol = [dSymbol]        //numer własny dokumentu

                                         $idDlaRozliczen = [idDlaRozliczen]

                                         if( !equal([kwota], "") )

                                         {

                                                 $kwota = [kwota]

                                         }

                                         if( !equal([wkwota], "") )

                                         {

                                                 $wkwota = [wkwota]

                                         }

                                         $kursWO = [kursWO]

                                         $walutaObca = [walutaObca]

                                         $rozliczonoWO = [rozliczonoWO]

                                         $ustawowe                = 1         //odsetki ustawowe

                                         $zaliczka                = 0                //Zaliczka

                                         IF(NOT (equal(@@plattermin, "")) )

                                         {

                                                 $termin                = @@plattermin        //Termin;

                                         }

                                 }

                                 break

                         }

                 }

 

         }

 }

 

}

 

 

Section("INFO", "")

{

 if ( !equal([Wersja szablonu], "3.1") )

 {

         if (  equal(ASK("Wskazany plik danych wymaga innej wersji szablonu importowego. Czy przerwać import danych? DefBtn:&Tak=10 Btn:&Nie=C ico:?"), "10") )

                 ERROR("Operacja importu została przerwana.")

 }

}

 

Poniższe instrukcje wskazują, że w pliku nadawcy jest kilka sekcji danych, które mają być całkowicie ignorowane przez program FK. Obrazuje to że pliki danych mogą  zmieniać z czasem swoją zawartość, jednak nie wymaga to zmian szablonu, bo dane są odseparowane sekcjami.

Section("Towar", "")

{

}

 

Section("Magazyn", "")

{

}

 

Section("Z oddziału. Dok. magazynowy", "")

{

}

 

Section("Z oddziału. Dok. pieniężny", "")

{

}

 

Section("Waluta", "")

{

}

 

Na koniec bardzo ciekawa instrukcja informująca, że jeśli pojawi się nowa sekcja danych, to proces importu powinien podnieść czujność importującego dane. Ma to miejsce również w przypadku gdyby doszło do przekłamania nazwy sekcji.

Section("","")

{

 Warning("Nierozpoznana sekcja: ", Name())

}

 

HMFFK.AMS

Szablon służy do wczytywania danych z programu Handel (format AMS).

 

EFAKTURY.AMS

Szablon służy do wczytywania danych z programu Symfonia e-Faktury EDS. Plik wejściowy dla szablonu tworzony jest za pomocą szablonu eFaktury.xslt.

 

Kiedy definiować własne szablony importu?

Zawsze. Zasada odmienna niż przy formacie danych, które na ogół nie ewoluują. Szablony dostarczane przez producenta dotyczą specyficznej postaci danych często związanych z konkretną wersją. W każdej chwili, z kolejnym patchem postać przetwarzania danych może się zmienić. Dlatego też niektóre z tych par : szablon  + pliki wymiany obsługują we własny sposób wersjonowanie. Porównaj daną [Wersja szablonu] np. w hmffk.ams. Przy wykorzystaniu szablonu producenta do obsługi własnych plików danych narażamy się na to że w kolejnej wersji patcha import może przestać działać prawidłowo. Jak zatem należy postępować?

 

W przypadku tworzenia nowego importu z obcej aplikacji, wydaje się że najbezpieczniej jest dopasować  postać eksportowanych danych do postaci tożsamej z jakimiś danymi obsługiwanymi przez Symfonię, a następnie skopiować szablon obsługujący ten plik na szablon własny o nowej nazwie. I w tym własnym szablonie obsługiwać już na swoje potrzeby wersjonowanie. Wówczas żadna zmiana szablonu producenta nie zaburzy nam naszego importu, a możemy w nim zgodnie z wymogami zarządzać zmianą wersji, obsługą własnych definicji, etc.

 

Kiedy definiować własne szablony XSLT?

Powinno się unikać definiowania własnych szablonów XSLT na obecnym etapie. Szablon umożliwia wykorzystywania zewnętrznych źródeł danych w formacie XML. Prawidłowe przygotowany schemat XSLT powinien umieć wygenerować z wejściowego pliku XML odpowiedni plik TXT, który następnie powinien zostać importowany za pomocą nowo-zdefiniowanego szablonu AMS.

 

Szablony historyczne

W poniższej części opisane są przykładowe szablony, które umożliwiały importowanie danych z dawnych, aktualnie już nieużywanych wersji różnych programów rynkowych. Traktować je należy wyłącznie jako przykłady instrukcji wczytywania różnych niestandardowych danych.

 

Uwaga!  Nie będą one działały ze współczesnymi odpowiednikami tych programów ze względu na znaczne różnice w eksportowanych plikach.

 

SYM200.AMS

Szablon SYM200.AMS służy do importu danych w formacie AM i najlepiej był „rozumiany” przez wersje FK3.0 i FK 4.0. Wraz z przechowaniem coraz bardziej złożonych informacji w strukturach danych szablon ten nie jest w stanie sprostać bardziej złożonym dokumentom. Jest używany przez program Symfonia Sprzedaż oraz mógł być używany w początkowych wersjach programu Handel oraz Środki Trwałe. Jest to szablon złożony, uruchamiający dodatkowe szablony dla wczytywania danych z wielu plików tworzących komplet danych.

Właściwe procedury importu danych realizowane są przez następujące szablony pomocnicze:

Dokum.amx - wczytanie dokumentów

Kontrah.amx - wczytanie kontrahentów

Pracow.amx - wczytanie pracowników

Rachba.amx - wczytanie rachunków bankowych

Urzad.amx - wczytanie urzędów skarbowych

 

Ponieważ jest to modyfikacja popularnego formatu SDF często był używany jako format do którego przystosowują się inne programy spoza systemu Symfonia.

 

Pliki danych

Pliki używane przy imporcie danych w formacie AM są następujące:

 

Setup.ini

Zawiera informacje o nadawcy danych, wszystkie istotne informacje z tego pliku mogą zostać podane bezpośrednio w profilu importu specjalnego. Obecnie plik ten służy głównie do identyfikacji obecności nowych danych.

e_dokum.txt

Zawiera informacje o dokumentach, zapisach, rejestrach VAT, transakcjach i rozliczeniach. Typ informacji wyróżniany jest przez pierwsze pole w rekordzie (np. DOK, VAT, ZAP).

e_kontr.txt
Zawiera informacje o nie uzgodnionych kontrahentach. Plik może nie występować, generowana jest wówczas informacja o braku pliku.

e_pracow.txt

Zawiera informacje o nie uzgodnionych pracownikach.  Plik może nie występować, generowana jest wówczas informacja o braku pliku.

e_rachba.txt

Zawiera informacje o nie uzgodnionych rachunkach bankowych. Kolejność i znaczenie pól jest takie samo jak przy tekstowym eksporcie tabeli rachunków w programie FK. Plik może nie występować, generowana jest wówczas informacja o braku pliku.

e_urzad.txt

Zawiera informacje o nie uzgodnionych urzędach. Plik może nie występować, generowana jest wówczas informacja o braku pliku.

 

Pliki zwrotne

Po dokonaniu importu mogą zostać wygenerowane pliki zawierające informacje zwrotne do programu i_rozlic.txt        nie został nigdy wykorzystany i jest zawsze pusty

i_kartot.txt        informacje o dokonanych uzgodnieniach pozycji kartotek.

 

POLKA.AMS

Jest to szablon przystosowany do importu danych z programu POLKA. Obsługuje format importu specjalnego stosowanego w programach Finanse i Księgowość w wersji do 2.0 włącznie.  Specyfikację pól danych w tym formacie można uzyskać od producenta programu POLKA.

 

CHART.AMS

Jest to szablon przystosowany do wczytywania danych z programu CHART firmy MIKROTEL. Jest to program fakturujący współpracujący z elektronicznymi centralami telefonicznymi tej samej firmy. Program dedykowany jest m.in. do obsługi hoteli.

 

SUBIEKT.AMS

Jest to szablon przystosowany do współpracy z programem SUBIEKT firmy INSERT. Szczegóły dotyczące formatu tego pliku można uzyskać w firmie INSERT.

 

CDN_FPP.AMS

Jest to szablon przystosowany do importu danych z programu Firma++, którego producentem jest firma CDN. Szczegóły dotyczące formatu danych można uzyskać w firmie CDN. Ten szablon umożliwia wczytywanie faktur oraz rachunków uproszczonych.

 

CDN_FPPK.AMS

Jest to szablon przystosowany do importu danych z programu Firma++, którego producentem jest firma CDN. Szczegóły dotyczące formatu danych można uzyskać w firmie CDN. Ten szablon umożliwia wczytywanie raportów kasowych zawierających wszystkie KP/KW z jednego dnia.