Ошибка при раскрашивании грида.

В определенный момент, после экспериментов с цветами начал падать террасофт без дебаггера. Выяснил, что нулл возвращает вот такая функция. function GetBackgroundColorForGridRowByDataset(GridDataset) { return GridDataset.Values('StateColor'); } Думаю, стоит сделать проверку возвращаемого значения в базовой версии.

Нравится

4 комментария

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

Здесь есть два варианта решения:
1. Вместо GridDataset.Values('StateColor') написать GetDatasetFieldValue(GridDataset, 'StateColor'). Функция GetDatasetFieldValue включит колонку и сделает дополнительный запрос для получения значения поля.
2. Если указанная функция вызывается для каждой записи реестра (т.е. часто), то нужно для этой колонки в SelectQuery поставить отметку "Всегда выбирать в запросе".

Александр, спасибо. У себя я уже исправил.
Я о базовой версии: у меня 3.3.1.31, может в следующих версиях это и исправлено.

На сколько я понимаю Вы дорабатывали конфигурацию для использования функции GetBackgroundColorForGridRowByDataset, которая возвращает цвет подсветки проектов. В базовой версии в двух местах, где используется это значение, логика учитывает наличия значения:
1. wnd_ProjectGridAreaScript

...
function grdDataOnGetRowDrawInfo(DataGrid, Color, TextColor, ImageName, Font) {
	var Dataset = DataGrid.DatasetLink.Dataset;
	ImageName.Value = Dataset.Values('EssenceType');
	TextColor.Value = GetTextColorForGridRowByDataset(Dataset);
	var BackColor = GetBackgroundColorForGridRowByDataset(Dataset);
	if (BackColor) {
		Color.Value = BackColor;
	}
}   
...

2. wnd_ProjectGanttAreaScript

...
function AddGanttItem(Dataset) {
...
	Gantt.Items.ItemForeColor(Item) = 
		GetTextColorForGridRowByDataset(Dataset);
	var BackColor = GetBackgroundColorForGridRowByDataset(Dataset);
	if (BackColor) {
		Gantt.Items.ItemBackColor(Item) = BackColor;
	}
...
}
...

P.S. C версии 3.3.1.31 эти скрипты не менялись.

Александр, прошу прощения. Был невнимателен. У меня ифов небыло - я грешным делом на базовую версию наговорил :)

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