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 ?
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#.
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:
- Api-Inna.bin Jednostka Inna (duża firma)
- Api-Mala.bin Jednostka Mała
- Api-Mikro.bin Jednostka Mikro
- Api-OP.bin Organizacje Pozarządowe
- 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.
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
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 });
}
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");
}
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