Как сослаться на предыдущую группу для ежегодных расчетов в Crystal Report? - PullRequest
1 голос
/ 14 февраля 2011

Я пишу отчет, который состоит из 3 групп: Год, Месяц и Поставщик.

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

например. верхний уровень моего отчета выглядит так:

2010  
   January    £20,000
   February   £30,000
   March      £15,000
   etc.

2011
    January   £16,000
    February  £14,000

Теперь я хочу сравнить значения января 2011 года с тем же периодом предыдущего года (в данном случае: 16 000 против 20 000), чтобы я мог выполнить некоторые дополнительные вычисления.

В настоящее время я достигаю этого, используя глобальные переменные, называемые JanGlobal, FebGlobal и т. Д., Которые сохраняются и извлекаются по мере необходимости. Это работает, потому что я знаю, что будет только 12 месяцев, поэтому я могу назвать переменные заранее.

Однако на уровне поставщиков я не знаю, сколько будет поставщиков, или даже если они вообще будут существовать (поставщики могут быть новыми, поэтому у них не будет годовой информации; или они могли бы обанкротиться и поэтому не существовать в новом году).

Развертывание моих поставщиков выглядит следующим образом:

2010
    January
        Company 1    £5,000
        Company 2    £7,000
        Company 3    £8,000

Так что мне нужно сравнить переменное количество поставщиков с их аналогами за 12 месяцев, если они существуют. Есть идеи?

1 Ответ

0 голосов
/ 15 февраля 2011

Решение здесь включает в себя достаточную степень манипуляции со строками. По сути, в нижних колонтитулах групп компаний (когда наступил 2010 год) вы формируете цепочку названий компаний и показателей продаж. Когда наступает 2011 год, вместо этого вы обрабатываете строку для извлечения данных, относящихся к 2011 году (для данной компании и месяца), и используете их для сравнения.

Итак, для строковой формулы с именем ProcessJan вы могли бы иметь (используя каналы в качестве символа разделения):

Global StringVar JanGlobal;
Local NumberVar NumberToCompare := 0;
If Year(Sales) = 2010 Then
    JanGlobal := '||' + {CompanyName} + '|' + ToText({SalesFigure}); //append current value to Jan's formula
Else
(
    If UBound(SalesSearch) > 0
    (
        Local NumberVar Searching := 1;
        For Searching = 1 to UBound(SalesSearch)
            If SalesSearch[Searching] StartsWith ({CompanyName} + '|') Then
            (
                Local StringVar Array Matched := Split(SalesSearch[Searching], '|')
                NumberToCompare := ToNumber(Matched[2]);
            )          
        Next
    )
    //do whatever you want with the 2011 sales figure and the value of NumberToCompare
    //(which should be either zero or Jan 2010's sales figure for the company) here
)

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

...