Как в карточку контакта добавить Продукт. Цель - при открытии Истории контакта, чтобы было видно, какие продукты им покупались. (при добавлении детали - в итоге она не отображается.... возможно, неверные привязки "Колонка детали" и "Колонка объекта"?...

Нравится

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

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

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

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

Как увеличить значение на 1 в огромной таблице, такое не работает, кто может подсказать решение?

var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];

var update = new Update(userConnection, "Contact")

    .Set("UsrtLastCallCountDay", new Select(userConnection).Top(1)

        .Column("CurrentContact", "UsrtLastCallCountDay")

        .From("Contact").As("CurrentContact")

        .Where("CurrentContact", "Id").IsEqual("Contact", "Id") + 1)

   .Set("UsrtLastWinCallCountDay", new Select(userConnection).Top(1)

        .Column("CurrentContact", "UsrtLastWinCallCountDay")

        .From("Contact").As("CurrentContact")

        .Where("CurrentContact", "Id").IsEqual("Contact", "Id") + 1);

update.Execute();

return true;

Нравится

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

Обычно увеличение или уменьшение значения колонки на число в update делают наподобие такого:

var purchaseId = Entity.GetTypedColumnValue<Guid>(purchaseColumnValueName);
Update productInPurchaseUpdate = new Update(UserConnection, "ProductInPurchase")
	.Set("Position", Column.SourceColumn("Position") - Column.Const(1))
		.Where("Position")
			.IsGreater(Column.Parameter(Entity.GetColumnValue("Position")))
		.And("PurchaseId")
			.IsEqual(Column.Parameter(purchaseId)) as Update;
productInPurchaseUpdate.Execute();

 

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

благодарю, не знал о подобном

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

Задание: В карточке в вкладке есть 2 детали(А и Б)

Нужно что бы при выборе записи из детали А обновлялся реестр на детали Б.

Пытался Делать через "filterMethod": "OnLotPeriodInTendersFilter"

и по событию обновлять реестр Б, но OnLotPeriodInTendersFilter Запускается только раз, и при reloadGridData() в детали Б Новы й фильтр не подтягиватся... Подскажите как решить данное бизнес-задание

Нравится

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

Добрый день

Вам нужно при выделении записи делать publish сообщения для другой детали. А в детали "А" сделать subscribe и обновлять все, что вам нужно

Добрый день Виталий.

Советую найти и разобраться как работают детали "BaseOneToManyGridDetail", "BaseManyToManyGridDetail". Именно взяв за основу одну из них можно решить вашу задачу. Поискать примеры можно в конфигурации BPMOnline Service Enterprise. Там есть готовые и реализованные примеры. 

Артем Гура,

Это понятно, не могу найти где именно можно применить новый фильтр

Власов Михаил Викторович,

буду искать

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

Всем доброго времени суток. Версия 7.11.

В бизнес-процессе в рамках задания-сценария создаётся запись в разделе. После чего необходимо создать ещё ряд записей на детали внутри карточки этой записи.

Привязка на деталь осуществляется по id основной записи. Обычно в таких случаях на клиенте создаётся свой guid через функцию Terrasoft.generateGUID();, который затем в insert прописывается в колонку Id также, как и любая другая колонка.

Есть ли аналог этого в сценариях БП?

Нравится

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

Денис, здравствуйте.

Для этих целей есть метод Guid.NewGuid(), подробнее можно найти по ссылке.

Пример использования : 

var contactId = Guid.NewGuid();

Андрей, спасибо! Частично помогло.

Частично - потому что записать сгенерированный таким образом newGiud в другой объект в колонку-справочника невозможно. Возникает ошибка: System.ArgumentException: Отсутствует сопоставление типа объекта Terrasoft.Core.DB.QueryColumnExpression с известным собственным типом управляемого поставщика.

Соответственно вопрос: есть ли callback у insert.Execute(); ? Чтобы можно было гарантированно вызвать продолжение функции уже после того, как запись с id newGiud создана в базе.

Денис

Скорее всего вам не надо создавать новый guid. После создания записи вам надо прочитать в процессе ее id и уже затем использовать его в записях детали.

например

var Id = item.GetTypedColumnValue<Guid>("Id");

Пример можно глянуть здесь https://academy.terrasoft.ru/documents/technic-sdk/7-11/kak-zapuskat-pr…

 

Денис,

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

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

Так как во многих компаниях принято недельный цикл планирования, то графики строятся по неделям. 

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

Предлагаю добавить формат Year&Week, чтобы отображать в нужном порядке результаты по неделям.Изображение удалено.

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

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

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

Спасибо, что помогаете улучшать наши продукты!

Владимир, спасибо за проявленный интерес. Зарегистрировали ваше пожелание по развитию приложения.

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

Нравится

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

Добрый день!



К сожалению, в базовой версии такого метода нет. 

Это связано с тем, что обращение может переоткрываться несколько раз. 



Потому в данной ситуации, необходимо реализовать свой метод.

 

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

Добрый день.

