Необходимо перед добавлением\изменением записи детали проверить - не попадает ли заданный диапазон дат новой записи в один из уже существующих диапазонов записей датасета, а затем еще присвоить новой записи идентификатор таблицы реестра.
Я попытался сделать это на событие dlDataOnDatasetBeforePost в форме редактирования записи детали (wnd_SubContactPeriodsEdit)
var SubContactPeriodsDates = new Object();
...
function dlDataOnDatasetBeforePost(Dataset, DoPost) {
// проверка на пересечение нового периода с существующими
SubContactPeriodsDates.periodFrom = edtPeriodFrom.DataField.ValAsDateTime;
SubContactPeriodsDates.periodTo = edtPeriodTo.DataField.ValAsDateTime;
Dataset.GotoFirst();
while (!Dataset.IsEOF)
{
SubContactPeriodsDates.curFrom = Dataset.DataFields.ItemsByName('PeriodFrom');
SubContactPeriodsDates.curTo = Dataset.DataFields.ItemsByName('PeriodTo');
if (intersectDate() )
{
DoPost.Value = false;
ShowErrorDialog('Заданный период пересекается с существующими!');
return;
}
Dataset.GotoNext();
}
Dataset.DataFields.ItemsByName('ManagerID').Value = SubContactPeriodsEdit.ParentItemID;
}
function intersectDate()
{
return ((SubContactPeriodsDates.curTo > SubContactPeriodsDates.periodFrom) &&
(SubContactPeriodsDates.periodTo > SubContactPeriodsDates.curFrom)) ? true:false;
}
стало ясно что при переборе всех значений датасета, он выходит из режима вставки\редактирования.
Подскажите, как справиться с такой задачей ?
из идей только - воспользоваться dlDataOnDatasetAfterPost + Dataset.cancel()