NAV4U (онлайн-журнал) » Blog Archive » Использование CaptionClass

Использование CaptionClass

Недавно поучаствовал в обсуждении проблемы, как принудительно указать иное значение свойства Caption для столбца в TableBox, если источником является Глобальное измерение 1.

 Dynamics NAV (Navision) Caption Class
Рис.1. Вид полей с заполненным свойством CaptionClass в дизайнере (снизу) и в работе (сверху). 

Проблему победить удалось, а заодно обогатился знаниями про свойство CaptionClass.


За обработку свойства CaptionClass отвечает функция CaptionClassTranslate(Language,CaptionExpr) расположенная в первом кодеюните ApplicationManagement. В функцию передаются два параметра. На первом параметре Language останавливаться не будем, упомянем только, что его тип Integer и значение система присваивает автоматически. Лучше обратим внимание на CaptionExpr, т.к. в него и попадает значение указанное в свойстве CaptionClass поля таблицы или формы.
Система разделяет этот параметр на два, в качестве разделителя используется первая запятая.
В результате получаем CaptionArea и CaptionRef (CaptionExpr = CaptionArea+’,'+CaptionRef)

Если CaptionArea = 1 – значит, будем работать с заголовками измерений.
В этом случае вызывается функция DimCaptionClassTranslate(Language,CaptionRef)

Если CaptionArea = 2 – значит, будем работать с ценами и суммами (цены включают НДС, цены без НДС)
В этом случае вызывается функция VATCaptionClassTranslate(Language,CaptionRef)

Если CaptionArea = 99 – значит, вы работаете с LS Retail.
Здесь парни не мудрили, а непосредственно вернули CaptionRef в качестве значения свойства Caption.

EXIT(CaptionRef);

Раз уж мы начали с конца, то теперь рассмотрим функцию VATCaptionClassTranslate, т.к. там все попроще.
С параметром Language, нам уже все ясно, поэтому посмотрим на параметр CaptionExpr, в него передано значение CaptionRef полученное в предыдущей функции.

Он опять подвергается процедуре деления, в результате чего получаем:
CaptionExpr = VATCaptionType +’,’+ VATCaptionRef

VATCaptionType может принимать два значения, а VATCaptionRef это просто текст.

В результате функция вернет VATCaptionRef + ‘ Без НДС’ если VATCaptionType = 0 или
VATCaptionRef + ‘ Вкл. НДС’ если VATCaptionType = 1

Теперь обратим свой взор на DimCaptionClassTranslate(Language,CaptionExpr), с которой и начали разговор.

По традиции проигнорируем параметр Language, и сразу перейдем к изучению параметра CaptionExpr.

Он и здесь подвергается процедуре деления, в результате чего получаем:
CaptionExpr = DimCaptionType+’,’+DimCaptionRef [+’,’+DimOptionalParam1+’,’+DimOptionalParam2]

DimOptionalParam1 и DimOptionalParam2 могут не использоваться.
Пример,
Если в свойство CaptionClass передать строку ‘1,2,3,От,До’,
то значения DimOptionalParam1 = ‘От’, а DimOptionalParam2 = ‘До’

Если в свойство CaptionClass передать строку ‘1,2,3′,
то значения DimOptionalParam1 = ” и DimOptionalParam2 = ”

Теперь посмотрим, что же возвращает функция DimCaptionClassTranslate при различных значениях параметров DimCaptionType (от 1 до 6) и DimCaptionRef (от 1 до 8).

DimCaptionType =1 
  DimCaptionRef = 1 
    Exit(DimOptionalParam1+Глобальное измерение1.”Code Caption” + DimOptionalParam1) 
  DimCaptionRef = 2 
    Exit(DimOptionalParam1+Глобальное измерение2. ”Code Caption” + DimOptionalParam1)         
 
DimCaptionType =2 
  DimCaptionRef = 1 
    Exit(DimOptionalParam1+Ярлык измерение1. ”Code Caption” + DimOptionalParam1) 
  DimCaptionRef = 2 
    Exit(DimOptionalParam1+Ярлык измерение2. ”Code Caption” + DimOptionalParam1) 
  DimCaptionRef = 3 
    Exit(DimOptionalParam1+Ярлык измерение3. ”Code Caption” + DimOptionalParam1) 
  DimCaptionRef = 4 
    Exit(DimOptionalParam1+Ярлык измерение4. ”Code Caption” + DimOptionalParam1) 
  DimCaptionRef = 5 
    Exit(DimOptionalParam1+Ярлык измерение5. ”Code Caption” + DimOptionalParam1) 
  DimCaptionRef = 6 
    Exit(DimOptionalParam1+Ярлык измерение6. ”Code Caption” + DimOptionalParam1) 
  DimCaptionRef = 7 
    Exit(DimOptionalParam1+Ярлык измерение7. ”Code Caption” + DimOptionalParam1) 
  DimCaptionRef = 8 
    Exit(DimOptionalParam1+Ярлык измерение8. ”Code Caption” + DimOptionalParam1)         
 
DimCaptionType =3 
  DimCaptionRef = 1 
    Exit(DimOptionalParam1+Глобальное измерение1. ”Filter Caption” + DimOptionalParam1) 
  DimСaptionRef = 2 
    Exit(DimOptionalParam1+Глобальное измерение2. ”Filter Caption” + DimOptionalParam1)         
 
DimCaptionType =4 
  DimCaptionRef = 1 
    Exit(DimOptionalParam1+Ярлык измерение1. ”Filter Caption” + DimOptionalParam1) 
  DimCaptionRef = 2 
    Exit(DimOptionalParam1+Ярлык измерение2. ”Filter Caption” + DimOptionalParam1) 
  DimCaptionRef = 3 
    Exit(DimOptionalParam1+Ярлык измерение3. ”Filter Caption” + DimOptionalParam1) 
  DimCaptionRef = 4 
    Exit(DimOptionalParam1+Ярлык измерение4. ”Filter Caption” + DimOptionalParam1) 
  DimCaptionRef = 5 
    Exit(DimOptionalParam1+Ярлык измерение5. ”Filter Caption” + DimOptionalParam1) 
  DimCaptionRef = 6 
    Exit(DimOptionalParam1+Ярлык измерение6. ”Filter Caption” + DimOptionalParam1) 
  DimCaptionRef = 7 
    Exit(DimOptionalParam1+Ярлык измерение7. ”Filter Caption” + DimOptionalParam1) 
  DimCaptionRef = 8 
    Exit(DimOptionalParam1+Ярлык измерение8. ”Filter Caption” + DimOptionalParam1)         
 
DimCaptionType =5 
  IF существует измерение с кодом DimCaptionRef THEN 
    Exit(DimOptionalParam1+Измерение.”Code Caption” + DimOptionalParam1) 
  ELSE 
    Exit(DimOptionalParam1)         
 
DimCaptionType =6 
  IF существует измерение с кодом DimCaptionRef THEN 
    Exit(DimOptionalParam1+Измерение.”Filter Caption” + DimOptionalParam1) 
  ELSE 
    Exit(DimOptionalParam1)

Как вы уже догадались DimCaptionRef логически связан с закладкой ”Измерения” окна ”Финансы настройка”.
Dynamics NAV (Navision) Финансы Настройка

Параметр DimCaptionType  информирует систему, что требуется показывать: Код Caption или Фильтр Caption для соответствующего измерения.

Dynamics NAV (Navision) Измерения

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

Метки:



Комментариев: 2

  1. Дарья пишет:

    Интересно, но все таки очень хотелось бы побольше узнать о вызываетсе функции. Приглянулся пост!:D

  2. apanko пишет:

    Все в статье. Если что-то конкретное непонятно - сообщите, попробую пояснить.

Оставьте свой отзыв!