Как открыть, например карточку контрагента, в новом окне или в новой вкладке?

Нравится

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

Здравствуйте.
По умолчанию карточка записи будет открываться в новом окне (это касается интерфейса 5.х). Открытие в новой вкладке определяется особенностями настроек браузера. Например в Chrome это будет происходить, если при этом зажать Ctrl.

1. http://javascript.ru/forum/misc/9084-novaya-vkladka.html
2. например, метод settingsClick в MainMenu (открыавет настройку конфигурации)

другими словами вам надо сформировать ссылку типа
sitename/0/NUI/ViewModule.aspx#SectionModuleV2/ContactSectionV2/ContactPageV2/edit/6f6faa9e-d310-4391-88d8-c5759a9806dd
и открыть ее с помощью window.open(new_tab_link , '_blank'). А уж в новой вкладке или в новом окне откроется - зависит от браузера

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

Доброго времени суток!

Существует задача:

Открыть новое окно при нажатии кнопки окна инцидента,
при этом передать данные из карточки инцидента в новое окно и используя их заполнить поля.

Как эти данные передать, и используя их, заполнить поля?

Нравится

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

Добрый день,
то что Вам нужно, описано тут:

http://www.community.terrasoft.ru/blogs/9079

и тут:

http://www.community.terrasoft.ru/forum/topic/9208

Дмитрий,

Форум разработчиков Terrasoft 3.X

что-то типа этого:

function CreateContract() {
	var EditWindowUSI = 'wnd_ContractEdit';
	var Attributes = GetNewDictionary();
	var OpportunityID = BaseWorkspace.GridDataset.Values('ID');
	var CurrentDate = new Date(System.Now());
	Attributes.Add('RecordID', GUID_NULL);		
	Attributes.Add('NotifyObject', Self);
	var DefaultValues = GetNewDictionary();	
	DefaultValues.Add('OpportunityID', OpportunityID);
	var Dataset = BaseWorkspace.GridDataset;
	var CustomerID = GetFieldValueFromDisabledField(Dataset, 'CustomerID');
	DefaultValues.Add('CustomerID', CustomerID);
	var ContactID = GetFieldValueFromDisabledField(Dataset, 'ContactID');
	DefaultValues.Add('ContactID', ContactID);
	DefaultValues.Add('OwnerID', Connector.CurrentUser.ContactID);
	DefaultValues.Add('StartDate', CurrentDate.getVarDate());	
	DefaultValues.Add('DueDate', CurrentDate.getVarDate());	
	Attributes('IsCreatedByOpportunityID') = OpportunityID;
	var CampaignID = GetFieldValueFromDisabledField(Dataset, 'CampaignID');
	DefaultValues.Add('CampaignID', CampaignID);
	var ProjectID = GetFieldValueFromDisabledField(Dataset, 'ProjectID');
	DefaultValues.Add('ProjectID', ProjectID);
	ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues);
}
Attributes.Add('RecordID', GUID_NULL)

означает что запись добавляется, если поставите конкретный ИД - будет изменение существующей

Спасибо, буду разбираться.

Коллеги, за первый пост извините - не заметил название ветки. Александр, огромное спасибо что поправили меня.
Дмитрий - спасибо за публикацию решения.

Я открываю новое окно следующим способом:
var ClauseWindow = Services.GetNewItemByUSI('wnd_New');
ClauseWindow.Attributes('IncidentID') = '{Incident_ID}';
ClauseWindow.Prepare();
ClauseWindow.Show();

где передается Incident_ID, и на основе его открывается датасет,
и при событии OnPrepare в скрипте нового окна

(Window) {
dlData.Dataset.Open();
}

но обработка длится минуты 2-3, после этого все же выводит запись, которая и передавалась.
Как я понимаю тут надо применить фильтр по полю Incident_ID?
Или в чем может быть проблема?

"zod13" написал:Как я понимаю тут надо применить фильтр по полю Incident_ID?

