在葡萄牙语版本的 Microsoft Dynamics NAV 中创建 SAF-T 文件时,在创建的 SAF-T 文件中提交的 NumberOfEntries 中的值不正确

应用对象
Dynamics NAV 2009 Microsoft Dynamics NAV 5.0

本文适用于葡萄牙语 (pt) 语言区域设置的 Microsoft Dynamics NAV。

症状

假设在 Microsoft Dynamics NAV 的葡萄牙语版本中创建 SAF-T 文件。 检查创建的 .xml 文件时,你会注意到 NumberOfEntries 文件中的值不正确。 如果数据库中的事务,则预期值与数字相同。
以下产品中会出现此问题:

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
  • Microsoft Dynamics NAV 2009 R2 的葡萄牙语版本
  • Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1)

解决方法

修补程序信息

Microsoft现在提供了受支持的修补程序。 但是,它仅用于更正本文中所述的问题。 仅将其应用于遇到此特定问题的系统。 此修补程序可能会收到其他测试。 因此,如果你没有受到此问题的严重影响,我们建议你等待下一个Microsoft Dynamics NAV 2009 Service Pack 或包含此修补程序的下一Microsoft Dynamics NAV 版本。

注意 在特殊情况下,如果 Microsoft Dynamics 和相关产品的技术支持专业人员确定特定更新将解决你的问题,则通常由支持呼叫产生的费用可能会被取消。 对于相关特定升级无法解决的其他支持问题和事项,将照常收取支持费用。

            
          

安装信息

Microsoft 的编程示例仅用于说明,不做任何明示或暗示的保证。 这包括但不限于特定用途的适销性或适用性的隐含保证。 本文假定你熟悉所演示的编程语言以及用于创建和调试过程的工具。 Microsoft 支持工程师可以帮助解释特定过程的功能,但他们不会修改这些示例以提供新增功能或构建步骤以满足你的特定需要。

注意 在安装此修补程序之前,请验证所有 Microsoft Navision 客户端用户是否已从系统注销。 这包括 Microsoft Navision Application Services (NAS) 客户端用户。 实现此修补程序时,应是唯一登录的客户端用户。

若要实现此修补程序,必须具有开发人员许可证。

建议为 Windows 登录窗口或数据库登录名窗口中的用户帐户分配“SUPER”角色 ID。 如果无法为用户帐户分配“SUPER”角色 ID,则必须验证该用户帐户是否具有以下权限:

  • 要更改的 对象的“修改”权限。
  • 系统对象 ID 5210 对象和系统对象 ID 9015 对象的 Execute 权限。

                
注意 除非必须执行数据修复,否则您不必拥有数据存储的权限。

代码更改

