Технические вопросы
Разработка

Разные окна для редактирования проекта

Есть два разных окна для редактирования проекта.
Предположим wnd_edit1 и wnd_edit2. А у проекта есть два типа type1 и type2.
Как реализовать такую логику, что бы при открытие проекта, редактировании или копировании открывалось нужное окно редактирования. Например, если type1 то окно редактирования wnd_edit1.

Нравится

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

как теоретический вариант предложил бы в начале обработчика на кнопке редактирования, на двойном щелчке по гриду менять атрибут 'EditWindowUSI' для грида в зависимости от типа проекта, где то так...

а можно код как это сделать :smile:

Для реализации Вам необходимо добавить в окно 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.

Большое спасибо

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