возможно часто возникал вопрос, как сделать так, что при копировании задачи, все контакты данной задачи так же переносились?
Для этого необходимо добавить соответствующую логику в конфигурацию:
Для элемента ScheduleControl (сервис Tasks\General\SchedulerArea\wnd_SchedulerArea) добавить код в событие OnCopyEvent.
Встав в ячейку Value (со сначением ScheduleControlOnCopyEvent) для указанного события сделайте двойной клик, после чего Вы перейдете в сервис Tasks\General\SchedulerArea\scr_SchedulerArea.
В данном сервисе найдите объявление функции function CopyEvent(Event).
Между
Dataset.Post();
и
RefreshDataset(SchedulerArea.EventsDataset);
Вставьте код:
var Result = ShowConfirmationDialog('Копировать контакты задачи?') if((Dataset.Values('AuthorID')!= Dataset.Values('OwnerID'))&&(Result == mrYes)){ var SourceDataset = GetSingleItemByCode('ds_ContactInTask');
ApplyDatasetFilter(SourceDataset,'TaskID', SourceRecordID,true); var SourceParentItemIDFieldName ='TaskID'; var DestinationDataset = Services.GetNewItemByUSI('ds_ContactInTask'); var DestinationParentItemIDFieldName ='TaskID'; var DestinationItemID = Dataset.ValAsGUID('ID');
SourceDataset.Open(); if(IsDatasetEmpty(SourceDataset)){
SourceDataset.Close(); return; } var ExcludedFieldsList = GetNewDictionary();
ExcludedFieldsList('ID')=true;
ExcludedFieldsList(SourceParentItemIDFieldName)=true;
SourceDataset.GotoFirst();
DestinationDataset.EnableEvents(); while(!SourceDataset.IsEOF){
DestinationDataset.Append();
CopyRowDataEx(SourceDataset, DestinationDataset, ExcludedFieldsList);
DestinationDataset('ID')= Connector.GenGUID();
DestinationDataset(DestinationParentItemIDFieldName)= DestinationItemID;
DestinationDataset.Post();
SourceDataset.GotoNext(); }
DestinationDataset.DisableEvents();
DestinationDataset.Close();
SourceDataset.Close(); }
Сохранить сервис и проверять!
Приятной работы!
С уважением,
Белецкий Арсений
Группа компаний Terrasoft