Dotyczy
Dynamics NAV 2009

Założono wdrożenia "Podatku Authorties przyjęcie Digipoort VAT i przesyłania listy sprzedaży UE dla Microsoft Dynamics NAV SP1 NL" w holenderskiej wersji programu Microsoft Dynamics NAV 2009. Korzystając z interfejsu Digipoort, wyświetlany jest jeden z następujących błędów sprawdzania poprawności:

SBR_DIGIPOORT bd-alg:ContactPrefix nie może być pusta.

Kwota ICP musi być niezerowa.

Ten problem występuje w następujących produktach:

  • Holenderskiej wersji programu Microsoft Dynamics NAV 2009 R2

  • Holenderskiej wersji z dodatkiem Service Pack 1 (SP1) dla systemu Microsoft Dynamics NAV 2009

Rozwiązanie

Informacje o poprawce

Obsługiwana poprawka jest obecnie udostępniana przez firmę Microsoft. Jednak to jest przeznaczona tylko do usunięcia problemu opisanego w tym artykule. Zastosuj ją tylko w systemach, w których występuje ten problem. Ta poprawka może być wciąż w fazie testowania. Jeśli dany system nie jest poważnie narażony na ten problem, firma Microsoft zaleca, aby poczekać na następny dodatek service pack dla systemu Microsoft Dynamics NAV 2009 lub następną wersję systemu Microsoft Dynamics NAV, zawierający tę poprawkę.Uwaga W wyjątkowych przypadkach opłaty, telefonujący do pomocy technicznej mogą zostać anulowane, jeśli pomocy technicznej dla systemu Microsoft Dynamics i produktów powiązanych Określa, że określonej aktualizacji, można rozwiązać swój problem. Koszty obsługi zwykłych zastosuje się do dodatkowych pytań i problemów, których nie można rozwiązać przy użyciu określonej aktualizacji.

Informacje dotyczące instalacji

Firma Microsoft podaje przykłady programowania wyłącznie, bez jakichkolwiek gwarancji wyrażonych wprost lub domyślnie. To obejmuje, ale nie jest ograniczona, ustawowej rękojmi co do przydatności handlowej lub przydatności do określonego celu. W tym artykule założono, że użytkownik zna demonstrowany język programowania oraz narzędzia, które są używane do tworzenia i debugowania procedur. Wykwalifikowani pracownicy pomocy technicznej firmy Microsoft mogą pomóc w wyjaśnieniu, jak działa określona procedura. Nie będą jednak modyfikować tych przykładów ani dodawać funkcjonalności i konstruować procedur w celu zaspokojenia określonych potrzeb użytkownika.Uwaga Przed zainstalowaniem tej poprawki należy zweryfikować, że wszyscy użytkownicy klienta systemu Microsoft Dynamics NAV są wylogowani systemu. Obejmuje to usług systemu Microsoft Dynamics NAV aplikacji serwera (NAS). Powinny być użytkownika klienta, który jest zalogowany w momencie wdrożyć tę poprawkę.Aby wdrożyć tę poprawkę, musi mieć licencję deweloperską.Firma Microsoft zaleca, aby do konta użytkownika w oknie identyfikatorów logowania systemu Windows lub w oknie identyfikatorów logowania bazy danych być przypisany identyfikator roli "SUPER". Jeśli konto użytkownika nie można przypisać Identyfikatora roli "SUPER", należy sprawdzić, czy konto użytkownika ma następujące uprawnienia:

  • Uprawnienie Modyfikacja dla obiektu, który będzie zmieniany.

  • Uprawnienie Execute obiektu 5210 identyfikator obiektu systemu i 9015 identyfikator obiektu systemuobiekt.

Uwaga Nie trzeba mieć prawa do magazynów danych, chyba że konieczne jest przeprowadzenie naprawy danych.

Zmiany kodu