да, конечно

если у вас окно на базе wnd_BaseDBEdit - напишете в OnPrepare

wnd_BaseDBEditOnPrepare(Window);

А разве id открываемой записи просто не должна быть в Attributes('RecordID')?

Согласен с Александром,
лучше всего использовать функцию:

ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues);

где EditWindowUSI - срока, с названием сервиса окна, которое необходимо открыть ('wnd_IncidentEdit');
Attributes:

var Attributes = new Dictionaty();
Attributes('RecordID') = '{some_id}'; //если нужно открыть существующую запись. если новую - вообще не задаем атрибутов

DefaultValues:

var DefaultValues = new Dictionary();
DefaultValues('Name') = 'name'; //значения по умолчанию для полей датасета открываемой карточки

В таком варианте Вам не нужно ничего писать на OnPrepare() открываемой карточки и пр.

Итого, если нужно создать новую запись, получим три строки кода:

var DefaultValues = new Dictionary();
var Attributes = new Dictionaty();
ShowEditWindowEx('wnd_IncidentEdit', Attributes, DefaultValues);

Хорошо,
когда я делаю способом описанным выше, у меня все равно поля датасета остаются не активными,
и думаю причина этому не открытый датасет, но про попытке его открыть через событие нового окна OnPrepare() , история та же, просто зависает:

var DefaultValues = new GetNewDictionary();   	 
var Attributes = new GetNewDictionary();
	Attributes('ID') = Dataset.Values('ID');
ShowEditWindowEx('wnd_New', Attributes, DefaultValues); 

окно создается без использования шаблонов.

Два вопроса:
1) Что написано на OnPrepare нового окна?
Думаю надо, то что описал Дмитрий, поставить wnd_BaseDBEditOnPrepare(Window);
2) Почему Attributes('ID')? Если в 4-ех комментариях стоит Attributes('RecordID');

И окна лучше наследовать от wnd_BaseDBEdit.

Спасибо всем! Разобрался!

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

Здравствуйте.

Можно ли как-то реализовать следующую задачу?

Продукты организованы с помощью древовидной структуры на основе групп. То есть, есть дерево групп, по которым разбросаны продукты (также как сделано в 1С).

При добавлении продуктов в счет появляется окно выбора продукта, но они там все в кучу, и при большой номенклатуре выбирать продукт без четкого представления о названии или еще чем-то очень сложно.

Можно ли сделать так, чтобы окно выбора продукта было с деревом групп, чтобы можно было, спускаясь по дереву, выйти на нужную группу и выбор делать из гораздо меньшего списка.

Нравится

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

Добрый день, Алексей!

Реализовать выбор продуктов, используя информацию о дереве групп, можно.
Для этого можно, например, создать окно - наследник от wnd_SelectData, в нем добавить древовидный реестр, реализовать заполнение реестра группами продуктов, а при выборе некоторой записи в дереве реализовать наложение фильтров по группе на набор данных продуктов.
Для того, чтобы в поле Продукт выбирать значение с помощью нового окна, необходимо указать окно выбора значения в поле типа LookupDataControl окна редактирования Продукта в Счете. В свойстве SelectWindowUSI компонента edtOfferingName окна wnd_OfferingDetailEdit необходимо указать код созданного окна выбора.

Второй способ - использовать для выбора значения окно wnd_SelectWorkspaceData, однако его придется доработать, чтобы оно смогло стать полноценным окном выбора значения для LookupDataControl. Этот способ более трудоемкий, но даст более наглядный результат - пользователь будет выбирать продукт в окне, которое является разделом Продукты.
Если возникнут вопросы по реализации, буду рад помочь.

Спасибо, скорее всего буду работать над вторым вариантом. По результатам отпишусь.

