Добрый День!

Возник вопрос, не знаем, куда копать
Перекопал уже и BaseGridArea и другие сервисы
и таблицы с запросами и датасетами

А вопрос-то в следующем
Есть такие колонки в гриде, как "Создал" и "Изменил", которые по сути своей являются ссылками на соответствующие разделы

Как сделать такие колонки самому?!
Допустим, колонка отображает данные из раздела tbl_Document
Как мне сделать ее подчеркнутой и кликабельной?

Нравится

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

спасибо
справочники я умею делать
вот только поле типа "справочник" со всеми ссылками, насройками и корректными колонками не делают из колонки - ссылку

Вы имеете ввиду функционал "Перейти к"?

нет, подчеркнутость, как, например у "Создал" почти в любом гриде
где просто нажатие на значение в "создал", скажем, Васю Пупкина - откроет карточку редактирования контакта
а нажатие с зажатым Ctrl - перейдет к Васе Пупкину в контактах

Не знал об этой возможности, но явно функция "Перейти к".
Вам надо зайти в скрипт scr_WindowUtils. Там будет функция FillReferencesDictionary()
По аналогии добавить свой раздел.

function FillReferencesDictionary() {
	var RefDictionary = GetNewDictionary();
	RefDictionary.Add('ds_Contact', 'wnd_ContactsWorkspace');
	...
	//RefDictionary.Add('датасет', 'окно воркспейса');
}

Можно обрабатывать событие двойного клика по DataGrid и делать всё что нужно, определяя кто был "щёлкнут".

function ElementOnClick(Control) {
	var Dataset = dBookAuthor.Dataset;
        Dataset.Open()
	var name= IsDatasetEmpty(Dataset) ? null : Dataset('Name');
	MessageBox(Author); // поле выделено цветом, и кликабельно, ибо будет делать то, что здесь написано. А мы можем сформировать объект Attributes из полей "щёлкнутой" записи, и к примеру передать его нужному окну в его вызове.
}        

Иван, колонка-ссылка реализована в базовой версии. alt+click открывает карточку, ctrl+click переходит в раздел.

"Сазанов Александр Владимирович" написал:

Не знал об этой возможности, но явно функция "Перейти к".

Вам надо зайти в скрипт scr_WindowUtils. Там будет функция FillReferencesDictionary()

По аналогии добавить свой раздел.

function FillReferencesDictionary() {

        var RefDictionary = GetNewDictionary();

        RefDictionary.Add('ds_Contact', 'wnd_ContactsWorkspace');

        ...

        //RefDictionary.Add('датасет', 'окно воркспейса');

}

к сожалению, FillReferencesDictionary - не то
она делает общий справочник из возможных датасетов для перехода в меню ПКМ "Перейти к"
у меня же в колонке тащатся стандартные датасеты, уже указанные в FillReferencesDictionary

и колонка все-равно не подчеркнута и переходить позволяет только по ПКМ, а не по нажатию на ней самой :(

"Litvyakov Yegor Vladimirovich" написал:Можно обрабатывать событие двойного клика по DataGrid и делать всё что нужно, определяя кто был "щёлкнут".

это можно
но, это уже скорее костыль)

"Maxim Gritsenko" написал:Иван, колонка-ссылка реализована в базовой версии. alt+click открывает карточку, ctrl+click переходит в раздел.

это значит, что самому сделать колонку ссылкой нельзя?
и почему альт+клик?
у нас ссылка открывается простым нажатием на нее ЛКМ
без альта

вот пример таких колонок

"Калинин Иван" написал:

это значит, что самому сделать колонку ссылкой нельзя?

и почему альт+клик?

у нас ссылка открывается простым нажатием на нее ЛКМ

без альта

День добрый Иван!!!

Максим в своем сообщение вам правильно описал, что в GridArea "колонки ссылки" открываются с удерживанием клавиши Alt. для перехода к записи в ее раздел удерживаем клавишу Ctrl и нажимаем ссылку. Это стандартные возможности Terrasoft 3.Х зашитые в ядре. Да вы так же правы Иван, что в версиях 3.3.2 и ниже террасофта можно было открыть карточку объекта обычным нажатием на ссылку, но в версиях 3.4.0 и выше это исправили на удержание клавиши Alt и нажатие на ссылку.

