Может кто сталкивался с таким.

Выбирая ответственного в каком либо разделе мы видим контакты сотрудников но там так же сотрудники у которых пользователь активен и те у кого не активен.

Можно зафильтровать добавив в замещаемом модуле код для атрибута

"Owner": {
	"dataValueType": Terrasoft.DataValueType.LOOKUP,
	"lookupListConfig": {
		filter: function() {
			var filterGroup = Ext.create("Terrasoft.FilterGroup");
			filterGroup.add("IsUser",
				Terrasoft.createColumnIsNotNullFilter("[SysAdminUnit:Contact].Id"));
			filterGroup.add("IsActive",
				Terrasoft.createColumnFilterWithParameter(
					Terrasoft.ComparisonType.EQUAL,
					"[SysAdminUnit:Contact].Active",
					true));
			return filterGroup;
		}
}

В продаже это нормально сработало, но в активностях не как не хочет работать фильтр.

Может кто в курсе почему?

Но вообще было бы не плохо сделать это глобально конечно, что бы ответственных можно было добавить только активных пользователей, но я такого не нашел

Нравится

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

Александр, может, в карточке активности в одном из пакетов есть своя логика на этом поле и она мешает Вашей?

Попробуйте посмотреть, какой запрос идёт в одном и другом случае. Сначала — запрос от браузера к веб-сервису, его можно увидеть в «Инструментах разработчика». Если не поможет понять и сайт развёрнут локально, можно запустить SQL-профайлер и посмотреть запросы уже на уровне базы.

Зверев Александр,

Проверил все наследования - только в ActivityPageV2 в NUI rfgtnt есть логика через атрибут

"Owner": {
	dataValueType: Terrasoft.DataValueType.LOOKUP,
	lookupListConfig: {filter: BaseFiltersGenerateModule.OwnerFilter}
}

и наследование идет от модуля что наследовался от выше указанного в NUI пакете. У себя в замещенном модуле его и заместил

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

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

Доброго дня. 

Есть в системе Контрагент, и есть Контакт у этого Контрагента.

И есть ответственный, как у Контрагента, так и у Контакта.

Однако, если у Контрагентов один Ответственный - это ведущий менеджер, то у Контактов пользователь Supervisor.

Как бы привести в соответствие ответственных из Контрагента в Контакты. Не в ручную, а автоматизированно. 

 

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

Если это так, то подскажите, какая документация может помочь? 

Или если не бизнес-процессы, то что? 

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

Нравится

14 комментариев
Лучший ответ

Добрый день!
Ответственный у контрагентов и контактов - это тот, кто создал контрагент и контакт.
Привести в соответствие по вашему описанию можно скриптом в базе, например:

update c
set OwnerId = a.OwnerId
from Contact as c
join Account as a on c.AccountId = a.Id
 
либо (в зависимости от связи)
 
update c
set OwnerId = a.OwnerId
from Contact as c
join Account as a on c.Id = a.PrimaryContactId

Но, при создании новых контрагентов или контактов владельцы все равно будут проставлены по описанной выше логике. Так что надо будет либо сделать периодический бизнес процесс по обновлению, либо процесс по сигналу создания объекта (контрагента или контакта).

Добрый день!
Ответственный у контрагентов и контактов - это тот, кто создал контрагент и контакт.
Привести в соответствие по вашему описанию можно скриптом в базе, например:

update c
set OwnerId = a.OwnerId
from Contact as c
join Account as a on c.AccountId = a.Id
 
либо (в зависимости от связи)
 
update c
set OwnerId = a.OwnerId
from Contact as c
join Account as a on c.Id = a.PrimaryContactId

Но, при создании новых контрагентов или контактов владельцы все равно будут проставлены по описанной выше логике. Так что надо будет либо сделать периодический бизнес процесс по обновлению, либо процесс по сигналу создания объекта (контрагента или контакта).

Сидоров Александр В.,

То есть в бизнес-процесс можно зашить этот скрипт?

Bogdan Zozulya,

Да, можно. Элемент "Задание сценарий", в нем вызов CustomQuery

Можно, но не нужно. Внутри БП для этого есть более подходящие способы: элементы чтения и изменения данных или работа в скрипте с EntitySchemaQuery.

А приведенный выше скрипт — для быстрого единоразового изменения всех требуемых записей, если есть доступ к базе.

Зверев Александр, 

Вот с этим сейчас и завяз. Вроде все логично, вижу эти возможности, но пока не осознал, как с этим совладать. В связи с чем у меня был попутный вопрос в стартовом посте насчет справочной инфы. В принципе на часть вопроса Вы уже ответили. Что это действительно возможно. Попробую в документации узнать как именно это сделать. 

Bogdan Zozulya,

С документацией по настройке бизнес-процессов можете ознакомиться по этой ссылке на Академии и более подробно по работе с данными здесь.

Алла Савельева,

огромное спасибо, я думаю предостаточно наводок и данных, Пойду поднимать свою компетенцию владения системой. 

Можно сделать два отдельных механизма: один — для разового запуска в начале, другой — постоянно готовый сработать БП на событии изменения поля «Ответственный» контрагента: получаем значение поля и элементом изменения данных меняем ответственного во всех контактах, у которых указан этот контрагент.

Bogdan Zozulya,

Если возникнут дополнительные вопросы, спрашивайте - с радостью помогу.

Алла Савельева,

Спасибо, пожалуй воспользуюсь. Вот здесь как указать чтобы он взял данные из Ответственного в Контрагенте? 

Сидоров Александр В.,

А как разницу связей выявить? Куда мне посмотреть, чтобы определить какой из вариаций скрипта мне подходит?

В зависимости от того, как связаны интересующие контакты с контрагентом: по полю в контрагенте «Основной контакт» или наоборот, по полю в контакте «Контрагент».

Зверев Александр,

Понял, внимательно изучил, второй вариант, по полю «Контрагент» в «Контакте». Выходит второй вариант скрипта. верно?  

update c
set OwnerId = a.OwnerId
from Contact as c
join Account as a on c.Id = a.PrimaryContactId

Нет.

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

Добрый день. Нужно решение такой задачи.

"Каждый ответственный видит только своих контрагентов"

Подскажите пожалуйста как её организовать?

Фильтрами + права доступа, или бизнес процессом. Поделитесь пожалуйста опытом.

Спасибо

Нравится

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

Здравствуйте, Григорий!

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

"своих контрагентов" - это тех, которых он создал? Или тех,  в которых он ответственный?

Первый вариант решается, как описал Андрей.
Второй вариант решается бизнес-процессом

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

Доброго времени! 

У меня интересная задача)
Необходимо сменить ответственного у нескольких записей продаж.

