RefreshDataset
Скрипты
Разработка

Не обновляется грид

Доброго времени суток. Ситуация такая нужно было переопределить метод окна редактора карточки кнопки "ок"

dlData.Dataset.Post();
Self.Close();
var ParentWindow = Control.ParentWindow;
 var dsParent  =  ParentWindow.ComponentsByName('dlData').Dataset;
RefreshDataset(dsParent);
 ParentWindow.Repaint();

записи добовляються и их видно когда на гриде нажать кнопку обновить. Что у меня не так почему сразу грид не обвновляется после нажатия ок ?

Нравится

11 комментариев

Попробуйте через OnNotify
[javascript]
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); //посылаем сигнал
[/javascript]

этот код писать в методе onNotify ?
И где в workspace можно посмотреть название сигнала ?

OnNotify принимает сигнал, он у вас прописан в вашем workspace.
Этот код написать на кнопку "ОК" в конце.
Строку
[javascript]
var MainWindow = Connector.Attributes('MainWindow');
[/javascript]
оставить как есть.
Т.е. 2 эти строчки вернут текущее главное окно
[javascript]
var MainWindow = Connector.Attributes('MainWindow');
var WorkspaceWindow = MainWindow.ComponentsByName('wndWorkspace').Window
[/javascript];
Единственное, что нужно поменять это 'Refresh'
Так в скрипте окна контрагентов на событии OnNotify есть такой скрипт (а может я его сам дописал. Если да, то допишите в OnNotify нужного вам workspace примерно такой код)
[javascript]
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();
}
...
[/javascript]
Он у меня принимал сигнал с значением 'MSG_REFRESHDETAIL' и обновлял грид.

[javascript]
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);
}
[/javascript]
все равно не помогло так же не обновляется

Тогда у меня два вопроса:
1) Где определена переменная MSG_GROUPSCHANGED (может кавычки нужны)?
2) А OnNotify вообще идет?
Поставьте Log.Write(1,Message); перед if, для проверки второго вопроса.

1) Этот метод был автоматически определен когда раздел создал в мастере.
2) да перед if он идет сначало так ставил а вот if не срабатывает.

это уже было?
[javascript]
if ((Message == MSG_GROUPSCHANGED) &&
(pcDetails.ActivePage.Name == pgGroupsDetail.Name)) {
Log.Write(1,Message);
RefreshDemandGroupsDetail();
return;
}
[/javascript]
Ну как видно из названия он хочет обновить деталь групп, вам надо дописать в начало в этого скрипт что-то типо:
[javascript]
if (Message == 'Refresh') {
RefreshWorkspace();
return;
}
[/javascript]
а на событие ОК в карточке оставить код из 1-ого комментария:
[javascript]
var MainWindow = Connector.Attributes('MainWindow');
var WorkspaceWindow = MainWindow.ComponentsByName('wndWorkspace').Window;
var NotifyMessage = 'Refresh';
WorkspaceWindow.Notify(WorkspaceWindow, NotifyMessage, 0);
[/javascript]

Спасибо большое, это помогло

Что бы не создовать новой темы спрошу тут.

У меня есть два поля контрагент и контактное лицо.
Как можно включить фильтр когда у меня выбран контрагент что бы в справочнике контакотов отображались только те контакты которые относяться к этому контрагент.

У поля контактное лицо в свойствах есть OnPrepareSelectWindow
Щелкаешь два раза, тебе перенаправляет в скрипт, где будет создана функция для обработки события выбора контакта.
Туда написать примерно такой скрипт:
[javascript]
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);
}
[/javascript]

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