Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 65977 Skopiuj do schowka Biała lista podatników VAT - połączenie API - excel
Autor Wiadomość
Ramzees
Starszy Forumowicz


Pomógł: 1 raz
Posty: 46
Wysłany: 06-09-2019, 12:05   Biała lista podatników VAT - połączenie API - excel

Moi Drodzy, czy ktoś przerabiał temat połączenia z API z bazą Ministerstwa Finansów? Przeglądając strony znalazłem rozwiązanie: dodatek do excela / https://nip24.pl/ czy ktoś pomoże odpowiedzieć na pytanie czy warto pobrać ten dodatek - jest on bezpieczny?

a może ktoś już utworzył takie zapytanie i łączy się z tą bazą?
ID posta: 373672 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2388 razy
Posty: 7815
Wysłany: 06-09-2019, 12:53   

Ramzees napisał/a:
a może ktoś już utworzył takie zapytanie i łączy się z tą bazą?

Ktoś utworzył:
http://www.excelforum.pl/viewtopic.php?t=58881
Co prawda jet to połączenie do Ministerstwa finansów MF GOV.
Co chcesz sprawdzać dokładnie?
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 373673 Skopiuj do schowka
 
 
Ramzees
Starszy Forumowicz


Pomógł: 1 raz
Posty: 46
Wysłany: 06-09-2019, 14:15   

dziękuje za zainteresowanie tematem :) generalnie rozwiązaniem by było narzędzie w którym w kolumnie A wpisywane by były NIP'y spółek/kontrahentów z którymi się współpracuje, kolumna obok wyrzucałaby nazwę spółki po zadanym nipie z ministerstwa i w następnej kolumnie nr rachunku bankowego - mając te dane łatwo by było zweryfikować aktualną posiadaną bazę firmy i ich nr rachunków bankowych- czy są zgodne.

Bądź też jeśli to też możliwe zaszyta kombinacja klucza nip&rachunek bankowy firmy X jest w bazie Ministerstwa Finansów.- odpowiedz tak/nie
ID posta: 373676 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2388 razy
Posty: 7815
Wysłany: 06-09-2019, 17:49   

Ramzees napisał/a:
w następnej kolumnie nr rachunku bankowego
Tylko co jeśli firma będzie posiadała kilkanaście lub kilkadziesiąt numerów bankowych?
Dla przykładu spółka Orlen posiada 98 numerów kont :-P
Ale to już Twój problem jak to będziesz weryfikował.

Na podstawie wyszukiwarki Ministerstwo Finansów -> https://www.podatki.gov.p...at-wyszukiwarka zrobiłem takiego UDF-a
Kod:
Function Podatnik_Info(NIP As String, Firma_lub_Bank As String) As String
'Firma_lub_Bank: wpisujemy Firma lub Bank

    Dim oHttpReq         As Object
    Dim sUrl             As String

    NIP = VBA.Replace(NIP, "-", "")
    Firma_lub_Bank = UCase(Firma_lub_Bank)

    sUrl = "https://wl-api.mf.gov.pl/api/search/nip/" & NIP & "?date=" & Format(Now, "yyyy-mm-dd")

    Set oHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")    'WinHttp.WinHttpRequest.5.1  MSXML2.ServerXMLHTTP.6.0     MSXML2.ServerXMLHTTP

    With oHttpReq
        .Open "Get", sUrl, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64"
        .Send
        .WaitForResponse

        If VBA.Left$(.responsetext, 26) = "{""result"":{""subject"":null}" Then
            Podatnik_Info = "Firma nie figuruje w rejestrze VAT"
            Exit Function
        ElseIf VBA.Left$(.responsetext, 16) = "{""code"":""WL-115""" Then
            Podatnik_Info = "Nieprawidłowy NIP."
            Exit Function
        ElseIf VBA.Left$(.responsetext, 16) = "{""code"":""WL-113""" Then
            Podatnik_Info = "Pole 'NIP' ma nieprawidłową długość."
            Exit Function
        End If

        Select Case Firma_lub_Bank
        Case "FIRMA"
            Podatnik_Info = Split(Split(.responsetext, """name"":""")(1), """,""")(0)
        Case "BANK"
            Podatnik_Info = VBA.Replace(Split(Split(.responsetext, "accountNumbers"":[""")(1), """],""")(0), """,""", "| kolejny nr bankowy: ")
        End Select

    End With

    Set oHttpReq = Nothing

