Деталь
Скрипты
Разработка

Помогите обновить деталь

Здравствуйте. Проблема следующая. В разделе Конрагентов создали свою деталь "Закрепленные сотрудники". В меню "Действия" добавили запись "Привязка контрагента к сотруднику", по которой вызываем свое окошко, в которое передаем из скрипта scr_AccountsWorkspace в методе OnExecute своего действия в виде атрибутов окна передаем грид реестра контрагентов и ID выбранного контрагента. В форме выбирается сотрудник, которого мы хотим привязать к контрагентам, и по кнопке "Ok" выполняется собственно привязка, заполняются дополнительные данные в таблице контрагентов и таблицах прикрепленных сотрудников и закрывается окно. При этом хотим обновить на экране открытую деталь "Закрепленные сотрудники" для выбранного контрагента, но никак не не получается.

Метод OnExecute нашего действия:

function amiChangeCurrentEmployee3OnExecute(ActionMenuItem, Sender) {
        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 кнопки "ОК" нашего окна:

function btnOKOnClick(Control) {
    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('Поле "Сотрудник" должно быть заполнено!');
    }
}

Нравится

2 комментария

Получилось! Достаю датасет детали через даталинк WindowContainer.Window.ComponentsByName(dlData) в методе amiChangeCurrentEmployee3OnExecute и передаю его как параметр в метод btnOKOnClick , и там переоткрываю после изменений.

Здравствуйте, Николай!
Спасибо, что поделились решением проблемы.
Если возникнут дополнительные вопросы, будем рады помочь.

Показать все комментарии