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

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

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

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

Нравится

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

Попробуйте через 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);  
}
Показать все комментарии