Задача:
1. Поставить фильтр (допустим выдало 100 записей)
2. Нажать "Выбрать все" (показано что выбрано 100)
3. Снять 1 галочку (показано что выбрано 99)
4. Нажать "Изменить ответственного"

Методы:
var selectedRows = this.getSelectedItems();
var selectedRows = this.get("SelectedRows");

Возвращают Id только отображенных записей (29)!

Как получить ожидаемые 99 Id записей?

Нравится

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

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

Когда загружается реестр посылается один запрос (который оптимизирован и загружает не все записи, а 30 – если у вас 100000 записей то не будет накладки по производительности). Когда вы нажимаете «Выбирать все», то не произойдет загрузки всех записей(оптимизация описанная выше), а отправится отдельный запрос который просто вернет количество и обновит название кнопки (при дебаге в network это видно). Чтобы добиться требуемого результата нужно самостоятельно посылать запрос.

Тоже столкнулся с такой проблемой. Самое простое решение, которое я нашел - это использовать функцию, возвращающую запрос на получение записей для экспорта:

                    var esq = this.getExportToExcelEsq();
                    esq.rowCount = -1;
                    esq.getEntityCollection(function (response) {...}, this);

Можно посмотреть, как она работает и заменить её своей. Результатом запроса будут все выделенные записи (99 в Вашем случае).

 

Поправка: в 7.12.2 функция, возвращающая запрос, переехала, теперь так:

var esq = this.getGridDataInitializedEsq(true);
esq.rowCount = -1;

...

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

Добрый день!

 

Есть 75 Контрагентов, который нужно сменить Ответственного. Каким образом это можно сделать?

Нравится

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

Ну, как вариант, напишите бизнес-процесс, который изменит ответственного с учетом фильтра.

Добрый день. Самый оптимальный вариант - написать UpdateQuery. Вы можете задаться вопросом, почему бы не сделать это непосредственно в базе с помощью SQL скрипта? Дело в том, что данный вариант не затронет бизнес-логику приложения, как минимум - новому Ответственному не будут выданы полные права на запись, а также не будут запущены процессы, которые начинаются на изменение Ответственного. В то время как вариант с UpdateQuery идентичен изменению Ответственного в интерфейсе приложения.

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

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

Заранее спасибо

Нравится

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

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

Уточните, пожалуйста, версию продукта, который Вы используете.

Terrasoft XRM 3.3.2.43

Этот же вопрос обсуждается здесь.

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

Добрый день!
Скажите, пожалуйста, где в 7.6 itil заполняется контактом текущего пользователя при создании карточки обращения поле ответственный
в 7.5. было непосредственно в объекте case, а где в 7.6?

Нравится

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