Uwaga Zawsze test poprawki kodu w kontrolowanym środowisku przed zastosowaniem poprawki na komputerach produkcyjnych.Aby rozwiązać ten problem, wykonaj następujące kroki:

  1. Zmień kod w raporcie utworzyć deklaracji ICP Elec. (11404) w następujący sposób:Istniejący kod 1

    ...ElecTaxDeclarationHeader@1000000 : Record 11409;                           ApplicationManagement@1000001 : Codeunit 1;                           UseVATRegNo@1000010 : Text[20];                         BEGIN                           IF Status > Status::Created THEN                             ERROR(StatusErr);...

    Kod zastępczy 1

    ...ElecTaxDeclarationHeader@1000000 : Record 11409;                           ApplicationManagement@1000001 : Codeunit 1;                           UseVATRegNo@1000010 : Text[20];                           StreetName@1000002 : Text[50];                           HouseNo@1000003 : Text[50];                           AdditionHouseNo@1000004 : Text[50];                           ContactPrefix@1000011 : Text[35];                         BEGIN                           IF Status > Status::Created THEN                             ERROR(StatusErr);...

    Istniejący kod 2

    ...// zbrli:xbrl->bd-ob:VATIdentificationNumberNLFiscalEntityDivision                           IF ElecTaxDeclarationSetup."Part of Fiscal Entity" THEN BEGIN                             IF COPYSTR(                                  UPPERCASE(CompanyInfo."VAT Registration No."),                                  1,STRLEN(CompanyInfo."Country/Region Code")) = CompanyInfo."Country/Region Code"                             THEN                               CompanyInfo."VAT Registration No." := DELSTR(CompanyInfo."VAT Registration No.",1,STRLEN(CompanyInfo."Country/Region Code"));                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-ob:VATIdentificationNumberNLFiscalEntityDivision',                               CompanyInfo."VAT Registration No.",'','Msg','');                           END;                           // zbrli:xbrl->bd-alg:Contact*...

    Kod zastępczy 2

    ...// zbrli:xbrl->bd-ob:VATIdentificationNumberNLFiscalEntityDivision                           IF ElecTaxDeclarationSetup."Part of Fiscal Entity" THEN BEGIN                             IF COPYSTR(                                  UPPERCASE(CompanyInfo."Fiscal Entity No."),                                  1,STRLEN(CompanyInfo."Country/Region Code")) = CompanyInfo."Country/Region Code"                             THEN                               CompanyInfo."Fiscal Entity No." := DELSTR(CompanyInfo."Fiscal Entity No.",1,STRLEN(CompanyInfo."Country/Region Code"));                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-ob:VATIdentificationNumberNLFiscalEntityDivision',                               CompanyInfo."Fiscal Entity No.",'','Msg','');                           END;                           // zbrli:xbrl->bd-alg:Contact*...

    Istniejący kod 3

    ...IF ElecTaxDeclarationSetup."ICP Contact Type" = ElecTaxDeclarationSetup."ICP Contact Type"::"Tax Payer" THEN BEGIN                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactInitials',                               ExtractInitials(ElecTaxDeclarationSetup."Tax Payer Contact Name"),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactPrefix',                               ExtractNamePrefix(ElecTaxDeclarationSetup."Tax Payer Contact Name"),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactSurname',                               ExtractSurname(ElecTaxDeclarationSetup."Tax Payer Contact Name"),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactTelephoneNumber',...

    Kod zastępczy 3

    ...IF ElecTaxDeclarationSetup."ICP Contact Type" = ElecTaxDeclarationSetup."ICP Contact Type"::"Tax Payer" THEN BEGIN                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactInitials',                               ExtractInitials(ElecTaxDeclarationSetup."Tax Payer Contact Name"),'','Msg','');                             ContactPrefix := ExtractNamePrefix(ElecTaxDeclarationSetup."Tax Payer Contact Name");                             IF ContactPrefix <> '' THEN                               InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactPrefix',ContactPrefix,'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactSurname',                               ExtractSurname(ElecTaxDeclarationSetup."Tax Payer Contact Name"),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactTelephoneNumber',...

    Istniejący kod 4

    ...ExtractSurname(ElecTaxDeclarationSetup."Tax Payer Contact Name"),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactTelephoneNumber',                               ElecTaxDeclarationSetup."Tax Payer Contact Phone No.",'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactStreetNameNL',                               ExtractStreetName(CompanyInfo.Address),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactHouseNumberNL',                               ExtractStreetNo(CompanyInfo.Address),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactPostalCodeNL',                               DELCHR(CompanyInfo."Post Code",'=',' '),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactPlaceOfResidenceNL',...

    Kod zastępczy 4

    ...ExtractSurname(ElecTaxDeclarationSetup."Tax Payer Contact Name"),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactTelephoneNumber',                               ElecTaxDeclarationSetup."Tax Payer Contact Phone No.",'','Msg','');                             PostCodeMgt.ParseAddressAdditionHouseNo(StreetName,HouseNo,AdditionHouseNo,CompanyInfo.Address);                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactStreetNameNL',StreetName,'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactHouseNumberNL',HouseNo,'','Msg','');                             IF AdditionHouseNo <> '' THEN                               InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactHouseNumberAddition',AdditionHouseNo,'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactPostalCodeNL',                               DELCHR(CompanyInfo."Post Code",'=',' '),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactPlaceOfResidenceNL',...

    Istniejący kod 5

    ...END ELSE BEGIN                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactInitials',                               ExtractInitials(ElecTaxDeclarationSetup."Agent Contact Name"),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactPrefix',                               ExtractNamePrefix(ElecTaxDeclarationSetup."Agent Contact Name"),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactSurname',                               ExtractSurname(ElecTaxDeclarationSetup."Agent Contact Name"),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactTelephoneNumber',...

    Kod zastępczy 5

    ...END ELSE BEGIN                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactInitials',                               ExtractInitials(ElecTaxDeclarationSetup."Agent Contact Name"),'','Msg','');                             ContactPrefix := ExtractNamePrefix(ElecTaxDeclarationSetup."Agent Contact Name");                             IF ContactPrefix <> '' THEN                               InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactPrefix',ContactPrefix,'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactSurname',                               ExtractSurname(ElecTaxDeclarationSetup."Agent Contact Name"),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactTelephoneNumber',...

    Istniejący kod 6

    ...ElecTaxDeclarationSetup."Agent Contact Phone No.",'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:TaxConsultantNumber',                               ElecTaxDeclarationSetup."Agent Contact ID",'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactStreetNameNL',                               ExtractStreetName(ElecTaxDeclarationSetup."Agent Contact Address"),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactHouseNumberNL',                               ExtractStreetNo(ElecTaxDeclarationSetup."Agent Contact Address"),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactPostalCodeNL',                               DELCHR(ElecTaxDeclarationSetup."Agent Contact Post Code",'=',' '),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactPlaceOfResidenceNL',...

    Kod zastępczy 6

    ...ElecTaxDeclarationSetup."Agent Contact Phone No.",'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:TaxConsultantNumber',                               ElecTaxDeclarationSetup."Agent Contact ID",'','Msg','');                             PostCodeMgt.ParseAddressAdditionHouseNo(                               StreetName,HouseNo,AdditionHouseNo,ElecTaxDeclarationSetup."Agent Contact Address");                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactStreetNameNL',StreetName,'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactHouseNumberNL',HouseNo,'','Msg','');                             IF AdditionHouseNo <> '' THEN                               InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactHouseNumberAddition',AdditionHouseNo,'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactPostalCodeNL',                               DELCHR(ElecTaxDeclarationSetup."Agent Contact Post Code",'=',' '),'','Msg','');                             InsertDataLine("Elec. Tax Declaration Header",1,'bd-alg:ContactPlaceOfResidenceNL',...

    Istniejący kod 7

    ...SETRANGE("VAT Registration No.", "VAT Registration No.");                           CALCSUMS(Base);                           "Elec. Tax Declaration Header".InsertLine(0,1,CurrentType,'');                           InsertDataLine("Elec. Tax Declaration Header",2,'bd-ob:CountryCodeISO-EC',                             COPYSTR("Country/Region Code",1,2),'','Msg','');                           IF COPYSTR(UPPERCASE("VAT Registration No."),1,STRLEN("Country/Region Code")) = "Country/Region Code" THEN                             "VAT Registration No." := DELSTR("VAT Registration No.",1,STRLEN("Country/Region Code"));                           InsertDataLine("Elec. Tax Declaration Header",2,'bd-ob:SuppliesAmount',                             FORMAT(-Base,0,'<Sign><Integer>'),'INF','Msg','EUR');                           InsertDataLine("Elec. Tax Declaration Header",2,'bd-ob:VATIdentificationNumberNational',                             "VAT Registration No.",'','Msg','');                           FIND('+');                           SETRANGE("Country/Region Code");...

    Kod zastępczy 7

    ...SETRANGE("VAT Registration No.", "VAT Registration No.");                           CALCSUMS(Base);                           IF ABS(Base) >= 1 THEN BEGIN                             "Elec. Tax Declaration Header".InsertLine(0,1,CurrentType,'');                             InsertDataLine("Elec. Tax Declaration Header",2,'bd-ob:CountryCodeISO-EC',                               COPYSTR("Country/Region Code",1,2),'','Msg','');                             IF COPYSTR(UPPERCASE("VAT Registration No."),1,STRLEN("Country/Region Code")) = "Country/Region Code" THEN                               "VAT Registration No." := DELSTR("VAT Registration No.",1,STRLEN("Country/Region Code"));                             CASE Integer.Number OF                               0,2:                                 InsertDataLine("Elec. Tax Declaration Header",2,'bd-ob:SuppliesAmount',                                   FORMAT(-Base,0,'<Sign><Integer>'),'INF','Msg','EUR');                               1:                                 InsertDataLine("Elec. Tax Declaration Header",2,'bd-ob:ServicesAmount',                                   FORMAT(-Base,0,'<Sign><Integer>'),'INF','Msg','EUR');                             END;                             InsertDataLine("Elec. Tax Declaration Header",2,'bd-ob:VATIdentificationNumberNational',                               "VAT Registration No.",'','Msg','');                           END;                           FIND('+');                           SETRANGE("Country/Region Code");...
  2. Zmień kod w zmiennych globalnych w raporcie utworzyć deklaracji ICP Elec. (11404) w następujący sposób:Istniejący kod

    ...CompanyInfo@1000003 : Record 79;      ElecTaxDeclarationSetup@1000001 : Record 11408;      StatusErr@1000005 : TextConst 'ENU=The report status need to have value " " or Created to create the report content.';      CurrentType@1000000 : Text[60];    LOCAL PROCEDURE GetStrippedAppVersion@1101100000(AppVersion@1101100001 : Text[250]) Res : Text[250];...

    Kod zastępczy

    ...CompanyInfo@1000003 : Record 79;      ElecTaxDeclarationSetup@1000001 : Record 11408;      StatusErr@1000005 : TextConst 'ENU=The report status need to have value " " or Created to create the report content.';      PostCodeMgt@1000002 : Codeunit 11401;      CurrentType@1000000 : Text[60];    LOCAL PROCEDURE GetStrippedAppVersion@1101100000(AppVersion@1101100001 : Text[250]) Res : Text[250];...
  3. Zmień kod w funkcji ExtractStreetName w raporcie utworzyć deklaracji ICP Elec. (11404) w następujący sposób:Istniejący kod

    ...ElecTaxDeclHeader.InsertLine(1,Indentation + 1,'unitRef',unitRef);    END;    LOCAL PROCEDURE ExtractStreetName@1000013(Address@1000000 : Text[50]) : Text[50];    BEGIN      IF IndexOfFirstNumber(Address) > 1 THEN        EXIT(COPYSTR(Address,1,IndexOfFirstNumber(Address) - 2));      EXIT(Address);    END;    LOCAL PROCEDURE ExtractStreetNo@1000012(Address@1000000 : Text[50]) : Text[50];    BEGIN      IF IndexOfFirstNumber(Address) > 0 THEN        EXIT(COPYSTR(Address,IndexOfFirstNumber(Address)));      EXIT('');    END;    LOCAL PROCEDURE ExtractInitials@1000014(FullName@1000000 : Text[35]) Initials : Text[30];    VAR      Pos@1000001 : Integer;...

    Kod zastępczy

    ...ElecTaxDeclHeader.InsertLine(1,Indentation + 1,'unitRef',unitRef);    END;    LOCAL PROCEDURE ExtractInitials@1000014(FullName@1000000 : Text[35]) Initials : Text[30];    VAR      Pos@1000001 : Integer;...
  4. Zmień kod w funkcji IndexOfFirstNumber w raporcie utworzyć deklaracji ICP Elec. (11404) w następujący sposób:Istniejący kod

    ...Surname := COPYSTR(FullName,STRPOS(FullName,' ') + 1);    END;    LOCAL PROCEDURE IndexOfFirstNumber@1000017(Str@1000000 : Text[50]) : Integer;    VAR      Index@1000001 : Integer;    BEGIN      FOR Index := 1 TO STRLEN(Str) DO BEGIN        IF Str[Index] IN ['0'..'9'] THEN          EXIT(Index);      END;      EXIT(0);    END;    BEGIN    END.  }...

    Kod zastępczy

    ...Surname := COPYSTR(FullName,STRPOS(FullName,' ') + 1);    END;    BEGIN    END.  }...
  5. Zmień kod w funkcji ParseAddressAdditionHouseNo w codeunit zarządzania kod pocztowy (11401) w następujący sposób:Istniejący kod

    ...EXIT(TRUE);    END;    BEGIN    {      <changelog>...

    Kod zastępczy

    ...EXIT(TRUE);    END;    PROCEDURE ParseAddressAdditionHouseNo@1000003(VAR StreetName@1000001 : Text[50];VAR HouseNo@1000002 : Text[50];VAR AdditionHouseNo@1000003 : Text[50];Address@1000000 : Text[50]);    VAR      HouseString@1000004 : Text[50];    BEGIN      StreetName := '';      HouseNo := '';      AdditionHouseNo := '';      IF Address = '' THEN        EXIT;      // Suppose that house string is a last word in the Address      HouseString := GetHouseString(Address);      IF HouseString = '' THEN BEGIN        StreetName := Address;        EXIT;      END;      // The last word is a House string with possible AdditionHouseNo information. All before last word is a StreetName.      StreetName := COPYSTR(Address,1,STRLEN(Address) - STRLEN(HouseString) - 1);      HouseNo := GetHouseNoFromHouseString(HouseString);      AdditionHouseNo := HouseString;    END;    LOCAL PROCEDURE GetHouseString@1000002(Address@1000000 : Text[50]) : Text[50];    VAR      i@1000003 : Integer;    BEGIN      // If there's only one word then return empty HouseString      IF STRPOS(Address,' ') = 0 THEN        EXIT('');      //Lookup from end of string first space after a number      // Find the last word: revert address string, cut first word, revert result      RevertString(Address);      // Delete Spaces at beginning      Address := DELCHR(Address,'<');      i := 1;      // Find first number i ==> position of first number      WHILE  (NOT (Address[i] IN ['0'..'9']) AND (i < STRLEN(Address))) DO        i += 1;      IF ((i = STRLEN(Address)) AND NOT (Address[i] IN ['0'..'9'])) THEN //No number found      EXIT('');      // look further until number stops      WHILE ((Address[i] IN ['0'..'9']) AND (i < STRLEN(Address))) DO        i+= 1;      Address := DELCHR(COPYSTR(Address,1, i-1), '<=>'); // remove all spaces      RevertString(Address);      EXIT(Address);    END;    LOCAL PROCEDURE GetHouseNoFromHouseString@1000000(VAR HouseString@1000000 : Text[50]) HouseNo : Text[50];    VAR      Pos@1000002 : Integer;    BEGIN      Pos := 1;      WHILE HouseString[Pos] IN ['0'..'9'] DO        Pos += 1;      HouseNo := COPYSTR(HouseString,1,Pos - 1);      // remove HouseNo from the HouseString including special separating char if such exist      IF HouseString[Pos] IN ['/','\','-'] THEN        Pos += 1;      HouseString := COPYSTR(HouseString,Pos);    END;    LOCAL PROCEDURE RevertString@1170000000(VAR String@1170000000 : Text[50]);    VAR      StringCopy@1170000001 : Text[50];      i@1170000002 : Integer;      Length@1170000003 : Integer;    BEGIN      StringCopy := String;      Length := STRLEN(String);      FOR i := 1 TO Length DO        String[i] := StringCopy[Length - i + 1];    END;    BEGIN    {      <changelog>...

Wymagania wstępne

Musi mieć jedną z następujących produktów, w celu zastosowania tej poprawki:

  • Holenderskiej wersji programu Microsoft Dynamics NAV 2009 R2

  • Holenderskiej wersji dodatku SP1 dla programu Microsoft Dynamics NAV 2009

Ponadto musisz zaimplementować "Digipoort przyjąć Authorties podatku VAT i przesyłania listy sprzedaży UE dla NL dodatku SP1 dla systemu Microsoft Dynamics NAV."

Informacje dotyczące usuwania

Nie można usunąć tej poprawki.

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.

Uwaga Jest to artykuł " szybkiej publikacji" tworzony bezpośrednio przez organizację pomocy technicznej firmy Microsoft. Informacje zawarte w niniejszym dokumencie są dostarczane jako odpowiedź na pojawiające się problemy. W wyniku przyspieszonego udostępnienia, materiały te mogą zawierać błędy typograficzne i mogą być zmieniane w dowolnym czasie bez uprzedzenia. Zobacz Warunki użytkowaniadla innych względów.

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.