End Function

możesz go wywołać w arkuszu, tak jak to jest zrobione w załączniku, lub wywołać funkcję w procedurze, która wstawi Ci wartości w odpowiednie miejsca (procedura do zrobienia).

Dla takiej weryfikacji jest tworzone narzędzie programistyczne API, ale nie jest one jeszcze ukończone i na razie go nie wykorzystywałem dla tego rozwiązania.
Poczekajmy na API w wersji ostatecznej.

Nie czytałem o ograniczeniach, i nie testowałem powyższego rozwiązania dla większej ilość zapytań.
Jakby coś się działo to daj nam znać.
Testuj.

NIP.xlsm
Pobierz Plik ściągnięto 180 raz(y) 20.02 KB

_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 373683 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2388 razy
Posty: 7815
Wysłany: 06-09-2019, 22:55   

W sumie to jest podane API na stronie https://www.gov.pl/web/ka...-podatnikow-vat
Jeśli robił byś procedurę, aby uniknąć używania funkcji w arkuszu, to wyczytałem że w jednym zapytaniu można sprawdzić 30-ści podmiotów.
Działaj.
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 373692 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2940 razy
Posty: 9729
Wysłany: 07-09-2019, 21:57   

API jeszcze ciepłe, bo w końcówce sierpnia nie było jeszcze dostępne.

Chcę zwrócić uwagę na może mało widoczny szczegół, ale bardzo istotny w przypadku konfrontacji z US. Poza uzyskaniem odpowiedzi (pozytywnej lub negatywnej) dotyczącej zapytania należy rejestrować także klucz potwierdzający wykonanie zapytania do bazy. Załóżmy, że na zapytanie otrzymaliśmy odpowiedź twierdzącą (pozytywną). Wykonano przelew na wskazane konto. Po paru latach US podważa daną operację (np. jako przelanie pieniędzy na niewłaściwe konto). Mając klucz potwierdzający możemy udowodnić, że przelew odbył się na konto, które na dany moment było kontem właściwym. Brak tego klucza z pewnością utrudni nam udowodnienie "niewinności".
Tak więc powinniśmy dążyć do stworzenia narzędzia, które nie tylko zapyta o dane, ale także je zarchiwizuje "na okres 5 lat licząc od końca roku, w którym miało miejsce zdarzenie gospodarcze" (czyli w praktyce 6 lat).

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 373721 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2388 razy
Posty: 7815
Wysłany: 08-09-2019, 01:26   

Dzięki Artik, bardzo cenna uwaga.
Wyciągnięcie klucza to pikuś.
Jak wrócę z trasy to jeszcze popracuje nad tym, bo narazie to takie suche narzędzie, bez obsługi błędów, a w API widziałem listę kodów opisującą dany błąd.
I jeszcze przydał by się jakiś parser od JSONA.
A może Ty coś skrobniesz ?
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 373726 Skopiuj do schowka
 
 
Tajan


Pomógł: 4646 razy
Posty: 10267
Wysłany: 08-09-2019, 09:04   

Marecki napisał/a:
I jeszcze przydał by się jakiś parser od JSONA.
Jest trochę "gotowców". Przykładowo: https://github.com/VBA-tools/VBA-JSON
ID posta: 373730 Skopiuj do schowka
 
 
mmswiat 
Fan Excela


Posty: 73
Wysłany: 12-09-2019, 16:11   

czy udało się coś komus ogarnąć?
ID posta: 374000 Skopiuj do schowka
 
 
elhenio 
Exceloholic



Wersja: Win Office 365
Pomógł: 29 razy
Posty: 213
Wysłany: 12-09-2019, 19:08   

Nie żebym się jakoś szczególnie znał ale ostatnio trochę nad tym siedziałem.

