И у первого способа есть такой минус, что все происходит на онанлоад, поэтому там WF может и не сработать. Можно сделать на само назначение, тагда WF должен быть настроен на изменение поля, которое содержит наименование очереди, а скрипт должен быть примерно таким :
flagSave= false;
window.MyRouteTo = function()
{
flagSave= false;//поскольку в назначении тоже идет сохранение, но при этом сохраняются старые данные
assignObject(112);
foronunload();//тут у нас уже корректно заполняется поле...
crmForm._bSaving = false;
crmForm.detachCloseAlert();
flagSave= true;//...поэтому можно сохранить
crmForm.Save();//.. поле не должно поменяться, т.к. в функции есть проверка (должна быть)
}
var changeAction = document.getElementById('_MIassignObject112');
if(changeAction != null){
changeAction.action = 'MyRouteTo();';
}
/*==============================================================*/
и на OnSave() добавить:
if(flagSave)
{
foronunload();
}
/*==============================================================*/
кроме того, если поставлен Audit (у нас второй вариант с mmcrm.ru), там корректно история изменений отображается
P.S. проверьте саму функцию foronunload();!!!!!!!!!!!!!!!! а то там после чистки немного больше проверок осталось, чем надо

, а может и меньше

, но там уже просто

P.S.S. у нас с OnSave() свои заморочки были, поскольку менялось не одно поле и у нас foronunload много проверок, вполне возможно, что при более простой функции, так дублировать не надо.