Import danych > Import specjalny (format 3.0) > Wzorcowe szablony importu specjalnego | | Drukuj |
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.