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: 75871 Skopiuj do schowka Biała Lista VAT - problem z połączeniem
Autor Wiadomość
marzatela 
Excel Expert



Zaproszone osoby: 328
Pomogła: 470 razy
Posty: 2695
Wysłany: 28-05-2024, 20:14   Biała Lista VAT - problem z połączeniem

Kontynuując mój własny wątek:
Biała lista podatników VAT
udało mi się ładnie stworzyć plik Excela.który naprawdę ładnie działa.
Niestety, u mnie.
Na docelowym komputerze firmy, dla której jest przeznaczony - nie chce. Zrobiłam takie małe makro testowe (plik w załączeniu) i tam uruchomione - pokazuje w wyniku działania Blad 3, więc już wiem, że błąd pojawia się w jednej z linii:
Kod:
 Select Case JF
            Case 1
                .setRequestHeader "User-Agent", "Mozilla/5.0" ' Bardziej ogólna wartość
            Case 2
                .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
            Case 3
                .setRequestHeader "User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)"
            Case 4
                .setRequestHeader "User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
        End Select
        .Send
        .WaitForResponse

Niestety, nie mam bezpośredniego dostępu do tamtego komputera, więc szukam trochę po omacku. I tak rozbuduję i wyślę do przetestowania makro rozszerzone o numer błędu, ale i tak problem pozostanie. Co można z tym zrobić? Gdzie szukać przyczyny? Referencje? Ustawienia komputera?
Sytuację utrudnia fakt, że tamten docelowy komp jest w firmie będącej oddziałem międzynarodowej korporacji, pakiet Office niemieckojęzyczny.
Wszystkie wartości w komórkach b2 do e2 - Blad 3. [/code]

test.xlsm
Pobierz Plik ściągnięto 12 raz(y) 20.42 KB

_________________
marzatela

http://www.szultaset.pl
ID posta: 435552 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2021
Pomógł: 2638 razy
Posty: 8805
Wysłany: 28-05-2024, 21:04   

marzatela, błąd na pewno nie wynika z konstrukcji nagłówka "User-Agent".
Nagłówek ten możemy pominąć.

Nie napisałaś jaki błąd wywala, więc ciężko będzie szukać przyczyn ?
Zobacz do załącznika.
Działa bez nagłówka "User-Agent", dodałem parser JSON-a, dzięki temu obsługujemy dwa możliwe błędy, które możemy otrzymać w response z serwera.

Odnośnie problemu to nie wiem czego szukać.
Kod jest bardzo prosty i powinien działać.

Spróbujmy zmienić bibliotekę Microsoftu z "WinHTTP" na "WinINet", czyli zamień WinHttp.WinHttpRequest.5.1 na Msxml2.XMLHTTP.6.0 lub Microsoft.xmlHttp.

Jak to nie zadziała, to sprawdź czy czasem wyłączenie ściany antywirusa nie pomoże.
Miałem kiedyś tak że właśnie antywir mi blokował wyjście, tylko teraz nie pamiętam na jakim to było obiekcie.

statusVat.xlsm
Pobierz Plik ściągnięto 12 raz(y) 55.48 KB

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

FB
ID posta: 435553 Skopiuj do schowka
 
 
Rafał B. 
ExcelSpec



Wersja: Win Office 2021
Pomógł: 82 razy
Posty: 482
Wysłany: 28-05-2024, 21:07   

Po co takie fikołki z `On Error GoTo Blad1/2/3/4`zamiast przechwycenia prawdziwego błędu? Testowanie w jakimś SELECT CASE różnych nagłówków User-Agent też zaciemnia sprawę debugowania, przecież różnica pojawi się ewentualnie na etapie odpowiedzi. Wystarczy podać jeden działający, jeśli już jest konieczny. Natomiast ze szklanej kuli, to na 90% wywala się na .Send.



