Zawartość

Automatyzacja API

Dział informatyczny Twojej firmy może bardzo szybko przystosować Program-eSF do automatycznego generowania e-Sprawozdania Finansowego XML w połączeniu z użytkowanym systemem ERP lub własnymi arkuszami Excel.

Jak zautomatyzować generowanie e-Sprawozdania XML ?

e-Sprawozdania Finansowe KRS XML API Gorąco zachęcamy zaawansowanych użytkowników lub programistów do wykorzystania wbudowanego API. Za pomocą jednego skryptu C# można utworzyć całe sprawozdanie XML lub wybrane ewidencje. W trybie interaktywnym mamy dostępną automatyzację oraz edycję ręczną dokumentu. Na podstawie załączonego przykładu, można wykonać własny skrypt nawet bez dogłębnej znajomości programowania C#.

Jeżeli Twój zespół programistów dobrze zna użytkowany system ERP, to może pobierać dane bezpośrednio z baz danych SQL systemu księgowego. W przeciwnym wypadku źródłem danych mogą być dotychczas wykorzystywane arkusze Excel. W odróżnieniu od poprzedniej metody połączenia arkuszy za pomocą funkcji, w tym przypadku mamy pełną kontrolę nad całym sprawozdaniem. Podczas pobierania danych można zastosować dodatkowe obliczenia lub posługiwać się pomocniczymi ewidencjami.

Przygotowanie skryptu C# będzie znacznie szybsze niż definiowanie funkcji w poszczególnych komórkach arkuszy. Łatwiejsza będzie również późniejsza edycja i rozwój skryptów w kolejnych edycjach e-Sprawozdań Finansowych.

Możemy również stosować metody mieszane: formuły obliczeniowe do pobierania danych z rozszerzeniami API. Programiści mają możliwość wykorzystywania własnych bibliotek .NET DLL, które mogą zawierać np. część wykorzystywanego kodu z systemu księgowego ERP, a wynik tych obliczeń przesyłać wprost do naszego API i e-Sprawozdania Finansowego. Własne biblioteki należy dodać w Menu/Plik/Rozszerzenia DLL.

Program-eSF posiada wbudowane mechanizmy do budowania własnych rozszerzeń C#.

Generowanie e-Sprawozdania Finansowego XML za pomocą API

Automatyczne generowanie e-Sprawozdania Finansowego za pomocą API

Obsługa skryptów znajduje się w funkcji Menu/Plik/C# API. Wykonanie skryptu przyciskiem PLAY nad oknem edytora kodu, lub w Menu/Plik/Wykonaj skrypt. Przycisk do natychmiastowego wykonania skryptu dostępny jest również na pasku „Szybkiego dostępu” na górze okna. Dzięki temu Księgowi mogą wykonać przygotowaną przez programistę automatyzację, bez zaglądania do okna z kodem C#.

Program obsługuje pięć różnych e-Sprawozdań, dla każdego rodzaju przeznaczony jest oddzielny kod C#. Pliki ze skryptami zapisywane są w podkatalogu .\DATA:

  1. Api-Inna.bin Jednostka Inna (duża firma)
  2. Api-Mala.bin Jednostka Mała
  3. Api-Mikro.bin Jednostka Mikro
  4. Api-OP.bin Organizacje Pozarządowe
  5. Api-SInna.bin Skonsolidowana Jednostka Inna

Do konstruktora klasy przekazywany jest XlsController, który umożliwia dostęp do elementów i metod aktualnie przetwarzanego e-Sprawozdania. Zapamiętujemy go w prywatnej zmiennej esf.

W przykładzie posłużymy się importem danych z zewnętrznego arkusza Excel, do którego tworzymy dodatkową instancję klasy SSController, prywatna zmienna ssc. W obliczeniach możemy pobierać dane z wielu różnych plików (arkuszy) Excel jednocześnie. Wystarczy zdefiniować kolejne instancje klasy SSController. Programista ma pełną swobodę dostępu do różnych danych. Należy jeszcze dodać, że aplikacja Excel nie musi być zainstalowana w systemie, wystarczą same pliki XLS, XLSX.

using System;
using System.Data;
using System.Drawing;
using TGSoft.JPK.SF;
using TGSoft.UI.XLS;
using TGSoft.Utils;

namespace Szark
{
    public class XlsApi
    {
        SSController ssc;
    XlsController esf;
        
        public XlsApi(XlsController sender)
        {
    esf = sender;
            esf.BeginUpdateESF();
            try
            {
                string fileName = @"c:\TMP\eSF-ImportAPI.xlsx";
    ssc = new SSController();
                if (!ssc.LoadDocument(fileName))
                {
                    TGSoft.Forms.UI.ShowWarning("Błąd ładowania podanego pliku Excel: " + fileName);
                    return;
                }
            
                Naglowek();
                Aktywa();
                Pasywa();
                RZiS();
                Zalaczniki();
                Podatek();
            }
            catch (Exception ex)
            {
                TGSoft.Forms.UI.ShowError(ex.Message);
            }
            finally
            {
                esf.EndUpdateESF();
            }
        }
    }
}    

