Пользовательское групповое поле Crystal Reports XI

Мне нужно создать группу имен поставщиков, основанную на любом или всех трех полях, содержащих коды поставщиков услуг. Каждый код поставщика услуг связывается со своей собственной таблицей SP_Program_Location, чтобы получить идентификатор поставщика этого поставщика, который затем связывается с таблицей поставщика для получения имени поставщика. Если для клиента не были назначены провайдеры (все три поля провайдеров = 0), группа провайдеров должна быть «NO PROVIDER ASSIGNED», в противном случае имена провайдеров должны быть включены в группу провайдеров. Количество поставщиков для клиента может варьироваться от 0 до 3. Как только я группирую по формуле своего поставщика, я теряю записи данных. Я группирую по местоположению, а затем по поставщику, а затем по подробным данным о клиенте.

Program.provider1 ---->sp_Program_Location.SP_Program_Location_Codde--->sp_Program_location.Provider_ID ---> Provider.PROVIDER_ID

Program.provider2 ---->sp_Program_Location1.SP_Program_Location_Codde--->sp_Program_location1.Provider_ID ---> Provider1.PROVIDER_ID

Program.provider3 ---->sp_Program_Location2.SP_Program_Location_Codde--->sp_Program_location2.Provider_ID ---> Provider2.PROVIDER_ID

person Brian Workinger    schedule 04.11.2009    source источник


Ответы (1)


Создайте поле формулы, как указано ниже, а затем сгруппируйте его.

//use my Array_Push() function [http://www.cogniza.com/blog/?p=104]
//which requires the Array_Contains() [http://www.cogniza.com/blog/?p=103]

Local StringVar Array providers;

If Not(Isnull({Provider1.PROVIDER_NAME})) Then
  providers := Array_Push({Provider1.PROVIDER_NAME});

If Not(Isnull({Provider2.PROVIDER_NAME})) Then
  providers := Array_Push({Provider2.PROVIDER_NAME});

If Not(Isnull({Provider3.PROVIDER_NAME})) Then
  providers := Array_Push({Provider3.PROVIDER_NAME});

If Ubound(providers)=0 Then
  "No PROVIDER ASSIGNED"

Else

  //create hyphen-delimited list.
  Join(providers, "-");
person craig    schedule 04.11.2009
comment
Я получаю сообщение об ошибке. В тесте if здесь требуется поле. Я использую объединенную строку Last_Name +, + First_Name. Вот пример: If Not(IsNull({AIF_SERVICE_PROVIDERS.SERVICE_PROVIDER_LAST_NAME}+ , + {AIF_SERVICE_PROVIDERS.SERVICE_PROVIDER_FIRST_NAME})) Then provider := Array_Push({AIF_SERVICE_PROVIDERS.SERVICE_PROVIDER_LAST_NAME} + , + {AIF_SERVICE_PROVIDERS.SERVICE_PROVIDER_FI) - person Brian Workinger; 05.11.2009