Quality Requirements & Specifications

Release: Quality Requirements & Specifications – 27.0.9785.34903

Description

This release addresses a critical performance issue observed during Sales Shipment posting in the QRS (Quality Requirements & Specifications) extension. Performance analysis identified that the QRSDocumentLineContainsLotNoAttributeValues function and the IsLotNoAttributeBlocked procedure were major contributors to posting time, especially when lot attribute filtering was not actively required. The optimization eliminates unnecessary database round-trips by refactoring attribute-blocking checks to use SetLoadFields with early exits and by replacing row-by-row briAAT_Attribute table scans with a single in-memory filter evaluation across all 40 attribute fields. This results in significantly improved posting performance for Food & Beverage operations relying on lot tracking with QRS attributes.

User Stories

No User Story developed in this release.

Bugs

Title Description Impact on previous version
[24596] – Performance issue on QRS when posting Sales Shipment When a user posts a Sales Shipment, significant performance degradation was observed due to excessive database queries during lot number attribute evaluation. The IsLotNoAttributeBlocked procedure in Codeunit 8086868 (briQRS_LotNoAttributesMgt) was refactored to use SetLoadFields(Blocked) and FindFirst() with an early exit when no attribute record exists, reducing field loading overhead on every call. The QRSDocumentLineContainsLotNoAttributeValues procedure in Codeunit 8086893 (briQRS_QRSValidationHelper) was completely rewritten: the old implementation queried briAAT_Attribute table (SetRange/FindSet) and iterated each record with RecordRef field checks; the new implementation inserts the QRS Document Line into a temporary record, applies OR-group filters on all 40 attribute fields via the new local procedure ApplyLotAttributeFilterOnQRSDocumentLineField, and returns a single IsEmpty() evaluation. The obsolete local procedure GetLotAttributeFilterFieldNo was removed. The global variable LotNoAttributesMgt was moved to local scope to eliminate shared codeunit-instance state. Low breaking risk. Behavioral difference: in rare scenarios where multiple briAAT_Attribute records share the same Type, Priority, and Destination Type, the old code returned true if any one was blocked; the new code returns the Blocked value of the first record found by default key. No impact on external event subscribers. No breaking changes to public API.

Events

No event added or updated in this release.

Previous