PS
jeśli to nie firewall jak sugeruje kol. Marecki, to zmień dodatkowo kod: po pierwsze bez With oHttpReq, tylko w kazdej metodzie odwołuj się bezpośrednio do zmiennej (zdarzyło mi się, że przy late-binding gubiło referencję), po drugie z ciekawości możesz podać jakieś sekundowe zwłoki czasowe po linii oHttpReq.Open, może coś pomoże, chociaż to są bardzo brzegowe i rzadkie przypadki.
_________________
Częstym błędem jest zakładanie, że autorzy niezrozumiałego kodu będą w jakiś sposób potrafili wyrazić się jasno i klarownie w komentarzach. Kevlin Henney
Ostatnio zmieniony przez Rafał B. 28-05-2024, 21:38, w całości zmieniany 1 raz  
ID posta: 435554 Skopiuj do schowka
 
 
marzatela 
Excel Expert



Zaproszone osoby: 328
Pomogła: 470 razy
Posty: 2695
Wysłany: 28-05-2024, 21:38   

Marecki, mało znam się na ściąganiu danych z netu, więc na wszelki wypadek chciałam się zabezpieczyć od każdej strony.
Nie lubię też nie widzieć tego, co się dzieje, a tu działam po omacku. Jutro wyślę dalej do testów.
Odezwę się jeszcze na pewno.
_________________
marzatela

http://www.szultaset.pl
ID posta: 435555 Skopiuj do schowka
 
 
marzatela 
Excel Expert



Zaproszone osoby: 328
Pomogła: 470 razy
Posty: 2695
Wysłany: 28-05-2024, 21:44   

Rafał B., wiem, że to fikołki, ale chciałam mniej więcej wiedzieć, w którym to miejscu. W dodatku robiłam to w pośpiechu, dziś o świcie, a cały dzień byłam poza kompem. Zdecydowanie jednak zrobiłam wielki bład, że nie dopisałam tam Err.Number i Err.Desciption. Na jutro już mam rozszerzoną wersję z uwzględnieniem tego. Choć zaraz zajrzę do rozwiązania Marecki, to też wyślę.
Generalnie to test samej funkcji - do szybkiego sprawdzenia, żeby nie robić testów na całym dużym projekcie, rozbudowanym (choć w innym zakresie) - to akurat wiem, że wykłada się w tej funkcji.
_________________
marzatela

http://www.szultaset.pl
ID posta: 435556 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2021
Pomógł: 2638 razy
Posty: 8805
Wysłany: 28-05-2024, 22:04   

To tak na szybko:
Kod:
Option Explicit

Public oHttpReq As Object

Sub test()
    Dim requestTypes As Variant

    Dim i As Byte
    Dim sOut As Variant

    For i = 0 To 3
        requestTypes = Array("WinHttp.WinHttpRequest.5.1", "Msxml2.serverXMLHTTP.6.0", "Msxml2.XMLHTTP.6.0", "Microsoft.xmlHttp")
        Set oHttpReq = CreateObject(requestTypes(i))

        sOut = Podatnik_Info("1111111111")
        Debug.Print requestTypes(i); vbNewLine; "sOut: " & sOut & vbNewLine
        Set oHttpReq = Nothing
    Next i

End Sub

Function Podatnik_Info(NIP As String) As String

    On Error GoTo Podatnik_Info_Error

    With oHttpReq
        .Open "GET", "https://wl-api.mf.gov.pl/api/search/nip/" & NIP & "?date=" & Format(Now, "yyyy-mm-dd"), False
        .Send
        Podatnik_Info = .responsetext
    End With

    On Error GoTo 0
    Exit Function

Podatnik_Info_Error:

    Podatnik_Info = "Error " & Err.Number & " " & Err.Description & " in procedure Podatnik_Info"

End Function
podaj co wypisało w Immediate.
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

FB
ID posta: 435557 Skopiuj do schowka
 
 
marzatela 
Excel Expert



Zaproszone osoby: 328
Pomogła: 470 razy
Posty: 2695
Wysłany: 29-05-2024, 16:14   

