Các giá trị "Inv. Discount Amount", "Unit price excl VAT" và "Line Amount excl VAT" không chính xác trong đơn hàng bán hàng có giá bao gồm thuế được kích hoạt trong phiên bản Ấn Độ của Microsoft Dynamics NAV 2009

Áp dụng cho
Dynamics NAV 2009

Bài viết này áp dụng cho Microsoft Dynamics NAV dành cho ngôn ngữ (bằng) ngôn ngữ Ấn Độ.

Triệu chứng

Giả sử bạn có đơn hàng có bật thuế bao gồm giá trong phiên bản Ấn Độ của Microsoft Dynamics NAV 2009. Sau khi bạn chạy hàm Calculate Structure Values , Inv. Discount Amount, Unit price excl VATLine Amount excl VAT values are incorrect. 
Sự cố này xảy ra trong các sản phẩm sau:

  • Phiên bản Ấn Độ của Microsoft Dynamics NAV 2009 R2
  • Phiên bản Ấn Độ của Microsoft Dynamics NAV 2009 Gói Dịch vụ 1 (SP1)

Giải pháp

Thông tin cập nhật nóng

Hotfix được hỗ trợ hiện có sẵn từ Microsoft. Tuy nhiên, nó chỉ là nhằm sửa chữa vấn đề được mô tả trong bài viết này. Áp dụng nó chỉ cho hệ thống đang gặp này cụ thể vấn đề. Hotfix này có thể nhận được thử nghiệm bổ sung. Do đó, nếu bạn không bị ảnh hưởng nghiêm trọng bởi sự cố này, chúng tôi khuyên bạn nên đợi gói dịch vụ Microsoft Dynamics NAV tiếp theo hoặc phiên bản Microsoft Dynamics NAV tiếp theo có chứa hotfix này.

Lưu ý Trong trường hợp đặc biệt, các khoản phí thường phát sinh đối với các cuộc gọi hỗ trợ có thể bị hủy nếu Chuyên gia Hỗ trợ Kỹ thuật dành cho Microsoft Dynamics và các sản phẩm liên quan xác định rằng một bản cập nhật cụ thể sẽ giải quyết sự cố của bạn. Chi phí hỗ trợ thông thường sẽ áp dụng cho các câu hỏi và sự cố hỗ trợ bổ sung không đủ điều kiện cho bản cập nhật cụ thể được đề cập.

            
          

Thông tin cài đặt

Microsoft chỉ cung cấp các ví dụ lập trình để minh họa mà không cần bảo hành dù là rõ ràng hay ngụ ý. Điều này bao gồm, nhưng không giới hạn ở, bảo hành ngụ ý về khả năng bán được hoặc sự thích hợp cho một mục đích cụ thể. Bài viết này giả định rằng bạn đã quen thuộc với ngôn ngữ lập trình đang được chứng minh và với các công cụ được sử dụng để tạo và gỡ lỗi thủ tục. Các kỹ sư hỗ trợ của Microsoft có thể giúp giải thích chức năng của một quy trình cụ thể, nhưng họ sẽ không sửa đổi các ví dụ này để cung cấp chức năng bổ sung hoặc quy trình xây dựng để đáp ứng các yêu cầu cụ thể của bạn.

Lưu ý Trước khi bạn cài đặt hotfix này, hãy xác minh rằng tất cả người dùng máy khách Microsoft Navision đã được đăng xuất khỏi hệ thống. Điều này bao gồm người dùng máy khách Dịch vụ Ứng dụng Microsoft Navision (NAS). Bạn nên là người dùng khách duy nhất đăng nhập khi bạn thực hiện hotfix này.

Để thực hiện hotfix này, bạn phải có giấy phép nhà phát triển.

Chúng tôi khuyên bạn nên gán tài khoản người dùng trong cửa sổ Đăng nhập Windows hoặc trong cửa sổ Đăng nhập Cơ sở dữ liệu. Nếu tài khoản người dùng không thể được gán ID vai trò "SIÊU", bạn phải xác minh rằng tài khoản người dùng có các quyền sau đây:

  • Quyền Sửa đổi đối với đối tượng mà bạn sẽ thay đổi.
  • Quyền Thực thi đối với đối tượng ID Đối tượng Hệ thống 5210 và đối với đối tượng ID Đối tượng Hệ thống 9015.

                