"biała lista" oznacza, że wszystkie płatności za faktury powyżej 15000,00 tys. muszą być dokonane na rachunek kontrahenta który jest wpisany na białą listę. Przelać można ale nie będziesz miał możliwości zaliczenia do kosztów uzyskania przychodu kwoty w tej części, w jakiej płatność przekracza kwotę 15 tysięcy zł.
Do tego przy split payment trzeba mieć konto firmowe... jednoosobowa działalność z kontem prywatnym już nie przejdzie bo te konta nie obsługują SP.
Jeżeli na dany dzień gov.pl podaje, że jest to niby wystarczy. Dotyczy to VAT, a on jest w ramach miesiąca, kwartału...
Info Artik ma też głęboki sens ale... w US jest coś takiego jak "ryzyko odpowiedzialności solidarnej" ja zapłaciłem, a kontrahent nie to US też mnie będzie ścigać... tego to w ogóle nie rozumiem! Pytanie czy potwierdzenie poprawnego przelewu nam coś da w obronie...
Przy firmach z kilkom kontami można też zapytać o konkretne konto czy jest (dla np. Orlen), na FV mamy podane konto. Tak naprawdę w tym wszystkim chodzi o status konto a nie inne dane podmiotu.

mmswiat nie wiem czy można to nazwać "udało się". Mi w tej prostej formie na dzisiaj wystarczy i działa. Rozmyślam cały czas nad własnymi potrzebami i usprawnieniem. Myślę, że zrobię u siebie też zwykle sprawdzenie statusu samego konta. Kontrahentów już mam więc tylko muszę sprawdzić co z ich kontem.

Interesujące Cię dane do własnej modyfikacji. W dokumentacji API wszytko jest.
W połączeniu z linkiem w poście Tajan oczywiście.

Kod:

Sub Podatnik()

Dim http                        As Object
Dim adres, funkcja, NIP         As String
Dim i                           As Integer
Dim ark1 As Worksheet: Set ark1 = Sheets("Kontrahent")

    NIP = Replace(Replace(ark1.Cells(1, 2).Value, " ", ""), "-", "")

    adres = "https://wl-api.mf.gov.pl/"
    funkcja = "api/search/nip/" & NIP & "?date=" & Format(Now, "yyyy-mm-dd")

If ark1.Range("B1").Value <> "" Then
    Set http = CreateObject("MSXML2.XMLHTTP")
    With http
        .Open "Get", adres & funkcja, False
        .send
    End With
   
    Dim Json As Object: Set Json = JsonConverter.ParseJson(http.responseText)
    On Error Resume Next

    With ark1
        .Cells(2, 2) = Json("result")("subject")("name")
        .Cells(3, 2) = Json("result")("subject")("statusVat")
        .Cells(4, 2) = Json("result")("subject")("regon")
        .Cells(5, 2) = Json("result")("subject")("krs")
        .Cells(6, 2) = Json("result")("subject")("workingAddress")
    For i = 1 To 10
        .Cells(7, 1 + i) = Json("result")("subject")("accountNumbers")(i)
    Next i
        .Cells(20, 2) = Json("code")
        .Cells(21, 2) = Json("message")
   
    End With
Else
    MsgBox "brak nr NIP"
End If

End Sub
_________________
Pozdrawiam
elhenio

Nie wystarczy zdobywać mądrości, trzeba jeszcze z niej korzystać.
ID posta: 374014 Skopiuj do schowka
 
 
Ramzees
Starszy Forumowicz


Pomógł: 1 raz
Posty: 46
Wysłany: 13-09-2019, 12:54   

Szanowni Forumowicze,
bardzo dziękuje za udzielone odpowiedzi, w najbliższym czasie przetestuje rozwiązania, i oczywiście zachęcam do rozwijania wątku :)

serdecznie pozdrawiam,
ID posta: 374052 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2388 razy
Posty: 7815
Wysłany: 13-09-2019, 15:09   

Obyło się bez parsera :-)
Kod:
Sub test()
    Dim sArr             As Variant
    Dim el               As Variant

    sArr = Array("name", "nip", "statusVat", "regon", "pesel", "krs", "residenceAddress", "workingAddress", "representatives", "authorizedClerks", "partners", "registrationLegalDate", "registrationDenialBasis", "registrationDenialDate", "restorationBasis", "restorationDate", "removalBasis", "removalDate", "accountNumbers", "hasVirtualAccounts", "requestId")

    For Each el In sArr
        Debug.Print Podatnik_Info("7740001454", CStr(el))
    Next el

End Sub

