Bài viết này áp dụng cho Microsoft Dynamics NAV dành cho ngôn ngữ tiếng Ý (it).
Triệu chứng
Giả sử bạn tạo hóa đơn sử dụng khoản phí mục trong phiên bản Tiếng Ý của Microsoft Dynamics NAV và bạn liên kết hóa đơn với lô hàng hiện có cho khách hàng của Liên minh Châu Âu (EU). Khi bạn tạo một tạp chí Intrastat, khoản phí cho bản ghi nhớ tín dụng không được thêm vào tạp chí Intrastat.
Sự cố này xảy ra trong các sản phẩm sau:
- Phiên bản tiếng Ý của Microsoft Dynamics NAV 2009 Gói Dịch vụ 1
- Phiên bản tiếng Ý của Microsoft Dynamics NAV 2009
- Phiên bản tiếng Ý của Microsoft Dynamics NAV 5.0 Gói Dịch vụ 1
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 2009 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, thay đổi mã trong báo cáo Get Mục Sổ cái mục (594). Để thực hiện điều này, hãy làm theo các bước sau:
Thay đổi mã trong Mục nhập Sổ cái Mục - Trình kích hoạt OnPreDataItem như sau:
Mã hiện có... END; IntrastatJnlLine2.SETCURRENTKEY("Source Type","Source Entry No."); IntrastatJnlLine2.SETRANGE("Source Type",IntrastatJnlLine2."Source Type"::"Item entry"); WITH ValueEntry DO BEGIN SETCURRENTKEY("Item Ledger Entry No."); // Delete the following line. SETRANGE("Valuation Date",StartDate,EndDate); SETRANGE("Entry Type","Entry Type"::"Direct Cost"); ...Mã thay thế
... END; // Add the following line. IntrastatJnlLine2.SETRANGE(IntrastatJnlLine2."Journal Batch Name",IntrastatJnlBatch.Name); IntrastatJnlLine2.SETCURRENTKEY("Source Type","Source Entry No."); IntrastatJnlLine2.SETRANGE("Source Type",IntrastatJnlLine2."Source Type"::"Item entry"); WITH ValueEntry DO BEGIN SETCURRENTKEY("Item Ledger Entry No."); // Add the following line. SETRANGE("Posting Date",StartDate,EndDate); SETRANGE("Entry Type","Entry Type"::"Direct Cost"); ...Xóa biến cục bộ có các thuộc tính sau đây từ Mục Nhập Sổ cái - Trình kích hoạt OnAfterGetRecord:
- Tên:Vị trí
- DataType:Record
- Loại con:Vị trí
Xóa biến cục bộ có các thuộc tính sau đây từ Mục Nhập Sổ cái - Trình kích hoạt OnAfterGetRecord:
- Name:ItemLedgEntry
- DataType:Record
- Loại con:Mục nhập Sổ cái Mục
Xóa biến cục bộ có các thuộc tính sau đây từ Mục Nhập Sổ cái - Trình kích hoạt OnAfterGetRecord:
- Tên:Bao gồm
- DataType:Boolean
Thay đổi mã trong Mục Nhập Sổ cái Mục - Trình kích hoạt OnAfterGetRecord như sau:
Mã hiện có... IntrastatJnlLine2.SETRANGE("Source Entry No.","Entry No."); IF IntrastatJnlLine2.FINDFIRST THEN CurrReport.SKIP; // Delete the following lines. IF "Drop Shipment" THEN BEGIN IF ("Country/Region Code" = CompanyInfo."Country/Region Code") OR ("Country/Region Code" = '') THEN CurrReport.SKIP; IF "Applies-to Entry" = 0 THEN BEGIN ItemLedgEntry.SETCURRENTKEY("Item No.","Posting Date"); ItemLedgEntry.SETRANGE("Item No.","Item No."); ItemLedgEntry.SETRANGE("Posting Date","Posting Date"); ItemLedgEntry.SETRANGE("Applies-to Entry","Entry No."); ItemLedgEntry.FINDFIRST; END ELSE ItemLedgEntry.GET("Applies-to Entry"); IF (ItemLedgEntry."Country/Region Code" <> CompanyInfo."Country/Region Code") AND (ItemLedgEntry."Country/Region Code" <> '') THEN CurrReport.SKIP; END ELSE IF "Entry Type" = "Entry Type"::Transfer THEN BEGIN IF ("Country/Region Code" = CompanyInfo."Country/Region Code") OR ("Country/Region Code" = '') THEN CurrReport.SKIP; IF "Transfer Order No." = '' THEN BEGIN Location.GET("Location Code"); IF (Location."Country/Region Code" <> '') AND (Location."Country/Region Code" <> CompanyInfo."Country/Region Code") THEN CurrReport.SKIP; END ELSE BEGIN ItemLedgEntry.SETRANGE("Transfer Order No.","Transfer Order No."); ItemLedgEntry.SETFILTER("Country/Region Code",'%1 | %2','',CompanyInfo."Country/Region Code"); IF ItemLedgEntry.FINDSET THEN REPEAT Location.GET(ItemLedgEntry."Location Code"); IF Location."Use As In-Transit" THEN Include:= TRUE; UNTIL Include OR (ItemLedgEntry.NEXT = 0); IF NOT Include THEN CurrReport.SKIP; END; END ELSE IF "Location Code" <> '' THEN BEGIN Location.GET("Location Code"); CheckILE(Location."Country/Region Code"); END ELSE BEGIN IF "Entry Type" = "Entry Type"::Purchase THEN CheckILE(CompanyInfo."Ship-to Country/Region Code"); IF "Entry Type" = "Entry Type"::Sale THEN CheckILE(CompanyInfo."Country/Region Code"); END; // End of the lines. TotalInvoicedQty := 0; ...Mã thay thế
... IntrastatJnlLine2.SETRANGE("Source Entry No.","Entry No."); IF IntrastatJnlLine2.FINDFIRST THEN CurrReport.SKIP; TotalInvoicedQty := 0; .... Create a new DataItem as follow: DataItem Name Value Entry <Value Entry> Click Propriety and set: DataItemTableView = SORTING(Entry No.) In the Value Entry - OnPreDataItem() add the following code lines: SETRANGE("Posting Date",StartDate,EndDate); SETFILTER("Item Charge No.",'<> %1',''); "Item Ledger Entry".SETRANGE("Posting Date"); IntrastatJnlLine2.SETRANGE(IntrastatJnlLine2."Journal Batch Name",IntrastatJnlBatch.Name); IntrastatJnlLine2.SETCURRENTKEY("Source Type","Source Entry No."); IntrastatJnlLine2.SETRANGE("Source Type",IntrastatJnlLine2."Source Type"::"Item entry"); In the Value Entry - OnAfterGetRecord() trigger add the following code lines: IntrastatJnlLine2.SETRANGE("Source Entry No.","Item Ledger Entry No."); IF IntrastatJnlLine2.FINDFIRST THEN CurrReport.SKIP; IF "Item Ledger Entry".GET("Item Ledger Entry No.") THEN BEGIN IF ("Item Ledger Entry"."Posting Date" > StartDate) AND ("Item Ledger Entry"."Posting Date" < EndDate) THEN CurrReport.SKIP; IF "Country/Region".GET("Item Ledger Entry"."Country/Region Code") THEN IF "Country/Region"."EU Country/Region Code" = '' THEN CurrReport.SKIP; TestILE("Item Ledger Entry"); InsertValueEntryLine; END; ...Thay đổi mã trong hàm CheckILE như sau:
Mã hiện có... // Delete the following lines. IF NOT ((("Item Ledger Entry"."Country/Region Code" = CompanyInfo."Country/Region Code") OR ("Item Ledger Entry"."Country/Region Code" = '')) XOR ((CountryRegionCode = CompanyInfo."Country/Region Code") OR (CountryRegionCode = ''))) // End of the lines. THEN ...Mã thay thế
... // Add the following lines. IF ("Item Ledger Entry"."Country/Region Code" IN [CompanyInfo."Country/Region Code",'']) = (CountryRegionCode IN [CompanyInfo."Country/Region Code",'']) // End of the lines. THEN ...Tạo hàm toàn cục TestILE. Để thực hiện điều này, hãy làm theo các bước sau:
Thêm tham số, rồi xác định tham số như sau:
- Var: Không
- Tên: ILE
- DataType:Record
- Loại con: Mục nhập Sổ cái Mục
Thêm biến cục bộ, rồi xác định biến số như sau:
- Name:ItemLedgEntry
- DataType:Record
- Loại con:Mục nhập Sổ cái Mục
Thêm biến cục bộ, rồi xác định biến số như sau:
- Tên:Vị trí
- DataType:Record
- Loại con:Vị trí
Thêm biến cục bộ, rồi xác định biến số như sau:
- Tên:Bao gồm
- DataType:Boolean
Thêm mã như sau:
WITH ILE DO BEGIN IF "Drop Shipment" THEN BEGIN IF ("Country/Region Code" = CompanyInfo."Country/Region Code") OR ("Country/Region Code" = '') THEN CurrReport.SKIP; IF "Applies-to Entry" = 0 THEN BEGIN ItemLedgEntry.SETCURRENTKEY("Item No.","Posting Date"); ItemLedgEntry.SETRANGE("Item No.","Item No."); ItemLedgEntry.SETRANGE("Posting Date","Posting Date"); ItemLedgEntry.SETRANGE("Applies-to Entry","Entry No."); ItemLedgEntry.FINDFIRST; END ELSE ItemLedgEntry.GET("Applies-to Entry"); IF (ItemLedgEntry."Country/Region Code" <> CompanyInfo."Country/Region Code") AND (ItemLedgEntry."Country/Region Code" <> '') THEN CurrReport.SKIP; END ELSE IF "Entry Type" = "Entry Type"::Transfer THEN BEGIN IF ("Country/Region Code" = CompanyInfo."Country/Region Code") OR ("Country/Region Code" = '') THEN CurrReport.SKIP; IF "Transfer Order No." = '' THEN BEGIN Location.GET("Location Code"); IF (Location."Country/Region Code" <> '') AND (Location."Country/Region Code" <> CompanyInfo."Country/Region Code") THEN CurrReport.SKIP; END ELSE BEGIN ItemLedgEntry.SETRANGE("Transfer Order No.","Transfer Order No."); ItemLedgEntry.SETFILTER("Country/Region Code",'%1 | %2','',CompanyInfo."Country/Region Code"); IF ItemLedgEntry.FINDSET THEN REPEAT Location.GET(ItemLedgEntry."Location Code"); IF Location."Use As In-Transit" THEN Include:= TRUE; UNTIL Include OR (ItemLedgEntry.NEXT = 0); IF NOT Include THEN CurrReport.SKIP; END; END ELSE IF "Location Code" <> '' THEN BEGIN Location.GET("Location Code"); CheckILE(Location."Country/Region Code"); END ELSE BEGIN IF "Entry Type" = "Entry Type"::Purchase THEN CheckILE(CompanyInfo."Ship-to Country/Region Code"); IF "Entry Type" = "Entry Type"::Sale THEN CheckILE(CompanyInfo."Country/Region Code"); END; END;
Tạo hàm chung InsertValueEntryLine. Để thực hiện điều này, hãy làm theo các bước sau:
Thêm biến cục bộ, rồi xác định biến số như sau:
- Tên:Vị trí
- DataType:Record
- Loại con:Vị trí
Thêm mã như sau:
GetGLSetup; WITH IntrastatJnlLine DO BEGIN INIT; "Line No." := "Line No." + 10000; Date := "Value Entry"."Posting Date"; "Country/Region Code" := "Item Ledger Entry"."Country/Region Code"; "Transaction Type" := "Item Ledger Entry"."Transaction Type"; "Transport Method" := "Item Ledger Entry"."Transport Method"; "Source Entry No." := "Item Ledger Entry"."Entry No."; Quantity := "Item Ledger Entry".Quantity; "Document No." := "Value Entry"."Document No."; "Item No." := "Item Ledger Entry"."Item No."; "Entry/Exit Point" := "Item Ledger Entry"."Entry/Exit Point"; Area := "Item Ledger Entry".Area; "Transaction Specification" := "Item Ledger Entry"."Transaction Specification"; Amount := ROUND(ABS("Value Entry"."Sales Amount (Actual)"),1); IF Quantity < 0 THEN Type := Type::Shipment ELSE Type := Type::Receipt; IF ("Country/Region Code" = '') OR ("Country/Region Code" = CompanyInfo."Country/Region Code") THEN BEGIN IF "Item Ledger Entry"."Location Code" = '' THEN "Country/Region Code" := CompanyInfo."Ship-to Country/Region Code" ELSE BEGIN Location.GET("Item Ledger Entry"."Location Code"); "Country/Region Code" := Location."Country/Region Code" END; END; VALIDATE("Item No."); "Source Type" := "Source Type"::"Item entry"; VALIDATE(Quantity,ROUND(ABS(Quantity),0.00001)); VALIDATE("Cost Regulation %",IndirectCostPctReq); INSERT; END;
Đ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 tiếng Ý của Microsoft Dynamics NAV 2009 Gói Dịch vụ 1
- Phiên bản tiếng Ý của Microsoft Dynamics NAV 2009
- Phiên bản tiếng Ý của Microsoft Dynamics NAV 5.0 Gói Dịch vụ 1
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.