#crystal-reports #crystal-reports-xi
#crystal-отчеты #crystal-reports-xi
Вопрос:
Я пытаюсь суммировать данные в заголовке отчета, но продолжаю сталкиваться с неправильным суммированием или дублированием строк сведений.
Существует два представления SQL, из которых я извлекаю данные, и их можно упростить следующим образом:
View_Invoice_Header:
Invoice ID Department Total Amount
================================================
101 A 30
102 B 20
103 C 5
104 C 5
View_Invoice_Detail:
Invoice ID Line Department Total Amount
============================================================
101 1 A 30
101 2 A 30
102 1 B 20
103 1 C 5
104 1 C 5
104 2 C 5
104 3 C 5
В заголовке отчета я хочу отобразить итоги для каждого отдела следующим образом:
Department Total Amount
==============================
A 30
B 20
C 10
Я думал, что это будет проще выполнить, чем оказывается.
- Если таблицы связаны между собой (по идентификатору счета), то суммирование итогов из View_Invoice_Header по отделам приводит к сильно завышенным значениям из-за того, что общая сумма для каждого умножается на количество связанных строк сведений.
- Если таблицы не связаны, строки сведений дублируются каждой строкой заголовка.
Есть ли способы обойти эти проблемы или мне следует попробовать другой подход? Таблицы не нужно связывать, представление заголовка необходимо только для суммирования результатов в заголовке отчета.
Комментарии:
1. Возможно, вам потребуется изучить возможность использования текущих итоговых полей вместо полей сводки. При наличии повторяющихся записей сведений поле текущего итога может позволить вам исключить дубликаты из суммирования, поскольку вы можете задать условия для оценки и сброса поля. Например, вы можете настроить его так, чтобы он оценивал только значение и включался в сводку при изменении назначенного вами значения поля или группы.
2. Разве текущие итоги не работают только при вставке в конец отчета? При вставке в заголовок отчета я вижу только итог из первой группы.
3. Да, текущие итоговые поля работают лучше всего, когда они размещены в разделах нижнего колонтитула. При размещении в заголовке они не будут накапливать итоги правильно.
Ответ №1:
Создайте новое поле формулы следующим образом:
If {Line} = 1 Then {Total Amount} Else 0
Суммирование этого даст требуемый результат. (Предполагается, что каждая накладная имеет ровно одну строку с номером 1.)
Комментарии:
1. Единственная проблема заключается в том, что при наличии нескольких накладных для отдела при выполнении MAX отображается только самая большая накладная в каждом отделе.
2. Вы правы, я наблюдал за этим. Соответствующим образом отредактирую свой ответ…