Здравствуйте!
Помогите, пожалуйста, решить проблему.
Пытаюсь сделать так: при изменении ответственного задачи, проверяется, не в отпуске ли новоустановленный ответственный, и если он в отпуске - вместо него подставляется заместитель.
Как пытаюсь реализовать: в обработчике dlDataOnDatasetDataChange(DataField) на изменение поля OwnerID
В итоге не работает.
switch (DataFieldName){
case ('OwnerID'):
var TaskDataset = dlData.Dataset;
var OwnerID = dlData.Dataset.Values('OwnerID');
var NewOwner = getAssistanteIfExist(OwnerID);
dlData.Dataset('OwnerID') = NewOwnerID; // не присваивает!!!
//edtOwner.DataField.Value = NewOwnerID; // так тоже не присваивает
//DataField.Value = OwnerID; // и так не присваивает
break;
...
NewOwnerID получаю правильный.
При дебаге показывает, что оно, вроде бы, присваивается, но при этом в лукапконтроле не отображается.
Подскажите, где копать ошибку.
Нравится
Ошибка вызвана тем, что заполняя значение поля "Ответственный" ('OwnerID') в блоке case ('OwnerID') Вы вызываете зацикливание.
Попробуйте модифицировать Ваш код подобным образом:
case ('OwnerID'): if (TaskEdit.EditOwner != true) { var OwnerID = dlData.Dataset.Values('OwnerID'); var NewOwnerID = getAssistanteIfExist(OwnerID); if (!IsEmptyValue(NewOwnerID)){ TaskEdit.EditOwner = true; edtOwner.DataField.Value = NewOwnerID; return; } } TaskEdit.EditOwner = false; break;
switch (DataFieldName){ case ('OwnerID'): var OwnerID = dlData.Dataset('OwnerID'); var NewOwner = getAssistanteIfExist(OwnerID); if (!IsEmptyValue(NewOwnerID)){ dlData.Dataset.DisableEvents(); dlData.Dataset('OwnerID') = NewOwnerID; dlData.Dataset.EnableEvents(); } break;
или так:)
"Бондарь Наталия" написал:Ошибка вызвана тем, что заполняя значение поля "Ответственный" ('OwnerID') в блоке case ('OwnerID') Вы вызываете зацикливание.
Увы, ваши варианты не очень подходят, поскольку надо проверить, не находится ли новоявленный заместитель сам в отпуске.
Немного исправил, зацикливание не при чём. При таком коде зацикливания не происходит, но значение не сохраняется.
... switch (DataFieldName){ case ('OwnerID'): var TaskDataset = dlData.Dataset; var OwnerID = dlData.Dataset.Values('OwnerID'); if(IsNotActive(OwnerID)) { var NewOwner = getAssistanteIfExist(OwnerID); dlData.Dataset('OwnerID') = NewOwnerID; // не присваивает!!! } break; ...
"netlander" написал:NewOwnerID получаю правильный.
При дебаге показывает, что оно, вроде бы, присваивается, но при этом в лукапконтроле не отображается.
Если NewOwnerID получаете правильно и его значение присваивается полю 'OwnerID', но не отображается, следовательно значение поля перезаписывается в каком-то другом месте/событии.
Попробуйте пройтись отладчиком и отловить в какой момент перезаписывается значение поля 'OwnerID'.
Новое значение просто не записывается.
Попробуйте вот такой код:
скрипт scr_TaskEdit
... switch (DataFieldName){ case ('OwnerID'): dlData.Dataset.DisableEvents(); dlData.Dataset('OwnerID') = <ID ЛЮБОГО КОНТАКТА>; dlData.Dataset.EnableEvents(); break; } ...
Значение тупо не меняется.
Хххеееелп.
Может вам подойдет вариант замены ответственного не в момент его простановки, а в момент перед сохранением записи на событие OnBeforePost?