Function Podatnik_Info(sNIP As String, sData As String) As String
'Parametry dla sData: name, nip, statusVat, regon, pesel, krs, residenceAddress, workingAddress, representatives, authorizedClerks, partners, registrationLegalDate, registrationDenialBasis, registrationDenialDate, restorationBasis, restorationDate, removalBasis, removalDate, accountNumbers, hasVirtualAccounts, requestId

    Dim ScriptControl    As Object
    Dim oHttpReq         As Object
    Dim Json             As Object
    Dim Resp             As String
    Dim sUrl             As String

   On Error GoTo Podatnik_Info_Error

    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "\D"
        sNIP = .Replace(sNIP, "")
    End With

    Set ScriptControl = CreateObject("MSScriptControl.ScriptControl")
    ScriptControl.Language = "JScript"

    sUrl = "https://wl-api.mf.gov.pl/api/search/nip/" & sNIP & "?date=" & Format(Now, "yyyy-mm-dd")
    Set oHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

    With oHttpReq
        .Open "Get", sUrl, False
        .SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64"
        .SetRequestHeader "Accept", "application/json"
        .Send
        .WaitForResponse
        Resp = .ResponseText
    End With

    Resp = VBA.Replace(Resp, "subject", "Subject")
    Resp = VBA.Replace(Resp, "name", "Name")
    Resp = VBA.Replace(Resp, "nip", "NIP")

    Set Json = ScriptControl.Eval("(" + Resp + ")")

    Select Case oHttpReq.Status
    Case 400
        Select Case Json.code
        Case "WL-100": Podatnik_Info = "Wystąpił nieoczekiwany błąd serwera."
        Case "WL-101": Podatnik_Info = "Pole 'data' nie może być puste."
        Case "WL-102": Podatnik_Info = "Pole 'data' ma nieprawidłowy format."
        Case "WL-103": Podatnik_Info = "Data nie może być datą przyszłą."
        Case "WL-104": Podatnik_Info = "Pole 'REGON' nie może być puste."
        Case "WL-105": Podatnik_Info = "Pole 'REGON' ma nieprawidłową długość. Wymagane 9 lub 14 znaków."
        Case "WL-106": Podatnik_Info = "Pole 'REGON' zawiera niedozwolone znaki. Wymagane tylko cyfry."
        Case "WL-107": Podatnik_Info = "Nieprawidłowy REGON."
        Case "WL-108": Podatnik_Info = "Pole 'numer konta' nie może być puste."
        Case "WL-109": Podatnik_Info = "Pole 'numer konta' ma nieprawidłową długość. Wymagane 26 znaków."
        Case "WL-110": Podatnik_Info = "Pole 'numer konta' zawiera niedozwolone znaki. Wymagane tylko cyfry."
        Case "WL-111": Podatnik_Info = "Nieprawidłowy numer konta bankowego."
        Case "WL-112": Podatnik_Info = "Pole 'NIP' nie może być puste."
        Case "WL-113": Podatnik_Info = "Pole 'NIP' ma nieprawidłową długość. Wymagane 10 znaków."
        Case "WL-114": Podatnik_Info = "Pole 'NIP' zawiera niedozwolone znaki. Wymagane tylko cyfry."
        Case "WL-115": Podatnik_Info = "Nieprawidłowy NIP."
        Case "WL-116": Podatnik_Info = "Pole 'nazwa pomiotu' nie może być puste."
        Case "WL-117": Podatnik_Info = "Pole 'nazwa pomiotu' za krótkie. Wymagane przynajmniej 5 znaków."
        Case "WL-118": Podatnik_Info = "Data sprzed zakresu rejestru."
        Case "WL-190": Podatnik_Info = "Niepoprawne żądanie."
        Case "WL-195": Podatnik_Info = "Zaktualizowaliśmy bazę danych. Wykonaj ponownie zapytanie, aby otrzymać aktualne dane."
        Case "WL-196": Podatnik_Info = "Trwa aktualizacja bazy danych. Spróbuj ponownie później."
        Case Else: Podatnik_Info = "Nieznany błąd"
        End Select
        Exit Function

    Case 200
        If IsNull(Json.result.Subject) Then
            Podatnik_Info = "Podmiot nie istnieje."
            Exit Function
        End If

        If UCase(sData) = "REQUESTID" Then
            Podatnik_Info = Json.result.requestId
            Exit Function
        End If

        With Json.result.Subject
            Select Case VBA.UCase$(sData)
            Case "NAME": If IsNull(.Name) Then Podatnik_Info = "Null" Else Podatnik_Info = .Name
            Case "NIP": If IsNull(.NIP) Then Podatnik_Info = "Null" Else Podatnik_Info = .NIP
            Case "STATUSVAT": If IsNull(.statusVat) Then Podatnik_Info = "Null" Else Podatnik_Info = .statusVat
            Case "REGON": If IsNull(.regon) Then Podatnik_Info = "Null" Else Podatnik_Info = .regon
            Case "PESEL": If IsNull(.pesel) Then Podatnik_Info = "Null" Else Podatnik_Info = .pesel
            Case "KRS": If IsNull(.krs) Then Podatnik_Info = "Null" Else Podatnik_Info = .krs
            Case "RESIDENCEADDRESS": If IsNull(.residenceAddress) Then Podatnik_Info = "Null" Else Podatnik_Info = .residenceAddress
            Case "WORKINGADDRESS": If IsNull(.workingAddress) Then Podatnik_Info = "Null" Else Podatnik_Info = .workingAddress
            Case "REPRESENTATIVES": If IsNull(.representatives) Then Podatnik_Info = "Null" Else Podatnik_Info = .representatives
            Case "AUTHORIZEDCLERKS": If IsNull(.authorizedClerks) Then Podatnik_Info = "Null" Else Podatnik_Info = .authorizedClerks
            Case "PARTNERS": If IsNull(.partners) Then Podatnik_Info = "Null" Else Podatnik_Info = .partners
            Case "REGISTRATIONLEGALDATE": If IsNull(.registrationLegalDate) Then Podatnik_Info = "Null" Else Podatnik_Info = .registrationLegalDate
            Case "REGISTRATIONDENIALBASIS": If IsNull(.registrationDenialBasis) Then Podatnik_Info = "Null" Else Podatnik_Info = .registrationDenialBasis
            Case "REGISTRATIONDENIALDATE": If IsNull(.registrationDenialDate) Then Podatnik_Info = "Null" Else Podatnik_Info = .registrationDenialDate
            Case "RESTORATIONBASIS": If IsNull(.restorationBasis) Then Podatnik_Info = "Null" Else Podatnik_Info = .restorationBasis
            Case "RESTORATIONDATE": If IsNull(.restorationDate) Then Podatnik_Info = "Null" Else Podatnik_Info = .restorationDate
            Case "REMOVALBASIS": If IsNull(.removalBasis) Then Podatnik_Info = "Null" Else Podatnik_Info = .removalBasis
            Case "REMOVALDATE": If IsNull(.removalDate) Then Podatnik_Info = "Null" Else Podatnik_Info = .removalDate
            Case "ACCOUNTNUMBERS": If IsNull(.accountNumbers) Then Podatnik_Info = "Null" Else Podatnik_Info = "'" & .accountNumbers
            Case "HASVIRTUALACCOUNTS": If IsNull(.hasVirtualAccounts) Then Podatnik_Info = "Null" Else Podatnik_Info = .hasVirtualAccounts
            Case "REQUESTID": If IsNull(.requestId) Then Podatnik_Info = "Null" Else Podatnik_Info = .requestId
            End Select
        End With
        Case Else: Podatnik_Info = "Błąd nr " & oHttpReq.Status & " " & oHttpReq.StatusText
    End Select
   
    If VBA.Len(Podatnik_Info) = 0 Then Podatnik_Info = "Null"
    Set oHttpReq = Nothing

   On Error GoTo 0
   Exit Function

