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

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

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

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

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

Нравится

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

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

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

Добрый день!

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

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

Версия Terrasoft CRM 3.3.2.43

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

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

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


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

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

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

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

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

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

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

                SchemeForSave = ProjectWorkspace.GridFiltersScheme;

                SchemeForLoad = ProjectWorkspace.GanttFiltersScheme;

        }

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

Но откуда не возьмись появилась ошиибка "Ошибка выполнения метода 'pcDataOnChangedActivePage'. Источник данных 'Projects\General\Main Grid\ds_Project' не открыт «Call Stack»"
Попробовала в эту функцию добавить

if (ds_Project.State == dstInactive){
	ds_Project.Open();
	}

Не получается.

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

Подумала, что нужно добавить функцию Initialize и Refresh.

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;	
} 
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'); 
}

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

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

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

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

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

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

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