KSEF w VBA Excel

MR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Cześć, Udało mi się w VBA Excel napisać funkcję i loguje się poprawnie. Otrzymuje komunikat "200".
Ale mam kłopot żeby dalej pójść z apką. Chciałbym wsadowo wysyłać i pobierać faktury.
Samo utworzenie faktur XML nie stanowi dla mnie problemu. Czy macie jakiś fragment kodu VBA lub jakąś podpowiedź?
Oczywiście otwarty jestem aby nad tym popracować wspólnie. Gotowy jestem aby udostępnić co już mam.
pozdrawiam

MR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Chwilowo temat odlozylem. W pracy nie robię tego typu zadań. Od 14.06 mam tydzień urlopu i wrócę do tematu. Pozdrawiam

Gimley
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0
MikolajR napisał(a):

Chwilowo temat odlozylem. W pracy nie robię tego typu zadań. Od 14.06 mam tydzień urlopu i wrócę do tematu. Pozdrawiam

Witaj, Udało Ci się wrócić do tego tematu ?

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
0

Od lat korzystam z kontrolek chilkat. Nawet jak robię w dotnecie. I polecam tak inwestycje, oszczędzisz sporo pracy i nerwów. No i masz fajne przykłady: https://tools.chilkat.io/PostmanCollection/vbscript/list-S1NlRi5wb3N0bWFuX2NvbGxlY3Rpb24uanNvbg

MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 50
0
Panczo napisał(a):

Od lat korzystam z kontrolek chilkat. Nawet jak robię w dotnecie. I polecam tak inwestycje, oszczędzisz sporo pracy i nerwów. No i masz fajne przykłady: https://tools.chilkat.io/PostmanCollection/vbscript/list-S1NlRi5wb3N0bWFuX2NvbGxlY3Rpb24uanNvbg

Ciekawa biblioteka. Taki szwajcarski scyzoryk, którym można sobie wiele wystrugać.
Jednakże, jeśli ktoś nie ma czasu lub zdolności manualnych to właśnie pracuję nad wersją COM/OLE Automation (również do użytku w środowiskach skryptowych) mojej biblioteki do obsługi KSeF, e-deklaracji i JPK. Na dniach powinienem udostępnić wersję rozwojową do testów.

Tutaj przykłay w PowerShell (nie posiadam MS Office):

Kopiuj
# LibGovPL - KSeF - Nawiazywanie sesji interaktywnej tokenem i pobranie faktury
try {
    # Tworzenie obiektu zaplecza
    $backend = New-Object -ComObject LibGovPL.lgcBackend

    # Tworzenie obiektu komunikacji KSeF
    $ksef = $backend.CreateKSeF()

    # Tworzenie obiektu klienta HTTP
    $ksef.HTTPClient = $backend.CreateHTTPClient('')

    # Tworzenie klucza RSA ze wskazanego pliku
    $ksef.RSAKeyTest = $backend.CreateRSAKey('', 'kseftest.pem')

    # Ustawiamy parametry polaczenia
    $ksef.Nip = '1111111111'
    $ksef.Token = '1111111111111112222222222222333333333333444444444445555555555666'
    $ksef.GateType = 2 # Rodzaj serwera KSeF: 0 - produkcja, 1 - demo, 2 - test
    $ksef.FormCode = 1 # Wersja struktury wysylanych plikow FA: 0 - FA(1), 1 - FA(2)

    # Nawiazywanie sesji interaktywnej tokenem
    $response = $ksef.SessionInitToken()

    # Napisz token sesji
    Write-Host 'Token sesji: ' $response.SessionToken().Token()
    # Napisz odpowiedz w postaci surowego JSON
    Write-Host 'Surowa odpowiedz JSON: ' $response.GetRawResponse()
    $response = $null

    # Odczekaj pare sekund po nawiazaniu sesji bo inaczej serwer odrzuci zadanie
    Write-Host 'Momencik...'
    Start-Sleep -Seconds 10

    # Pobierz fakture i zapisz do pliku
    $ksef.InvoiceGet('1111111111-20241127-333333333333-QQ', 'fa.xml')
    Write-Host 'Pobrano fakture'
}
catch {
    Write-Host -f Red "Blad: $_"
}

if ((Get-Variable -Name ksef -ErrorAction SilentlyContinue) -And ($ksef -ne $null)) {
    if ($ksef.SessionActive) {

        # Konczenie sesji KSeF
        $ksef.SessionTerminate(0)        

    }
    $ksef = $null
}

