Формула не будет отображаться, когда определенные поля являются нулевыми

Похоже на мой первый вопрос. Я хочу показать свой адрес в текстовом поле, содержащем поля следующим образом

{Company}
{AddLine1}
{AddLine2}
{ZIP}{State}{City} 
{Country}

Строка, которая касается меня (и, надеюсь, некоторые из вас, ребята), это {ZIP} {Город} {Штат}. Я хочу создать согласованный формат адресации, чтобы в нем не было пробелов или отступов, даже если в БД было оставлено пустое поле ZIP, City или State. Эта строка должна по-прежнему совпадать с остальными строками и не иметь отступов. Я также хочу вставить запятые между zip, штат, город, где они имеют отношение, и пропустить их, где нет. Для этого я написал формулу. Ниже:

If isnull({BILL_TO.ZIP}) or trim({BILL_TO.ZIP})= "" Then "" else {BILL_TO.ZIP}
+
(If isnull({BILL_TO.State}) or trim({BILL_TO.State})= "" Then ""
    else(If not isnull({BILL_TO.ZIP}) and length(trim({BILL_TO.ZIP})) <> 0 Then ", "        else "") + {BILL_TO.State})
+
(If isnull({BILL_TO.CITY}) or length(trim({BILL_TO.CITY})) = 0 Then ""
    else(

            If (not isnull({BILL_TO.State}) and length(trim({BILL_TO.State})) <> 0) 
                or
                (not isnull({BILL_TO.Zip}) and length(trim({BILL_TO.Zip})) <> 0)

            Then ", " else "")+ {BILL_TO.CITY}))

Проблема в том, что, когда есть только город (без ввода штата или почтового индекса), сама формула не будет отображаться. Однако он отображается, когда присутствуют другие.

Кто-нибудь может увидеть ошибку в этом коде??? Это убивает меня

Спасибо за помощь.

С нетерпением ждем от вас, ребята!

2 ответа

Решение

Создайте поле формулы для каждого поля базы данных. Например:

// {@CITY}
If Isnull({BILL_TO.CITY}) Then
  ""
Else 
  Trim({BILL_TO.CITY})

// {@STATE}
If Isnull({BILL_TO.STATE}) Then
  Space(2)
Else
  Trim({BILL_TO.STATE})

// {@ZIP}
If Isnull({BILL_TO.ZIP}) Then
  Space(5)  //adjust to meet your needs
Else
  Trim({BILL_TO.ZIP})

Вставьте каждое поле формулы в текстовый объект.

Отформатируйте текстовый объект и его поля, чтобы удовлетворить ваши потребности.

** редактировать **

Если у вас есть проблемы с качеством данных, решайте их в формулах STATE и ZIP (поскольку они будут иметь постоянную длину). Я бы добавил запятые и интервал между текстовыми объектами.

В этой формуле происходит множество if-then-elses, поэтому трудно сказать, но если он ничего не отображает, это, вероятно, означает, что вы где-то используете поле, не обрабатывая сначала его нулевое условие. Что-то проще может быть вашей лучшей ставкой:

local stringvar output;
if not(isnull({Customer.Postal Code})) then output:=trim({Customer.Postal Code}) + ', ';
if not(isnull({Customer.Region})) then output:=output + trim({Customer.Region}) + ', ';
if not(isnull({Customer.City})) then output:=output + trim({Customer.City}) + ', ';

left(output,length(output)-2)
Другие вопросы по тегам