Отчёты
Разработка

Отчет Word и перечисление

Добрый день!
Столкнулся со следующей проблемой:

1. Создаю пользовательский запрос для отчета Word, содержащий на основной детали поле-перечисление, в построителе запросов отображается, как и надо, значение данного перечисления

2. Создаю отчет с использованием вышеупомянутого запроса, вставляю то самое поле-перечисление, при отображении отчета вместо значения перечисления отображается его id

Встречался ли кто с данной проблемой?

Спасибо!

TS X25 3.3.0.42 Firebird

Нравится

10 комментариев

Добрый день, Павел.

Действительно, есть такая проблема.
Попробуйте заменить текст ф-ии GetFieldValueByCaption в scr_UserReportCommon на следующий:

[javascript]
function GetFieldValueByCaption(Dataset, FieldCaption) {
var DataField = GetDataFieldByCaption(Dataset, FieldCaption);
if (!Assigned(DataField)) {
return;
}
if (!DataField.IsEnabled) {
return;
};
if (DataField.FieldType == dftEnum) {
return DataField.DisplayValue;
} else {
return DataField.Value;
};
}
[/javascript]

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

Добрый день. Опять возникла такая же проблема. Функция GetFieldValueByCaption такая же как и выше. Только теперь поле-перечисление на основной детали выбирается не из основной таблицы а из обратных связей.

Павел, добрый день.

К сожалению, не получается воспроизвести проблему на версии, аналогичной Вашей. Уточните, пожалуйста, какие таблицы Вы используете в запросе и какие поля отображаете в отчёте.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Добрый день, Олег.

Основная деталь - tbl_Contract, помимо полей таблицы на основной детали также присутствуют поля из таблиц "обратных связей", одно из которых перечисление (поля созданы мной)

Павел, всё-таки не удаётся воспроизвести проблему. Попробуйте добавить в отчёт какое-либо стандартное поле типа "Перечисление" из обратных связей (например, поле "Пол" таблицы контактов). Если это поле будет отображаться корректно, а Ваше поле - нет, проверьте, не отличаются ли его свойства от других перечислений.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Олег, как ни странно, но я на своей машине также не смог воспроизвести проблему, но на машине заказчика проблема осталась. Может стоит почистить Cache? Буду проверять.

Да, Cashe почистить стоит.

Проверьте, на всякий случай, ещё раз функцию в конфигурации клиента. Может, загружали сервисы из базовой версии и функция перезатёрлась...

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Добрый день. Вышеописанная проблема так и не разрешилась. Удалось проблему локализировать. Если поле - перечисление находится на основной детали запроса, то, действительно, функция EvaluateRootExpression(Selection) возвращает нужный результат Result = GetFieldValueByCaption(RootDataset, ExpressionObject.FieldName). Но если поле - перечисление находится не на основной детали, то, как я понимаю, используется другая функция EvaluateDetailExpression. Пробовал также редактировать GetDataFieldValueByFieldType(DataField){
...
case dftEnum:
Result = DataField.DisplayValue;
break;

...

}
результат тотже.

Павел, добрый день.

Вы всё сделали абсолютно верно. Единственное - нужно заменить условие в switch: вместо DataField.DataType вставить DataField.FieldType.

[javascript]
function GetDataFieldValueByFieldType(DataField) {
var Result = '';
switch (DataField.FieldType) {
case dftInteger:
Result = DataField.ValAsInt;
break;
case dftFloat:
Result = DataField.ValAsFloat;
break;
case dftEnum:
Result = DataField.DisplayValue;
break;
default:
Result = DataField.Value;
break;
}
return Result;
}
[/javascript]

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Показать все комментарии