Podstawowe metody C# dostępne w programie.

Generowanie e-Sprawozdania Finansowego XML za pomocą API

Widok metody do wypełnienia ewidencji Aktywa z pozycjami szczegółowymi

Wypełnianie danych w arkuszu można wykonać na kilka sposobów.

W przykładzie zdefiniowana jest dodatkowa metoda SetEsfValue, która korzysta z SetNumeric(string reference, object value). Metoda umożliwia wpisanie wartości do dowolnej komórki arkusza podanej jako adres np. "Aktywa!D5". Wartości pobieramy z załadowanego pliku Excel z bliźniaczego arkusza. Załadowany arkusz DEMO ma taką samą strukturę, został utworzony w aplikacji Program-eSF w Menu/Plik/Export do Excel. Możemy w ten sposób przekazać wygenerowany arkusz do innego użytkownika (Księgowego), który wypełni nam dane w aplikacji Excel.

        esf.SetNumeric("Aktywa!D5", ssc.GetNumeric("Aktywa!D5"));
    

Poniżej przykład z wykorzystaniem dedykowanych metod dla konkretnych ewidencji e-Sprawozdania. Parametrami są Symbol pozycji sprawozdania oraz kwoty A,B,B1:

        private void Test()
        {
            esf.SetAktywa("A_I_1", 100, 0);
            esf.SetPasywa("A_II", 201, 202);
            esf.SetRZiS("A_III", 301, 302, 303);
            esf.SetZmiany("IA_4_1", 400, 0);
            esf.SetPrzeplywy("A_II_5", 500, 0);
            esf.SetPodatekRB("P_ID_6", 61, 62);
            esf.SetPodatekRP("P_ID_6", 161, 162);
        }
    

Elementy (wiersze) poszczególnych ewidencji Sprawozdania mogą zawierać pozycje i podpozycje szczegółowe. Na zdjęciu powyżej zastosowano uproszczoną wersję dla pojedynczych pozycji szczegółowych:

            esf.AddPozycja("Aktywa", "A_I_1", "Podpozycja Szczegółowa do Aktywa AI1", 3);
            esf.AddPozycja("Aktywa", "A_I_3", "Podpozycja Szczegółowa do Aktywa AI3", 5);
    

W większości przypadków wystarczy prosta metoda dodawania pojedynczych pozycji szczegółowych, nie musisz stosować poniższego zaawansowanego rozwiązania.

Struktura XSD e-Sprawozdań finansowych dopuszcza stosowanie praktycznie niegraniczonej liczby zagnieżdżeń z kolejnymi podpozycjami uszczegóławiającymi. Wszystko to obsługuje Program-eSF w formie wizualnej, podczas przeglądania i drukowania e-Sprawozdań oraz podczas edycji i automatyzacji za pomocą wbudowanego API.

Podpozycje szczegółowe e-Sprawozdania Finansowego XML

Podpozycje szczegółowe e-Sprawozdania Finansowego XML

Zaawansowana metoda dodawania zagnieżdżonych podpozycji szczegółowych

W ewidencji Aktywa dla symbolu A_II_2 dodajemy pozycje szczegółową z kwotą 150, która jednocześnie zawierać będzie dwie podpozycje szczegółowe z kwotami 11 oraz 22. Druga z podpozycji zawiera kolejne zagnieżdżenie z następnymi dwoma podpozycjami, kwoty: 1 oraz 2.

        private void PozycjePodpozycjeSzczegolowe()
        {
            var arr2 = new Pozycja[] {
                new Pozycja() { NazwaPozycji = "podpozycja do 2, a)", KwotaA = 1 },
                new Pozycja() { NazwaPozycji = "podpozycja do 2, b)", KwotaA = 2 },
                };
            
            Pozycja p1 = new Pozycja() { NazwaPozycji = "Szczegółowa 1", KwotaA = 11 };
            Pozycja p2 = new Pozycja() { NazwaPozycji = "Szczegółowa 2", KwotaA = 22, Podpozycja = arr2 };
            
            var arr = new Pozycja[] { p1, p2 };
            esf.AddPozycja("Aktywa", new Pozycja() { Nazwa = "A_II_2", NazwaPozycji = "Nazwa p1", KwotaA = 150, Podpozycja = arr });
        }
    

Podpozycje szczegółowe e-Sprawozdania Finansowego XML

Widok poszczególnych elementów podpozycji szczegółowych w kodzie C# i wygenerowanym XML

