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

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

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

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

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

Спасибо!

TS X25 3.3.0.42 Firebird

Нравится

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

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

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

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;
	};
}

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

Добрый день. Опять возникла такая же проблема. Функция 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.

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;
}

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

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