“项目编号[Item_No.] “不存在”错误消息,当你尝试在俄语版本的 Microsoft Dynamics NAV 2009 R2 和功能包 1 的供应商账本条目窗体中反向注册时

应用对象
Dynamics NAV 2009

本文适用于俄语 (ru) 语言区域设置的 Microsoft Dynamics NAV。

症状

在具有功能包 1 的 Microsoft Dynamics NAV 2009 R2 的俄语版本中,如果 VAT 条目表 (254) 具有 VAT 分配更改操作,则当您尝试在“供应商账本条目”窗体中反向注册时,会收到以下错误消息:

注意

项目编号Item_No。 不存在。

      

解决方法

修补程序信息

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 权限。

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

代码更改

注意 在将修补程序应用到生产计算机之前,始终在受控环境中测试代码修复。
要解决此问题,请按照下列步骤操作:
注意 若要 (12490) 创建字段,请使用以下 .fob 文件。

文件名 文件版本 文件大小 日期 时间 平台
Vstf260227.fob 不适用 169,340 2011 年 6 月 3 日 1,008 不适用

可从 Microsoft Dynamics 文件Exchange Server下载以下文件:

https://mbs2.microsoft.com/fileexchange/?fileID=5f52394d-7020-4d24-98b4-909002c45cfe 发布日期:2014 年 4 月 2 日

   Microsoft 已对该文件进行病毒扫描。 Microsoft 使用的是文件发布时可以获得的最新病毒检测软件。 该文件存储在安全性得到增强的服务器上,以防止对文件进行未经授权的更改。

  1. 更改“反向条目”表中的代码 (179) ,如下所示:

    1. 添加以下字段: { 12490; ;VAT 分配;布尔值 }

    2. 更改 InsertReversalEntry 函数中的代码,如下所示:
      现有代码

      ...
                        ReversalEntry."Bal. Account Type" := GLEntry."Bal. Account Type";
      
                      ReversalEntry."Bal. Account No." := GLEntry."Bal. Account No.";
      
                      ReversalEntry."Line No." := NextLineNo;
      
                      NextLineNo := NextLineNo + 1;
      
                      ReversalEntry.INSERT;
      
      
      
                      IF GLEntry.Amount > 0 THEN BEGIN
      
                        GLItemLedgRelation.RESET;
      
                        GLItemLedgRelation.SETRANGE("G/L Entry No.",GLEntry."Entry No.");
      ...
      

      替换代码

      ...
                       ReversalEntry."Bal. Account Type" := GLEntry."Bal. Account Type";
      
                      ReversalEntry."Bal. Account No." := GLEntry."Bal. Account No.";
      
                      ReversalEntry."Line No." := NextLineNo;
      
      // Add the following line.
                      ReversalEntry."VAT Allocation" := VATAllocOnCost; 
      // End of the added line.
      
                      NextLineNo := NextLineNo + 1;
      
                      ReversalEntry.INSERT;
      
      
      
                      IF GLEntry.Amount >0 THEN BEGIN
      
                        GLItemLedgRelation.RESET;
      
                       GLItemLedgRelation.SETRANGE("G/L Entry No.",GLEntry."Entry No."); 
      ...
      
    3. 更改 CheckEntries 函数中的代码,如下所示:
      现有代码 1

      ...
          PROCEDURE CheckEntries@14();   
      ...
      

      替换代码 1

      ...
         PROCEDURE CheckEntries@14(IsVATAllocOnCost@1000000000 : Boolean);        
      ...
      

      现有代码 2

      ...
            MaxPostingDate := 0D;
      
            IF NOT GLEntry.FIND('-') THEN
      
              ERROR(Text009,GLEntry.TABLECAPTION,GLAcc.TABLECAPTION);
      
      // Delete the following line.
            VATAllocOnCost := VATAllocationExist(VATEntry); 
      // End of the deleted line.
      
            IF GLEntry.FIND('-') THEN BEGIN
      
      // Delete the following line.
              IF (GLEntry."Journal Batch Name" = '') AND NOT VATAllocOnCost THEN 
      // End of the deleted line.
      
                TestFieldError;
      
              REPEAT
      
                CheckGLAcc(GLEntry,BalanceCheckAmount,BalanceCheckAddCurrAmount);
      
              UNTIL GLEntry.NEXT = 0;
      
            END;    
      ...
      

      替换代码 2

      ...
               MaxPostingDate := 0D;
      
            IF NOT GLEntry.FIND('-') THEN
      
              ERROR(Text009,GLEntry.TABLECAPTION,GLAcc.TABLECAPTION);
      
            IF GLEntry.FIND('-') THEN BEGIN
      
      // Add the following line.
              IF (GLEntry."Journal Batch Name" = '') AND NOT IsVATAllocOnCost THEN
      // End of the added line.
      
                TestFieldError;
      
              REPEAT
      
                CheckGLAcc(GLEntry,BalanceCheckAmount,BalanceCheckAddCurrAmount);
      
              UNTIL GLEntry.NEXT = 0;
      
            END;
      ...
      

      现有代码 3

      ...
             IF VATEntry.FIND('-') THEN
      
              REPEAT
      
                CheckVAT(VATEntry);
      
              UNTIL VATEntry.NEXT = 0;
      
      // Delete the following line.
            IF VATAllocOnCost THEN 
      // End of the deleted line.
      
              IF ValueEntry.FIND('-') THEN
      
                REPEAT
      
                  CheckItem(ValueEntry);
      
                UNTIL ValueEntry.NEXT = 0;   
      ...
      

      替换代码 3

      ...
             IF VATEntry.FIND('-') THEN
      
              REPEAT
      
                CheckVAT(VATEntry);
      
              UNTIL VATEntry.NEXT = 0;
      
      // Add the following line.
            IF IsVATAllocOnCost THEN 
      // End of the added line.
      
              IF ValueEntry.FIND('-') THEN
      
                REPEAT
      
                  CheckItem(ValueEntry);
      
                UNTIL ValueEntry.NEXT = 0;  
      ...
      
    4. 更改 SetReverseFilter 函数中的代码,如下所示:
      现有代码 1

      ...
                 TaxDiffEntry.SETRANGE("Transaction No.",Number);
      
            END ELSE BEGIN
      
              GLReg.GET(Number); 
      ...
      

      替换代码 1

      ...
               TaxDiffEntry.SETRANGE("Transaction No.",Number);
      
      // Add the following line.
             ValueEntry.SETRANGE("Entry No.",0); 
      // End of the added line.
      
            END ELSE BEGIN
      
              GLReg.GET(Number);
      ...
      

      现有代码 2

      ...
                 VATEntry.SETRANGE("Entry No.",GLReg."From VAT Entry No.",GLReg."To VAT Entry No.");
      
              GLItemLedgRelation.SETCURRENTKEY(GLItemLedgRelation."G/L Register No.");
      
              GLItemLedgRelation.SETRANGE("G/L Register No.",GLReg."No.");
      
              IF GLItemLedgRelation.FINDFIRST THEN
      
                FromValueEntryNo := GLItemLedgRelation."Value Entry No.";
      
              IF GLItemLedgRelation.FINDLAST THEN
      
                ToValueEntryNo := GLItemLedgRelation."Value Entry No.";
      
              ValueEntry.SETRANGE("Entry No.",FromValueEntryNo,ToValueEntryNo); 
      ...
      

      替换代码 2

      ...
              VATEntry.SETRANGE("Entry No.",GLReg."From VAT Entry No.",GLReg."To VAT Entry No.");
      
      // Add the following lines.
              FromValueEntryNo := 0; 
      
              ToValueEntryNo := 0; 
      
              IF VATAllocOnCost THEN BEGIN 
      // End of the added lines.
      
                GLItemLedgRelation.SETCURRENTKEY(GLItemLedgRelation."G/L Register No.");
      
                GLItemLedgRelation.SETRANGE("G/L Register No.",GLReg."No.");
      
                IF GLItemLedgRelation.FINDFIRST THEN
      
                  FromValueEntryNo := GLItemLedgRelation."Value Entry No.";
      
                IF GLItemLedgRelation.FINDLAST THEN
      
                  ToValueEntryNo := GLItemLedgRelation."Value Entry No.";
      // Add the following line.
              END;
      // End of the added line.
      
              ValueEntry.SETRANGE("Entry No.",FromValueEntryNo,ToValueEntryNo);  
      ...
      
    5. 更改 VATAllocationExist 函数中的代码,如下所示:
      现有代码

      ...
      // Delete the following line.
             VATEntry2.COPYFILTERS(VATEntry2); 
      // End of the deleted line.
      
            VATEntry2.SETRANGE("VAT Allocation Type",VATEntry2."VAT Allocation Type"::Charge);
      
            EXIT(NOT VATEntry2.ISEMPTY);   
      ...
      

      替换代码

      ...
      // Add the following line.
             VATEntry2.COPYFILTERS(VATEntry); 
      // End of the added line.
      
            VATEntry2.SETRANGE("VAT Allocation Type",VATEntry2."VAT Allocation Type"::Charge);
      
            EXIT(NOT VATEntry2.ISEMPTY);  
      ...
      
  2. 将 Post 函数中的代码更改为“反向条目”窗体 (179) ,如下所示:
    添加以下局部变量:

    • 名称:VATAllocOnCost
    • DataType:布尔值

    现有代码 1

    ...
                IF TempGLReg.FINDSET THEN
    
                REPEAT
    
                  ReversalEntry2.SetReverseFilter(TempGLReg."No.","Reversal Type");
    
    // Delete the following line.
                  ReversalEntry2.CheckEntries;  
    // End of the deleted line.
    
                  GET(1);
    
                  IF "Reversal Type" = "Reversal Type"::Register THEN
    
                    Number := TempGLReg."No."
    
                  ELSE
    
                    Number := "Transaction No."; 
    ...
    

    替换代码 1

    ...
                 IF TempGLReg.FINDSET THEN
    
                REPEAT
    
    // Add the following lines.
                  SETRANGE("G/L Register No.",TempGLReg."No."); 
    
                  SETRANGE("VAT Allocation",TRUE); 
    
                  VATAllocOnCost := NOT ISEMPTY; 
    // End of the added lines.
    
                  ReversalEntry2.SetReverseFilter(TempGLReg."No.","Reversal Type");
    
    // Add the following line.
                  ReversalEntry2.CheckEntries(VATAllocOnCost); 
    // End of the added line.
    
                  GET(1);
    
                  IF "Reversal Type" = "Reversal Type"::Register THEN
    
                    Number := TempGLReg."No."
    
                  ELSE
    
                    Number := "Transaction No.";
    ...
    

    现有代码 2

    ...
              UNTIL TempGLReg.NEXT = 0;
    
            END ELSE BEGIN
    
              ReversalEntry2.SetReverseFilter("Transaction No.","Reversal Type");
    
    // Delete the following line.
              ReversalEntry2.CheckEntries; 
    // End of the deleted line.
    
              GET(1);
    
              IF "Reversal Type" = "Reversal Type"::Register THEN
    
                Number := "G/L Register No."    
    ...
    

    替换代码 2

    ...
                 UNTIL TempGLReg.NEXT = 0;
    
            END ELSE BEGIN
    
    // Add the following lines.
              SETRANGE("G/L Register No.",TempGLReg."No."); 
    
              SETRANGE("VAT Allocation",TRUE); 
    
              VATAllocOnCost := NOT ISEMPTY; 
    // End of the added lines.
    
              ReversalEntry2.SetReverseFilter("Transaction No.","Reversal Type");
    
    // Add the following line.
              ReversalEntry2.CheckEntries(VATAllocOnCost); 
    // End of the added line.
    
              GET(1);
    
              IF "Reversal Type" = "Reversal Type"::Register THEN
    
                Number := "G/L Register No." 
    ...
    

          

先决条件

必须安装带有功能包 1 的俄罗斯版 Microsoft Dynamics NAV 2009 R2 才能应用此修补程序。

删除信息

无法删除此修补程序。

状态

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

参考资料

VSTF DynamicsNAV SE:260227

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