Pozostałe elementy e-sprawozdania XML

Uzupełnianie danych nagłówkowych e-Sprawozdania sprowadza się do prostego przyporządkowania publicznych pól klasy XlsController. Każde z nich ma dedykowaną jasno określoną nazwę, przykład:

        private void Naglowek()
        {
            esf.IDNip = "1111111111";
            esf.IDKrs = "0000000000";
            esf.NazwaFirmy = "FHU DEMO Sp. z o.o.";
            esf.DataSporzadzenia = new DateTime(2019, 09, 30);
            esf.OkresOd = new DateTime(2018, 1, 2);
            esf.OkresDo = new DateTime(2018, 12, 30);
            esf.DataOd = new DateTime(2018, 1, 3);
            esf.DataDo = new DateTime(2018, 12, 29);
            esf.PKD = new string[] { "0111Z", "0112Z", "0113Z" };           
           
            esf.SiedzibaMiejscowosc = "Kraków";
            esf.SiedzibaGmina = "Gmina Kraków";
            esf.SiedzibaPowiat = "Powiat Kraków";
            esf.SiedzibaWojewodztwo = "Małopolskie";
        }
    

Aby dodać załącznik wystarczą dwa parametry dedykowanej metody: Nazwa pliku z pełną ścieżką oraz opis pliku:

        private void Zalaczniki()
        {
            esf.AddZalacznik(@"c:\TMP\1-WPROWADZENIE.pdf", "Dodane z API cz.1");
            esf.AddZalacznik(@"c:\TMP\7-Zasady.pdf", "Dodane z API cz.2");
            esf.AddZalacznik(@"c:\TMP\3-Nota1.xlsx", "Dodane z API cz.3 EXCEL");
        }
    

Załączniki e-Sprawozdania Finansowego XML

Widok listy automatycznie dodanych załączników

Prezentacja video połączenia z Excel

Generowanie e-Sprawozdania Finansowego XML z własnych danych i arkuszy Excel

Prezentacja pokazuje ogromne możliwości naszej aplikacji, intuicyjną obsługę i szybkość działania. Prostymi metodami utworzyliśmy „gotowy” plik XML z którego natychmiast dostępny jest raport.

Przykładowy skrypt C# do wygenerowania e-Sprawozdania Finasowego.

using System;
using System.Data;
using System.Drawing;
using TGSoft.JPK.SF;
using TGSoft.UI.XLS;
using TGSoft.Utils;

// Jednostka Inna
namespace Szark
{
    public class XlsApi
    {
        SSController ssc;
        XlsController esf;
        
        public XlsApi(XlsController sender)
        {
            esf = sender;
            esf.BeginUpdateESF();
            try
            {
                string fileName = @"c:\TMP\eSF-ImportAPI.xlsx";
                ssc = new SSController();
                if (!ssc.LoadDocument(fileName))
                {
                    TGSoft.Forms.UI.ShowWarning("Błąd ładowania podanego pliku Excel: " + fileName);
                    return;
                }
            
                Naglowek();
                Aktywa();
                Pasywa();
                RZiS();
                Zalaczniki();
                Podatek();
            }
            catch (Exception ex)
            {
                TGSoft.Forms.UI.ShowError(ex.Message);
            }
            finally
            {
                esf.EndUpdateESF();
            }
        }
        
        private void Naglowek()
        {
            esf.IDNip = "1111111111";
            esf.IDKrs = "0000000000";
            esf.NazwaFirmy = "FHU DEMO Sp. z o.o.";
            esf.DataSporzadzenia = new DateTime(2019, 09, 30);
            esf.OkresOd = new DateTime(2018, 1, 2);
            esf.OkresDo = new DateTime(2018, 12, 30);
            esf.DataOd = new DateTime(2018, 1, 3);
            esf.DataDo = new DateTime(2018, 12, 29);
            esf.PKD = new string[] { "0111Z", "0112Z", "0113Z" };
            
            
            esf.SiedzibaMiejscowosc = "Kraków";
            esf.SiedzibaGmina = "Gmina Kraków";
            esf.SiedzibaPowiat = "Powiat Kraków";
            esf.SiedzibaWojewodztwo = "Małopolskie";
            
            esf.AP_KodPocztowy = "30-389";
            esf.AP_Miejscowosc = "Kraków";
            esf.AP_Ulica = "Zawiła";
            esf.AP_NrDomu = "1";
            esf.AP_NrLokalu = "A";
            esf.AP_Gmina = "AP_Gmina";
            esf.AP_Powiat = "AP_Powiat";
            esf.AP_Wojewodztwo = "Małopolskie";
            esf.AP_Poczta = "AP_Poczta";
            esf.AP_KodKraju = "PL";
            
            esf.AdresZagraniczny = true;
            esf.AZ_KodKraju = "DE";
            esf.AZ_KodPocztowy = "AZ_KodPocztowy";
            esf.AZ_Miejscowosc = "AZ_Miejscowosc";
            esf.AZ_Ulica = "AZ_Ulica";
            esf.AZ_NrDomu = "123";
            esf.AZ_NrLokalu = "B";
            
            
            esf.OgraniczonyDataOd = new DateTime(2018, 1, 10);
            esf.OgraniczonyDataDo = "koniec roku 2018";
            esf.Wskazanie = true;
            esf.WskazanieOpis = "Opis zastosowanej metody rozliczenia połączenia";
            esf.KontynuacjaZagrozenie = false;
            esf.KontynuacjaZagrozenieOpis = "Z winy wspólnika";
            
            esf.Zasady_A = new string[] { "A linia 1", "A linia 2", "A linia 3" };
            esf.Zasady_B = new string[] { "B linia 1", "B linia 2", "B linia 3" };
            esf.Zasady_C = new string[] { "C linia 1", "C linia 2", "C linia 3" };
            esf.Zasady_D = new string[] { "D linia 1", "D linia 2", "D linia 3" };
            
            esf.AddInfo("Nazwa - 1", "Opis do JEDEN");
            esf.AddInfo("Nazwa - 2", "Opis do DWA");
        }
                
