Реализация зависимости цвета задач от типа (через справочник)

У многих пользователей системы Terrasoft CRM в разделе "Задачи" создано множество задач с различными типами. И вопрос зависимости
цвета задачи от ее типа является более нужным и востребованым, чем зависимость цвета задачи от состояния (как это реализовано в стандартной версии). Например, задачи с типом "Звонок" необходимо выделять синим цветом среди сотни задач сегодняшнего расписания, а задачу "Втреча" красным (для того, чтобы она не осталась незамеченной).

Предлагаю заменить функционал зависимости цвета от состояния на зависимость цвета от типа задачи следующим образом:
1. В таблицу tbl_TaskType довавляем поле Color с типом "Целое число".
2. Добавляем поле цвета в сервис sq_TaskType.
3. Добавляем целочисленное поле (IntegerDataField) в датасет ds_TaskType.
4. В карточку редактирования wnd_TaskTypeEdit добавляем контрол ColorBoxDataControl. Устанавливаем необходимые значения свойствам DatasetLink и DataFieldName.
5. Открываем запрос на выборку sq_Task. В этом запросе нужно изменить уже существующее поле StatusColor. А именно, сделать выборку поля Color из таблицы tbl_TaskType.
После сохранения всех внесенных изменений и перезапуска рабочего приложения, при выборе цвета в справочнике "Типы задач", созданные задачи будут подсвечиваться этим цветом.

Желаю удачи!

С уважением,
Мельникова Екатерина

Нравится

Поделиться

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

Отлично! Я первый пользователь данной функциональности!
Ещё бы задачи с приоритетом "Срочно" или "Критично" всегда были наверху, в независимости от сортировки (опцию можно сделать отключаемой)

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

Пытаюсь сделать тоже самое для договоров по статусу...
"Подписан. Оплачен.", "Не подписан. Не оплачен."...
Проделал вышеизложенный алгоритм со справочником "Состояние договора" и с sq_Contract, ds_Contract.
Создал в scr_ContractsGridArea для grdData

function GetContractColorByDatasetRecord(Dataset) {
	var TextColor = Dataset.ValAsInt('Color');
	return TextColor;
}
 
// --------------
// Event handlers
// --------------
 
function grdDataOnGetRowDrawInfo(DataGrid, Color, TextColor, ImageName, Font) 
{
TextColor.Value = GetContractColorByDatasetRecord(BaseGridArea.GridDataset);
}

по аналогии с Задачами...
Но всё равно раскраска не происходит...

---
Конфигурация:
TSCRM 3.3.1.36
Firebird 2.0 (v.2.0.3.12981)

Александр, а HasCustomDraw в реестре включили?

уже включил...))
спасибо за подсказку, всё работает)

---
Конфигурация:
TSCRM 3.3.1.36
Firebird 2.0 (v.2.0.3.12981)

Отличная возможность + описание:twisted:
Счета, Документы, Договора - всё расскрасил!:wink:
Вот только при добавлении ColorBoxDataControl'а появляется сообщение "Разрушительный сбой!"...Никаких проблем после не возникало. Надеюсь так и останется просто плохим воспоминанием))

Я, например, в своих проектах стараюсь избегать раскраски реестра - вместо нее использую различные иконки в реестре (в зависимости от типа и состояния).

Ну, раскраска - это не мой креатив, а привычка тех, кто много лет работал еще с 2.8
Да и вообще, как говорят: "на вкус и цвет фломастеров нет":lol:
А вот с ошибкой непонятно:confused:

В родительских/подчиненных документах цветом не выделяется.
Внес нужные изменения в wmd_DocumentInDocumentGridAreaScript,
и не могу подобрать нужное значение в ф-ю GetContractColorByDatasetRecord() в обработчике grdDataOnGetRowDrawInfo.