$backend = $null
Kopiuj
# LibGovPL - KSeF - Nawiazywanie sesji interaktywnej certyfikatem i wyszukiwanie synchronicznie
try {
    # Tworzenie obiektu zaplecza
    $backend = New-Object -ComObject LibGovPL.lgcBackend
    
    # Tworzenie obiektu podpisu certyfikatem kwalifikowanym lub pieczecia
    $certSigner = $backend.CreateCertificateSigner('')

    # Wybierz certyfikat przez systemowe okienko wyboru certyfikatu
    $cert = $certSigner.UISelect()

    if ($cert -ne $null) {

        # Tworzymy obiekt obslugi podpisu XAdES
        $xades = $backend.CreateXAdES()
        # Ustawiamy obiekt obslugi podpisu certyfikatem
        $xades.Signer = $certSigner

        # Tworzenie obiektu komunikacji KSeF
        $ksef = $backend.CreateKSeF()

        # Tworzenie obiektu klienta HTTP
        $ksef.HTTPClient = $backend.CreateHTTPClient('')
        # Tworzenie klucza RSA ze wskazanego pliku bo uzyjemy dodatkowego szyfrowania AES
        $ksef.RSAKeyDemo = $backend.CreateRSAKey('', 'ksefdemo.pem')
        # Ustawiamy obiekt sygnatury XAdES
        $ksef.XAdES = $xades
        # Uzywamy wybranego certyfikatu
        $ksef.Certificate = $cert

        # Ustawiamy parametry polaczenia
        $ksef.Nip = '1111111111'
        $ksef.GateType = 1 # Rodzaj serwera KSeF: 0 - produkcja, 1 - demo, 2 - test
        $ksef.Encryption = $true # Wlacz dodatkowe szyfrowanie dokumentow algorytmem AES
        $ksef.FormCode = 1 # Wersja struktury wysylanych plikow FA: 0 - FA(1), 1 - FA(2)

        # Czyscimy informacje o ostatnim bledzie
        $backend.ClearLastError()
        $aborted = $false
        try {
            # Nawiazywanie sesji interaktywnej wybranym certyfikatem
            $response = $ksef.SessionInitSigned()
        }
        catch {
            $aborted = $true
            # Sprawdz, czy anulowano wprowadzanie PIN
            if (($backend.LastError -ne $null) -And ($backend.LastError.ExceptionClass -eq 'EAbort')) {
                Write-Host -f Yellow 'Anulowano wprowadzanie nr PIN'
            }
            else {
                Write-Host -f Red "Blad: $_"
            }
        }

        if ($aborted -eq $false) {

            # Napisz token sesji
            Write-Host 'Token sesji: ' $response.SessionToken().Token()
            # Napisz odpowiedz w postaci surowego JSON
            Write-Host 'Surowa odpowiedz JSON: ' $response.GetRawResponse()

            # Odczekaj pare sekund po nawiazaniu sesji bo inaczej serwer odrzuci zadanie
            Write-Host 'Momencik...'
            Start-Sleep -Seconds 10

            # Tworzenie obiektu kryteriow zapytania
            $criteria = $ksef.CreateKSeFObject('TKSeFQueryCriteriaInvoiceDetail')
            # Wyszukaj faktury sprzedazowe (gdzie w fa wystepujamy jako "Podmiot1")
            $criteria.SubjectType = 0 # 0 - subject1, 1 - subject2, 2 - subject3, ...
            # Okres wystawienia wysukiwanych faktur
            $criteria.InvoicingDateFrom = (Get-Date).AddDays(-30)
            $criteria.InvoicingDateTo = Get-Date
            # Tylko wystawione w walucie PLN i EUR
            $criteria.CurrencyCodesStr = 'PLN,EUR'

            # Tworzymy obiekt zapytania o faktury
            $request = $ksef.CreateKSeFObject('TKSeFQueryInvoiceRequest')
            # Ustawiamy obiekt kryteriow
            $request.QueryCriteria = $criteria
            Write-Host 'Surowe zadanie: ' $request.GetAsJSON()

            # Zapytaj o faktury synchronicznie (10 na stronie, offset 0)
            $response = $ksef.QueryInvoiceSync($request, 10, 0)
            Write-Host 'Surowe odpowiedz: ' $response.GetRawResponse()
            Write-Host 'Ilosc faktur: ' $response.InvoiceHeaderList().Count()

            for ($i = 0; $i -lt $response.InvoiceHeaderList().Count(); $i++) {
                # Wypisz numery znalezionych faktur
                Write-Host $response.InvoiceHeaderList().Item($i).InvoiceReferenceNumber()
            }
        }
    }
    else {
        Write-Host -f Yellow 'Anulowano wybor certyfikatu'
    }
}
catch {
    Write-Host -f Red "Blad: $_"
}

