Sintomas
A versão em espanhol do Microsoft Dynamics NAV 2009, suponha que você tenha duas faturas individuais diferentes (mesmo cliente ou fornecedor ou outro). Cada uma das duas faturas usa apenas uma linha, mas diferente % de IVA (uma fatura 21% e os 10% por exemplo). Você lança essas notas fiscais através do envio de documentos para Cartera (faturas ou contas a Cartera) e adicionar essas duas faturas individuais em uma ordem de pagamento ou grupo da lista. Se você liquida apenas uma das linhas individualmente, o pagamento é exportado como "Z" na declaração 340. No entanto, quando você liquida os dois documentos, dois pagamentos são exportados como "2", que está errada, pois as faturas iniciais não foram do tipo "C" (linhas diferentes com diferente % de IVA), mas alguns individualmente (operação Normal é definida como "Em branco"). Siga as etapas na seção alterações de código para resolver o problema. Esse problema ocorre nos seguintes produtos:
-
A versão em espanhol do Microsoft Dynamics NAV 2009 R2
-
A versão em espanhol do Microsoft Dynamics NAV 2009 SP1
Resolução
Informações sobre o hotfix
Um hotfix suportado está disponível agora na Microsoft. No entanto, apenas destina-se a corrigir o problema descrito neste artigo. Aplique-o somente aos sistemas que apresentarem esse problema específico. Esta correção poderá ser submetida a testes adicionais. Portanto, se esse problema não o prejudicar, recomendamos que você aguarde o próximo service pack do Microsoft Dynamics NAV 2009 ou a próxima versão do Microsoft Dynamics NAV que contém esse hotfix.
Observação: Em alguns casos, as taxas cobradas para suporte a chamadas podem ser canceladas se um profissional de suporte técnico do Microsoft Dynamics e produtos relacionados determina que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados para questões de suporte adicionais e problemas que não se qualificam à atualização específica em questão.Informações sobre a instalação
A Microsoft fornece exemplos de programação somente para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação a um propósito específico. Este artigo presume que você esteja familiarizado com a linguagem de programação que está sendo demonstrada e com as ferramentas usadas para criar e depurar procedimentos. Os engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento. No entanto, eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades específicas.
Observação: Antes de instalar esse hotfix, verifique se todos os usuários do cliente do Microsoft Dynamics NAV estiver desconectados do sistema. Isso inclui os serviços do Microsoft Dynamics NAV Application Server (NAS). Você deve ser o único usuário do cliente conectado ao implementar esse hotfix. Para implementar esse hotfix, você deve ter uma licença de desenvolvedor. É recomendável que a conta de usuário na janela de Logins do Windows ou na janela banco de dados seja atribuída a ID de função "SUPER". Se a conta de usuário não pode ser atribuída a ID de função "SUPER", você deverá verificar se a conta de usuário tem as seguintes permissões:-
A permissão Modificar para o objeto que será alterado.
-
A permissão de execução para o objeto 5210 de identificação de objeto de sistema e o sistema 9015 de identificação de objeto
objeto.
Observação: Você não precisa ter direitos para os armazenamentos de dados, a menos que você precise executar o reparo de dados.
Alterações de código
Observação: Sempre teste código correções em um ambiente controlado antes de aplicar as correções para os computadores de produção.
Para resolver esse problema, execute as seguintes etapas:-
Altere o código nas propriedades do relatório de fazer declaração 340 (10743) da seguinte forma:
Código existente...IF FORM.RUNMODAL(10744,TempDeclarationLines) = ACTION::LookupOK THEN BEGIN
TempDeclarationLines.SETRANGE("Operation Code",'R'); TempDeclarationLines.SETRANGE("Property Location",TempDeclarationLines."Property Location"::" "); // Delete the following lines. // VSTf307397.begin TempDeclarationLines.SETRANGE(Type,TempDeclarationLines.Type::Sale); // VSTF307397.end IF NOT TempDeclarationLines.ISEMPTY THEN EXIT; TempDeclarationLines.RESET; CreateFileHeader; WriteDeclarationLinesToText(TempDeclarationLines); END ELSE EXIT; // End of the deleted lines. END; WriteAppliedPaymentsToText; IF FileHeaderCreated THEN BEGIN ...Código de substituição
... IF FORM.RUNMODAL(10744,TempDeclarationLines) = ACTION::LookupOK THEN BEGIN
TempDeclarationLines.SETRANGE("Operation Code",'R'); TempDeclarationLines.SETRANGE("Property Location",TempDeclarationLines."Property Location"::" "); // Add the following lines. TempDeclarationLines.SETRANGE(Type,TempDeclarationLines.Type::Sale); IF NOT TempDeclarationLines.ISEMPTY THEN EXIT; TempDeclarationLines.RESET; CreateFileHeader; WriteDeclarationLinesToText(TempDeclarationLines); END ELSE EXIT; // End of the added lines. END; WriteAppliedPaymentsToText; IF FileHeaderCreated THEN BEGIN ... -
Altere o código no relatório de fazer declaração 340 (10743) da seguinte forma:
Código existente... VATEntry."Document Type"::Refund:
BEGIN IF VATEntry."Unrealized VAT Entry No." <> 0 THEN BEGIN // Delete the following lines. UnrealizedVATEntry.GET(VATEntry."Unrealized VAT Entry No."); VendorDocumentNo := FindAppliedToDocumentNo(UnrealizedVATEntry); // End of the deleted lines. END; EXIT; END; ...Código de substituição
...VATEntry."Document Type"::Refund:
BEGIN IF VATEntry."Unrealized VAT Entry No." <> 0 THEN BEGIN // Add the following lines. IF FindPmtOrderBillGrBankAcc(VATEntry.Type,VATEntry."Document No.") <> '' THEN VendorDocumentNo := VATEntry."Document No." ELSE BEGIN UnrealizedVATEntry.GET(VATEntry."Unrealized VAT Entry No."); VendorDocumentNo := FindAppliedToDocumentNo(UnrealizedVATEntry); END; // End of the added lines. END; EXIT; END; ... -
Altere o código da função CheckVATType no relatório fazer declaração 340 (10743) da seguinte forma:
Código existente... IF VATEntries.FINDFIRST THEN
REPEAT IF (VATEntries."VAT %" <> VATEntryRec."VAT %") OR // Delete the following lines. (VATEntries."EC %" <> VATEntryRec."EC %") THEN EXIT(TRUE); // End of the deleted lines. UNTIL VATEntries.NEXT = 0; END; ...Código de substituição
... IF VATEntries.FINDFIRST THEN
REPEAT IF (VATEntries."VAT %" <> VATEntryRec."VAT %") OR // Add the following lines. (VATEntries."EC %" <> VATEntryRec."EC %") THEN BEGIN IF VATEntryRec."Unrealized VAT Entry No." <> 0 THEN EXIT(CheckVATOnUnrealVATEntries(VATEntryRec)); EXIT(TRUE); END; // End of the added lines. UNTIL VATEntries.NEXT = 0; END; ... -
Altere o código da função CheckVATOnUnrealVATEntries no relatório fazer declaração 340 (10743) da seguinte forma:
Código existente...UNTIL VATEntries.NEXT = 0;
END; PROCEDURE CalcECAmount@1100002(VATEntryRec@1100000 : Record 254;VAR VATBuffer3@1100001 : TEMPORARY Record 10704); VAR Currency@1100004 : Record 4; ...Código de substituição
...UNTIL VATEntries.NEXT = 0;
END; // Add the following lines. LOCAL PROCEDURE CheckVATOnUnrealVATEntries@1100044(VATEntryRec@1100000 : Record 254) : Boolean; VAR UnrealVATEntry@1100001 : Record 254; BEGIN UnrealVATEntry.GET(VATEntryRec."Unrealized VAT Entry No."); UnrealVATEntry.SETCURRENTKEY("Transaction No."); UnrealVATEntry.SETRANGE("Transaction No.",UnrealVATEntry."Transaction No."); IF UnrealVATEntry.FINDSET THEN REPEAT IF (UnrealVATEntry."VAT %" <> VATEntryRec."VAT %") OR (UnrealVATEntry."EC %" <> VATEntryRec."EC %") THEN EXIT(TRUE); UNTIL UnrealVATEntry.NEXT = 0; EXIT(FALSE); END; // End of the added lines. PROCEDURE CalcECAmount@1100002(VATEntryRec@1100000 : Record 254;VAR VATBuffer3@1100001 : TEMPORARY Record 10704); VAR Currency@1100004 : Record 4; ... -
Altere o código da função FindPmtOrderBillGrBankAcc no relatório fazer declaração 340 (10743) da seguinte forma:
Código existente...EXIT(FormatNumber(NoOfRegs,2));
END; PROCEDURE RecordTypeSale@1100009(); VAR UnrealizedVATEntry@1100001 : Record 254; ...Código de substituição
...EXIT(FormatNumber(NoOfRegs,2));
END; // Add the following lines. LOCAL PROCEDURE FindPmtOrderBillGrBankAcc@1100058(Type@1100005 : Option;DocumentNo@1100000 : Code[20]) : Code[20]; VAR ClosedBillGroup@1100003 : Record 7000007; ClosedPmtOrder@1100002 : Record 7000022; PostedBillGroup@1100004 : Record 7000006; PostedPmtOrder@1100001 : Record 7000021; BEGIN CASE Type OF VATEntry.Type::Sale: BEGIN IF PostedBillGroup.GET(DocumentNo) THEN EXIT(PostedBillGroup."Bank Account No."); IF ClosedBillGroup.GET(DocumentNo) THEN EXIT(ClosedBillGroup."Bank Account No."); END; VATEntry.Type::Purchase: BEGIN IF PostedPmtOrder.GET(DocumentNo) THEN EXIT(PostedPmtOrder."Bank Account No."); IF ClosedPmtOrder.GET(DocumentNo) THEN EXIT(ClosedPmtOrder."Bank Account No."); END; END; EXIT(''); END; // End of the added lines. PROCEDURE RecordTypeSale@1100009(); VAR UnrealizedVATEntry@1100001 : Record 254; ... -
Altere o código da função RecordTypeSale no relatório fazer declaração 340 (10743) da seguinte forma:
1 de código existente...END ELSE
OperationDateText := FormatDate(VATEntry."Posting Date"); IF VATEntry."Document Type" IN [VATEntry."Document Type"::Payment,VATEntry."Document Type"::Refund] THEN BEGIN UnrealizedVATEntryNo := VATEntry."Unrealized VAT Entry No."; DocumentDate := VATEntry."Posting Date"; ...1 código de substituição
... END ELSE
OperationDateText := FormatDate(VATEntry."Posting Date"); // Add the following lines. AppliedToDocumentNo := VATEntry."Document No."; UnrealizedVATEntryNo := 0; // End of the added lines. IF VATEntry."Document Type" IN [VATEntry."Document Type"::Payment,VATEntry."Document Type"::Refund] THEN BEGIN UnrealizedVATEntryNo := VATEntry."Unrealized VAT Entry No."; DocumentDate := VATEntry."Posting Date"; ...2 de código existente
...IF VATEntry."Document Type" IN [VATEntry."Document Type"::Payment,VATEntry."Document Type"::Refund] THEN BEGIN
UnrealizedVATEntryNo := VATEntry."Unrealized VAT Entry No."; DocumentDate := VATEntry."Posting Date"; // Delete the following line. IF UnrealizedVATEntryNo <> 0 THEN BEGIN // End of the deleted line. UnrealizedVATEntry.GET(UnrealizedVATEntryNo); AppliedToDocumentNo := FindAppliedToDocumentNo(UnrealizedVATEntry); OperationDateText := FormatDate(UnrealizedVATEntry."Posting Date"); ...Código de substituição 2
...IF VATEntry."Document Type" IN [VATEntry."Document Type"::Payment,VATEntry."Document Type"::Refund] THEN BEGIN
UnrealizedVATEntryNo := VATEntry."Unrealized VAT Entry No."; DocumentDate := VATEntry."Posting Date"; // Add the following lines. IF (UnrealizedVATEntryNo <> 0) AND (FindPmtOrderBillGrBankAcc(VATEntry.Type,VATEntry."Document No.") = '') THEN BEGIN // End of the added lines. UnrealizedVATEntry.GET(UnrealizedVATEntryNo); AppliedToDocumentNo := FindAppliedToDocumentNo(UnrealizedVATEntry); OperationDateText := FormatDate(UnrealizedVATEntry."Posting Date"); ...3 de código existente
... OperationDateText := FormatDate(UnrealizedVATEntry."Posting Date");
DocumentDate := UnrealizedVATEntry."Document Date"; END; // Delete the following lines. END ELSE BEGIN AppliedToDocumentNo := VATEntry."Document No."; UnrealizedVATEntryNo := 0; // End of the deleted lines. END; CreateTempDeclarationLines(PADSTR(CustVATNumber,9,' '),Customer."No.",Customer.Name,DocumentDate, ...Código de substituição 3
...OperationDateText := FormatDate(UnrealizedVATEntry."Posting Date");
DocumentDate := UnrealizedVATEntry."Document Date"; END; END; CreateTempDeclarationLines(PADSTR(CustVATNumber,9,' '),Customer."No.",Customer.Name,DocumentDate, ... -
Altere o código da função AddCollectionBankAcc no relatório fazer declaração 340 (10743) da seguinte forma:
1 de código existente...VATEntryForPmnt@1100008 : Record 254;
BankAccLE@1100002 : Record 271; CheckLE@1100004 : Record 272; // Delete the following line. BankAcc@1100006 : Record 270; // End of the deleted line. CollectionPaymentMethodUsed@1100005 : Text[1]; BankAccountOrPaymentMethodUsed@1100003 : Text[34]; InsertPosition@1100007 : Integer; ...1 código de substituição
...VATEntryForPmnt@1100008 : Record 254;
BankAccLE@1100002 : Record 271; CheckLE@1100004 : Record 272; // Add the following line. BankAccNo@1100009 : Code[20]; // End of the added line. CollectionPaymentMethodUsed@1100005 : Text[1]; BankAccountOrPaymentMethodUsed@1100003 : Text[34]; InsertPosition@1100007 : Integer; ...2 de código existente
... IF CheckLE.FINDFIRST THEN BEGIN
BankAccountOrPaymentMethodUsed := CheckLE."Check No."; CollectionPaymentMethodUsed := 'T'; // Delete the following lines. END ELSE IF BankAccLE.GET(DeclarationLine."Bank Account Ledger Entry No.") THEN BEGIN CollectionPaymentMethodUsed := 'C'; BankAcc.GET(BankAccLE."Bank Account No."); BankAccountOrPaymentMethodUsed := BankAcc."CCC No."; IF BankAccountOrPaymentMethodUsed = '' THEN BankAccountOrPaymentMethodUsed := BankAcc."Bank Account No."; IF BankAccountOrPaymentMethodUsed = '' THEN BankAccountOrPaymentMethodUsed := COPYSTR(BankAcc.IBAN,1,MAXSTRLEN(BankAccountOrPaymentMethodUsed)); END; // End of the deleted lines. IF BankAccountOrPaymentMethodUsed = '' THEN BEGIN CollectionPaymentMethodUsed := 'O'; IF DeclarationLine.Type = DeclarationLine.Type::Sale THEN ...Código de substituição 2
...IF CheckLE.FINDFIRST THEN BEGIN
BankAccountOrPaymentMethodUsed := CheckLE."Check No."; CollectionPaymentMethodUsed := 'T'; // Add the following lines. END ELSE BEGIN IF BankAccLE.GET(DeclarationLine."Bank Account Ledger Entry No.") THEN BankAccNo := BankAccLE."Bank Account No." ELSE BankAccNo := FindPmtOrderBillGrBankAcc(DeclarationLine.Type,DeclarationLine."Document No."); BankAccountOrPaymentMethodUsed := GetBankAccountUsed(BankAccNo); IF BankAccountOrPaymentMethodUsed <> '' THEN CollectionPaymentMethodUsed := 'C'; END; // End of the added lines. IF BankAccountOrPaymentMethodUsed = '' THEN BEGIN CollectionPaymentMethodUsed := 'O'; IF DeclarationLine.Type = DeclarationLine.Type::Sale THEN ... -
Altere o código da função GetBankAccountUsed no relatório fazer declaração 340 (10743) da seguinte forma:
Código existente... txt := InsertTextWithReplace(txt,BankAccountOrPaymentMethodUsed,InsertPosition);
END; LOCAL PROCEDURE AreDatesInSamePeriod@1100035(Date1@1100000 : Date;Date2@1100001 : Date) : Boolean; BEGIN EXIT(CALCDATE('<CM>',Date1) = CALCDATE('<CM>',Date2)); ...Código de substituição
...txt := InsertTextWithReplace(txt,BankAccountOrPaymentMethodUsed,InsertPosition);
END; // Add the following lines. LOCAL PROCEDURE GetBankAccountUsed@1100059(BankAccNo@1100001 : Code[20]) BankAccountUsed : Text[34]; VAR BankAccount@1100000 : Record 270; BEGIN WITH BankAccount DO IF GET(BankAccNo) THEN BEGIN BankAccountUsed := "CCC No."; IF BankAccountUsed = '' THEN BankAccountUsed := "Bank Account No."; IF BankAccountUsed = '' THEN BankAccountUsed := COPYSTR(IBAN,1,MAXSTRLEN(BankAccountUsed)); END; END; // End of the added lines. LOCAL PROCEDURE AreDatesInSamePeriod@1100035(Date1@1100000 : Date;Date2@1100001 : Date) : Boolean; BEGIN EXIT(CALCDATE('<CM>',Date1) = CALCDATE('<CM>',Date2)); ...
Pré-requisitos:
Você deve ter um dos seguintes produtos instalados para aplicar esse hotfix:
-
A versão em espanhol do Microsoft Dynamics NAV 2009 R2
-
A versão em espanhol do Microsoft Dynamics NAV 2009 SP1
Informações sobre remoção
Você não pode remover esse hotfix.
Status
A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".
Observação: Este é um artigo de "PUBLICAÇÃO RÁPIDA" criado diretamente de dentro da organização de suporte da Microsoft. As informações contidas neste documento são fornecidas desta maneira, em resposta a problemas emergentes. Como um dos resultados da velocidade da publicação, os materiais podem incluir erros tipográficos e podem ser revisados a qualquer momento sem aviso prévio. Consulte os Termos de usopara outras considerações.