Podatnik_Info_Error:

    Podatnik_Info = "Nieznany błąd."

End Function
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 374060 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2388 razy
Posty: 7815
Wysłany: 14-09-2019, 10:48   

Ramzees, jeśli chcesz sprawdzić zgodność rachunku bankowego to wystarczy taka funkcja:
Kod:
Function Podatnik_Info_bank(sNIP As String, nr_bank As String) As String
'Parametry dla sData: name, nip, statusVat, regon, pesel, krs, residenceAddress, workingAddress, representatives, authorizedClerks, partners, registrationLegalDate, registrationDenialBasis, registrationDenialDate, restorationBasis, restorationDate, removalBasis, removalDate, accountNumbers, hasVirtualAccounts, requestId
    Dim ScriptControl    As Object
    Dim oHttpReq         As Object
    Dim Json             As Object
    Dim Resp             As String
    Dim sUrl             As String

    On Error GoTo Podatnik_Info_bank_Error

    Set ScriptControl = CreateObject("MSScriptControl.ScriptControl")
    ScriptControl.Language = "JScript"

    sUrl = "https://wl-api.mf.gov.pl/api/check/nip/" & sNIP & "/bank-account/" & nr_bank & "?date=" & Format(Now, "yyyy-mm-dd")
    Set oHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

    With oHttpReq
        .Open "Get", sUrl, False
        .SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64"
        .SetRequestHeader "Accept", "application/json"
        .Send
        .WaitForResponse
        Debug.Print .ResponseText
        Resp = .ResponseText
    End With

    Set Json = ScriptControl.Eval("(" + Resp + ")")

    Select Case oHttpReq.Status
    Case 400
        Select Case Json.code
        Case "WL-100": Podatnik_Info_bank = "Wystąpił nieoczekiwany błąd serwera."
        Case "WL-101": Podatnik_Info_bank = "Pole 'data' nie może być puste."
        Case "WL-102": Podatnik_Info_bank = "Pole 'data' ma nieprawidłowy format."
        Case "WL-103": Podatnik_Info_bank = "Data nie może być datą przyszłą."
        Case "WL-104": Podatnik_Info_bank = "Pole 'REGON' nie może być puste."
        Case "WL-105": Podatnik_Info_bank = "Pole 'REGON' ma nieprawidłową długość. Wymagane 9 lub 14 znaków."
        Case "WL-106": Podatnik_Info_bank = "Pole 'REGON' zawiera niedozwolone znaki. Wymagane tylko cyfry."
        Case "WL-107": Podatnik_Info_bank = "Nieprawidłowy REGON."
        Case "WL-108": Podatnik_Info_bank = "Pole 'numer konta' nie może być puste."
        Case "WL-109": Podatnik_Info_bank = "Pole 'numer konta' ma nieprawidłową długość. Wymagane 26 znaków."
        Case "WL-110": Podatnik_Info_bank = "Pole 'numer konta' zawiera niedozwolone znaki. Wymagane tylko cyfry."
        Case "WL-111": Podatnik_Info_bank = "Nieprawidłowy numer konta bankowego."
        Case "WL-112": Podatnik_Info_bank = "Pole 'NIP' nie może być puste."
        Case "WL-113": Podatnik_Info_bank = "Pole 'NIP' ma nieprawidłową długość. Wymagane 10 znaków."
        Case "WL-114": Podatnik_Info_bank = "Pole 'NIP' zawiera niedozwolone znaki. Wymagane tylko cyfry."
        Case "WL-115": Podatnik_Info_bank = "Nieprawidłowy NIP."
        Case "WL-116": Podatnik_Info_bank = "Pole 'nazwa pomiotu' nie może być puste."
        Case "WL-117": Podatnik_Info_bank = "Pole 'nazwa pomiotu' za krótkie. Wymagane przynajmniej 5 znaków."
        Case "WL-118": Podatnik_Info_bank = "Data sprzed zakresu rejestru."
        Case "WL-190": Podatnik_Info_bank = "Niepoprawne żądanie."
        Case "WL-195": Podatnik_Info_bank = "Zaktualizowaliśmy bazę danych. Wykonaj ponownie zapytanie, aby otrzymać aktualne dane."
        Case "WL-196": Podatnik_Info_bank = "Trwa aktualizacja bazy danych. Spróbuj ponownie później."
        Case Else: Podatnik_Info_bank = "Nieznany błąd"
        End Select
       
        Exit Function

    Case 200
        Podatnik_Info_bank = Json.result.accountAssigned & " |   RequestId: " & Json.result.requestId
    Case Else
        Podatnik_Info_bank = "Błąd nr " & oHttpReq.Status & " " & oHttpReq.StatusText
    End Select

    Set oHttpReq = Nothing

    On Error GoTo 0
    Exit Function