если говорить о ссылках в GridArea то это зиписи Типа "Поле Справочника". И они все отображаются в GridArea в виде ссылок.

Отвечая на ваш вопрос самый основной опираясь на последнюю вашу цитату Иван (где вы приводите примеры колонок со ссылками) отвечаю. Чтобы в GridArea содержимое колонки отображалось в виде ссылок, вам нужно выполнить следующее:

1. Создать Реляционную связь. как это сделано в вашем примере в таблице tbl_Contact, для примера беру реляционную связь с таблицей Контрагенты (tbl_Account). Пример во Вложенном скриншоте.
2. Добавить в запрос sq_Contact новое Левое соединение и 2 новых поля. Вот пример:

SELECT
...
	[tbl_Contact].[AccountID] AS [AccountID],
	[tbl_Account].[Name] AS [AccountName],
...
FROM
	[dbo].[tbl_Contact] AS [tbl_Contact]
...
LEFT OUTER JOIN
	[dbo].[tbl_Account] AS [tbl_Account] ON [tbl_Account].[ID] = [tbl_Contact].[AccountID]
...

3. В датасет ds_Contact добавить новое поле типа "Поле справочника". Пример во вложенном скриншоте.
4. Разместить поле в GridArea и все.

Спасибо за крайне развернутый ответ

У нас так реализованы все поля в террасофте, которые ссылаются на какие-либо данные
Но подчеркнутыми ссылками, почему-то, являются только те, что были уже настроены до нас

есть еще свойство IDataGridColumn, которое и отвечает за отображение колонки как ссылки (dgcltLookup) или как просто поля(dgcltGeneral):

dgcltDataFieldType - отрисовывает на основании типа поля (т.е. если справочник - то ссылкой, если что-то другое - нет)

вот сделал поле сумма "ссылкой" (правда она никуда не ведет):

Спасибо!!! Безумно благодарен!

Прошу прощения, но я рано порадовался
не помогает смена значения в данном свойстве колонки

никакое из свойств не делает колонку - ссылкой

при том, стандартные колонки "CreatedByID", "ModifiedByID" и "AccountID" и т.п. являются ссылкой при любом из значений данного поля

Иван, а версия/сборка приложения какая?

Иван, там написано, что сделав поле ссылкой, она никуда не приведет (просто будет подчеркнута).
Что бы куда-то привело воспользуйтесь этим

"Maxim Gritsenko" написал:

Иван, а версия/сборка приложения какая?


3.3.2.244

"Сазанов Александр Владимирович" написал:

Иван, там написано, что сделав поле ссылкой, она никуда не приведет (просто будет подчеркнута).

Что бы куда-то привело воспользуйтесь этим

я понимаю, что справочник должен был в референсах у террасофта, чтобы он знал, куда ему идти
только вот колонки у меня даже не подчеркиваются ;)

"Сазанов Александр Владимирович" написал:

Иван, там написано, что сделав поле ссылкой, она никуда не приведет (просто будет подчеркнута).

Что бы куда-то привело воспользуйтесь этим


действительно, чтобы отработал переход, надо чтобы спраовчник был в "референсах") (по крайней мере в 3.4.1 - см function DoLookupColumnClick)

но сама отрисовка ссылка\не_ссылка происходит, видимо, в ядре (не нашел отвечающего за это функционала в конфигурации)

Да, в ядре и в 3.3.2.224 это реализовано.

"Maxim Gritsenko" написал:

Да, в ядре и в 3.3.2.224 это реализовано.


Прошу прощения, не очень понял формулировку

Т.е. в нашей версии это реализовано в ядре, а не в открытом коде?

Надо так читать

"Андросов Дмитрий" написал:но сама отрисовка ссылка\не_ссылка происходит, видимо, в ядре

"Maxim Gritsenko" написал:Да, в ядре

"Maxim Gritsenko" написал:в 3.3.2.224 это реализовано.

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