При редактировании грида строки красит в черный цвет

Здравствуйте!

Помогите, пожалуйста, с такой проблемой.
Если любой грид сделать редактируемым и свойства HasCustomDraw и HasCustomCellDraw = true;
При вводе данных слишком быстро строки выделяются черным цветом

Terrasoft Sales, 3.3.2.47

Нравится

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

Здравствуйте, Светлана!

Воспроизводится ли проблема на более поздних бинарных файлах?

Рекомендуется в обработчике события function grdDataOnGetRowDrawInfo добавить условие else при проприсовке и делать присвоение:

Color.Value = DefaultLayoutColor;

Анна, добавила по вашему совету эту строку, но проблему это не решило
Так же, ошибка воспроизводится на версии 3.3.2.222

// Подсветка строк (активное направление)
function grdDataOnGetRowDrawInfo(DataGrid, Color, TextColor, ImageName, Font) {
	var Dataset = dlData.Dataset;
	var IsActive = GetFieldValueFromDisabledField(Dataset, 'IsActive');
	if (IsEmptyValue(IsActive)) {
		IsActive = 0;
	}
	var DirectOpportunityID = GetFieldValueFromDisabledField(Dataset, 'DirectOpportunityID');
	if (IsActive) {
		// текст строки активного направления отображается синим цветом
		TextColor.Value = clBlue;
	} else {
		Color.Value = DefaultLayoutColor;
	}
	if (!IsEmptyValue(DirectOpportunityID)) {
		ImageName.Value = 'DirectOpportunity';
	}	
}

Здравствуйте, Светлана!

Вероятнее всего, где-то в скрипте у Вас происходит неявное присвоение переменной Color значения, соответствующего черному цвету.

Для того, чтобы это оттестировать, можно добавить в конец функции OnGetRowDrawInfo следующую конструкцию:

if(Color.Value == clBlack){
       MessageBox('Строки заливаются черным цветом!');
}

Если заливка происходит в конфигурации, тогда имеет смысл искать нужную строку при помощи оnладчика. Если в ядре (сообщение не появилось) - рекомендуем Вам произвести обновление сборки до самой новой - 3.3.2.254. Запрос на новую сборку бинарных файлов можно направить на support@terrasoft.ru

Кстати, а что у вас за операционная система и какая в ней тема/цветовая схема выбрана? Попробуйте на классическое оформление все сбросить...
Что если на другой машинке клиента запустить и оттуда посмотреть? Везде цвет черный?

Анна,
попробовала, похоже заливка в ядре происходит.
Будем обновлять бинарники, спасибо.

Александр,
проверила сейчас на Windows 7 и XP, классические темы.
Везде черный цвет отображается

Светлана, чистить кэш и профиль пробовали? Поскольку вопрос касается графических элементов, это может быть существенно.

Анна,
да, мы перед тестированием уже привыкли постоянно чистить профиль и кэш :)

Светлана, в случае, если обновление бинарных файлов не поможет, просим предоставить сервисы окна и скрипта окна, а также связанные датасет, запрос и таблицу для анализа на коробочной версии.

Обновление бинарников не помогло, по этому прикладываю сервисы

Update: архив не прикладывается по какой-то причине, попробую немного позже

Здравствуйте, Светлана!

Пожалуйста, перешлите сервисы и ссылку на данную тему форума на support@terrasoft.ru

Анализ проблемы с привлечением разработчиков дал следующие результаты:

На данный момент редактируемый реестр и подсветка ячеек нормально работают только по отдельности. При включении данных опций одновременно возможны проблемы. Решить вопрос можно только путем переписывания компонента ядра системы, который отвечает за редактируемый реестр.

В качестве обходного решение можем порекомендовать следующее:

После каждого изменения значения в ячейке переоткрывать датасет заново.

Для этого необходимо на событие DataChange датасета реестра в скрипте реестра добавить следующие строки:

Self.BeginUpdate();
Dataset.Close();
Dataset.Open();
Self.EndUpdate();

Анна, спасибо, все понятно.

Коллеги, просьба запланировать данное исправление в бинарные файлы 3.3.2

"Светланa" написал:Если любой грид сделать редактируемым и свойства HasCustomDraw и HasCustomCellDraw = true;
При вводе данных слишком быстро строки выделяются черным цветом

Временное решение, предложенное Алимовой Анной
"Alimova Anna" написал:Для этого необходимо на событие DataChange датасета реестра в скрипте реестра добавить следующие строки:

Self.BeginUpdate();
Dataset.Close();
Dataset.Open();
Self.EndUpdate();


Не решает проблему, так как если имеем древовидный реестр, подвигаем колонки и сделаем Expand All (Раскрыть все) реестра, весь грид закрасится в черный цвет.

Добрый день, АльфаКрыса!
Доработка отрисовки редактируемого реестра запланирована на следующие версии: 3.4.0+ и 3.4.1+
Перенос подобные изменений в ядро 3.3.2 не планируется, к сожалению.

