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 systemu
obiekt.
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:
-
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");
... -
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];
... -
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;
... -
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.
}
... -
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.