Для реализации необходимого Вам функционала нужно выполнить следующие действия:
1. Сперва добавить поле Color в каждый из UNION sq_ChildDocument (из таблиц DocumentStatus, ContractStaus и BillStatus). Безусловно, предварительно нужно будет создать целочисленное поле Color в таблице, запросе, датасете и окне справочников "Состояния счета" и "Состояния договора".
2. Добавить целочисленное поле Color в ds_ChildDocument.
3. Добавить поле Color в каждый из UNION sq_ParentDocument.
4. Добавить целочисленное поле Color в ds_ParentDocument.
5. Установить для grdData в wnd_DocumentInDocumentGridArea свойство HasCustomDraw в true.
6. Прописать функцию и обработчик таким образом:

function GetDocumentColorByDatasetRecord(Dataset) {
        var TextColor = DocumentInDocument.Dataset.ValAsInt('Color');
        return TextColor;
}
 
// ----------------------------------------------------------------------------
// Event handlers
// ----------------------------------------------------------------------------
function grdDataOnGetRowDrawInfo(DataGrid, Color, TextColor, ImageName, Font) {
TextColor.Value = GetDocumentColorByDatasetRecord(DocumentInDocument.Dataset);	
}

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

Желаю удачи!

Так ведь и делал, только вот в вместо DocumentInDocument.Dataset писал DocumentInDocument.
А, и "Всегда выбирать в запросе":smile:
Спасибо!

"Мельникова Екатерина" написал:

"Швец Александр" написал:

я все проделал как описано - строки грида или текст окрашиваются нормально, но только если я вывожу колонку Color в гриде (в представлении gvMain грида определяю колонки и делаю colStatusColorgvMain видимой и доступной), но если сделать колонку невидимой для каждой строки грида выдается ошибка "Ошибка выполнения метода 'grdDataOnGetRowDrawInfo'. Поле 'Цвет' не активно «Call Stack»" и строки не окрашиваются.

Вопрос: Как сделать так чтоб колонка "Цвет" не выводилась и при этом корректно осуществлялась возможность раскрашивать строки грида?

Для колонки цвет сделайте "всегда выбирать в запросе" .

поменяйте функцию

function GetDocumentColorByDatasetRecord(Dataset) {
        var TextColor = DocumentInDocument.Dataset.ValAsInt('Color');
        return TextColor;
}

на такой вид

function GetDocumentColorByDatasetRecord(Dataset) {
        var TextColor = GetFieldValueFromDisabledField(Dataset, 'Color');
        return TextColor;
}

Или просто поставьте для поля Color галочку "Всегда выбирать в запросе" в сервисе запроса

Оба варианта ([1]Сделать колонку цвет "всегда выбирать в запросе" и [2]воспользоваться функцией GetFieldValueFromDisabledField()) работают - спасибо

Здравствуйте!
Помогите решить проблемы (Terrasoft 3.3.1.65).
1. Я раскрасил реестр (главные записи дерева), все работает.
Мне нужно забрать раскраску выделенной записи, то есть при изменение фокуса в реестре (при переходе на другую запись), данная запись выделяется стандартным оранжевым цветом. Думаю с рисунков будет понятнее:

2. Есть ли возможность при выборе ячейки (фокус или клик) вывести Caption?

Когда-то для реестра я включил прозрачность выделения (альфа = 128). Для дерева пока осталось по старому. Сегодня-завтра обязательно исправлю это недоразумение. Если не будет никаких нюансов -- то отпишусь какую версию бинарных файлов нужно взять.

Спасибо! Будем ждать! :smile:
Может заодно подправить DataGrid.SelectedColumn (всегда возвращает null)?

"genekogo" написал:Может заодно подправить DataGrid.SelectedColumn (всегда возвращает null)?

Исправить не обещаю -- но посмотрю обязательно.

"Александр Кравчук" написал:Когда-то для реестра я включил прозрачность выделения (альфа = 128). Для дерева пока осталось по старому. Сегодня-завтра обязательно исправлю это недоразумение. Если не будет никаких нюансов -- то отпишусь какую версию бинарных файлов нужно взять.

