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

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

Нравится

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

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

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

Для реализации Вам необходимо добавить в окно wnd_ProjectGridArea вместо невизуального объекта amiGridAddProject два таких же для каждого типа: amiGridAddProjectType1 и amiGridAddProjectType2. Обоим объектам в качестве обработчика события OnExecute установить amiAddEssenseOnExecute.

Дальше в функции AddProjectRecord скрипта scr_ProjectCommonUtils вместо

case 'amiAddProject':
			SetDefaultValuesForProjectEssence(DefaultValues);
		break;

вставляем:

case 'amiAddProjectType1':
    EditWindowUSI = 'wnd_Edit1';
    SetDefaultValuesForProjectEssence(DefaultValues, 'Type1');
		break;
case 'amiAddProjectType2':
    EditWindowUSI = 'wnd_Edit2';
    SetDefaultValuesForProjectEssence(DefaultValues, 'Type2');
		break;

Также Вам необходимо изменить функцию SetDefaultValuesForProjectEssence:

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

Подобные проверки и установку атрибута EditWindowUSI необходимо реализовать в функциях EditProjectRecord и CopyProjectRecord этого же скрипта.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Олег, я как понял этот код для версии 3,3. У меня 3,2 таких функций не нахожу. Но постараюсь по такому принципу сделать и у себя. Большое спасибо за ответ.

Юрий, извините, что не уточнил версию.

В принципе, тогда всё ещё проще. Единственная сложность будет с кнопкой "Добавить" - её нужно заменить либо на две кнопки (для каждого типа), либо на меню (реализовать можно по аналогии с деталью "Файлы"), и в обработчиках кнопки присваивать соответствующее значение атрибуту EditWindowUSI (или передавать соответствующее значение в функцию ShowEditWindowEx).

Что касается копирования и редактирования - достаточно проверять тип выделенной записи во время обработки dlDataOnDatasetAfterPositionChange и в зависимости от его значения присваивать значение атрибуту EditWindowUSI реестра.

Все нужные Вам события обрабатываются в скрипте wnd_OpportunitiesGridAreaScript.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

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

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