Проставляется значение по умолчанию из системной переменной [Контакт текущего пользователя].
Пакет CaseITIL, объект Case, колонка Owner. Это и по умолчанию, и при сохранении.

это в 7.5 было так
в 7.6 по-другому
в 7.6 - только по умолчанию, и где проставляется - не могу найти

В 7.6 логика на объекте была убрана.
Сейчас логика присутствует на карточке CasePage пакета CaseService в методе setOnwer:
/**
* Устанавливает ответственного для нового обращения.
* @protected
*/
setOwner: function() {
var isPortalUser = Terrasoft.CurrentUser.userType === Terrasoft.UserType.SSP;
if (this.isNew && !isPortalUser) {
this.set("Owner", Terrasoft.SysValue.CURRENT_USER_CONTACT);
}
}

спасибо

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

Добрый день!
Возникла такая необходимость: реализовать возможность добавления второго ответственного контрагенту. Никто не сталкивался с таким?
Sales 7.5

Нравится

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

Александр, здравствуйте!
Данное поле является системным. Потому, к сожалению, его дублирование или удаление не представляется возможным.

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

Спасибо!

Судя по всему, необходимо добавить деталь "Ответственные" (а вдруг потом будет 3 ответственных). И реализовать раздачу прав доступа в бизнес-процессе.
Но это будет совсем нестандартное решение

"Арменчу Артём Александрович" написал:

Александр, здравствуйте!
Данное поле является системным. Потому, к сожалению, его дублирование или удаление не представляется возможным.

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

Спасибо!

С уважением, Арменчу Артём.


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

Александр, здравствуйте!

Это было обходное решение.
Как я уже писал ранее, к сожалению, дублирование и удаление данного поля не представляется возможным.

Спасибо!

А в чем собственно сложность то? Сделайте новое поле, назовите Owner2 повесьте на список доступных значений фильтр типа Контакт.Контрагент = Наша компания, заполнение по умолчанию через объект. Доступ на основе поля как предлагал Владимир реализовать в БП...

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

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

Нравится

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

Здравствуйте, Дмитрий!

Вы не уточнили продукт и используемую версию.

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

bpm'online sales enterprise версия 7.6.0.
А как создать новых пользователей системы? Нужно просто добавить контакт?
Или для этого нужна другая система?

Дмитрий, для создания нового пользователя, необходимо создать контакт с типом "сотрудник" и контрагентом Вашей компании. После чего в разделе "пользователи системы" дизайнера страниц создать нового пользователя, задав ему логин и пароль.

"Alina_Velichko" написал:

Дмитрий, для создания нового пользователя, необходимо создать контакт с типом "сотрудник" и контрагентом Вашей компании. После чего в разделе "пользователи системы" дизайнера страниц создать нового пользователя, задав ему логин и пароль.

Большое вам спасибо!

Подскажите пожалуйста. В данной версии я не могу изменять тип продукта? Допустим у меня интернет магазин и в продаже из типовых продуктов имеются крупная, мелкая бытовая техника и т.д. А в в списке имеется только антивирусы и продукты связанные только с компьютерным обеспечением. Есть ли возможность добавить туда продукты другого типа?

Дмитрий, подробный ответ с ссылками по данному вопросу предоставлен в посте http://www.community.terrasoft.ru/forum/topic/12590#comment-53498

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

Можно ли фильтр Ответственный из раздела Активностей (пояснение на картинке) создать в другом разделе? Как?

Нравится

1 комментарий

Здравствуйте, Александр!

Посмотрите пример в ActivitySectionV2 пакета NUI.

Думаю, Вам необходимо добавить на страницу раздела метод initFixedFiltersConfig:

				initFixedFiltersConfig: function() {
					var fixedFilterConfig = {
						entitySchema: this.entitySchema,
						filters: [
							{
								name: "Owner",
								caption:  this.get("Resources.Strings.OwnerFilterCaption"),
								columnName: "Owner",
								defValue: this.Terrasoft.SysValue.CURRENT_USER_CONTACT,
								dataValueType: this.Terrasoft.DataValueType.LOOKUP,
								filter: BaseFiltersGenerateModule.OwnerFilter,
								appendFilter: function(filterInfo) {
									var filter;
									if (filterInfo.value && filterInfo.value.length > 0) {
										filter = Terrasoft.createColumnInFilterWithParameters(
											"[ActivityParticipant:Activity].Participant",
											filterInfo.value);
									}
									return filter;
								}
							}
						]
					};
					this.set("FixedFilterConfig", fixedFilterConfig);
				}

И вызвать его на init'е:

...
this.initFixedFiltersConfig();
...

Единственное что, в Активностях он работает по участникам, Вам же надо просто по колонке Owner в объекте Вашего раздела.

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