Переименовал раздел Контрагенты в Компании, и название кнопки "Добавить контрагента" теперь выглядит неуместно. Подскажите пожалуйста, где необходимо внести изменения (в схеме AccountSectionV2 эта кнопка не фигурирует)

Прикрепленные файлы

Нравится

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

Здравствуйте, Иван!

Переименовать кнопку "Добавить контрагента" можно в разделе "Переводы". Больше информации о функциональности переводов в нашем приложении Вы сможете найти на Академии: https://academy.terrasoft.ru/documents/sales-enterprise/7-11/multiyazychie.

Примечание. после применения переводов необходимо перезайти в систему - тогда изменения вступят в силу.

Дарина, здравствуйте!

Мы реализовывали Ваш кейс следующим образом:

- нашли соответствующую запись в Переводах - https://prnt.sc/hyys9e

- применили переводы

- перезашли в приложение

В результате название кнопки изменилось - http://prntscr.com/hyyvkq

Если Вы действовали по описанному алгоритму, и название кнопки не изменилось, напишите нам в службу поддержки на support@terrasoft.ru для более детального рассмотрения Вашего кейса.

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

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

Нравится

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

Виталий, добрый день!

Не совсем понял вопроса, можно описать кейс поподробнее?

И что вы подразумеваете под "виртуальной колонкой" и как вы собираетесь её показывать в реестре?

Тёскин Дмитрий Валерьевич,

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

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

Так вы сможете не только отобразить колонку в реестре, но и фильтровать по ней в фильтрах

Владимир Соколов,

Так и будет, че это я прицепился вычисляемой колонке... Че только не взбредет в 12 ночи...

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

Коллеги, доброго времени суток. Версия 7.11.

Хотелось бы прояснить вопрос с запуском бизнес-процесса из задания-сценария. Сразу оговорю, вариант с элементом "Подпроцесс" не подходит, т.к. планируется получение выборки данных запросов по нескольким условиям с дополнительными манипуляциями, что возможно делать только внутри Script Task.



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



Нашёл вот такую тему: https://community.terrasoft.ru/questions/zapusk-bp-iz-elementa-zadanie-…



Внутри другого процесса в скрипт таске вызываю следующий код:



var userConnection = Get("UserConnection");

/* тут всякие манипуляции */



Dictionary parameters = new Dictionary();

parameters["UsrTestParameter"] = UsrCaseId.ToString();

processExecutor = userConnection.ProcessEngine.ProcessExecutor;

processExecutor.Execute("UsrStartTestProcess", parameters);



При компиляции процесс выдаёт ошибку: The name 'processExecutor' does not exist in the current context на строчке processExecutor = userConnection.ProcessEngine.ProcessExecutor;



Что я делаю не так? Что ещё должно быть подключено?

Нравится

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

Денис, привет!

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

var user = UserConnection;
var processSchemaManager = (ProcessSchemaManager)user.GetSchemaManager(@"ProcessSchemaManager");
var processSchema = processSchemaManager.GetInstanceByName(@"ProcessName");
var process = processSchema.CreateProcess(user);
process.SetPropertyValue(@"ContactId", ContactId);
process.Execute(user);

 

Приветствую, Денис!

Запустить бизнес-процесс с элемента задания-сценария можно написав в текст сценария следующий код:

UserConnection userConnection = Get&lt;UserConnection&gt;("UserConnection");
var manager = userConnection.ProcessSchemaManager;
var processSchema = manager.GetInstanceByName(@"UsrStartTestProcess");
var process = processSchema.CreateProcess(userConnection);
if (processSchema.Parameters.ExistsByName(@"UsrTestParameter"))
{
    //здесь выполняется передача параметров в БП, где parameters - коллекция в текущем БП, UsrTestParameter - коллекция в запускаемом БП
    process.SetPropertyValue(@"UsrTestParameter", parameters);
}
process.Execute(userConnection);

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

Кормильцев Андрей,

Андрей, спасибо! Похоже, работает.

Если ещё будут вопросы, я задам в Техподдержке.

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

Всем доброго времени суток.

Версия 7.11.

В сценариях бизнес-процессов можно писать запросы к базе, и задавать при этом фильтры, например:

var esqAgentFilter = esqClient.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrAgent", UsrAgentId);

Существует ли в БП аналог createColumnInFilterWithParameters? К примеру, мне нужен запрос двух уровней: сначала я ищу записи в одном объекте, и нахожу несколько записей, соответствующих запросу, после чего мне нужно в другом объекте найти все записи, которые соответствовали всем найденным в первом запросе.

Обычно с этим справляется как раз createColumnInFilterWithParameters, но есть ли он в БП?

Нравится

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

Денис, добрый день!

Насколько я знаю, в БП нельзя делать выборку нескольких записей стандартными средствами (только одну, количество и агрегирующие колонки). Позвольте уточнить, а чем вам не правиться способ с заданием-сценарием в БП?

Денис, добрый день

Аналогичного элемента нет. Есть 2 варианта:

1. Использовать сценарий

2. Реализовать свой собственный элемент, который будет делать то что вам нужно

 

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