if ((Get-Variable -Name ksef -ErrorAction SilentlyContinue) -And ($ksef -ne $null)) {
    if ($ksef.SessionActive) {

        # Konczenie sesji KSeF
        $ksef.SessionTerminate(0)        

    }
    $ksef = $null
}

$xades = $null
$cert = $null
$certSigner = $null
$backend = $null
Gimley
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0
michalgw napisał(a):
Panczo napisał(a):

Od lat korzystam z kontrolek chilkat. Nawet jak robię w dotnecie. I polecam tak inwestycje, oszczędzisz sporo pracy i nerwów. No i masz fajne przykłady: https://tools.chilkat.io/PostmanCollection/vbscript/list-S1NlRi5wb3N0bWFuX2NvbGxlY3Rpb24uanNvbg

Ciekawa biblioteka. Taki szwajcarski scyzoryk, którym można sobie wiele wystrugać.
Jednakże, jeśli ktoś nie ma czasu lub zdolności manualnych to właśnie pracuję nad wersją COM/OLE Automation (również do użytku w środowiskach skryptowych) mojej biblioteki do obsługi KSeF, e-deklaracji i JPK. Na dniach powinienem udostępnić wersję rozwojową do testów.

Tutaj przykłay w PowerShell (nie posiadam MS Office):

Kopiuj
# LibGovPL - KSeF - Nawiazywanie sesji interaktywnej tokenem i pobranie faktury
try {
    # Tworzenie obiektu zaplecza
    $backend = New-Object -ComObject LibGovPL.lgcBackend

    # Tworzenie obiektu komunikacji KSeF
    $ksef = $backend.CreateKSeF()

    # Tworzenie obiektu klienta HTTP
    $ksef.HTTPClient = $backend.CreateHTTPClient('')

    # Tworzenie klucza RSA ze wskazanego pliku
    $ksef.RSAKeyTest = $backend.CreateRSAKey('', 'kseftest.pem')

    # Ustawiamy parametry polaczenia
    $ksef.Nip = '1111111111'
    $ksef.Token = '1111111111111112222222222222333333333333444444444445555555555666'
    $ksef.GateType = 2 # Rodzaj serwera KSeF: 0 - produkcja, 1 - demo, 2 - test
    $ksef.FormCode = 1 # Wersja struktury wysylanych plikow FA: 0 - FA(1), 1 - FA(2)

    # Nawiazywanie sesji interaktywnej tokenem
    $response = $ksef.SessionInitToken()

    # Napisz token sesji
    Write-Host 'Token sesji: ' $response.SessionToken().Token()
    # Napisz odpowiedz w postaci surowego JSON
    Write-Host 'Surowa odpowiedz JSON: ' $response.GetRawResponse()
    $response = $null

    # Odczekaj pare sekund po nawiazaniu sesji bo inaczej serwer odrzuci zadanie
    Write-Host 'Momencik...'
    Start-Sleep -Seconds 10

    # Pobierz fakture i zapisz do pliku
    $ksef.InvoiceGet('1111111111-20241127-333333333333-QQ', 'fa.xml')
    Write-Host 'Pobrano fakture'
}
catch {
    Write-Host -f Red "Blad: $_"
}

if ((Get-Variable -Name ksef -ErrorAction SilentlyContinue) -And ($ksef -ne $null)) {
    if ($ksef.SessionActive) {

        # Konczenie sesji KSeF
        $ksef.SessionTerminate(0)        

    }
    $ksef = $null
}