Marecki, wyszło coś takiego:
WinHttp.WinHttpRequest.5.1
"sOut: Error -2147012894 Limit czasu operacji został przekroczony.
in procedure Podatnik_Info"
Msxml2.serverXMLHTTP.6.0
"sOut: Error -2147012894 Limit czasu operacji został przekroczony.
in procedure Podatnik_Info"
Msxml2.XMLHTTP.6.0
sOut: {"result":{"subject":null,"requestId":"iL38o-8nf3064","requestDateTime":"29-05-2024 13:33:40"}}
Microsoft.xmlHttp
sOut: {"result":{"subject":null,"requestId":"KRzom-8nf3064","requestDateTime":"29-05-2024 13:33:40"}}
_________________
marzatela

http://www.szultaset.pl
ID posta: 435572 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2021
Pomógł: 2638 razy
Posty: 8805
Wysłany: 29-05-2024, 17:10   

O, i super.
Wiemy już żeby omijać bibliotekę WinHttp.
Cytat:
Error -2147012894 Limit czasu operacji został przekroczony.
Mona by było próbować naprawić przez zwiększenie limitu czasu dla żądań HTTP, czyli dodając do kodu
Kod:
.SetTimeouts 30000, 30000, 30000, 30000
, ale przypuszczam że to nie pomoże, bo przyczyna najprawdopodobniej leży w firewall-u.
WinHttp działa na niższym poziomie systemowym, zapory sieciowe mogą traktować jego ruch jako potencjalnie niebezpieczny i go blokować.

Rozwiązanie zatem będzie wykorzystanie obiektu "MSXML2.ServerXMLHTTP.6.0" z biblioteki "WinINet".
marzatela, napisz jeszcze czy z adresu
Cytat:
https://wl-api.mf.gov.pl/api/search/nip/......
wyciągasz tylko statusVat, czy coś więcej, bo w Twoim załączniku widziałem komentarz pod funkcją
Cytat:
'Firma_lub_Bank: wpisujemy Firma, Bank lub Status
??
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

FB
ID posta: 435575 Skopiuj do schowka
 
 
marzatela 
Excel Expert



Zaproszone osoby: 328
Pomogła: 470 razy
Posty: 2695
Wysłany: 29-05-2024, 17:14   

Tylko Status, reszta mi niepotrzebna.
_________________
marzatela

http://www.szultaset.pl
ID posta: 435576 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2021
Pomógł: 2638 razy
Posty: 8805
Wysłany: 29-05-2024, 17:56   

Tak bym to widział:
Kod:
Option Explicit

Sub Test()
    Dim sOut As String
    MsgBox Podatnik_Info("8822032556")
    MsgBox Podatnik_Info("")
    MsgBox Podatnik_Info("1111111111")
    MsgBox Podatnik_Info("1111111112")
End Sub

