Использование CaptionClass
Недавно поучаствовал в обсуждении проблемы, как принудительно указать иное значение свойства Caption для столбца в TableBox, если источником является Глобальное измерение 1.
Рис.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 логически связан с закладкой ”Измерения” окна ”Финансы настройка”.
Параметр DimCaptionType информирует систему, что требуется показывать: Код Caption или Фильтр Caption для соответствующего измерения.
На этом разбор существующего кода будем считать завершенным, т.к. этого вполне достаточно, чтобы создать свои функции для преобразования CaptionClass.
Метки: Андрей Панько
14 Сентябрь 2008 в 16:09
Интересно, но все таки очень хотелось бы побольше узнать о вызываетсе функции. Приглянулся пост!:D
14 Сентябрь 2008 в 20:33
Все в статье. Если что-то конкретное непонятно - сообщите, попробую пояснить.