        private void SetEsfValue(string reference)
        {
            //if (!esf.HasFormula(reference))
            esf.SetNumeric(reference, ssc.GetNumeric(reference));  
        }
        
        private void Aktywa()
        {
            //esf.SetNumeric("Aktywa!D5", ssc.GetNumeric("Aktywa!D5"));
            for (int i = 3; i <= 90; i++)
            {
                SetEsfValue(string.Format("Aktywa!D{0}", i));
                SetEsfValue(string.Format("Aktywa!E{0}", i));
                SetEsfValue(string.Format("Aktywa!F{0}", i));
            }
            
            esf.AddPozycja("Aktywa", "A_I_1", "Podpozycja Szczegółowa do Aktywa AI1", 3);
            esf.AddPozycja("Aktywa", "A_I_3", "Podpozycja Szczegółowa do Aktywa AI3", 5);
            
            PozycjePodpozycjeSzczegolowe();
        }
        
        private void PozycjePodpozycjeSzczegolowe()
        {
            var arr2 = new Pozycja[] {
                new Pozycja() { NazwaPozycji = "podpozycja do 2, a)", KwotaA = 1 },
                new Pozycja() { NazwaPozycji = "podpozycja do 2, b)", KwotaA = 2 },
                };
            
            Pozycja p1 = new Pozycja() { NazwaPozycji = "Szczegółowa 1", KwotaA = 11 };
            Pozycja p2 = new Pozycja() { NazwaPozycji = "Szczegółowa 2", KwotaA = 22, Podpozycja = arr2 };
            
            var arr = new Pozycja[] { p1, p2 };
            esf.AddPozycja("Aktywa", new Pozycja() { Nazwa = "A_II_2", NazwaPozycji = "Nazwa p1", KwotaA = 150, Podpozycja = arr });
        }
            
        private void Pasywa()
        {
            for (int i = 3; i <= 62; i++)
            {
                SetEsfValue(string.Format("Pasywa!D{0}", i));
                SetEsfValue(string.Format("Pasywa!E{0}", i));
                SetEsfValue(string.Format("Pasywa!F{0}", i));
            }
        }
        
        private void RZiS()
        {
            esf.SetRZiS("A_IV", 1400, 0);
            esf.AddPozycja("RZiS", new Pozycja() { Nazwa = "A_IV", NazwaPozycji = "Czwórka", KwotaA = 44 });
        }
        
        private void Zalaczniki()
        {
            esf.AddZalacznik(@"c:\TMP\1-WPROWADZENIE.pdf", "Dodane z API cz.1");
            esf.AddZalacznik(@"c:\TMP\7-Zasady.pdf", "Dodane z API cz.2");
            esf.AddZalacznik(@"c:\TMP\3-Nota1.xlsx", "Dodane z API cz.3 EXCEL");
        }
        
        private void Podatek()
        {
            esf.SetPodatekRB("P_ID_3", 31, 32);
            esf.SetPodatekRB("P_ID_4", 41);
        }
    }
}

e-Sprawozdanie Finansowe ma bardzo rozbudowaną i skomplikowaną strukturę XML, czego nie widać po analizie kodu C# załączonego przykładu…

Program-eSF to najbardziej zaawansowana i jednocześnie prosta w użytkowaniu profesjonalna aplikacja do obsługi e-Sprawozdań Finansowych KRS.

Zapoznaj się z następnym dokumentem: Biała lista podatników VAT