Публикация

Вывод сообщения, если наборы данных отчета пусты.

Добрый день! Иногда сталкиваемся с просьбой клиентов не выводить пустой отчет, т.е. его предпросмотр. В случае, когда у отчета "своя" форма фильтрации - все просто, т.е. мы получаем готовый набор данных, анализируем его и выводим сообщение, если это нужно. Но что делать, когда используется базовая форма фильтрации?

Для решения данной проблемы в скрипте scr_BaseFastReportPreviewScript можно изменить функцию ProcessNotify:

function ProcessNotify(ASender, AMessage) {
        if (AMessage == MSG_OK) {
            AddFilterStringsToReport(ASender, frpMain.Report);

            /* Проверка, пуст ли набор данных. Если Да - не показывать Preview отчета */
                if ((Assigned(ASender)) &&
                        (ASender.Name == 'wnd_ReportFilters') &&
                        (Assigned(ASender.NonVisualComponents)) &&
                        (ASender.NonVisualComponents.Count > 0)) {
                        var Components = ASender.NonVisualComponents;
                        var Count = Components.Count;
                        var Component;
                        var Dataset;
                        var DatasetsCount = 0;
                        var EmptyDatasetsCount = 0;
                        for (var i = 0; i Count; i++) {
                                Component = Components.Items(0);
                                if (Component.TypeCode == 'DatasetLink') {
                                        Dataset = Component.Dataset;
                                        if (Assigned(Dataset)) {
                                                DatasetsCount++;
                                                Dataset.Open();
                                                if (Dataset.IsEmptyPage) {
                                                        EmptyDatasetsCount++;
                                                }
                                                Dataset.Close();
                                        }
                                }
                        }
                        if (DatasetsCount == EmptyDatasetsCount) {
                                ShowWarningDialog("Набор данных пуст.");
                                return;                
                        }
            }
            Self.Show();
        } else
        if (AMessage == MSG_CANCEL){
            Self.Close();
        }
}

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

Прим.: Возможно, у кого то есть другое, более изящное решение - милости прошу в комментарии.

Нравится

Поделиться

0 комментариев
Показать все комментарии