Фильтрация данных в отчетах

d

Фильтрация данных в отчетах: спецификации и технические детали для Delphi

Корректная фильтрация данных — критический узел системы отчетности. В данной подборке представлены технические материалы по реализации фильтрации с учетом спецификаций компонентов Delphi, стандартов качества обработки данных и аппаратных ограничений.

Материалы реализации: три основных подхода

Сравнение альтернатив для отчетов большого объема

  1. Фильтр через TClientDataSet + Index + FindKey / Locate — скорость поиска 0.5–2 мс (зависит от индекса). Подходит для MDX-структур (многомерных). Недостаток: требует предварительной индексации.
  2. Фильтрация через TFDTable.Filter (локальный Filter) — использует FileSystem диспетчера базы данных. Спецификация: поддерживает операторы >, <, =, LIKE, IN. Не поддерживает функции (UPPER, SUBSTRING). Альтернатива для Firebird/Interbase.
  3. Динамическая SQL-генерация — построение строки WHERE из переменных формы. Технический нюанс: требуется защита от SQL-инъекций (использование TFDQuery.SQL.Text += ...). Стандарт: всегда применять Params вместо конкатенации строк.

Требования к качеству при фильтрации (стандарты)

Для отчетов, выводимых на печать или экспорт, фильтр должен проходить три этапа проверки: 1) Консистентность данных — фильтр не должен пропускать записи, удовлетворяющие условиям (полнота). 2) Идемпотентность — повторное применение без очистки не меняет результат. 3) Формализация — использование приведения типов: для TDateField -> FormatDateTime('yyyy-mm-dd', ...).

Материалы по специфическим инструментам

Технические ограничения и требования к аппаратному обеспечению

Фильтрация на клиентской стороне (TDataSet.Filter, TClientDataSet.Filtered) при объеме данных свыше 200 000 записей упирается в пропускную способность памяти (bandwidth) и частоту процессора. Рекомендуемый порог для интерактивных отчетов — 30 000 записей. Для серверной фильтрации (SQL) необходимое условие — наличие покрывающих индексов по полям фильтрации (B-tree или Hash). Спецификации для Delphi 12 / 2026: поддержка фильтрации через TFDQuery.SQLText + Filter (смешанный режим) только для FireDAC, не для dbGo.

Добавлено: 27.04.2026