Crystal Reports 11: пустое поле бомбит отчет - PullRequest
2 голосов
/ 15 октября 2008

Я создаю отчет о кристалле счета-фактуры для модуля Sage Mas 500 AR. В нем я пытаюсь добавить поле tarinvoice.balance со следующей формулой:

if {tarPrintInvcHdrWrk.Posted} = 1 then 
    ToText({tarInvoice.Balance})

Я предполагаю, что когда условный оператор {tarPrintInvcHdrWrk.Posted} = 1 содержит FALSE, он не пытается извлечь поле счета-фактуры, потому что, когда я удаляю формулу из отчета, форма отображается правильно без нее.

Когда условный оператор отображает в отчете значение true, поля баланса ведут себя правильно. Однако, если формула отображает значение ЛОЖЬ в форме CR, весь кристалл сообщает о бомбах и отображается пустым. Есть идеи почему или что я делаю не так?


Только что попытался установить все на ноль, а отчет все еще бомбил. Я начинаю думать, что это скорее ошибка запроса в отчете. Я хотел бы, чтобы был способ исключить поле в запросе, когда отправлено = 0.

При удалении tarinvoice.balance, когда отправлено = 0, отчет работает нормально.
С tarinvoice.balance, включенным и опубликованным = 1, отчет работает нормально.

С включенным и размещенным tarinvoice.balance 0, сообщать о бомбах.

Ответы [ 7 ]

2 голосов
/ 15 октября 2008

Я полагаю, что условный оператор сразу завершится неудачно, если вы встретите NULL, поэтому ваша формула должна проверить IsNull ({tarPrintInvcHdrWrk.Posted}) , прежде чем проверять равенство с "1".

0 голосов
/ 07 октября 2011
if isnull({tarPrintInvcHdrWrk.Posted}) or {tarPrintInvcHdrWrk.Posted}=0 then
" "
else
if {tarPrintInvcHdrWrk.Posted} = 1 then 
    ToText({tarInvoice.Balance})
else
" "

У меня проблемы с этим типом поля при создании отчетов для экспорта в Excel. Поле без данных перетянет все столбцы справа от него, чтобы «заполнить пробел».

0 голосов
/ 25 мая 2009

Возможно, в вашем отчете есть раздел «Подавить, если пусто». Попробуйте поставить: Остальное ""

0 голосов
/ 01 ноября 2008

Если вы поместите {tarInvoice.Balance} непосредственно в отчет (в подробный раздел «отладка» - это часто требуется, не забывайте подавлять его в работе :)), какие значения он отображает или отчет становится пустым?

0 голосов
/ 17 октября 2008

Я увидел предложение в Exp.Exch, чтобы попытаться поместить поле в переменную перед преобразованием его в текст.
например

NumberVar InvoiceBalance;  
If isnull({tarInvoice.Balance}) then
    InvoiceBalance := 0
Else
    InvoiceBalance := {tarInvoice.Balance};

If {tarPrintInvcHdrWrk.Posted} = 1 then
    ToText(InvoiceBalance);

Я также пытался воссоздать вашу проблему, поскольку я уже видел подобные вещи.
Не повезло, хотя пытаясь с CR 8.5 и XI R2. Perhpas это касается и связанных таблиц, так как я пробовал только одну простую таблицу.
Я также видел подобное поведение при использовании формулы в промежуточной сумме - они вообще не любят нули!

0 голосов
/ 15 октября 2008

Я изменил формулу так:

if isnull({tarPrintInvcHdrWrk.Posted}) = FALSE then 
    if {tarPrintInvcHdrWrk.Posted} = 1 then 
        if isnull({tarInvoice.Balance}) = FALSE then 
            ToText({tarInvoice.Balance})
        else 
            "0.00" 
    else 
        "0.0"
else 
"0"

Отчет о кристаллах все еще бомбится. Тем не менее, он показывает "0" в соответствующем пространстве.

0 голосов
/ 15 октября 2008

Вы можете изменить способ, которым Crystal обрабатывает нулевое значение для значения в формуле. В верхней части Мастерской формул есть выпадающий список с надписью «Исключения для пустых значений».
Измените это на другой параметр «Значения по умолчанию для нулей», и ваша формула больше не должна бомбить. Раньше вы могли указывать, какие были применены значения по умолчанию, но в более поздних версиях Crystal они жестко запрограммированы. Найдите в справке «Null Treatment» таблицу, в которой они показаны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...