Есть два разных окна для редактирования проекта.
Предположим wnd_edit1 и wnd_edit2. А у проекта есть два типа type1 и type2.
Как реализовать такую логику, что бы при открытие проекта, редактировании или копировании открывалось нужное окно редактирования. Например, если type1 то окно редактирования wnd_edit1.
Нравится
как теоретический вариант предложил бы в начале обработчика на кнопке редактирования, на двойном щелчке по гриду менять атрибут 'EditWindowUSI' для грида в зависимости от типа проекта, где то так...
Для реализации Вам необходимо добавить в окно 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.