Добрый день!

Реализовала открытие окна Продажа при нажатии на новую кнопку в карточке Задачи. Задача закрывается, новая Продажа открывается.
Когда создается какая-либо запись из контекстного меню реестра, то при сохранении такой записи выдается сообщение "Перейти к созданной записи?". Как мне вызвать такой диалог и переход к реестру при сохранении моей новой продажи, созданной из карточки задачи?

Нравится

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

для вызова диалога и сохранения попробуйте:

	if (ShowConfirmationDialog("Перейти к созданной записи?") == wmrYes) {
	    SaveChangesWithCheck(Self, BaseDBEdit);
	}

Мне кажется, что сейчас и так должен появляться диалог, тк он как раз появляется когда работает SaveChangesWithCheck(Self, BaseDBEdit). Почему же он появляется при создании продажи из контекстного меню у контрагента?

Причина появления диалога в следующем: если проанализировать обработку события OnNotify раздела "Контрагенты", мы увидим такие строки:

if ((Message == 'MSG_OK') && (SenderCode == 'wnd_OpportunityEdit')) {
		var DetailWindow = wndOpportunityDetail.Window;
		ProcessNotifyMessage('wnd_OpportunitiesWorkspace', DetailWindow, Sender, 
			Message, Data);
		return;
	}

Данный код выполняется после нажатия кнопки "ОК" в карточке редактирования продажи, созданной по действию из контекстного меню (окно редактирования посылает сообщение разделу). Аналогичные блоки есть и для задач, и для контактов.

Если же проанализировать функцию ProcessNotifyMessage, легко увидеть, что в процессе её работы отправляется нотификация главному окну wnd_Main. А в обработчике OnNotify этого окна вызывается функция AskAboutGoto, которая имеет вид:

function AskAboutGoto(Sender) {
	if (ShowConfirmationDialog("Перейти к созданной записи?") == wmrYes) {
		var RecordID = Sender.Attributes('RecordID');
		var WorkspaceWindowCode = Sender.Attributes('WorkspaceWindowCode');
		ShowWorkspace(WorkspaceWindowCode, RecordID);
	}
}

Она и вызывает диалог для подтверждения перехода к записи.

Да, все нашла.
При вызове окна редактирования Продажи NotifyObject присваиваю значение 'wnd_TaskWorkspace', но почему-то когда доходит до NotifyObject.Notify(...) не попадаю в wnd_TaskWorkspaceOnNotify.

Можете уточнить, как именно Вы устанавливаете значение для NotifyObject? Это должно быть окно. Если Вы делаете так:

Window.Attributes('NotifyObject') = 'wnd_TaskWorkspace';

,

то ничего не получится.

Кроме того, в вышеприведённом примере раздела "Контрагенты" функционал реализован через действия, а у Вас - через

"Kat" написал:при нажатии на новую кнопку в карточке Задачи
. В этом случае лучше использовать обработку события OnNotify в скрипте карточки задачи.

Делаю так:
Window.Attributes('NotifyObject') = Services.GetNewItemByUSI('wnd_TaskWorkspace')
С окном задачи не очень удобно, мне кажется, потому что оно закрывается перед открытием продажи.

Так тоже не совсем верно: Вы создаёте новый экземпляр раздела, а в атрибут нужно передавать уже проинициализированный раздел.

Попробуйте из окна редактирования добраться к разделу "Задачи" и передать его в атрибут NotifyObject. Думаю, можно так:

Window.Attributes('NotifyObject') = Self.Attributes('NotifyObject').Attributes('WorkspaceWindow');
Показать все комментарии