Podatnik_Info_bank_Error:

    Podatnik_Info_bank = "Nieznany błąd."

End Function
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 374076 Skopiuj do schowka
 
 
Auditorius 
Starszy Forumowicz


Wersja: Win Office 2013
Posty: 57
Wysłany: 07-11-2019, 09:20   

Dzień Dobry,

Spróbowałem "odwrócić" zapytanie - czyli mam tylko nr rachunku klienta (tak jak przy zlecaniu przelewów bankowych w banku), nie mam NIPu.
Krok 1: Najpierw więc musze zlokalizować NIP przypisany do danego nr rachunku i nazwę kontrahenta
Krok 2 : Porównać nazwę kontrahenta z Bazy MF z nazwą którą mam w systemie (czy się zgadza)
Krok 3: Zrobić zapytanie już pary NIP i Nr rachunku i zapisać wynik sprawdzenia, Requestid i Datę
Krok 3 - zrobił Marecki dla UDFa Podatnik_Bank_Info


Ja Potrzebuję Kroku 1 - wydawałoby się trywialne ale...
Robiąc zapytanie "na piechotę" wprost do bazy MF czyli poprzez Search i nr rachunku bankowego zapytanie działa:
https://wl-api.mf.gov.pl/api/search/bank-accounts/53102039740000510200022384?date=2019-11-07

