Здравствуйте!
Мне необходимо создать закладку "Риски проекта", в разделе "Проект".
Для этого я сделала следующее.
В окне wnd_ProjectWorkspace добавила в fmClient ->Page->WindowContainer в свойствах указала созданный справочкник wnd_ProjectRiskGridArea.
Но возникает ошибка "CustomFilters is null or not an object"
Искала на форуме, на счет создания закладки, ничего не нашла.
Подскажите пожалуйста, как создать закладку в разделе (скрин RiskProject).
Нравится
Добрый день!
Валентина, Вы можете предоставить используемые версии?
Укажите, какую версию исполняемых файлов Вы используете.
"Гакало Игорь Александрович" написал:Добрый день!
Валентина, Вы можете предоставить используемые версии?
Укажите, какую версию исполняемых файлов Вы используете.
Версия 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 и добавлять в них условие "если грид - риски проекта, тогда игнорировать стандартный обработчик"
Спасибо, Анна за ответ.
Я наверное все таки сделаю деталь...но я еще подумаю.