注意 在将修补程序应用到生产计算机之前,始终在受控环境中测试代码修复。
要解决此问题,请按照下列步骤操作:

  1. 更改 SAF-T PT XMLPort (13301) 元素中的代码,如下所示:

    现有代码

    ...
            { [{2FBD739B-4063-4410-80DA-15187CE38CB6}];5 ;CreditAmount        ;Element ;Text    ;
                                                        VariableName=EntriesSalesLnCreditAmount }
    
          { [{158561B4-B3C1-4D40-9FE8-2260247EFFE4}];1 ;SourceDocuments     ;Element ;Text    ;
                                                        Export::OnBeforePassVariable=BEGIN
                                                                                       IF TotalDocs = 0 THEN 
    ...
    

    替换代码

    ...
           { [{2FBD739B-4063-4410-80DA-15187CE38CB6}];5 ;CreditAmount        ;Element ;Text    ;
                                                        VariableName=EntriesSalesLnCreditAmount }
    
    // Add the following lines.
         { [{3CD38B38-F1FA-494A-9863-2B919BF4B14B}];2 ;Journal             ;Element ;Table   ;
                                                       VariableName=EntriesBlankSourceCode;
                                                       SourceTable=Table2000000026;
                                                       Export::OnPreXMLItem=BEGIN
                                                                              EntriesBlankSourceCode.SETRANGE(Number,1,1);
                                                                              Window.UPDATE(1,Text1110008);
                                                                            END;
    
                                                       Export::OnAfterGetRecord=BEGIN
                                                                                  IF NOT CheckGLRegBlankSourceCode THEN
                                                                                    currXMLport.SKIP;
    
                                                                                  ClearTempRec;
    
                                                                                  REPEAT
                                                                                    GetGLEntries;
                                                                                  UNTIL TempGLReg.NEXT = 0;
    
                                                                                  EntriesBlankJnlID := 'VAZIO';
                                                                                  EntriesBlankJnlDescription := 'VAZIO';
                                                                                  Window.UPDATE(2,'');
                                                                                END;
                                                                                 }
    
         { [{4829023A-4C43-4746-B15E-55BE1C8A77BC}];3 ;JournalID           ;Element ;Text    ;
                                                       VariableName=EntriesBlankJnlID }
    
         { [{AC925688-8EBD-4477-BE49-731F4647CF75}];3 ;Description         ;Element ;Text    ;
                                                       VariableName=EntriesBlankJnlDescription }
    
         { [{EA486FCE-6103-4895-AE4A-A970D1AA69E5}];3 ;Transaction         ;Element ;Table   ;
                                                       VariableName=EntriesBlankTr;
                                                       SourceTable=Table2000000026;
                                                       Export::OnPreXMLItem=BEGIN
                                                                              TempGLEntry.RESET;
                                                                              EntriesBlankTr.SETRANGE(Number,1,TempGLEntry.COUNT);
                                                                              TempGLEntry.FINDFIRST;
                                                                            END;
    
                                                       Export::OnAfterGetRecord=BEGIN
                                                                                  ApplyFilters;
                                                                                  EntriesBlankTrID := FORMAT(FORMAT(TempGLEntry."Posting Date",0,9) + ' ' + EntriesBlankJnlID + ' ' + TempGLEntry."Document No.");
                                                                                  EntriesBlankDocArchivalNumber := TempGLEntry."Document No.";
                                                                                  EntriesBlankTrPeriod := FORMAT(GetPeriod(TempGLEntry."Posting Date"),0,9);
                                                                                  EntriesBlankTrDate := FORMAT(NORMALDATE(TempGLEntry."Posting Date"),0,9);
                                                                                  IF CLOSINGDATE(TempGLEntry."Posting Date") = TempGLEntry."Posting Date" THEN
                                                                                    EntriesBlankTransactionType := 'A'
                                                                                  ELSE
                                                                                    EntriesBlankTransactionType := 'N';
                                                                                  EntriesBlankTrDescription := EntriesBlankJnlDescription;
                                                                                  EntriesBlankGLPostingDate := GetGLentryCreationDateTime(TempGLEntry."Entry No.");
                                                                                  TempGLEntry.NEXT;
                                                                                END;
                                                                                 }
    
         { [{1A2E1328-2281-4276-B7F2-93032558BF4D}];4 ;TransactionID       ;Element ;Text    ;
                                                       VariableName=EntriesBlankTrID }
    
         { [{7238FAE0-4177-49F2-88D7-322E3479BEDF}];4 ;Period              ;Element ;Text    ;
                                                       VariableName=EntriesBlankTrPeriod }
    
         { [{CB2AE9CA-4533-4F21-A5F0-9DB125CCE6A7}];4 ;TransactionDate     ;Element ;Text    ;
                                                       VariableName=EntriesBlankTrDate }
    
         { [{06565DE9-009E-4CD1-9567-F869ADD6AF09}];4 ;Description         ;Element ;Text    ;
                                                       VariableName=EntriesBlankTrDescription }
    
         { [{FC7AF546-FDA6-4409-9A11-E8C3F08B0245}];4 ;DocArchivalNumber   ;Element ;Text    ;
                                                       VariableName=EntriesBlankDocArchivalNumber }
    
         { [{0D9858E8-71B7-4730-ACD3-208CB18E55D5}];4 ;TransactionType     ;Element ;Text    ;
                                                       VariableName=EntriesBlankTransactionType }
    
         { [{7A0CC2BE-C3C8-4EDA-A616-C17000B3631C}];4 ;GLPostingDate       ;Element ;Text    ;
                                                       VariableName=EntriesBlankGLPostingDate }
    
         { [{F7668B87-49B8-4CB6-8316-D1440A5E3ABA}];4 ;Line                ;Element ;Table   ;
                                                       VariableName=EntriesLinedBlankDbtAmt;
                                                       SourceTable=Table2000000026;
                                                       Export::OnPreXMLItem=BEGIN
                                                                              TempGLEntry2.SETFILTER("Debit Amount",'<>% 1',0);
                                                                              IF NOT TempGLEntry2.FINDFIRST THEN
                                                                                currXMLport.BREAK;
                                                                              EntriesLinedBlankDbtAmt.SETRANGE(Number,1,TempGLEntry2.COUNT);
                                                                            END;
    
                                                       Export::OnAfterGetRecord=BEGIN
                                                                                  EntriesLnBlankDbtAmtRecordID := FORMAT(TempGLEntry2."Entry No.",0,9);
                                                                                  EntriesLnBlankDbtAmtAccountID := TempGLEntry2."G/L Account No.";
                                                                                  EntriesLnBlankDbtAmtSysEntDate := GetGLentryCreationDateTime(TempGLEntry2."Entry No.");
                                                                                  EntriesLnBlankDbtAmtDescr := TempGLEntry2.Description;
                                                                                  EntriesLnBlankDebitAmount := FORMAT(TempGLEntry2."Debit Amount",0,9);
                                                                                  TempGLEntry2.NEXT;
                                                                                END;
                                                                                 }
    
         { [{455ABAA5-310A-4999-B349-FF32D14A1968}];5 ;RecordID            ;Element ;Text    ;
                                                       VariableName=EntriesLnBlankDbtAmtRecordID }
    
         { [{82412AE1-E33F-4DC9-837E-8E7AAEEFE2ED}];5 ;AccountID           ;Element ;Text    ;
                                                       VariableName=EntriesLnBlankDbtAmtAccountID }
    
         { [{448EE384-AF3E-4A02-AC66-373591BC28CD}];5 ;SystemEntryDate     ;Element ;Text    ;
                                                       VariableName=EntriesLnBlankDbtAmtSysEntDate }
    
         { [{9F8171F0-A12E-49B6-A00D-93745204EB23}];5 ;Description         ;Element ;Text    ;
                                                       VariableName=EntriesLnBlankDbtAmtDescr }
    
         { [{1BD67E80-3CC3-41DF-86B7-7A9FF3514B36}];5 ;DebitAmount         ;Element ;Text    ;
                                                       VariableName=EntriesLnBlankDebitAmount }
    
         { [{35FC60AD-0217-4D95-978A-FFAD08D66558}];4 ;Line                ;Element ;Table   ;
                                                       VariableName=EntriesLinedBlankCrAmt;
                                                       SourceTable=Table2000000026;
                                                       Export::OnPreXMLItem=BEGIN
                                                                              TempGLEntry2.SETRANGE("Debit Amount");
                                                                              TempGLEntry2.SETFILTER("Credit Amount",' <>%1',0);
                                                                              IF NOT TempGLEntry2.FINDFIRST THEN
                                                                                currXMLport.BREAK;
                                                                              EntriesLinedBlankCrAmt.SETRANGE(Number,1,TempGLEntry2.COUNT);
                                                                            END;
    
                                                       Export::OnAfterGetRecord=BEGIN
                                                                                  EntriesLnBlankCrAmtRecordID := FORMAT(TempGLEntry2."Entry No.",0,9);
                                                                                  EntriesLnBlankCrAmtAccountID := TempGLEntry2."G/L Account No.";
                                                                                  EntriesLnBlankCrAmtSysEntrDate := GetGLentryCreationDateTime(TempGLEntry2."Entry No.");
                                                                                  EntriesLnBlankCrAmtDescr := TempGLEntry2.Description;
                                                                                  EntriesLnBlankCreditAmount := FORMAT(TempGLEntry2."Credit Amount",0,9);
                                                                                  TempGLEntry2.NEXT;
                                                                                END;
                                                                                 }
    
         { [{42970CEB-47B1-4737-9067-5D8310FCFA39}];5 ;RecordID            ;Element ;Text    ;
                                                       VariableName=EntriesLnBlankCrAmtRecordID }
    
         { [{C236B36C-53F0-4FD1-ABCF-28828E216114}];5 ;AccountID           ;Element ;Text    ;
                                                       VariableName=EntriesLnBlankCrAmtAccountID }
    
         { [{AEC885C8-FCE9-4C04-BBFB-B1A6B7540DDA}];5 ;SystemEntryDate     ;Element ;Text    ;
                                                       VariableName=EntriesLnBlankCrAmtSysEntrDate }
    
         { [{D2F54DEF-3BF6-4F7F-BCB9-384A96BE514D}];5 ;Description         ;Element ;Text    ;
                                                       VariableName=EntriesLnBlankCrAmtDescr }
    
         { [{F1DA085A-9AC4-4DB4-AC54-DA77AFE7CCAD}];5 ;CreditAmount        ;Element ;Text    ;
                                                       VariableName=EntriesLnBlankCreditAmount }
    // End of the added lines.
    
          { [{158561B4-B3C1-4D40-9FE8-2260247EFFE4}];1 ;SourceDocuments     ;Element ;Text    ;
                                                        Export::OnBeforePassVariable=BEGIN
                                                                                       IF TotalDocs = 0 THEN
    ...
    
  2. 更改 SAF-T PT XMLPort (13301) SetData 函数中的代码,如下所示:

    现有代码

    ...
              GLEntry.RESET;
            // No. of transactions
            GetOpenGLRegister;
    // Delete the following lines.
           IF SourceCode.FINDSET THEN
             REPEAT
               IF CheckGLReg THEN
                 REPEAT
                   TempGLEntry3.DELETEALL;
                   GLEntry2.RESET;
                   GLEntry2.SETRANGE("Entry No.",TempGLReg."From Entry No.",TempGLReg."To Entry No.");
                   IF GLEntry2.FINDSET THEN
                     REPEAT
                       TempGLEntry3.RESET;
                       TempGLEntry3.SETCURRENTKEY("Document No.","Posting Date");
                       TempGLEntry3.SETRANGE("Document No.",GLEntry2."Document No.");
                       TempGLEntry3.SETRANGE("Posting Date",GLEntry2."Posting Date");
                       IF NOT TempGLEntry3.FINDFIRST THEN BEGIN
                         NoOfTransactions += 1;
                         TempGLEntry3.INIT;
                         TempGLEntry3.TRANSFERFIELDS(GLEntry2);
                         TempGLEntry3.INSERT;
                       END;
                     UNTIL GLEntry2.NEXT=0;
                 UNTIL TempGLReg.NEXT = 0;
             UNTIL SourceCode.NEXT = 0;
    // End of the deleted lines.
    
            // Sales Invoice Docs
            SalesInvoice.RESET;
            SalesInvoice.SETFILTER("Posting Date",'%1..%2',StartDate3,EndDate2);
    ...
    

    替换代码

    ...
              GLEntry.RESET;
            // No. of transactions
            GetOpenGLRegister;
    // Add the following lines.
           TempGLEntry3.DELETEALL;
           IF SourceCode.FINDSET THEN
             REPEAT
               IF CheckGLReg THEN
                 REPEAT
                   CalcNoOfTransactions(TempGLReg."From Entry No.",TempGLReg."To Entry No.",TempGLEntry3);
                 UNTIL TempGLReg.NEXT = 0;
             UNTIL SourceCode.NEXT = 0;
    
           IF CheckGLRegBlankSourceCode THEN
             REPEAT
               CalcNoOfTransactions(TempGLReg."From Entry No.",TempGLReg."To Entry No.",TempGLEntry3);
             UNTIL TempGLReg.NEXT = 0;
    // End of the added lines.
    
            // Sales Invoice Docs
            SalesInvoice.RESET;
            SalesInvoice.SETFILTER("Posting Date",'%1..%2',StartDate3,EndDate2);
    ...
    
  3. 更改 SAF-T PT XMLPort (13301) 文档中的代码,如下所示:

    现有代码

    ...
           EXIT(FORMAT(DateParam,0,9) + 'T' + FORMAT(TimeParam,0,'<Hours24,2><Filler Character,0>:<Minutes,2>:<Seconds,2>'));
          END;
    
    // Delete the following lines.
         BEGIN
         END.
       }
     }
    // End of the deleted lines.
    ...
    

    替换代码

    ...
           EXIT(FORMAT(DateParam,0,9) + 'T' + FORMAT(TimeParam,0,'<Hours24,2><Filler Character,0>:<Minutes,2>:<Seconds,2>'));
          END;
    // Add the following lines.
         LOCAL PROCEDURE CalcNoOfTransactions@1110021(FromEntryNo@1110000 : Integer;ToEntryNo@1110001 : Integer;VAR TempGLEntry@1110002 : Record 17);
         VAR
           GLEntry@1110003 : Record 17;
         BEGIN
           GLEntry.RESET;
           GLEntry.SETRANGE("Entry No.",TempGLReg."From Entry No.",TempGLReg."To Entry No.");
           IF GLEntry.FINDSET THEN
             REPEAT
               TempGLEntry.RESET;
               TempGLEntry.SETCURRENTKEY("Document No.","Posting Date");
               TempGLEntry.SETRANGE("Document No.",GLEntry."Document No.");
               TempGLEntry.SETRANGE("Posting Date",GLEntry."Posting Date");
               TempGLEntry.SETRANGE("Source Code",GLEntry."Source Code");
               IF NOT TempGLEntry.FINDFIRST THEN BEGIN
                 NoOfTransactions += 1;
                 TempGLEntry.INIT;
                 TempGLEntry.TRANSFERFIELDS(GLEntry);
                 TempGLEntry.INSERT;
               END;
             UNTIL GLEntry.NEXT=0;
         END;
    
         LOCAL PROCEDURE CheckGLRegBlankSourceCode@1110022() : Boolean;
         BEGIN
           TempGLReg.RESET;
           TempGLReg.SETFILTER("Posting Date",'%1..%2',StartDate3,CLOSINGDATE(EndDate2));
           TempGLReg.SETRANGE("Source Code",'');
           EXIT(TempGLReg.FINDFIRST);
         END;
    
         BEGIN
         END.
       }
     } 
    // End of the added lines.
    ...
    

先决条件

必须安装以下产品之一才能应用此修补程序:

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
  • Microsoft Dynamics NAV 2009 R2 的葡萄牙语版本
  • Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1)

                
              

删除信息

无法删除此修补程序。

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

参考资料

VSTF DynamicsNAV SE:263721;263722

注意这是一篇由 Microsoft 支持组织直接创建的“快速发布”文章。 本文所包含的信息是按原样提供的,以应对新出现的问题。 由于发布速度较快,这些材料可能包含印刷错误,无需通知即可随时修改。 有关其他注意事项,请参阅使用条款