Главная » про WinTariff

Редактируем бланк отчета

1 ноября 2010

Сегодня — вычисление дополнительных данных прямо в бланке отчете. Для примера подсчитаем количество неотвеченных звонков (на самом деле будет расчитываться количество звонков с нулевой длительностью).

Готовый файл бланка отчета можно скачать здесь.
Файл нужно скопировать в папку WinTariff32\Forms. Далее, как обычно, нужно сделать выборку и выбрать для бланк ‘Основной отчет (неотвеченные звонки)’. Искомое значение выводится В КОНЦЕ отчета, после всех данных по внутр. номерам (почему так и как бороться — см. ниже).

Для вычисления количества неотвеченных звонков (точнее — звонков с нулевой длительностью) используется выражение:

SUM(IF(CallsFilteredTbl."IDuration"=0,1,0), MasterData1)

здесь: SUM(значение_для_суммирования, имя_полосы_данных) — функция суммирования данных. Для каждой записи в выборке звонков суммируется значение IF(CallsFilteredTbl."IDuration"=0,1,0). Функция IF(логическое_значение, значение_если_истинно, значение_если_ложно) в данном случае возвращает 1 для звонков с нулевой длительностью и 0 в противном случае. CallsFilteredTbl.»IDuration» — это поле IDURATION базы CallsFilteredTbl — база содержит звонки, попавшие в выборку, IDURATION — длительность звонка в секундах.

Hint — как посмотреть список всех доступных функций? В редакторе отчета щелкните выражение мышкой — откроется редактор выражений. На toolbar’e есть кнопка ‘Вставить фукцию’ — следуйте за этой кнопкой и увидите список всех функций с краткими пояснениями.

Выражение SUM() размещено на полосе ‘Report footer’ — в результате вычисленное значение выводится после всех данных по внутр. номерам. Почему? SUM() не делает отдельного прохода по базе звонков, а накапливает значение одновременно с перемещением генератора отчетов по базе, поэтому в начале отчета, на полосе ‘Report title’ функция SUM() вернет нулевое значение. Если хочется увидеть расчитанное значение ближе к началу отчета, то:

  • можно убрать деталировку по внутр.номерам. Но! Оставить полосу ‘Master data’, просто установить для нее нулевую ширину. Тогда ‘Report footer’ будет визуально следовать сразу за ‘Report title’ и вычисленное значение будет печататься на первой странице отчета.
  • либо в событии OnBeforePrint полосы ‘Report footer’ присваивать вычисленное значение какой-нибудь переменной, а в полосе ‘Report title’ выводить значение этой переменной. Генератор отчетов — двухпроходный, в конце первого прохода вычисленное значение будет сохранено в переменной, а на втором, заключительном проходе, будет выводиться на печать в заголовке отчета. В примере этого нет, чтобы не затенять суть вычислений второстепенными украшательствами.