Function Podatnik_Info(NIP As String) As String
    Dim oHttpReq As Object
    Dim Resp As String
    Dim sStatus As String

    Set oHttpReq = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    With oHttpReq
        .Open "Get", "https://wl-api.mf.gov.pl/api/search/nip/" & NIP & "?date=" & Format(Now, "yyyy-mm-dd"), False
        .Send
        .WaitForResponse
        Resp = .responsetext
       
        If .Status <> 200 Then
            Podatnik_Info = CheckNipResponse(Resp)
            Set oHttpReq = Nothing
            Exit Function
        End If

    End With

    If Resp Like "*""subject"":null,*" Then
    Podatnik_Info = "Brak podatnika"
    Else
        Podatnik_Info = VBA.Split(Resp, """statusVat"":""")(1)
    Podatnik_Info = VBA.Split(Podatnik_Info, """")(0)
End If

    Set oHttpReq = Nothing

End Function

Function CheckNipResponse(responseCode As String)

    responseCode = VBA.Split(responseCode, "code"":""")(1)
    responseCode = VBA.Split(responseCode, """")(0)

    Select Case responseCode
    Case "WL-112"
        CheckNipResponse = "Pole 'NIP' nie może być puste. Błąd WL-112"
    Case "WL-113"
        CheckNipResponse = "Pole 'NIP' ma nieprawidłową długość. Wymagane 10 znaków. Błąd WL-113"
    Case "WL-114"
        CheckNipResponse = "Pole 'NIP' zawiera niedozwolone znaki. Wymagane tylko cyfry. Błąd WL-114"
    Case "WL-115"
        CheckNipResponse = "Nieprawidłowy NIP. Błąd WL-115"
    Case "WL-190"
        CheckNipResponse = "Niepoprawne żądanie. Błąd WL-190"
    Case "WL-195"
        CheckNipResponse = "Zaktualizowaliśmy bazę danych. Wykonaj ponownie zapytanie, aby otrzymać aktualne dane. Informacja WL-195"
    Case "WL-196"
        CheckNipResponse = "Trwa aktualizacja bazy danych. Spróbuj ponownie później. Informacja WL-196"
    Case Else
        CheckNipResponse = "Nieznany błąd"
    End Select
End Function
Testuj.

Aaaa,dobrze by był przed wysłaniem zapytania o status zwalidowąć NIP.
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

FB
ID posta: 435577 Skopiuj do schowka
 
 
marzatela 
Excel Expert



Zaproszone osoby: 328
Pomogła: 470 razy
Posty: 2695
Wysłany: 03-06-2024, 11:40   

Marecki, u mnie oczywiście pięknie wszystko działa, a na docelowym komputerze - screen w załączeniu.
Internet tam jest, makra włączone - jakie ustawienia sprawdzić/zmienić?

Uwaga dodatkowa: na tamtym docelowym kompie, po przełączeniu na internet z komórki, pięknie poszło. Czy mylę się, że to mogą być ustawienia serwera proxy? Jak rozmawiać z informatykami?

ny1.jpg
Plik ściągnięto 13 raz(y) 20.32 KB

_________________
marzatela

http://www.szultaset.pl
ID posta: 435639 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2021
Pomógł: 2638 razy
Posty: 8805
Wysłany: 03-06-2024, 19:39   

marzatela, spróbuj dodać po .get open
Kod:
setTimeouts 5000, 5000, 5000, 5000]
mizerna szansa, ale jest.
Jeśli firma łączy się przez proxy to sprawdź tak:
Kod:
With oHttpReq
    .setProxy 2, "proxy_address:proxy_port" ' Ustaw odpowiednie adres i port proxy
    .Open "Get", "https://wl-api.mf.gov.pl/api/search/nip/" & NIP & "?date=" & Format(Now, "yyyy-mm-dd"), False
    .Send
    .WaitForResponse
    Resp = .responsetext
End With
to tak pisane z palca , bo miem mam dostępu do kompa. W środę będę dostępny.
A informatykom możesz pokazać samą funkcję.
Nawet jak programują w innym języku to załapią o co chodzi.powiedz żeby sprawdzili co blokuje ruch sieciowy i czy będą mogli udostępnić ci pobieranie z tego URL. tzn, nie Ci, tylko pracownikom firmy, lub konkretnego komputera.
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

FB
ID posta: 435657 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2021
Pomógł: 2638 razy
Posty: 8805
Wysłany: 05-06-2024, 14:13   

Jeszcze możemy sprawdzić port 443, czy jest otwarty, czy zamknięty.
Wpisz w PowerShell
Kod:
Test-NetConnection -ComputerName wl-api.mf.gov.pl -Port 443
Jeśli TcpTestSucceeded ma wartość True, oznacza to, że port 443 jest otwarty i dostępny.
Jeśli wartość jest False, port może być zablokowany i wtedy trzeba się kłaniać informatykom.
Nic więcej chyba nie wydumam.
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

FB
ID posta: 435729 Skopiuj do schowka
 
 
marzatela 
Excel Expert



Zaproszone osoby: 328
Pomogła: 470 razy
Posty: 2695
Wysłany: 05-06-2024, 16:13   

Dzięki Marecki, wysłałam. Czekam na info zwrotne.
_________________
marzatela

http://www.szultaset.pl
ID posta: 435733 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.wip.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