Suponha que implemente "Imposto Authorties adoptar Digipoort do IVA e submissão de lista de vendas UE para Microsoft Dynamics NAV SP1 NL" na versão neerlandesa do Microsoft Dynamics NAV 2009. Quando utiliza a interface de Digipoort, receberá um dos seguintes erros de validação:
Bd SBR_DIGIPOORT-alg:ContactPrefix não pode estar vazio.
ICP montante não pode ser zero.
Este problema ocorre nos seguintes produtos:
-
A versão holandesa do Microsoft Dynamics NAV 2009 R2
-
A versão holandesa do Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
Resolução
Informações sobre correção
Agora tem uma correcção suportada disponível na Microsoft. Contudo, destina-se apenas a corrigir o problema descrito neste artigo. Aplique-a apenas em sistemas que tenham este problema específico. Esta correcção poderá ser submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, recomendamos que aguarde o próximo service pack do Microsoft Dynamics NAV 2009 ou a próxima versão do Microsoft Dynamics NAV que contenha esta correcção.Nota Em casos especiais, os custos normalmente inerentes para suporte chamadas poderão ser anuladas se um técnico de suporte técnico do Microsoft Dynamics e produtos relacionados determina que uma actualização específica resolverá o problema. Os custos de normais do suporte serão aplicados a questões de suporte adicionais e problemas que não se enquadrem na atualização específica em questão.
Informações de instalação
A Microsoft fornece exemplos de programação apenas a título ilustrativo, sem garantia expressa ou implícita. Isto inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação que está a ser demonstrada e com as ferramentas que são utilizadas para criar e depurar procedimentos. Técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento. No entanto, não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador.Nota Antes de instalar esta correcção, certifique-se de que todos os utilizadores de cliente do Microsoft Dynamics NAV são registados no sistema. Isto inclui os serviços de servidor de aplicações (NAS) do Microsoft Dynamics NAV. Deve ser o único usuário do cliente que tem sessão iniciada quando implementar esta correcção.Para implementar esta correcção, tem de ter uma licença de desenvolvedor.Recomendamos que a conta de utilizador na janela Logins do Windows ou na janela Logins de base de dados seja atribuída a ID de função "SUPER". Se a conta de utilizador não é possível atribuir o ID de função "SUPER", tem de verificar que a conta de utilizador tem as seguintes permissões:
-
A permissão Modificar para o objecto que estará a alterar.
-
A permissão executar para o objecto 5210 de ID de objecto de sistema e para o 9015 de ID de objecto de sistemaobjecto.
Nota Não tem de ter direitos para os arquivos de dados, excepto se tiver de efectuar a reparação de dados.
Alterações de código
Nota Sempre o código de ensaio corrige num ambiente controlado antes de aplicar as correcções para os computadores de produção.Para resolver este problema, siga estes passos:
-
Altere o código do relatório de declaração de ICP Elec. criar (11404) do seguinte modo:Código existente 1
...ElecTaxDeclarationHeader@1000000 : Record 11409; ApplicationManagement@1000001 : Codeunit 1; UseVATRegNo@1000010 : Text[20]; BEGIN IF Status > Status::Created THEN ERROR(StatusErr);...
Código de substituição 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);...
Código existente 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*...
Código de substituição 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*...
Código existente 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',...
Código de substituição 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',...
Código existente 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',...
Código de substituição 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',...
Código existente 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',...
Código de substituição 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',...
Código existente 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',...
Código de substituição 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',...
Código existente 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");...Código de substituição 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");... -
Altere o código na variáveis globais no relatório de declaração de ICP Elec. criar (11404) do seguinte modo:Código existente
...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];...
Código de substituição
...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];...
-
Altere o código na função ExtractStreetName no relatório de declaração de ICP Elec. criar (11404) do seguinte modo:Código existente
...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;...
Código de substituição
...ElecTaxDeclHeader.InsertLine(1,Indentation + 1,'unitRef',unitRef); END; LOCAL PROCEDURE ExtractInitials@1000014(FullName@1000000 : Text[35]) Initials : Text[30]; VAR Pos@1000001 : Integer;...
-
Altere o código na função IndexOfFirstNumber no relatório de declaração de ICP Elec. criar (11404) do seguinte modo:Código existente
...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. }...
Código de substituição
...Surname := COPYSTR(FullName,STRPOS(FullName,' ') + 1); END; BEGIN END. }...
-
Altere o código na função ParseAddressAdditionHouseNo na codeunit lançar a gestão de código (11401) do seguinte modo:Código existente
...EXIT(TRUE); END; BEGIN { <changelog>...
Código de substituição
...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>...
Pré-requisitos
Tem de ter um dos seguintes produtos instalado para aplicar esta correcção:
-
A versão holandesa do Microsoft Dynamics NAV 2009 R2
-
A versão holandesa do Microsoft Dynamics NAV 2009 SP1
Além disso, tem de implementar o "imposto Authorties adoptar Digipoort do IVA e submissão de lista de vendas UE para Microsoft Dynamics NAV SP1 NL."
Informações de remoção
Não é possível remover esta correcção.
Estado
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".
Nota Este é um artigo "Publicação rápida" criado diretamente a partir da organização de suporte da Microsoft. As informações contidas neste documento são fornecidas como-se em resposta a questões emergentes. Como resultado da urgência na sua disponibilização, os materiais podem incluir erros tipográficos e podem ser revistos em qualquer altura sem aviso prévio. Para outras considerações, consulte os Termos de utilização.