Поправил в 3.3.1.89 и 3.3.2.26:

"genekogo" написал:Может заодно подправить DataGrid.SelectedColumn (всегда возвращает null)?

Поправил также в 3.3.1.89 и 3.3.2.26.
Вот теперь я усну... :wink:

Саша! Низкий поклон и сладких снов!!!
:twisted:

--
www.it-sfera.com.ua

"genekogo" написал:Есть ли возможность при выборе ячейки (фокус или клик) вывести Caption?

Уточните, пожалуйста, какой Caption Вы имеете ввиду. Объясните, пожалуйста, на конкретном примере, поскольку не совсем очевидно, какой именно функционал Вам нужно реализовать.
Заранее спасибо за помощь.
Ожидаю ответа.

Мельникова Екатерина

Когда текст не вмещается в поле реестра появляется надпись (на рисунке поле «Заголовок»). Например, вместо надписи с текстом «Контроль оплаты счета (t)» я хотел бы отобразить надпись с текстом «Тестовая надпись» (и неважно вмещается текст в поле реестра или нет).
Есть ли возможность при выборе ячейки (фокус или клик) вывести свой Caption?

"genekogo" написал: Например, вместо надписи с текстом «Контроль оплаты счета (t)» я хотел бы отобразить надпись с текстом «Тестовая надпись».

Т.е. Вы хотите изменить хинт ячейки?

Да. :smile:

Никогда ни от кого не слышал такого пожелания. Для чего это может понадобится?

"Александр Кравчук" написал:Никогда ни от кого не слышал такого пожелания. Для чего это может понадобится?

А вот это я давно хотел увидеть в контролах - скажем подсказка-описание что за страшная информация скрывается в данном поле и каково ее назначение.

"Александр Кудряшов" написал:А вот это я давно хотел увидеть в контролах - скажем подсказка-описание что за страшная информация скрывается в данном поле и каково ее назначение.

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

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

Пример (из данной ветки форума): выводим в реестр информацию о продажах по дням

Когда наводим на ячейку, я хочу, что бы клиент увидел какую-то детализацию. Например, процентное наполнение дня... и т.д.

--
www.it-sfera.com.ua

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

+1

--
www.it-sfera.com.ua

Ну что ж, заводите идею.

Вопрос такой, Подскажите пожалуйста как мне реализовать цветность в проектах?

1. В сервисе wnd_ProjectsGridArea в свойстве grdData необходимо найти свойство HasCustomDraw и присвоить ему значение true
2. В сервисе sq_Project для поля TypeID и активировать опцию "Всегда выбирать в запросе"
3. В сервисе wnd_ProjectGridArea найдите grdData и на закладке "Свойства" найдите свойство OnGetRowDrawInfo. Дважды кликните на правой части этого поля. В результате Вы автоматически перейдете в скрипт, в обработчик данного события.
4. В обработчике данного события необходим прописать следующее
function grdDataOnGetRowDrawInfo(DataGrid, Color, TextColor, ImageName, Font) {
// DefineRowDrawInfo(Color, TextColor, ImageName, Font);
var Dataset = dlData.Dataset;
var TypeID = Dataset.Value('TypeID');
switch (TypeID) {
case Type1:
TextColor.Value = clGreen;
break;
case Type2:
TextColor.Value = clRed;
break;
default:
TextColor.Value = clBlack;
break;
}
В данном скрипте вместо Type1, Type2, Type3 необходимо ставить ID типов инцидентов, которые предварительно нужно посмотреть в таблице tbl_ProjectType в используемой Вами СУБД
Что касается цветов, то Вы можете просмотреть перечень всех возможных цветов в сервисе scr_Const

А как раскрасить расписание? Не текст а event. подобие задач не предлагать - не получается

Здравствуйте! Посмотрите реализацию изменения цвета фона задач в расписании, в зависимости от состояния во вложенном файле.

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