2010-08-24 2 views

ответ

-1

Это будет зависеть от типа данных для столбцов a1-e5 и того, что вы пытаетесь сделать с единственным значением.

Если вы просто пытаетесь отобразить это значение, вы можете создать формулу, которая использует функцию Crystal ToText(), чтобы сначала преобразовать их в строки, а затем объединить их вместе, используя «+».

ToText({id1.a1}) + ToText({id1.b2}) + ToText({id1.c3}) + ToText({id1.d4}) + ToText({id1.e5})

Вы могли бы сделать то же самое на стороне СУБД, а также.

Если вы можете предоставить дополнительную информацию, мы сможем предложить лучшее решение.

+1

Я почти поддержал ваш ответ, но потом понял, что это не ее вопрос. Если бы это было так, вы ответили на это отлично. – PowerUser

+0

Да, я считал, что, но сделал предположение, что это был snafu семантики и что более вероятно, что id1 был строкой/записью. – Ryan

+0

Спасибо, что ответили на мой вопрос. Id1 - это идентификатор клиента, этот custome купил продукты a1, b2, c3 в разное время и т. Д. Мне нравится знать, какой клиент, купивший a1, также купил d4. большое спасибо – Helen

0

Итак, вы хотите объединить данные из нескольких строк в одну строку для отображения? Crystal Reports действительно не построен для такого рода вещей. Даже если бы вы могли, я бы все же предложил сделать эту серверную сторону сначала, а затем подавать ее в Crystal.

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

+0

Спасибо за ваш комментарий. У меня нет доступа к серверу, и я пытался создать массив или матрицу для хранения данных, а затем отобразить их. Но это не удалось. Спасибо за помощь. – Helen

+0

Массив в Crystal звучит так, будто он может сделать трюк за то, что вы хотите сделать ... Какая у вас проблема с этим? Вы можете группировать заказчиком, инициализировать массив и numbervar, чтобы отслеживать размер в заголовке и динамически увеличивать массив (используя REDIM PRESERVE) с каждым новым продуктом, с которым вы сталкиваетесь в деталях. В нижнем колонтитуле у вас будет массив каждого продукта, который клиент приобрел. – Ryan

13

Один из подходов - метод «3 формулы». Вы настраиваете формулу инициализации в каждом заголовке, с директивой времени оценки «WhilePrintingRecords». Этот подход был единственным, доступным для выполнения текущих итогов в «добрые дни» до того, как были доступны объекты RunningTotal.
Например:
В заголовке группы: - есть формула @InitiliseRT

WhilePrintingRecords; 
StringVar ConcatenatedID; 
If Not InRepeatedGroupHeader Then 
    ConcatenatedID := ""; 

В Подробности Раздел: - есть формула @UpdateRT

WhilePrintingRecords; 
StringVar ConcatenatedID := ConcatenatedID + id1; 

Наконец, в Нижняя колонка группы вы можете увидеть результат: - Формула @ShowRT

WhilePrintingRecords; 
StringVar ConcatenatedID; 

Это должно дать вам окончательную строку «a1b2c3d4e5».

Если вам нужно, вы можете добавить дополнительные формулы для дополнительных групп, по одной переменной для каждой группы (например, ConcatenatedIDGroup1, ConcatenatedIDGroup2). Ключ состоит в том, чтобы всегда получать имя справа между группами и инициализировать переменную в заголовке группы.
Существуют ограничения использования этих формул.Встроенные сводные функции (Sum, Max, Count, ...) или RunningTotals не могут их использовать, и вы не можете группировать их.

+0

Я следил за вашим примером, но он не работает, когда на нескольких страницах. Пожалуйста, помогите или поделитесь некоторыми материалами, потому что он работает достаточно хорошо, когда отчет только на одну страницу. – rickyProgrammer

+0

Я забыл о проблеме с несколькими страницами. Я обновил код для @InitialiseRT, чтобы включить проверку для InRepeatedGroupHeader. При первой распечатке страницы это будет false, а строка опустеет. Для любых последующих страниц InRepeatedGroupHeader является истинным, и строка будет оставлена ​​в покое. Имейте в виду, что я не тестировал это, я просто ухожу с моей памяти, так как у меня больше не установлен Crystal. –

+0

Я на самом деле закончил проблему на нескольких страницах, поставив формулу инициализации в нижней части группы. – rickyProgrammer

Смежные вопросы