Robiąc to poprzez zamianę kodu Mareckiego na poniższy (czyli Search/bank-account - już nie - nieznany błąd)

Co robię nie tak ?[zamieniłem Subject na Subjects(jak w JSON response) i spróbowałem podmienić nawias kwadratowy [{ na { ale wyskakuje tylko Nieznany błąd - podejrzewam kodowanie JSONa
Kod:

Function Podatnik_Info(nrBank As String, sData As String) As String
'Parametry dla sData: name, nip, statusVat, regon, pesel, krs, residenceAddress, workingAddress, representatives, authorizedClerks, partners, registrationLegalDate, registrationDenialBasis, registrationDenialDate, restorationBasis, restorationDate, removalBasis, removalDate, accountNumbers, hasVirtualAccounts, requestId
'Przyklad pelnej odpowiedzi podajac tylko nr rachunku i date zapytania
' https://wl-api.mf.gov.pl/api/search/bank-accounts/53102039740000510200022384?date=2019-11-07

Function Podatnik_Info_B(nrBank As String, sData As String)

    Dim ScriptControl As Object
    Dim oHttpReq    As Object
    Dim Json        As Object
    Dim Resp        As String
    Dim sUrl        As String

    On Error GoTo Podatnik_Info_B_Error

    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "\D"
        nrBank = .Replace(nrBank, "")
    End With

    Set ScriptControl = CreateObject("MSScriptControl.ScriptControl")
    ScriptControl.Language = "JScript"

    sUrl = "https://wl-api.mf.gov.pl/api/search/bank-account/" & nrBank & "?date=" & Format(Now, "yyyy-mm-dd")
    Set oHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

    With oHttpReq
        .Open "Get", sUrl, False
        .SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64"
        .SetRequestHeader "Accept", "application/json"
        .Send
        .WaitForResponse
        Resp = .responseText
    End With

    Resp = VBA.Replace(Resp, "[{", "{")
    Resp = VBA.Replace(Resp, "]}", "}")
    Resp = VBA.Replace(Resp, "subjects", "Subjects")
    Resp = VBA.Replace(Resp, "name", "Name")
    Resp = VBA.Replace(Resp, "nip", "NIP")

    Set Json = ScriptControl.Eval("(" + Resp + ")")

    Select Case oHttpReq.Status
        Case 400
            Select Case Json.code
                Case "WL-100": Podatnik_Info_B = "Wystąpił nieoczekiwany błąd serwera."
                Case "WL-101": Podatnik_Info_B = "Pole 'data' nie może być puste."
                Case "WL-102": Podatnik_Info_B = "Pole 'data' ma nieprawidłowy format."
                Case "WL-103": Podatnik_Info_B = "Data nie może być datą przyszłą."
                Case "WL-104": Podatnik_Info_B = "Pole 'REGON' nie może być puste."
                Case "WL-105": Podatnik_Info_B = "Pole 'REGON' ma nieprawidłową długość. Wymagane 9 lub 14 znaków."
                Case "WL-106": Podatnik_Info_B = "Pole 'REGON' zawiera niedozwolone znaki. Wymagane tylko cyfry."
                Case "WL-107": Podatnik_Info_B = "Nieprawidłowy REGON."
                Case "WL-108": Podatnik_Info_B = "Pole 'numer konta' nie może być puste."
                Case "WL-109": Podatnik_Info_B = "Pole 'numer konta' ma nieprawidłową długość. Wymagane 26 znaków."
                Case "WL-110": Podatnik_Info_B = "Pole 'numer konta' zawiera niedozwolone znaki. Wymagane tylko cyfry."
                Case "WL-111": Podatnik_Info_B = "Nieprawidłowy numer konta bankowego."
                Case "WL-112": Podatnik_Info_B = "Pole 'NIP' nie może być puste."
                Case "WL-113": Podatnik_Info_B = "Pole 'NIP' ma nieprawidłową długość. Wymagane 10 znaków."
                Case "WL-114": Podatnik_Info_B = "Pole 'NIP' zawiera niedozwolone znaki. Wymagane tylko cyfry."
                Case "WL-115": Podatnik_Info_B = "Nieprawidłowy NIP."
                Case "WL-116": Podatnik_Info_B = "Pole 'nazwa pomiotu' nie może być puste."
                Case "WL-117": Podatnik_Info_B = "Pole 'nazwa pomiotu' za krótkie. Wymagane przynajmniej 5 znaków."
                Case "WL-118": Podatnik_Info_B = "Data sprzed zakresu rejestru."
                Case "WL-190": Podatnik_Info_B = "Niepoprawne żądanie."
                Case "WL-195": Podatnik_Info_B = "Zaktualizowaliśmy bazę danych. Wykonaj ponownie zapytanie, aby otrzymać aktualne dane."
                Case "WL-196": Podatnik_Info_B = "Trwa aktualizacja bazy danych. Spróbuj ponownie później."
                Case Else: Podatnik_Info_B = "Nieznany błąd"
            End Select
            Exit Function

        Case 200
            If IsNull(Json.result.Subjects) Then
                Podatnik_Info_B = "Podmiot nie istnieje."
                Exit Function
            End If

            If UCase(sData) = "REQUESTID" Then
                Podatnik_Info_B = Json.result.requestId
                Exit Function
            End If

            With Json.result.Subjects
                Select Case VBA.UCase$(sData)
                    Case "NAME": If IsNull(.Name) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .Name
                    Case "NIP": If IsNull(.NIP) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .NIP
                    Case "STATUSVAT": If IsNull(.statusVat) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .statusVat
                    Case "REGON": If IsNull(.regon) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .regon
                    Case "PESEL": If IsNull(.pesel) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .pesel
                    Case "KRS": If IsNull(.krs) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .krs
                    Case "RESIDENCEADDRESS": If IsNull(.residenceAddress) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .residenceAddress
                    Case "WORKINGADDRESS": If IsNull(.workingAddress) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .workingAddress
                    Case "REPRESENTATIVES": If IsNull(.representatives) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .representatives
                    Case "AUTHORIZEDCLERKS": If IsNull(.authorizedClerks) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .authorizedClerks
                    Case "PARTNERS": If IsNull(.partners) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .partners
                    Case "REGISTRATIONLEGALDATE": If IsNull(.registrationLegalDate) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .registrationLegalDate
                    Case "REGISTRATIONDENIALBASIS": If IsNull(.registrationDenialBasis) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .registrationDenialBasis
                    Case "REGISTRATIONDENIALDATE": If IsNull(.registrationDenialDate) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .registrationDenialDate
                    Case "RESTORATIONBASIS": If IsNull(.restorationBasis) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .restorationBasis
                    Case "RESTORATIONDATE": If IsNull(.restorationDate) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .restorationDate
                    Case "REMOVALBASIS": If IsNull(.removalBasis) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .removalBasis
                    Case "REMOVALDATE": If IsNull(.removalDate) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .removalDate
                    Case "ACCOUNTNUMBERS": If IsNull(.accountNumbers) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = "'" & .accountNumbers
                    Case "HASVIRTUALACCOUNTS": If IsNull(.hasVirtualAccounts) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .hasVirtualAccounts
                    Case "REQUESTID": If IsNull(.requestId) Then Podatnik_Info_B = "Null" Else Podatnik_Info_B = .requestId
                End Select
            End With
        Case Else: Podatnik_Info_B = "Błąd nr " & oHttpReq.Status & " " & oHttpReq.StatusText
    End Select

    If VBA.Len(Podatnik_Info_B) = 0 Then Podatnik_Info_B = "Null"
    Set oHttpReq = Nothing

    On Error GoTo 0
    Exit Function

Podatnik_Info_B_Error:

    Podatnik_Info_B = "Nieznany błąd."

End Function
_________________
Nobody's Perfect
ID posta: 376684 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2940 razy
Posty: 9729
Wysłany: 07-11-2019, 10:20   

Auditorius, w trakcie edycji w widoku rozszerzonym użyj przycisku Code.

Możesz też ręcznie wstawiać znaczniki
[code]
Tutaj twój kod
[/code]

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 376692 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe