Здравствуйте. Проблема следующая. В разделе Конрагентов создали свою деталь "Закрепленные сотрудники". В меню "Действия" добавили запись "Привязка контрагента к сотруднику", по которой вызываем свое окошко, в которое передаем из скрипта scr_AccountsWorkspace в методе OnExecute своего действия в виде атрибутов окна передаем грид реестра контрагентов и ID выбранного контрагента. В форме выбирается сотрудник, которого мы хотим привязать к контрагентам, и по кнопке "Ok" выполняется собственно привязка, заполняются дополнительные данные в таблице контрагентов и таблицах прикрепленных сотрудников и закрывается окно. При этом хотим обновить на экране открытую деталь "Закрепленные сотрудники" для выбранного контрагента, но никак не не получается.
Метод OnExecute нашего действия:
var EditWindowUSI = 'wnd_ChangeCurrentEmployee3';
var Attributes = GetNewDictionary();
Attributes.Add('RecordID', GUID_NULL);
Attributes.Add('NotifyObject', Self);
var AccountName = BaseWorkspace.GridDataset.ValAsStr('Name');
var CurrentAccountID = BaseWorkspace.GridDataset.ValAsGUID('ID');
var DefaultValues = GetNewDictionary();
var GridDataset = BaseWorkspace.GridDataset;
DefaultValues.Add('CurrentAccountID', CurrentAccountID);
DefaultValues.Add('BaseGridDataset', BaseWorkspace.GridDataset);
ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues);
}
Метод OnClick кнопки "ОК" нашего окна:
var StaffID = edtCurEmpl.DataField.Value;
if (StaffID != null) {
var UpdateStaff = Services.GetNewItemByUSI('uq_ClearMountedStaffUsers');
var InsertStaff = Services.GetNewItemByUSI('iq_MountedStaff');
var UpdateStaffDetails = Services.GetNewItemByUSI('uq_ChangeStaffDetails');
var DefaultValues = Control.ParentWindow.Attributes('DefaultValues');
var CurrentDataset = DefaultValues.Item('BaseGridDataset');
CurrentDataset.Open();
CurrentDataset.GotoFirst();
CurrentDataset.DisableEvents();
var AccountID;
var CurrentAccountID = DefaultValues.Item('CurrentAccountID');
var CurrentDateMounted = getDataToday();
var DateMounted = edtCurDatMount.DataField.Value;
var StatusCargoID = edtCurStatus.DataField.Value;
InsertStaff.ColumnsValues('StaffID').Value = StaffID;
InsertStaff.ColumnsValues('DateMounted').Value = DateMounted;
InsertStaff.ColumnsValues('IsPrimary').Value = true;
InsertStaff.ColumnsValues('StatusCargoID').Value = StatusCargoID;
UpdateStaffDetails.Parameters('OwnerID').Value = StaffID;
UpdateStaffDetails.Parameters('StatusCargoID').Value = StatusCargoID;
try {
while (!CurrentDataset.IsEOF) {
AccountID = CurrentDataset.DataFields.ItemsByName('ID').Value;
UpdateStaff.Parameters('AccountID').Value = AccountID;
UpdateStaff.Parameters('DateDealloc').Value = CurrentDateMounted;
UpdateStaff.Execute();
InsertStaff.ColumnsValues('ID').Value = Connector.GenGUID();
InsertStaff.ColumnsValues('AccountID').Value = AccountID;
InsertStaff.Execute();
UpdateStaffDetails.Parameters('AccountID').Value = AccountID;
UpdateStaffDetails.Execute();
RightsUpdateAccountAll(AccountID, StaffID);
CurrentDataset.GotoNext();
}
} finally {
CurrentDataset.EnableEvents();
}
Control.ParentWindow.Close();
} else {
ShowInformationDialog('Поле "Сотрудник" должно быть заполнено!');
}
}
Нравится
Получилось! Достаю датасет детали через даталинк WindowContainer.Window.ComponentsByName(dlData) в методе amiChangeCurrentEmployee3OnExecute и передаю его как параметр в метод btnOKOnClick , и там переоткрываю после изменений.
Здравствуйте, Николай!
Спасибо, что поделились решением проблемы.
Если возникнут дополнительные вопросы, будем рады помочь.