Доброго времени суток. Ситуация такая нужно было переопределить метод окна редактора карточки кнопки "ок"
Self.Close();
var ParentWindow = Control.ParentWindow;
var dsParent = ParentWindow.ComponentsByName('dlData').Dataset;
RefreshDataset(dsParent);
ParentWindow.Repaint();
записи добовляються и их видно когда на гриде нажать кнопку обновить. Что у меня не так почему сразу грид не обвновляется после нажатия ок ?
Нравится
Попробуйте через OnNotify
var MainWindow = Connector.Attributes('MainWindow'); //название текущего workspace var WorkspaceWindow = MainWindow.ComponentsByName('wndWorkspace').Window; //объект окна workspace var NotifyMessage = 'Refresh'; //Название сигнала, посмотрите в workspace, какой нужен вам (для Account - это 'MSG_REFRESHDETAIL', для Task - 'Refresh') WorkspaceWindow.Notify(WorkspaceWindow, NotifyMessage, 0); //посылаем сигнал
этот код писать в методе onNotify ?
И где в workspace можно посмотреть название сигнала ?
OnNotify принимает сигнал, он у вас прописан в вашем workspace.
Этот код написать на кнопку "ОК" в конце.
Строку
var MainWindow = Connector.Attributes('MainWindow');
оставить как есть.
Т.е. 2 эти строчки вернут текущее главное окно
var MainWindow = Connector.Attributes('MainWindow'); var WorkspaceWindow = MainWindow.ComponentsByName('wndWorkspace').Window
;
Единственное, что нужно поменять это 'Refresh'
Так в скрипте окна контрагентов на событии OnNotify есть такой скрипт (а может я его сам дописал. Если да, то допишите в OnNotify нужного вам workspace примерно такой код)
function wnd_AccountsWorkspaceOnNotify(ScriptableService, Sender, Message, Data) { var USI = Sender.USI; if (USI) { var SenderCode = ExtractUSICodeEx(USI); } else { var SenderCode = ''; } if (Message =='MSG_REFRESHDETAIL') { RefreshWorkspace(); } ...
Он у меня принимал сигнал с значением 'MSG_REFRESHDETAIL' и обновлял грид.
function wnd_DemandWorkspaceOnNotify(ScriptableService, Sender, Message, Data) { if ((Message == MSG_GROUPSCHANGED) && (pcDetails.ActivePage.Name == pgGroupsDetail.Name)) { Log.Write(1,Message); RefreshDemandGroupsDetail(); return; } scr_BaseWorkspace.wnd_BaseWorkspaceOnNotify( ScriptableService, Sender, Message, Data); }
все равно не помогло так же не обновляется
Тогда у меня два вопроса:
1) Где определена переменная MSG_GROUPSCHANGED (может кавычки нужны)?
2) А OnNotify вообще идет?
Поставьте Log.Write(1,Message); перед if, для проверки второго вопроса.
1) Этот метод был автоматически определен когда раздел создал в мастере.
2) да перед if он идет сначало так ставил а вот if не срабатывает.
это уже было?
if ((Message == MSG_GROUPSCHANGED) && (pcDetails.ActivePage.Name == pgGroupsDetail.Name)) { Log.Write(1,Message); RefreshDemandGroupsDetail(); return; }
Ну как видно из названия он хочет обновить деталь групп, вам надо дописать в начало в этого скрипт что-то типо:
if (Message == 'Refresh') { RefreshWorkspace(); return; }
а на событие ОК в карточке оставить код из 1-ого комментария:
var MainWindow = Connector.Attributes('MainWindow'); var WorkspaceWindow = MainWindow.ComponentsByName('wndWorkspace').Window; var NotifyMessage = 'Refresh'; WorkspaceWindow.Notify(WorkspaceWindow, NotifyMessage, 0);
Что бы не создовать новой темы спрошу тут.
У меня есть два поля контрагент и контактное лицо.
Как можно включить фильтр когда у меня выбран контрагент что бы в справочнике контакотов отображались только те контакты которые относяться к этому контрагент.
У поля контактное лицо в свойствах есть OnPrepareSelectWindow
Щелкаешь два раза, тебе перенаправляет в скрипт, где будет создана функция для обработки события выбора контакта.
Туда написать примерно такой скрипт:
function edtContactOnPrepareSelectWindow(LookupDataControl) { var Dataset = dlData.Dataset; var LookupDataset = LookupDataControl.DataField.LookupDataset; var AccountID = Dataset.Values('AccountID'); var IsAccountIDFilterEnabled = !IsEmptyGUID(AccountID); ApplyDatasetFilter(LookupDataset, 'AccountID', AccountID, IsAccountIDFilterEnabled); }