|
<< Pokaż spis treści >> Nawigacja: Wtyczki importu faktur > Symfonia Handel |
Plugin do importu faktur z plików eksportu programu Sage Symfonia Handel. Obsługuje format tekstowy z sekcjami DokumentSp oraz DokumentSp_oddział w nawiasach klamrowych { }.
Plugin automatycznie rozpoznaje i parsuje oba typy sekcji dokumentów z jednego pliku eksportu.
Standardowa sekcja dokumentu w eksporcie Symfonia Handel:
DokumentSp{
numer =26-FVS/03/3355
typDk =FVS
nazwa =Faktura
dataWystawienia =2026-03-02
dataSprzedazy =2026-03-02
czyKorekta =0
czyAnulowany =0
netto =98.890000000000
vat =22.740000000000
brutto =121.630000000000
waluta =
kurs =1.000000000000
daneKh{
KhNIP =8992732867
KhNazwa =FIRMA PRZYKŁADOWA
KhUlica =Główna
KhDomu =10
KhLokal =5
KhMiasto =Warszawa
KhKodPocz =00-001
kraj{
symbol =PL
}
}
Pozycja dokumentu{
lp =1
kod =TOWAR001
Nazwa_Dl{
opis =Nazwa towaru
}
ilosc =1.000000000000
jednostkaMiary =szt
cena =25.000000000000
netto =23.810000000000
VAT =1.190000000000
stVAT{
typ =10
wartosc =0.0500
}
brutto =25.000000000000
PKWiU =
}
}
Sekcja dokumentu generowana przy eksporcie z oddziałami. Różni się od DokumentSp następującymi elementami:
Element |
DokumentSp |
DokumentSp_oddział |
|---|---|---|
Nazwa sekcji dokumentu |
DokumentSp{} |
DokumentSp_oddział{} |
Sekcja pozycji |
Pozycja dokumentu{} |
pozycja{} |
Sekcja opisu pozycji |
Nazwa_Dl{ opis =... } |
opis{ opis =... } |
Kod pocztowy kontrahenta |
KhKodPocz |
KhPoczta |
DokumentSp_oddział{
numer =0457/2026/FVS
typDk =FVS
nazwa =Faktura VAT
dataWystawienia =2026-03-25
dataSprzedazy =2026-03-03
czyAnulowany =0
waluta =
kurs =1.000000000000
netto =3845.290000
vat =884.420000
brutto =4729.710000
daneKh{
KhNIP =9661461820
KhNazwa =FERMA DROBIU KRZYSZTOF WYSOCKI
KhUlica =Ryboły
KhDomu =1028/8
KhLokal =
KhMiasto =Zabłudów
KhPoczta =16-080
kraj{
symbol =PL
}
}
pozycja{
lp =1
kod =KLEIB C26 Beton B-30/25
opis{
opis =KLEIB C26 Beton B-30 suchą miesz. cement. do betonu...
}
ilosc =216.000000
jednostkaMiary =szt
cena =17.350000
netto =3747.600000
VAT =861.950000
brutto =4609.550000
stVAT{
typ =10
wartosc =0.2300
}
PKWiU =
}
}
Plugin importuje wszystkie typy dokumentów bez filtrowania po typie — różne firmy mogą mieć różne konfiguracje typów w Symfonia.
Dokumenty z flagą czyAnulowany=1 są pomijane. Dokumenty z flagą czyKorekta=1 są importowane jako korekty (KOR) i wzbogacane danymi korygowanego dokumentu z sekcji dokumentZKorektami{}.
Parametr |
Typ |
Domyślna wartość |
Opis |
|---|---|---|---|
SourcePath |
string |
C:\KSef\Symfonia |
Ścieżka do katalogu z plikami eksportu |
FilePattern |
string |
*.txt |
Wzorzec nazwy plików do przetworzenia |
CheckDuplicates |
boolean |
true |
Sprawdzanie duplikatów faktur w bazie |
{
"SourcePath": "C:\\Symfonia\\Export",
"FilePattern": "export_*.txt",
"CheckDuplicates": true
}
1.Skanowanie — Plugin szuka plików pasujących do wzorca w katalogu źródłowym
2.Parsowanie — Każdy plik jest parsowany w poszukiwaniu sekcji DokumentSp{} oraz DokumentSp_oddział{}
3.Filtrowanie — Wybierane są tylko dokumenty będące fakturami sprzedaży (pomijane anulowane)
4.Walidacja — Sprawdzanie poprawności danych i duplikatów
5.Import — Konwersja do formatu KSeF XML i zapis do bazy
6.Archiwizacja — Przeniesienie pliku do podkatalogu Processed lub Failed
•Parser szuka sekcji DokumentSp{...} i DokumentSp_oddział{...} na najwyższym poziomie pliku — z każdej z nich powstaje jeden dokument faktury.
•Sekcje Dokument{...} są parsowane pomocniczo w celu pobrania danych płatności (forma_platnosci, terminPlatnosci, dozaplaty) i powiązane z dokumentami sprzedaży przez numer faktury (FK nazwa lub kod).
•Pozostałe sekcje (INFO{}, Kontrahent{}, towar{}, Kraj{} itp.) są ignorowane.
•Jeden plik może zawierać wiele sekcji dokumentów — każda jest parsowana niezależnie.
•Pola mają format: klucz =wartość (spacja przed znakiem = jest opcjonalna).
•Parsowane są tylko pola na pierwszym poziomie danej sekcji — zagnieżdżone sekcje (np. daneKh{}, stVAT{}) są pomijane przy odczytywaniu pól nadrzędnych i parsowane oddzielnie.
•Wartości liczbowe są zapisywane z precyzją do 12 miejsc po przecinku (np. 98.890000000000). Przecinki i kropki są obsługiwane przy parsowaniu.
•Puste wartości (np. waluta =) traktowane są jako brak wartości — stosowana jest wartość domyślna.
•Cudzysłowy na początku/końcu wartości są usuwane.
Pole źródłowe |
Element XML KSeF |
Zasada przetwarzania |
|---|---|---|
numer |
Fa > P_2 |
Kopiowany dosłownie jako numer faktury. |
dataWystawienia |
Naglowek > DataWytworzeniaFa, Fa > P_1 |
Format YYYY-MM-DD. Uzupełniany też jako data wygenerowania. |
dataSprzedazy |
Fa > Item (data dostawy) |
Format YYYY-MM-DD. Ustawiany gdy pole jest obecne i niepuste. |
typDk |
Fa > RodzajFaktury |
Mapowanie: FVS/FVX/FS/FV/FAK → VAT; KOR/FK → KOR; ZAL → ZAL; ROZ → ROZ; inne → VAT. |
czyKorekta |
Fa > RodzajFaktury |
Gdy =1, wymusza RodzajFaktury = KOR (nadpisuje mapowanie z typDk). |
czyAnulowany |
(pomijany) |
Gdy =1, cały dokument jest pomijany — nie trafia do wyjścia XML. |
waluta |
Fa > KodWaluty |
Próba parsowania na enum TKodWaluty. Gdy puste lub nierozpoznane → PLN. |
netto, vat, brutto |
(obliczane z pozycji) |
Wartości z nagłówka nie są bezpośrednio mapowane do XML — sumy są obliczane z pozycji faktury pogrupowanych wg stawki VAT. |
Dane nabywcy pochodzą z zagnieżdżonej sekcji daneKh{}.
Pole źródłowe |
Element XML KSeF |
Zasada przetwarzania |
|---|---|---|
KhNIP |
Podmiot2 > DaneIdentyfikacyjne > NIP |
Usuwane są myślniki i spacje. NIP jest walidowany i ustawiany jako identyfikator podmiotu. |
KhNazwa |
Podmiot2 > DaneIdentyfikacyjne > Nazwa |
Kopiowana dosłownie. Cudzysłowy na początku/końcu są usuwane. |
KhKodPocz / KhPoczta + KhMiasto |
Podmiot2 > Adres > AdresL1 |
Łączone spacją: "{KhKodPocz} {KhMiasto}". W DokumentSp_oddział pole kodu pocztowego to KhPoczta. |
KhUlica + KhDomu + KhLokal |
Podmiot2 > Adres > AdresL2 |
Łączone spacją: "{KhUlica} {KhDomu}". Jeśli KhLokal jest niepuste, dodawane jako "lok. {KhLokal}". |
kraj > symbol |
Podmiot2 > Adres > KodKraju |
Parsowany na enum TKodKraju. Domyślnie PL. |
Pozycje pochodzą z sekcji Pozycja dokumentu{} (DokumentSp) lub pozycja{} (DokumentSp_oddział).
Pole źródłowe |
Element XML KSeF |
Zasada przetwarzania |
|---|---|---|
lp |
FaWiersz > NrWierszaFa |
Numer porządkowy. Jeśli brak — autonumerowanie od 1. |
Opis pozycji |
FaWiersz > P_7 |
Priorytet: 1) Nazwa_Dl > opis lub opis > opis (zależy od formatu), 2) pole opis na poziomie pozycji, 3) pole kod. |
jednostkaMiary |
FaWiersz > P_8A |
Kopiowana dosłownie. Domyślnie "szt". |
ilosc |
FaWiersz > P_8B |
Zaokrąglana do 4 miejsc po przecinku. Domyślnie 1. |
netto / ilosc |
FaWiersz > P_9A |
Cena jednostkowa netto = netto / ilosc. Zaokrąglana do 4 miejsc. Fallback: pole cena. |
netto |
FaWiersz > P_11 |
Wartość netto pozycji. Zaokrąglana do 2 miejsc. |
VAT |
FaWiersz > P_11Vat |
Wartość VAT pozycji. Zaokrąglana do 2 miejsc. |
stVAT > wartosc |
FaWiersz > P_12 |
Stawka VAT jako ułamek (np. 0.2300 = 23%). Mnożona × 100, zaokrąglana do 2 miejsc, następnie mapowana na TStawkaPodatku. |
Jeśli sekcja stVAT{} jest nieobecna, stawka VAT jest obliczana ze wzoru:
StawkaVat = round(VAT / netto × 100, 0)
Jeśli netto = 0, przyjmowana jest stawka domyślna 23%.
Wartość (%) |
Tolerancja |
Kod KSeF (TStawkaPodatku) |
|---|---|---|
23 |
22.5–23.5 |
Item23 |
22 |
— |
Item22 |
8 |
7.5–8.5 |
Item8 |
7 |
— |
Item7 |
5 |
4.5–5.5 |
Item5 |
0 |
— |
Item0KR |
inna |
— |
Item23 (domyślny) |
Dane płatności pochodzą z dwóch źródeł w zależności od formatu pliku:
Format |
Źródło formy płatności |
Źródło terminu i dozaplaty |
|---|---|---|
DokumentSp |
pole forma_platnosci bezpośrednio w sekcji |
pola terminPlatnosci, dozaplaty bezpośrednio w sekcji |
DokumentSp_oddział |
sekcja formaPl{ nazwa } |
pole terminPlatnosci w sekcji; dozaplaty z powiązanej sekcji Dokument{} |
Zasady mapowania na element Fa > Platnosc:
Pole źródłowe |
Element XML KSeF |
Zasada przetwarzania |
|---|---|---|
forma_platnosci / formaPl.nazwa |
Platnosc > PlatnoscInna + Platnosc > OpisPlatnosci |
Zawsze mapowana jako forma "inna" (PlatnoscInna=1) z opisem tekstowym. |
terminPlatnosci |
Platnosc > TerminPlatnosci > Termin |
Ustawiany tylko gdy faktura nie jest zapłacona (dozaplaty ≠ 0). |
dozaplaty = 0 |
Platnosc > Zaplacono + Platnosc > DataZaplaty |
Faktura uznawana za zapłaconą: Zaplacono=1, DataZaplaty = terminPlatnosci (lub dataWystawienia gdy termin brak). Termin płatności nie jest wtedy podawany. |
dozaplaty ≠ 0 lub brak |
(bez znacznika zapłaty) |
Faktura niezapłacona — tylko termin i forma płatności (jeśli dostępne). |
Sekcja Platnosc nie jest tworzona gdy brak wszystkich trzech danych: formy płatności, terminu i informacji o zapłacie.
Gdy czyKorekta=1, parser szuka zagnieżdżonych sekcji dokumentZKorektami{} zawierających dane korygowanego dokumentu:
dokumentZKorektami{
numer =26-FVS/03/3355
data =2026-03-02
wartosc =121.630000
}
Pole źródłowe |
Element XML KSeF |
Zasada przetwarzania |
|---|---|---|
dokumentZKorektami.numer |
Fa > DaneFaKorygowanej > NrFaKorygowanej |
Numer korygowanej faktury. |
dokumentZKorektami.data |
Fa > DaneFaKorygowanej > DataWystFaKorygowanej |
Data wystawienia korygowanej faktury. Gdy brak — używana dataWystawienia bieżącej faktury. |
Dla każdej sekcji dokumentZKorektami{} tworzony jest osobny element DaneFaKorygowanej w XML. Numer KSeF korygowanej faktury ustawiany jest jako nieznany (NrKSeFN=1).
Są obliczane dynamicznie jako suma wartości pozycji (FaWiersz), pogrupowanych wg stawki VAT:
Stawka |
Pole netto |
Pole VAT |
|---|---|---|
23% |
P_13_1 |
P_14_1 |
8% |
P_13_2 |
P_14_2 |
5% |
P_13_3 |
P_14_3 |
0% |
P_13_4 |
P_14_4 |
zw |
P_13_5 |
P_14_5 |
Kwota brutto faktury (P_15) = suma (P_11 + P_11Vat) ze wszystkich pozycji.
Wartość typDk |
RodzajFaktury XML |
|---|---|
FVS, FVX, FS, FV, FAK, VAT |
VAT |
KOR, FK |
KOR |
ZAL |
ZAL |
ROZ |
ROZ |
inna wartość |
VAT (domyślny) |
Wyjątek: jeśli pole czyKorekta =1, rodzaj jest wymuszony na KOR niezależnie od typDk.
•Puste pole waluta → PLN
•Wartość parsowana na enum TKodWaluty (case-insensitive)
•Nierozpoznana wartość → PLN
•Puste pole kraj > symbol → PL
•Wartość parsowana na enum TKodKraju (case-insensitive)
•Nierozpoznana wartość → PL
Pole Symfonia |
Pole KSeF |
Opis |
|---|---|---|
numer |
P_2 |
Numer faktury |
dataWystawienia |
P_1 |
Data wystawienia |
dataSprzedazy |
P_6 |
Data sprzedaży/dostawy |
waluta |
KodWaluty |
Kod waluty (domyślnie PLN) |
typDk |
RodzajFaktury |
Rodzaj faktury |
czyKorekta |
RodzajFaktury |
Gdy =1, faktura traktowana jako KOR |
forma_platnosci / formaPl.nazwa |
Platnosc > PlatnoscInna + OpisPlatnosci |
Forma płatności jako "inna" z opisem |
terminPlatnosci |
Platnosc > TerminPlatnosci |
Termin płatności (tylko gdy faktura niezapłacona) |
dozaplaty = 0 |
Platnosc > Zaplacono + DataZaplaty |
Oznaczenie faktury jako zapłaconej |
Pole Symfonia |
Pole KSeF |
Opis |
|---|---|---|
daneKh.KhNIP |
NIP |
NIP nabywcy |
daneKh.KhNazwa |
Nazwa |
Nazwa nabywcy |
daneKh.KhKodPocz / daneKh.KhPoczta + daneKh.KhMiasto |
AdresL1 |
Kod pocztowy i miasto |
daneKh.KhUlica + daneKh.KhDomu + daneKh.KhLokal |
AdresL2 |
Ulica, numer domu i lokalu |
daneKh.kraj.symbol |
KodKraju |
Kod kraju (domyślnie PL) |
Pole Symfonia |
Pole KSeF |
Opis |
|---|---|---|
lp |
NrWierszaFa |
Numer pozycji |
Nazwa_Dl.opis / opis.opis / kod |
P_7 |
Nazwa towaru/usługi |
jednostkaMiary |
P_8A |
Jednostka miary |
ilosc |
P_8B |
Ilość |
netto / ilosc |
P_9A |
Cena jednostkowa netto |
netto |
P_11 |
Wartość netto |
VAT |
P_11Vat |
Wartość VAT |
stVAT.wartosc |
P_12 |
Stawka VAT (0.2300 = 23%) |
Stawka |
Kod KSeF |
|---|---|
23% |
Item23 |
22% |
Item22 |
8% |
Item8 |
7% |
Item7 |
5% |
Item5 |
0% |
Item0KR |
Plugin odczytuje pliki z kodowaniem Windows-1250 (CP1250), które jest standardowym kodowaniem dla polskich aplikacji Windows.
Wszystkie faktury z jednego pliku są przetwarzane transakcyjnie:
•Jeśli którakolwiek faktura zawiera błąd, wszystkie faktury z tego pliku są odrzucane
•Plik z błędami jest przenoszony do podkatalogu Failed
Błąd |
Przyczyna |
Rozwiązanie |
|---|---|---|
"Faktura już istnieje w bazie danych" |
Duplikat numeru faktury |
Wyłącz sprawdzanie duplikatów lub usuń istniejącą fakturę |
"Brak danych nabywcy" |
Pusta sekcja kontrahenta |
Uzupełnij dane nabywcy w Symfonia |
"Faktura musi zawierać co najmniej jedną pozycję" |
Brak pozycji dokumentu |
Sprawdź czy eksport zawiera pozycje |
Po przetworzeniu pliki są przenoszone do:
•{SourcePath}/Processed/ - pliki przetworzone pomyślnie
•{SourcePath}/Failed/ - pliki z błędami
Nazwa pliku jest uzupełniana o znacznik czasu: 20251203_143022_export.txt
1.Skonfiguruj eksport w Symfonia Handel do katalogu np. C:\Symfonia\Export
2.Włącz plugin w KT KSeF Sender
3.Ustaw SourcePath na C:\Symfonia\Export
4.Plugin automatycznie skanuje katalog i importuje nowe faktury
•Sage Symfonia Handel 2014 lub nowszy
•Eksport w formacie tekstowym (domyślny format Symfonia)
•Pliki z rozszerzeniem .txt