Generowanie plików xml (JPK) C#

0

Witam, zacząłem staż w pewnej firmie i dostałem takie zadanie na którym utknąłem tak, że wszelka pomoc potrzebna. Mam ogarnąć temat JPK chodzi tylko o JPK VAT jak generować te gotowe pliki xml z danych ? w C# .net. Nie mogę znaleźć żadnego info o generowaniu takich plików tylko już co tam dalej się dzieje jak już mamy xml ale swojego głównego zadania nie mogę ogarnąć. Od razu dodam że jestem bardzo początkujący prosto po uczelni tak, że każde info mi się przyda więc jak ktoś coś to bardzo proszę.

0

Czy ja dobrze rozumiem, że nie umiesz tworzyć xml? I oczywiście szukałeś w necie i nigdzie nie ma o tym ani słowa?
https://www.google.pl/search?q=c%23+xml&ie=utf-8&oe=utf-8&client=firefox-b&gfe_rd=cr&ei=6QsKWJv5LMuv8weN9IDwCg#q=c%23+xml+example

0

Nie no utworzyć zwykłe/proste xml z danymi wpisanymi na sztywno umiem problem powstaje z tym całym JPK przeglądłem struktury jak ma wyglądać ten JPK ( http://www.mf.gov.pl/documents/764034/5134536/Schemat_JPK_FA%281%29_v1-0.pdf ) i nie wiem jak się za to zabrać aby pobrać dane z bazy i zapisać jest w xml ale zgodnym z wymogami ministerstwa.

0

Nadal chyba nie rozumiem o co Ci chodzi. Przecież całą strukturę masz już gotową. Głównymi nodami są:
Nagłówek
Podmiot
Identyfikator podmiotu
Adres podmiotu
Faktura

itd. Przecież to wszystko jest wypisane - całe ścieżki.

0

Szczerze mówiąc to ja już sam nie wiem o co mi chodzi ;p Nigdy nie miałem styczności z xml ani tym bardziej generowaniem ich, w .net na uczelni ograniczyłem się do asp.net web application więc w zasadzie to nawet nie wiem od czego zacząć. Mamy dane jakieś tam faktury, plik JPK ma być za okres miesiąca z tego co tam wyczytałem więc trzeba wybrać datę od datę do i wygenerować z danych z bazy plik xml zgodny ze schematami tyle i dla mnie aż tyle, nie wiem jak się za to zabrać. Muszę sobie przygotować taki wstępny schemat klas jak to ma wyglądać i dupa już nic nie wiem.

0

Przygotuj sobie ten wstępny schemat i rzeczy zaczną Ci się rozjaśniać.

0

co mogę powiedzieć z doświadczenia - jeśli będziesz próbował pliki JPK generować przy użyciu klas do XMLa to się możesz srogo zdziwić. U mnie plik JPK_VAT w średniej firmie, za miesiąc waży między 100-150MB. To jest zabójstwo dla wydajności. Tak naprawdę te pliki mają bardzo prostą strukturę i potraktowanie ich jako zwykłych plików tekstowych daje znacznie lepsze rezultaty jeśli chodzi o wydajność i zapotrzebowanie na zasoby. Trzeba oczywiście pamiętać o ręcznym zamykaniu tagów ale to parę linijek więcej kodu.

Polecam też do wyświetlania XSD programik XSDDiagram - po otwarciu np. JPK_VAT.XSD dostajemy takie coś (nie jest to cały rozwinięty schemat)
JPK_VAT_v1-0.png
a z tego bardzo łatwo odczytać jakie gałęzie i co zawierające powinny być.

1
  1. Na podstawie udostępnionego schematu utwórz klasę o odpowiedniej strukturze. Użyj narzędzia xsd.exe. Przykład (plik JPK_WB):
    xsd.exe /c Schemat_JPK_WB_v1-0.xsd StrukturyDanych_v4-0E.xsd KodyCechKrajow_v3-0E.xsd
  2. Następnie tworzysz odpowiednie instancje klas. Wypełniasz danymi i na końcu serializujesz do pliku xml. Przykład (plik JPK_VAT (2)):
int counter = 5;
            JPK_VAT2.JPK jpkVat = new JPK_VAT2.JPK();
            var myNaglowek = new JPK_VAT2.TNaglowek();
            myNaglowek.CelZlozenia = 1;
            myNaglowek.DataOd = DateTime.Parse("2016-11-01");
            myNaglowek.DataDo = DateTime.Parse("2016-11-30");
            myNaglowek.DataWytworzeniaJPK = DateTime.Parse("2016-11-30 12:01:00");
            myNaglowek.DomyslnyKodWaluty = JPK_VAT2.currCode_Type.PLN;
            myNaglowek.KodUrzedu = JPK_VAT2.TKodUS.Item0202;
            myNaglowek.WariantFormularza = 2;

            var myKodFormularza = new JPK_VAT2.TNaglowekKodFormularza();
            myKodFormularza.kodSystemowy = "JPK_VAT (2)";
            myKodFormularza.wersjaSchemy = "1-0";
            myKodFormularza.Value = JPK_VAT2.TKodFormularza.JPK_VAT;

            myNaglowek.KodFormularza = myKodFormularza;

            var myPodmiot1 = new JPK_VAT2.JPKPodmiot1();
            var myAdresPodmiotu = new JPK_VAT2.TAdresJPK();
            myAdresPodmiotu.Gmina = "Praga";
            myAdresPodmiotu.KodKraju = JPK_VAT2.TKodKraju.PL;
            myAdresPodmiotu.KodPocztowy = "00-000";
            myAdresPodmiotu.Miejscowosc = "Warszawa";
            myAdresPodmiotu.NrDomu = "1";
            myAdresPodmiotu.NrLokalu = "1";
            myAdresPodmiotu.Poczta = "Warszawa";
            myAdresPodmiotu.Powiat = "stołeczny";
            myAdresPodmiotu.Ulica = "Brukowa";
            myAdresPodmiotu.Wojewodztwo = "mazowieckie";
            myPodmiot1.AdresPodmiotu = myAdresPodmiotu;
            var myIdentyfikatorPodmiotu = new JPK_VAT2.TIdentyfikatorOsobyNiefizycznej();
            myIdentyfikatorPodmiotu.NIP = "1111111111";
            myIdentyfikatorPodmiotu.REGON = "894564258";
            myIdentyfikatorPodmiotu.PelnaNazwa = "Firma testowa S.A.";
            myPodmiot1.IdentyfikatorPodmiotu = myIdentyfikatorPodmiotu;

            jpkVat.Naglowek = myNaglowek;
            jpkVat.Podmiot1 = myPodmiot1;

            JPK_VAT2.JPKSprzedazWiersz[] wiersze = new JPK_VAT2.JPKSprzedazWiersz[counter +1 ];

            int i;
            for (i = 1; i <= counter; i++)
            { 
                var sprzedaz = new JPK_VAT2.JPKSprzedazWiersz();
                sprzedaz.LpSprzedazy = (i+3).ToString();
                sprzedaz.NrKontrahenta = "123" + i.ToString();
                sprzedaz.NazwaKontrahenta = string.Format(@"Firma TESTOWA Spółka z O.O. nr {0}", i.ToString());
                sprzedaz.AdresKontrahenta = string.Format(@"ul. Testowa nr{0}, 00-000 Warszawa", i.ToString());
                sprzedaz.DataSprzedazySpecified = false;
                sprzedaz.DataWystawienia = DateTime.Now;
                sprzedaz.DowodSprzedazy = string.Format(@"Faktura VAT nr{0}\2016", i.ToString());
                sprzedaz.K_19=i+22;
                sprzedaz.K_20 = i+50;
                sprzedaz.K_10Specified = false;
                sprzedaz.K_11Specified = false;
                sprzedaz.K_12Specified = false;
                sprzedaz.K_13Specified = false;
                sprzedaz.K_14Specified = false;
                sprzedaz.K_21Specified = false;
                sprzedaz.K_22Specified = false;
                sprzedaz.K_31Specified = false;
                sprzedaz.K_36Specified = false;
                sprzedaz.K_37Specified = false;
                sprzedaz.K_38Specified = false;
                
                wiersze[i] = sprzedaz;
            }
            jpkVat.SprzedazWiersz = wiersze;

            var mySprzedazCtrl = new JPK_VAT2.JPKSprzedazCtrl();
            mySprzedazCtrl.LiczbaWierszySprzedazy = i.ToString();
            mySprzedazCtrl.PodatekNalezny = 1234;
            jpkVat.SprzedazCtrl = mySprzedazCtrl;

            JpkSerializer jpkSerializer = new JpkSerializer();
            jpkSerializer.SerializeObject<JPK_VAT2.JPK>(jpkVat, @"C:\jpk\copy\myJPK_VAT2.xml");
0

Wracam do tematu, musiałem się czymś innym zająć. No i oczywiście standardowo na dzień dobry problem, w pracy obecnie pracuję na VS Express 2010 no i nie mam tego visualowego wiersza poleceń i nie mam jak użyć xsd.exe. W domu zainstalowałem Visual Studio Community ale przy próbie generowania tych klas dostaję błędy, nie pamiętam teraz dokładnie jakie ale błędy wewnątrz tam linie "któreś tam". Pytanie czy to powinno się robić tak, że mamy te pliki xsd i używająć xsd.exe /c ... podaję te pliki i tyle, wygeneruje to pliki cs? No i czy da radę to zrobić na Community czy się nie uda ? Z góry dziękuję za odpowiedzi ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1