Р?спользование 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 пишет:

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

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