Si supponga che si implementa il "Digipoort adottare imposte Authorties per l'IVA e l'invio elenco vendite UE per Microsoft Dynamics NAV SP1 NL" nella versione olandese di Microsoft Dynamics NAV 2009. Quando si utilizza l'interfaccia Digipoort, viene visualizzato uno dei seguenti errori di convalida:
Bd SBR_DIGIPOORT-alg:ContactPrefix non può essere vuoto.
Importo ICP non deve essere zero.
Questo problema si verifica nei seguenti prodotti:
-
Versione olandese di Microsoft Dynamics NAV 2009 R2
-
Versione olandese di Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
Risoluzione
Informazioni sull'hotfix
Un hotfix supportato è ora disponibile da Microsoft. Tuttavia, è destinato esclusivamente alla risoluzione del problema descritto in questo articolo. Applicarlo solo ai sistemi in cui si verificano questo problema specifico. Questo hotfix potrebbe essere sottoposto ad ulteriori test. Pertanto, se il problema non causa gravi difficoltà, consiglia di attendere il prossimo service pack di Microsoft Dynamics NAV 2009 o versione successiva di Microsoft Dynamics NAV contenente tale hotfix.Nota: In casi particolari, le spese normalmente addebitate per le chiamate potrebbero essere annullate qualora un aggiornamento del supporto tecnico di Microsoft Dynamics e prodotti correlati di supporto determina che uno specifico aggiornamento risolverà il problema. I costi di supporto normale verranno applicati per eventuali ulteriori domande e problemi che non dovessero rientrare nello specifico aggiornamento in questione.
Informazioni sull'installazione
Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia espressa o implicita. Ciò include, ma non limitato a, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che si abbia familiarità con il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire la procedura di debug. Tecnici del supporto Microsoft consentono di spiegare la funzionalità di una particolare procedura. Tuttavia, essi non modificherà questi esempi per fornire funzionalità aggiuntive o creare procedure atte a soddisfare specifiche esigenze.Nota: Prima di installare questo hotfix, verificare che tutti gli utenti di client di Microsoft Dynamics NAV sono disconnessi dal sistema. Sono inclusi i servizi di Microsoft Dynamics NAV Application Server (NAS). Dovrebbe essere il solo l'utente client connesso quando si implementa questo hotfix.Per implementare questo hotfix, è necessario disporre di una licenza di sviluppatore.È consigliabile che l'account utente nella finestra Login Windows o Login Database assegnare l'ID di ruolo "SUPER". Se l'account utente non può essere assegnato l'ID ruolo "SUPER", è necessario verificare che l'account utente disponga delle autorizzazioni seguenti:
-
Autorizzazione alla modifica dell'oggetto che si desidera modificare.
-
L'autorizzazione di esecuzione per l'oggetto System Object ID 5210 e per il sistema oggetto ID 9015oggetto.
Nota: Non è necessario disporre dei diritti per gli archivi dati a meno che non è necessario eseguire il ripristino di dati.
Modifiche al codice
Nota: Sempre il codice di test consente di correggere in un ambiente controllato prima di applicare le correzioni per i computer di produzione.Per risolvere questo problema, attenersi alla seguente procedura:
-
Modificare il codice del report crea dichiarazione ICP Elec. (11404) come segue:Codice esistente 1
...ElecTaxDeclarationHeader@1000000 : Record 11409; ApplicationManagement@1000001 : Codeunit 1; UseVATRegNo@1000010 : Text[20]; BEGIN IF Status > Status::Created THEN ERROR(StatusErr);...
Codice sostitutivo 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);...
Codice esistente 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*...
Codice di sostituzione 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*...
3 il codice esistente
...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',...
Codice di sostituzione 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',...
4 il codice esistente
...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',...
Codice di sostituzione 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',...
5 il codice esistente
...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',...
Codice di sostituzione 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',...
6 il codice esistente
...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',...
Codice di sostituzione 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',...
7 il codice esistente
...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");...Codice di sostituzione 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");... -
Modificare il codice nelle variabili globali del report crea dichiarazione ICP Elec. (11404) come segue:Codice esistente
...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];...
Codice di sostituzione
...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];...
-
Modificare il codice nella funzione ExtractStreetName nel report crea dichiarazione ICP Elec. (11404) come segue:Codice esistente
...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;...
Codice di sostituzione
...ElecTaxDeclHeader.InsertLine(1,Indentation + 1,'unitRef',unitRef); END; LOCAL PROCEDURE ExtractInitials@1000014(FullName@1000000 : Text[35]) Initials : Text[30]; VAR Pos@1000001 : Integer;...
-
Modificare il codice nella funzione IndexOfFirstNumber nel report crea dichiarazione ICP Elec. (11404) come segue:Codice esistente
...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. }...
Codice di sostituzione
...Surname := COPYSTR(FullName,STRPOS(FullName,' ') + 1); END; BEGIN END. }...
-
Modificare il codice nella funzione ParseAddressAdditionHouseNo della codeunit di gestione del codice postale (11401) come segue:Codice esistente
...EXIT(TRUE); END; BEGIN { <changelog>...
Codice di sostituzione
...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>...
Prerequisiti
Deve avere uno dei seguenti prodotti per applicare questo hotfix:
-
Versione olandese di Microsoft Dynamics NAV 2009 R2
-
Versione olandese di Microsoft Dynamics NAV 2009 SP1
Inoltre, è necessario implementare il "IVA Authorties adottino Digipoort per l'IVA e l'invio elenco vendite UE per Microsoft Dynamics NAV SP1 NL."
Informazioni sulla rimozione
Non è possibile rimuovere questo hotfix.
Stato
Microsoft ha confermato che questo è un problema dei prodotti Microsoft elencati nella sezione "Si applica a".
Nota: Si tratta di un articolo a "Pubblicazione Veloce" creato direttamente all'interno dell'organizzazione di supporto Microsoft. Le informazioni contenute nel presente documento sono fornite così come sono in risposta a problemi urgenti. Per la velocità in rendendo disponibili, i materiali possono includere errori tipografici e possono essere modificati in qualsiasi momento senza preavviso. Per altre considerazioni, vedere Condizioni di utilizzo.