Создание закладки
3.x

Создание закладки в разделе "Проект"

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

Мне необходимо создать закладку "Риски проекта", в разделе "Проект".

Для этого я сделала следующее.
В окне wnd_ProjectWorkspace добавила в fmClient ->Page->WindowContainer в свойствах указала созданный справочкник wnd_ProjectRiskGridArea.
Но возникает ошибка "CustomFilters is null or not an object"
Искала на форуме, на счет создания закладки, ничего не нашла.

Подскажите пожалуйста, как создать закладку в разделе (скрин RiskProject).

Нравится

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

Добрый день!
Валентина, Вы можете предоставить используемые версии?
Укажите, какую версию исполняемых файлов Вы используете.

"Гакало Игорь Александрович" написал:

Добрый день!

Валентина, Вы можете предоставить используемые версии?

Укажите, какую версию исполняемых файлов Вы используете.

Версия Terrasoft CRM 3.3.2.43

Валентина, предоставьте, пожалуйста, используемые сервисы. Проверю, в чем может быть проблема.

"Гакало Игорь Александрович" написал:

Валентина, предоставьте, пожалуйста, используемые сервисы. Проверю, в чем может быть проблема.


Хорошо, предоставляю. :)

Сервисы получены, по результатам напишу :)

Для решения ошибки необходимо в функцию SetBaseWorkspaceFiltersScheme добавить такую проверку:

[javascript]
if (pcData.ActivePage.Name == pgRiskProject.Name) {
SchemeForSave = ProjectWorkspace.GridFiltersScheme;
SchemeForLoad = ProjectWorkspace.GanttFiltersScheme;
}
[/javascript]

"Гакало Игорь Александрович" написал:

Для решения ошибки необходимо в функцию SetBaseWorkspaceFiltersScheme добавить такую проверку:

        if (pcData.ActivePage.Name == pgRiskProject.Name) {

                SchemeForSave = ProjectWorkspace.GridFiltersScheme;

                SchemeForLoad = ProjectWorkspace.GanttFiltersScheme;

        }

Спасибо большое, помогло!

Но откуда не возьмись появилась ошиибка "Ошибка выполнения метода 'pcDataOnChangedActivePage'. Источник данных 'Projects\General\Main Grid\ds_Project' не открыт «Call Stack»"
Попробовала в эту функцию добавить [javascript]
if (ds_Project.State == dstInactive){
ds_Project.Open();
}
[/javascript]
Не получается.

Потом еще при нажатии на кнопку "Добавить" в новой загладке"Риски проекта", возникает ошибка "Ошибка выполнения метода 'btnAddOnClick'. OLE error 80020101".

Подумала, что нужно добавить функцию Initialize и Refresh.
[javascript]
function InitializeProjectRiskGridAreaWindow() { //Initialize
ProjectWorkspace.ProjectRiskGridAreaWindow = wndRiskProject.Window;
var Window = ProjectWorkspace.ProjectRiskGridAreaWindow;
SetAttribute(Window, 'DatasetUSI', 'ds_ProjectRiskGridArea');
SetAttribute(Window, 'ParentItemFieldName', 'ID');
SetAttribute(Window, 'EditWindowUSI', 'wnd_ProjectRiskEdit'); // Указываем окно Риски проекта
Window.Prepare();
ProjectWorkspace.ProjectRiskDataset =
Window.ComponentsByName('dlData').Dataset;
}
[/javascript]
[javascript]
function RefreshProjectRiskGridAreaWindow() {
if (ProjectWorkspace.InitializeProjectRiskGridAreaFlag != true) {
InitializeProjectRiskGridAreaWindow();
ProjectWorkspace.InitializeProjectRiskGridAreaFlag = true;
};
var ID = BaseWorkspace.GridDataset.ValAsGUID('ID');
if (ID == ProjectWorkspace.ProjectRiskOldProjectID) {
return;
} else {
ProjectWorkspace.ProjectID = ID;
}
SetAttribute(ProjectWorkspace.ProjectRiskWindow, 'ParentItemID',
BaseWorkspace.GridDataset.ValAsStr('ID'));
RefreshWindowData(BaseWorkspace.GridDataset, 'ID',
ProjectWorkspace.ProjectRiskDataset, 'ID');
}
[/javascript]

Та же ошибка, подскажите, что может быть не так.
Заранее, благодарю!

Валентина, проблема появляется потому, что не получается отфильтровать содержимое грида по фильтрам рабочей области.

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

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

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

Спасибо, Анна за ответ.
Я наверное все таки сделаю деталь...но я еще подумаю.

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