Здравствуйте Павел,
Спасибо Вам за отклик, но дело в том что речь не идет про редактируемый грид.
Это обычный древовидный грид, с 1й степенью вложенности, который предназначен только для отображения записей.
Так как объем выборки достаточно велик, нам принципиально подсвечивать корневые (Parent) записи.
Но при попытке прорисовки появляется грид имеет следующий вид
bug
Просьба рассмотреть данный вопрос еще раз, так как у нас нет возможности исправить данную ошибку в бинарных файлах Terrasoft'a, так как исходные коды являются закрытыми.

Добрый день.
Решение описанной проблемы очень трудозатратно и, поскольку не является критическим в работе с системой, исправление функционала в предыдущих версиях не планируется.

Но, в качестве возможного решения задачи, разработчики рекомендуют не использовать заливку фона ячеек, а выделять шрифт, например жирным нужные записи. Чтобы сократить объем данных также можно предусмотреть группы, представления таблиц (view) в дереве и т.п.

Здравствуйте Павел,
Дело в том что что при от рисовке строки, все равно используется событие грида grdDataOnGetRowDrawInfo, которое работает с ошибками и если мы напишем следующим образом:

function grdDataOnGetRowDrawInfo(DataGrid, Color, TextColor, ImageName, Font) {
	 var Dataset = dlData.Dataset;
      var MyNum = GetFieldValueFromDisabledField(Dataset, 'MyNum');
       if (MyNum.indexOf('-') == -1 )
       {
       Font.bold = true;                       
        }
}

Код выше делает шрифт жирным в зависимости от значения
В гриде все равно будут присутствовать черные квадраты
bug
Я не думаю, что здесь играет роль объем выборки, черные квадраты будут рисоваться и при маленьком количестве строк.

Позиция компании, нам понятна. Каковы сроки устранения данной ошибки на версии 3.4.0+ ?

Доброй день, Альфа Крыса.
К сожалению пока точных сроков разработка не называет. В виду низкой приоритетности задачи.
Но, ориентировочно текущее полугодие. Чуть позже возможно уточнят.

Спасибо за понимание.

Здравствуйте!

До того момента, как будут внесены изменения в ядро, есть несколько вариантов обхода данной проблемы, которые можно применить, зависимости от того, каким образом у Вас реализована функциональность:

Если данных слишком много, можно попробовать грузить реестр в режиме отложенной загрузки (lazy):
lazytreegrid

Частично это поможет устранить проблему с отрисовкой.

В случае, если и после этого будет проблема с черными строками, имеет смысл переделать реестр - вместо дерева в реестре использовать дерево групп. Это будет менее удобно, однако такой переход по дереву будет работать значительно быстрее и позволит избежать проблем с прорисовкой.

Если эти два варианта не подойдут, просим предоставить сервисы либо базу данных для анализа в техническую поддержку.

Здравствуйте Анна,
Спасибо за отзыв, я правильно понимаю, что при Mode = dtmLazy, данные будут подгружаться и соответственно отрисовываться в реестре постранично?
Я немного не понял Ваши идую про дерево груп, вы имеете в виду сделать корневые записи отображать в окне груп (wndGroups), выбирать записи как корневую в wnd_Groups а после этого отображать их в главном реестре (wndGridData), т.е по сути отказаться от древовидного реестра в качестве грида?

Странная вещь, если поставить в окне реестра grdData, Mode = dtmLazy. Реестр пустой (т.е ни одна запись не отрисовалась, и выделить ни одну запись нельзя) , считаются только Итоги, возможно это связанно с тем что в grdDataOnGetRowDrawInfo я использую закраску цветом, и выделение шрифта

function grdDataOnGetRowDrawInfo(DataGrid, Color, TextColor, ImageName, Font) {
		var Dataset = dlData.Dataset;
      var OffshNumber = GetFieldValueFromDisabledField(Dataset, 'OffshNumber');
       if (OffshNumber.indexOf('-') == -1 )
       {
		Font.bold = true;                       
	   }
 
     var OffshServiceName = GetFieldValueFromDisabledField(Dataset, 'Name');
     if (OffshServiceName  == 'Хочу счастья')     
     {
	 Color.Value = clMoneyGreen;     
     }
 
}

К сожалению бэкап БД, дать не могу, сервисы также не помогут, так как раздел полностью основывается не на базовых таблицах Terrasoft.
Еще одно: Саму отрисовку, я провожу только после фильтрации в реестре, после самой фильтрации производится update в БД для записи данных сумм, для корневых записей.
Фильтрация производится, как я описал тут

Здравствуйте!

Если раздел основывается не на базовых таблицах, тогда нужны будут еще сервисы таблиц, запросов, датасетов.

В любом случае, раз уж реестр так странно себя ведет, то необходимо детально изучить и отладить, в чем дело, чтобы давать конкретные рекомендации.

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