Lưu ý Bạn không phải có quyền đối với các kho dữ liệu trừ khi bạn phải thực hiện sửa chữa dữ liệu.

Thay đổi mã

Lưu ý Luôn kiểm tra các bản sửa lỗi mã trong môi trường được kiểm soát trước khi bạn áp dụng các bản sửa lỗi cho máy tính sản xuất của bạn.
Để giải quyết vấn đề này, hãy làm theo các bước sau:

  1. Thay đổi mã trong dòng giảm giá % - OnValidate kích hoạt trong bảng Dòng bán hàng (37) như sau:
    Mã hiện có

    ...
    "Line Discount %" := 100;
    
    // Delete the following line.
    IF NOT "Price Inclusive of Tax" THEN
    
    "Line Discount Amount" :=
    ROUND(ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * "Line Discount %" / 100,
    Currency."Amount Rounding Precision")
    
    // Delete the following lines.
    ELSE
    "Line Discount Amount" := ROUND(ROUND(Quantity * "Unit Price Incl. of Tax",Currency."Amount Rounding Precision") *
    "Line Discount %" / 100,Currency."Amount Rounding Precision");
    // End of the lines.
    ...
    

    Mã thay thế

    ...
    
    "Line Discount %" := 100;
    
    "Line Discount Amount" :=
    ROUND(ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * "Line Discount %" / 100,
    Currency."Amount Rounding Precision");
    ...
    
  2. Thay đổi mã trong dòng giảm giá số tiền - OnValidate kích hoạt trong bảng dòng bán hàng (37) như sau:
    Mã hiện có

    ...
    TESTFIELD(Quantity);
    
    // Delete the following line.
    IF NOT "Price Inclusive of Tax" THEN
    
    IF ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") <> 0 THEN
    "Line Discount %" :=
    ROUND(
    "Line Discount Amount" / ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * 100,
    0.00001)
    ELSE
    "Line Discount %" := 0
    
    // Delete the following lines.
    ELSE
    IF ROUND(Quantity * "Unit Price Incl. of Tax",Currency."Amount Rounding Precision") <> 0 THEN
    "Line Discount %" :=
    ROUND(
    "Line Discount Amount" / ROUND(Quantity * "Unit Price Incl. of Tax",Currency."Amount Rounding Precision") * 100,
    0.00001)
    ELSE
    "Line Discount %" := 0;
    // End of the lines.
    
    "Inv. Discount Amount" := 0;
    ...
    

    Mã thay thế

    ...
    TESTFIELD(Quantity);
    IF ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") <> 0 THEN
    "Line Discount %" :=
    ROUND(
    "Line Discount Amount" / ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * 100,
    0.00001)
    ELSE
    "Line Discount %" := 0;
    "Inv. Discount Amount" := 0;
    ...
    
  3. Thay đổi mã trong hàm GetSalesPriceExclusiveTaxes trong bảng Dòng Bán hàng (37) như sau:
    Mã hiện có

    ...
    IF StrOrderDetails."Include Base" THEN
    BaseAmountVariable := BaseAmountVariable + Quantity;
    
    // Delete the following lines.
    IF StrOrderDetails."Include Line Discount" THEN
    BaseAmountFixed := BaseAmountFixed - "Line Discount Amount";
    IF StrOrderDetails."Include Invoice Discount" THEN BEGIN
    BaseAmountFixed := BaseAmountFixed + "Inv Discount Fixed";
    BaseAmountVariable := BaseAmountVariable - "Inv Discount Variable";
    END;
    // End of the lines.
    
    IF SalesHeader."Currency Factor" <> 0 THEN
    ...
    

    Mã thay thế

    ...
    IF StrOrderDetails."Include Base" THEN
    BaseAmountVariable := BaseAmountVariable + Quantity;
    
    IF SalesHeader."Currency Factor" <> 0 THEN
    ...
    
  4. Thay đổi mã trong hàm CalculateStructuresPIT trong bảng Dòng Doanh số (37) như sau:
    Mã hiện có

    ...
    SalesLine.MODIFY;
    
    // Delete the following lines.
    IF i < 3 THEN BEGIN
    FixedAmt := 0;
    VariableAmt := 0;
    AdjustedAmt := 0;
    DiffAdjustmentAmt := 0;
    FixedAmt := SalesLine."Unit Price Incl. of Tax" * SalesLine.Quantity;
    VariableAmt := SalesLine.Quantity;
    StrOrderLineDetails.RESET;
    StrOrderLineDetails.SETCURRENTKEY(Type,"Document Type","Document No.","Structure Code","Item No.","Line No.");
    StrOrderLineDetails.SETRANGE(Type,StrOrderLineDetails.Type::Sale);
    StrOrderLineDetails.SETRANGE("Document Type",SalesLine."Document Type");
    StrOrderLineDetails.SETRANGE("Document No.",SalesLine."Document No.");
    StrOrderLineDetails.SETRANGE("Structure Code",SalesLine."PIT Structure");
    StrOrderLineDetails.SETRANGE("Item No.",SalesLine."No.");
    StrOrderLineDetails.SETRANGE("Line No.",SalesLine."Line No.");
    StrOrderLineDetails.SETRANGE("Include PIT Calculation",TRUE);
    IF StrOrderLineDetails.FIND('-') THEN
    REPEAT
    FixedAmt -= StrOrderLineDetails.Amount;
    AdjustedAmt := AdjustedAmt + StrOrderLineDetails.Amount;
    UNTIL StrOrderLineDetails.NEXT = 0;
    
    SalesLine."Unit Price" := 0;
    IF VariableAmt <> 0 THEN BEGIN
    SalesLine."Unit Price" := ROUND((FixedAmt / VariableAmt),GetRoundingPrecisionUnitPrice);
    IF SalesLine."Unit Price" < 0 THEN
    SalesLine.FIELDERROR("Unit Price");
    IF (i = 2) AND (FixedAmt <> 0) AND (SalesLine.Quantity <> 0) THEN BEGIN
    AdjustedAmt := AdjustedAmt + (SalesLine."Unit Price" * SalesLine.Quantity);
    FixedAmt := SalesLine."Unit Price Incl. of Tax" * SalesLine.Quantity;
    DiffAdjustmentAmt := ((FixedAmt - AdjustedAmt)/SalesLine.Quantity) *
    (SalesLine."Unit Price" * SalesLine.Quantity) / (FixedAmt );
    SalesLine."Unit Price" := ROUND(SalesLine."Unit Price" - DiffAdjustmentAmt,GetRoundingPrecisionUnitPrice);
    IF SalesLine."Unit Price" < 0 THEN
    SalesLine.FIELDERROR("Unit Price");
    END;
    SalesLine.ValidateUnitPrice;
    SalesLine.ChkQtyUpdatioAfterDDPLA;
    SalesLine.MODIFY;
    IF SalesHeader."Calc. Inv. Discount (%)" THEN
    CalcInvDis.CalculateWithSalesHeader(SalesHeader,SalesLine);
    SalesLine.GET(SalesLine."Document Type",SalesLine."Document No.",SalesLine."Line No.");
    END;
    END;
    // End of the lines.
    ...
    

    Mã thay thế

    ...
    SalesLine.MODIFY;
    ...
    
  5. Thay đổi mã trong hàm UpdateSalesLinesPIT trong bảng Dòng Bán hàng (37) như sau:
    Mã hiện có

    ...
    "Service Tax Amount" + "Service Tax eCess Amount" + "Service Tax SHE Cess Amount";
    MODIFY;
    ...
    

    Mã thay thế

    ...
    
    "Service Tax Amount" + "Service Tax eCess Amount" + "Service Tax SHE Cess Amount";
    
    // Add the following lines.
    "Amount To Customer UPIT" := 
    "Line Amount" - "Inv. Discount Amount" + "Excise Amount" + "Tax Amount" + "Charges To Customer"; 
    // End of the lines.
    
    MODIFY;
    ...
    
  6. Thay đổi mã trong hàm ValidateUnitPrice trong bảng Dòng Doanh số (37) như sau:
    Mã hiện có

    ...
    "Line Discount %" := 100;
    
    // Delete the following line.
    IF NOT "Price Inclusive of Tax" THEN
    
    "Line Discount Amount" := ROUND(ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * "Line Discount %" / 100,
    Currency."Amount Rounding Precision")
    
    // Delete the following lines.
    ELSE
    "Line Discount Amount" := ROUND(ROUND(Quantity * "Unit Price Incl. of Tax",Currency."Amount Rounding Precision") *
    "Line Discount %" / 100,Currency."Amount Rounding Precision");
    // End of the lines.
    
    "Inv. Discount Amount" := 0;
    ...
    

    Mã thay thế

    ...
    
    "Line Discount %" := 100;
    "Line Discount Amount" := ROUND(ROUND(Quantity * "Unit Price",Currency."Amount Rounding Precision") * "Line Discount %" / 100,
    Currency."Amount Rounding Precision");
    "Inv. Discount Amount" := 0;
    ...
    
  7. Thay đổi mã trong hàm DivideAmount trong đơn vị mã Sales - Post (80) như sau:
    Mã hiện có 1

    ...
    IF SalesLineQty <> Quantity THEN
    
    // Delete the following lines.
    IF "Price Inclusive of Tax" THEN
    "Line Discount Amount" :=
    ROUND((SalesLineQty * "Unit Price Incl. of Tax") * "Line Discount %" / 100,Currency."Amount Rounding Precision")
    ELSE
    // End of the lines.
    
    "Line Discount Amount" :=
    ROUND("Line Amount" * "Line Discount %" / 100,Currency."Amount Rounding Precision");
    "Line Amount" := "Line Amount" - "Line Discount Amount";
    ...
    

    Mã thay thế 1

    ...
    IF SalesLineQty <> Quantity THEN
    "Line Discount Amount" :=
    ROUND("Line Amount" * "Line Discount %" / 100,Currency."Amount Rounding Precision");
    "Line Amount" := "Line Amount" - "Line Discount Amount";
    ...
    

    Mã hiện có 2

    ...
    "Bal. TDS/TCS Including SHECESS",Currency."Amount Rounding Precision");
    
    // Delete the following lines.
    IF "Price Inclusive of Tax" THEN BEGIN
    "Amount To Customer UPIT" := SalesLineQty * "Unit Price";
    GLSetup.GET;
    StrOrdLineDetails2.RESET;
    StrOrdLineDetails2.SETRANGE(Type,StrOrdLineDetails2.Type::Sale);
    StrOrdLineDetails2.SETRANGE("Document Type","Document Type");
    StrOrdLineDetails2.SETRANGE("Document No.","Document No.");
    StrOrdLineDetails2.SETRANGE("Line No.","Line No.");
    StrOrdLineDetails2.SETRANGE("Include PIT Calculation",TRUE);
    IF StrOrdLineDetails2.FINDSET THEN
    REPEAT
    SalesLine2.GET("Document Type","Document No.","Line No.");
    IF StrOrdLineDetails2."Tax/Charge Type" = StrOrdLineDetails2."Tax/Charge Type"::Excise THEN
    "Amount To Customer UPIT" += "Excise Amount";
    IF StrOrdLineDetails2."Tax/Charge Type" = StrOrdLineDetails2."Tax/Charge Type"::"Sales Tax" THEN
    "Amount To Customer UPIT" += "Tax Amount";
    IF StrOrdLineDetails2."Tax/Charge Type" = StrOrdLineDetails2."Tax/Charge Type"::Charges THEN BEGIN
    IF QuantityType = QuantityType::General THEN
    "Amount To Customer UPIT" += ROUND(StrOrdLineDetails2.Amount * SalesLineQty / Quantity,
    Currency."Amount Rounding Precision");
    IF QuantityType = QuantityType::Invoicing THEN
    "Amount To Customer UPIT" += ROUND(StrOrdLineDetails2.Amount * SalesLine2."Qty. to Invoice" / SalesLine2.Quantity,
    Currency."Amount Rounding Precision");
    IF QuantityType = QuantityType::Shipping THEN
    "Amount To Customer UPIT" += ROUND(StrOrdLineDetails2.Amount * SalesLine2."Qty. to Ship" / SalesLine2.Quantity,
    Currency."Amount Rounding Precision");
    END;
    UNTIL StrOrdLineDetails2.NEXT = 0;
    "Total UPIT Amount" := ROUND("Total UPIT Amount" * SalesLineQty / Quantity,Currency."Amount Rounding Precision");
    END;
    // End of the lines.
    
    END;
    END;
    ...
    

    Mã thay thế 2

    ...
    "Bal. TDS/TCS Including SHECESS",Currency."Amount Rounding Precision");
    
    // Add the following lines.
    IF "Price Inclusive of Tax" THEN
    "Amount To Customer UPIT" :=
    ROUND("Line Amount" - "Inv. Discount Amount" + "Excise Amount" + "Tax Amount" +
    "Charges To Customer", Currency."Amount Rounding Precision");
    // End of the lines.
    
    END;
    END;
    ...
    
  8. Thay đổi mã trong hàm RoundAmount trong đơn vị mã Sales - Post (80) như sau:
    Mã hiện có

    ...
    TotalSalesLineLCY."Amount To Customer";
    "Charges To Customer" :=
    ...
    

    Mã thay thế

    ...
    TotalSalesLineLCY."Amount To Customer";
    
    // Add the following lines.
    "Amount To Customer UPIT" :=
    ROUND(
    CurrExchRate.ExchangeAmtFCYToLCY(
    UseDate,SalesHeader."Currency Code",
    TotalSalesLine."Amount To Customer UPIT",SalesHeader."Currency Factor")) -
    TotalSalesLineLCY."Amount To Customer UPIT";
    "Total UPIT Amount" :=
    ROUND(
    CurrExchRate.ExchangeAmtFCYToLCY(
    UseDate,SalesHeader."Currency Code",
    TotalSalesLine."Total UPIT Amount",SalesHeader."Currency Factor")) -
    TotalSalesLineLCY."Total UPIT Amount";
    // End of the lines.
    
    "Charges To Customer" :=
    ...
    
  9. Thay đổi mã trong hàm ReverseAmount trong đơn vị mã Sales - Post (80) như sau:
    Mã hiện có

    ...
    "Amount To Customer" := -"Amount To Customer";
    "Charges To Customer" := -"Charges To Customer";
    ...
    

    Mã thay thế

    ...
    "Amount To Customer" := -"Amount To Customer";
    
    // Add the following lines.
    Amount To Customer UPIT" := -"Amount To Customer UPIT";
    Total UPIT Amount" := -"Total UPIT Amount";
    // End of the lines.
    
    "Charges To Customer" := -"Charges To Customer";
    ...
    
  10. Thay đổi mã trong chức năng InvoiceUPITRounding bán hàng - đăng codeunit (80) như sau:
    Mã hiện có 1

    ...
    EXIT;
    
    // Delete the following line.
    UPITRoundingAmount := TotalSalesLine."Total UPIT Amount" - ROUND(TotalSalesLine."Amount To Customer UPIT");
    
    IF UPITRoundingAmount <> 0 THEN BEGIN
    ...
    

    Mã thay thế 1

    ...
    EXIT;
    
    // Add the following line.
    UPITRoundingAmount := TotalSalesLine."Amount To Customer UPIT" - ROUND(TotalSalesLine."Amount To Customer UPIT");
    
    IF UPITRoundingAmount <> 0 THEN BEGIN
    ...
    

    Mã hiện có 2

    ...
    "UPIT Rounding Inserted" := TRUE;
    
    // Delete the following line.
    IF SalesHeader."Prices Including VAT" THEN
    
    VALIDATE("Unit Price",UPITRoundingAmount)
    ...
    

    Mã thay thế 2

    ...
    "UPIT Rounding Inserted" := TRUE;
    
    // Add the following line.
    IF SalesHeader."Price Inclusive of Taxes" THEN
    
    VALIDATE("Unit Price",UPITRoundingAmount)
    ...
    

Điều kiện tiên quyết

Bạn phải cài đặt một trong các sản phẩm sau để áp dụng bản cập nhật nóng này:

  • Phiên bản Ấn Độ của Microsoft Dynamics NAV 2009 R2
  • Phiên bản Ấn Độ của Microsoft Dynamics NAV 2009 Gói Dịch vụ 1 (SP1)

Loại bỏ thông tin

Bạn không thể loại bỏ hotfix này.

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong mục "áp dụng cho".

Lưu ý Đây là bài viết "PHÁT HÀNH NHANH" được tạo trực tiếp từ trong tổ chức hỗ trợ của Microsoft. Thông tin có trong tài liệu này được cung cấp tương tự để đáp ứng các vấn đề mới xuất hiện. Do tốc độ làm cho nó có sẵn, các tài liệu có thể bao gồm lỗi đánh máy và có thể được sửa đổi bất cứ lúc nào mà không cần thông báo. Hãy xem Điều khoản Sử dụng để biết những điều cần cân nhắc khác.