Si applica a
Dynamics NAV 2009

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:

  1. 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");...
  2. 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];...
  3. 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;...
  4. 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.  }...
  5. 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.

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.