$backend = $null
Kopiuj
# LibGovPL - KSeF - Nawiazywanie sesji interaktywnej certyfikatem i wyszukiwanie synchronicznie
try {
    # Tworzenie obiektu zaplecza
    $backend = New-Object -ComObject LibGovPL.lgcBackend
    
    # Tworzenie obiektu podpisu certyfikatem kwalifikowanym lub pieczecia
    $certSigner = $backend.CreateCertificateSigner('')

    # Wybierz certyfikat przez systemowe okienko wyboru certyfikatu
    $cert = $certSigner.UISelect()

    if ($cert -ne $null) {

        # Tworzymy obiekt obslugi podpisu XAdES
        $xades = $backend.CreateXAdES()
        # Ustawiamy obiekt obslugi podpisu certyfikatem
        $xades.Signer = $certSigner

        # Tworzenie obiektu komunikacji KSeF
        $ksef = $backend.CreateKSeF()

        # Tworzenie obiektu klienta HTTP
        $ksef.HTTPClient = $backend.CreateHTTPClient('')
        # Tworzenie klucza RSA ze wskazanego pliku bo uzyjemy dodatkowego szyfrowania AES
        $ksef.RSAKeyDemo = $backend.CreateRSAKey('', 'ksefdemo.pem')
        # Ustawiamy obiekt sygnatury XAdES
        $ksef.XAdES = $xades
        # Uzywamy wybranego certyfikatu
        $ksef.Certificate = $cert

        # Ustawiamy parametry polaczenia
        $ksef.Nip = '1111111111'
        $ksef.GateType = 1 # Rodzaj serwera KSeF: 0 - produkcja, 1 - demo, 2 - test
        $ksef.Encryption = $true # Wlacz dodatkowe szyfrowanie dokumentow algorytmem AES
        $ksef.FormCode = 1 # Wersja struktury wysylanych plikow FA: 0 - FA(1), 1 - FA(2)

        # Czyscimy informacje o ostatnim bledzie
        $backend.ClearLastError()
        $aborted = $false
        try {
            # Nawiazywanie sesji interaktywnej wybranym certyfikatem
            $response = $ksef.SessionInitSigned()
        }
        catch {
            $aborted = $true
            # Sprawdz, czy anulowano wprowadzanie PIN
            if (($backend.LastError -ne $null) -And ($backend.LastError.ExceptionClass -eq 'EAbort')) {
                Write-Host -f Yellow 'Anulowano wprowadzanie nr PIN'
            }
            else {
                Write-Host -f Red "Blad: $_"
            }
        }

        if ($aborted -eq $false) {

            # Napisz token sesji
            Write-Host 'Token sesji: ' $response.SessionToken().Token()
            # Napisz odpowiedz w postaci surowego JSON
            Write-Host 'Surowa odpowiedz JSON: ' $response.GetRawResponse()

            # Odczekaj pare sekund po nawiazaniu sesji bo inaczej serwer odrzuci zadanie
            Write-Host 'Momencik...'
            Start-Sleep -Seconds 10

            # Tworzenie obiektu kryteriow zapytania
            $criteria = $ksef.CreateKSeFObject('TKSeFQueryCriteriaInvoiceDetail')
            # Wyszukaj faktury sprzedazowe (gdzie w fa wystepujamy jako "Podmiot1")
            $criteria.SubjectType = 0 # 0 - subject1, 1 - subject2, 2 - subject3, ...
            # Okres wystawienia wysukiwanych faktur
            $criteria.InvoicingDateFrom = (Get-Date).AddDays(-30)
            $criteria.InvoicingDateTo = Get-Date
            # Tylko wystawione w walucie PLN i EUR
            $criteria.CurrencyCodesStr = 'PLN,EUR'

            # Tworzymy obiekt zapytania o faktury
            $request = $ksef.CreateKSeFObject('TKSeFQueryInvoiceRequest')
            # Ustawiamy obiekt kryteriow
            $request.QueryCriteria = $criteria
            Write-Host 'Surowe zadanie: ' $request.GetAsJSON()

            # Zapytaj o faktury synchronicznie (10 na stronie, offset 0)
            $response = $ksef.QueryInvoiceSync($request, 10, 0)
            Write-Host 'Surowe odpowiedz: ' $response.GetRawResponse()
            Write-Host 'Ilosc faktur: ' $response.InvoiceHeaderList().Count()

            for ($i = 0; $i -lt $response.InvoiceHeaderList().Count(); $i++) {
                # Wypisz numery znalezionych faktur
                Write-Host $response.InvoiceHeaderList().Item($i).InvoiceReferenceNumber()
            }
        }
    }
    else {
        Write-Host -f Yellow 'Anulowano wybor certyfikatu'
    }
}
catch {
    Write-Host -f Red "Blad: $_"
}

if ((Get-Variable -Name ksef -ErrorAction SilentlyContinue) -And ($ksef -ne $null)) {
    if ($ksef.SessionActive) {

        # Konczenie sesji KSeF
        $ksef.SessionTerminate(0)        

    }
    $ksef = $null
}

$xades = $null
$cert = $null
$certSigner = $null
$backend = $null

Rozwiniesz wspomniany przez Ciebie temat "obsługi KSeF, e-deklaracji i JPK" ?

MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 50
0
Gimley napisał(a):

Rozwiniesz wspomniany przez Ciebie temat "obsługi KSeF, e-deklaracji i JPK" ?

Tu znajdziesz więcej informacji: link

Jeśli będziesz miał dodatkowe pytania to wal śmiało, ale chyba najlepiej w wątku podanym w linku.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.