Есть два разных окна для редактирования проекта.
Предположим wnd_edit1 и wnd_edit2. А у проекта есть два типа type1 и type2.
Как реализовать такую логику, что бы при открытие проекта, редактировании или копировании открывалось нужное окно редактирования. Например, если type1 то окно редактирования wnd_edit1.
Нравится
как теоретический вариант предложил бы в начале обработчика на кнопке редактирования, на двойном щелчке по гриду менять атрибут 'EditWindowUSI' для грида в зависимости от типа проекта, где то так...
Для реализации Вам необходимо добавить в окно wnd_ProjectGridArea вместо невизуального объекта amiGridAddProject два таких же для каждого типа: amiGridAddProjectType1 и amiGridAddProjectType2. Обоим объектам в качестве обработчика события OnExecute установить amiAddEssenseOnExecute.
Дальше в функции AddProjectRecord скрипта scr_ProjectCommonUtils вместо
[javascript]
case 'amiAddProject':
SetDefaultValuesForProjectEssence(DefaultValues);
break;
[/javascript]
вставляем:
[javascript]
case 'amiAddProjectType1':
EditWindowUSI = 'wnd_Edit1';
SetDefaultValuesForProjectEssence(DefaultValues, 'Type1');
break;
case 'amiAddProjectType2':
EditWindowUSI = 'wnd_Edit2';
SetDefaultValuesForProjectEssence(DefaultValues, 'Type2');
break;
[/javascript]
Также Вам необходимо изменить функцию SetDefaultValuesForProjectEssence:
[javascript]
function SetDefaultValuesForProjectEssence(DefaultValues, ProjectType) {
DefaultValues('EssenceType') = petProject;
DefaultValues('StateID') = GetProjectStateIDByFlags(petProject, true, false);
//DefaultValues('TypeID') = GetDefaultProjectTypeID(petProject);
if (ProjectType = 'Type1') {
DefaultValues('TypeID') = Type1ID;
} else {
DefaultValues('TypeID') = Type2ID;
}
DefaultValues('PlanningType') = pptByChildElements;
var CurrentDate = new Date(System.Now());
CurrentDate.setMilliseconds(0);
CurrentDate.setSeconds(0);
DefaultValues('EstimatedStartDate') = CurrentDate.getVarDate();
CurrentDate.setDate(CurrentDate.getDate() + 1);
DefaultValues('EstimatedDueDate') = CurrentDate.getVarDate();
}
[/javascript]
Подобные проверки и установку атрибута EditWindowUSI необходимо реализовать в функциях EditProjectRecord и CopyProjectRecord этого же скрипта.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
Олег, я как понял этот код для версии 3,3. У меня 3,2 таких функций не нахожу. Но постараюсь по такому принципу сделать и у себя. Большое спасибо за ответ.
Юрий, извините, что не уточнил версию.
В принципе, тогда всё ещё проще. Единственная сложность будет с кнопкой "Добавить" - её нужно заменить либо на две кнопки (для каждого типа), либо на меню (реализовать можно по аналогии с деталью "Файлы"), и в обработчиках кнопки присваивать соответствующее значение атрибуту EditWindowUSI (или передавать соответствующее значение в функцию ShowEditWindowEx).
Что касается копирования и редактирования - достаточно проверять тип выделенной записи во время обработки dlDataOnDatasetAfterPositionChange и в зависимости от его значения присваивать значение атрибуту EditWindowUSI реестра.
Все нужные Вам события обрабатываются в скрипте wnd_OpportunitiesGridAreaScript.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.