Схожий вопрос.
Хочу в детали "Группы" в любом разделе, чтобы при нажатии на добавить возникало окно не с списком групп, а с древом.
Создал окно wnd_GroupsTree, установил TemplateWindow - wnd_SelectData.
При попытке добавить в окно элемент DataTreeGrid возникает Разрушительный сбой. Что я делаю не так?

Добрый день, Константин!
Для создания собственного окна выбора, но с древовидным отображением списка, придется создавать его с нуля. Использовать в качестве шаблона окно wnd_SelectData не получится, т.к. в его основе лежит DataGrid, а нужно TreeDataGrid. Также под вопросом использование поиска в таком окне, т.к. при включении каких-либо фильтров возможно нарушение структуры дерева.
Основная задача такого окна - отображение списка записей и при нажатии на кнопку ОК считывать значение ID текущей записи, установка значений в атрибутах окна и посылка сообщения Notify окну, которое вызвало окно выбора (пример см. скрипт scr_SelectData функция btnOkOnClick())
Желаю успехов!

Здравствуйте.
А что значит тогда:
Реализовать выбор продуктов, используя информацию о дереве групп, можно.
Для этого можно, например, создать окно - наследник от wnd_SelectData, в нем добавить древовидный реестр, реализовать заполнение реестра группами продуктов, а при выборе некоторой записи в дереве реализовать наложение фильтров по группе на набор данных продуктов.
?

Если я создаю новое окно, не указываю TemplateWindow,
то при попытке добавить элементы DataGrid или TreeDataGrid возникает Разрушительный сбой.
Как же создать это окно с нуля?

Через наследование от wnd_SelectData сделать можно, но придется скрывать уже существующий компонент DataGrid и добавлять новый DataTreeGrid, а также существенно изменять код, в общем, при более детальном рассмотрении сформирован вывод, что наследование от этого окна в данном случае пользы не дает.
Вообще создать новое окно с нуля можно (добавлять фрейм, затем фреймгруппы и компоненты, не забывать почаще сохранять), но в Вашем случае можно воспользоваться шаблоном wnd_BaseEdit - содержит только два фрейма, во втором две кнопки и невизуальный компонент dlData.
Внутрь компонента frmData можно добавить DataTreeGrid, настроить выравнивание и т.д.
Бороться с "разрушительным сбоем" можно следующим образом: загрузить сохраненную версию окна и аккуратно добавить элементы.
Желаю успехов!

Так я так и пытался делать.
Создаю новое окно, пишу TemplateWindow - wnd_BaseEdit.
Сохраняю, закрываю. Открываю снова.
В frmData создаю DataGrid.
Разрушительный сбой.

Укажите, пожалуйста, полную версию приложения.
Возможно, проблема решится использованием последней версии бинарных файлов.

Воспроизвел, убедился. Зафиксировал запрос на изменение и сообщил разработчикам.
Проверил, на версии 3.0.4.85 DataGrid еще добавляется, в Вашем случае рекомендую создать окно в 3.0.4.85 (взять бинарные файлы этой версии можно в службе поддержки), остальную конфигурацию делать в 3.0.4.112.

P.S. Почему так получилось, что Вы используете такую старую версию системы?

Ок. Попробую более старый дистрибутив. У меня он есть, но версию не помню. Если не получиться, то запрошу.

Решение о покупке CRM принималось ещё в прошлом году.
Тогда и закупили 3.0.4
Когда ж реально приступили к внедрению (этим занимаюсь я несколько месяцев), то оказалось, что 3.0.4 дальше не развивается, а переход на 3.2 (а скоро, я полагаю, на 3.3) требует доплаты за обновление лицензий. Тогда как даже старые себя не оправдали на данный момент...
К тому же ещё и конфигурацию заново придется переписывать или платить за адаптацию.

Здравствуйте.
Разработчики патч ещё не сделали?

Добрый день, Константин!
На данный момент запланированы работы по исправлению, думаю, будет готово в середине ноября.

Хорошо.
Будем ждать.

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