Коллеги, доброе утро!
В C# блоке бизнес-процесса выполняется следующий скрипт:

 Select caseDeadlineResponseSelect = new Select(userConnection).
         Column("Case", "id").As("CaseId").
         From("Case").
         Where("Case", "StatusId").IsEqual(Column.Parameter(caseStatusNew))
         .And("Case", "NrbSentDeadlineResponse").IsEqual(Column.Parameter("0"))
         .And(Func.DateDiff(DateDiffQueryFunctionInterval.Minute, Column.Const(dateNow), new QueryColumnExpression("RegisteredOn"))/
         Func.DateDiff(DateDiffQueryFunctionInterval.Minute, new QueryColumnExpression("ResponseDate"), new QueryColumnExpression("RegisteredOn"))).IsGreaterOrEqual(Column.Parameter(0.9))
         as Select;

Проблема в том, что в блоке WHERE в частности где идет идет деление дат, происходит округление в большую сторону, т.о как правило результат выражения
Func.DateDiff(DateDiffQueryFunctionInterval.Minute, Column.Const(dateNow), new QueryColumnExpression("RegisteredOn"))/
         Func.DateDiff(DateDiffQueryFunctionInterval.Minute, new QueryColumnExpression("ResponseDate"), new QueryColumnExpression("RegisteredOn")))
всегда равен больше единицы. В обычном SQL, я бы произвел конвертацию делимого и делителя:
CONVERT(decimal(10,2),DATEDIFF(MINUTE, GETDATE(), RegisteredOn))/
CONVERT(decimal(10,2),DATEDIFF(MINUTE, ResponseDate, RegisteredOn))

Но как произвести конвертацию в C# блоке я не понял. Я использовал функцию CAST, но не смог подобрать DBDatValueType.
Подскажите, как все таки произвести вычислениях хотя бы до десятых долей.

Нравится

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

В принципе, можно вписать произвольный SQL-код через Column.SqlText.
Примеры работы с ним можно найти в конфигурации. Вот тут тоже работают с датами:

var campaignPurchaseQtyCountSelect = new Select(UserConnection)
		.Column(Func.Count("Id"))
		.From("CampaignPurchaseQtyCount")
		.Where("CampaignId").IsEqual("Campaign", "Id")
		.And("CardId").IsEqual(Column.Parameter(cardId))
		.And(Column.SqlText("DATEDIFF(D, 0, [PurchaseDate])")).IsEqual(Column.SqlText("DATEDIFF(D, 0, @purchaseDate)"));
if (purchaseEntity.GetTypedColumnValue<Guid>("TypeId").Equals(Terrasoft.Configuration.PurchaseConsts.ReturnTypeUId)) {
	campaignPurchaseQtyCountSelect
		.And("IsRewarded").IsEqual(Column.Parameter(false));
}

BEHOLD!!!!

DBDataValueType valueType = userConnection.DataValueTypeManager.GetInstanceByUId(DataValueType.FloatDataValueTypeUId) as DBDataValueType;
 
DateDiffQueryFunction diff1 = Func.DateDiff(DateDiffQueryFunctionInterval.Day, Column.Const(DateTime.UtcNow), new QueryColumnExpression("CreatedOn")),
	diff2 = Func.DateDiff(DateDiffQueryFunctionInterval.Day, new QueryColumnExpression("TmResponseDate"), new QueryColumnExpression("CreatedOn"));
 
QueryColumnExpression exp1 = new QueryColumnExpression(diff1), exp2 = new QueryColumnExpression(diff2);
CastQueryFunction cast1 = Func.Cast(exp1, valueType), cast2 = Func.Cast(exp2, valueType);
 
 
QueryColumnExpression exp3 = new QueryColumnExpression(cast1), exp4 = new QueryColumnExpression(cast2);
QueryColumnExpression result = QueryColumnExpression.Divide(exp3, exp4);
 
Select decSelect = new Select(userConnection).Top(1)
	.Column(result)
	.From("TmNews")
as Select;
return decSelect.ExecuteScalar<float>();

В итоге выдаёт 0.6666667 на тестовом примере. Но эт жесть, конечно:smile:

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

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

Нашёл как передать значение из родительской карточки, но вот передача guid'а не срабатывает.

defaultValues: {
    UsrAccount: {masterColumn: "Account"}, //--- эта строка работает
    UsrRecordType: "772874ae-4265-4a9a-9393-5bdc12f670f7" // --- эта строка не срабатывает
}

Нравится

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

Нашёл решение в статье: http://www.community.terrasoft.ru/blogs/12454
Корректный код будет таким:

defaultValues: {
    UsrAccount: {masterColumn: "Account"},
    UsrRecordType: {value: "772874ae-4265-4a9a-9393-5bdc12f670f7"}
}
Показать все комментарии

В карточке детали, есть справочное поле: UsrParametr (который строится к справочнику: UsrRefParameter, с полями: Name, Description и UsrStatus из справочника UsrRefStatus, с полями: Name, Description).

Как отфильтровать поле UsrParametr, по имени статуса, т.е. по полю UsrStatus из Справочника UsrRefStatus.

Так же, если можно, объясните сам процесс построения запросов, если не затруднит, прокомментируйте построчно приведенный ниже код, а так же, хотелось бы подробного объяснения, для чего используется в запросе " : " и для чего " . "
Заранее спасибо.
Код:

"ActivityCategory": {
     dataValueType: Terrasoft.DataValueType.LOOKUP,
     dependencies: [
      {
       columns: ["ActivityCategory"],
       methodName: "onActivityCategoryChange"
      }
     ]
    },
    "Result": {
     lookupListConfig: {
      filters: [
       function() {
        var type = this.get("ActivityCategory");
        var filterGroup = Ext.create("Terrasoft.FilterGroup");
        filterGroup.add("ActivityCategory",
         Terrasoft.createColumnFilterWithParameter(
          Terrasoft.ComparisonType.EQUAL,
          "[ActivityCategoryResultEntry:ActivityResult].ActivityCategory",
          type.value));
        filterGroup.add("BusinessProcessOnly",
         Terrasoft.createColumnFilterWithParameter(
          Terrasoft.ComparisonType.EQUAL,
          "BusinessProcessOnly",
          0));
        return filterGroup;
       }
      ]
     }
    },

Нравится

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

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

Детализирую:

"ActivityCategory": {
     dataValueType: Terrasoft.DataValueType.LOOKUP,
     dependencies: [
      {
       columns: ["ActivityCategory"],
       methodName: "onActivityCategoryChange"
      }
     ]
    },

При изменении значения в поле ActivityCategory вызывается метод onActivityCategoryChange. Реализация этого метода:

onActivityCategoryChange: function() {
	var activityCategory = this.get("ActivityCategory");
	if (activityCategory && activityCategory.value === ConfigurationConstants.Activity.ActivityCategory.Meeting) {
		this.set("ShowInScheduler", true);
	}
}

Согласно этому методу в поле ShowInScheduler (Отображать в расписании) устанавливается значение true, если выбранная категория - встреча.

Теперь по второй части кода:

    "Result": {
     lookupListConfig: {
      filters: [
       function() {
        var type = this.get("ActivityCategory");
        var filterGroup = Ext.create("Terrasoft.FilterGroup");
        filterGroup.add("ActivityCategory",
         Terrasoft.createColumnFilterWithParameter(
          Terrasoft.ComparisonType.EQUAL,
          "[ActivityCategoryResultEntry:ActivityResult].ActivityCategory",
          type.value));
        filterGroup.add("BusinessProcessOnly",
         Terrasoft.createColumnFilterWithParameter(
          Terrasoft.ComparisonType.EQUAL,
          "BusinessProcessOnly",
          0));
        return filterGroup;
       }
      ]
     }

Данный код фильтрует значения в поле "Результат". Для выбора доступны значения, для которых:

  1. В справочнике ActivityCategoryResultEntry определяются возможные результаты для разных категорий активности. Добавляется фильтрация значений по категории активности
  2. Также не отображаются результаты, для которых уставлено значение "Использовать только в процессах"

Благодарю.

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

Можно ли развернуть Bpmonline 7.X на windows 7 для тестирования демо-версии или обязательно на Windows Server 2012 Standard ?

Нравится

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

Можно и на 7 если получиться развернуть Microsoft SQL Server 2012 Standard.

Стоит использовать актуальные ОС, так как Windows 7 уже перестали официально поддерживать - ссылка

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

Можно ли развернуть Bpmonline 7.X на windows 7 для тестирования демо-версии или обязательно на Windows Server 2012 Standard ?

Нравится

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

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

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

Подскажите, пожалуйста, как это можно реализовать? Желательно, развернуто, так как вот только-только начал работать с платформой.

Нравится

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

Здравствуйте!
Как можно добавить в печатную форму (WORD) поле Цена без НДС для «Продукта в счете»?

Нравится

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

Виталий, цена на детали "Продукт в счете" берется из соотвествующей колонки в подборе продуктов и никак не учитывает НДС - https://academy.terrasoft.ru/documents/sales-enterprise/7-9/stranica-pr…

т.е. никак не возможно в печатную форму WORD вывести цену без НДС?

"Полищук Виталий Романович" написал:

т.е. никак не возможно в печатную форму WORD вывести цену без НДС?

Виталий, возможно Вы говорите про другие колонки? колонка "Цена" не учитывает НДС

В колонках типа "Сумма" и "Итог" уже суммируется НДС

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

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

Нравится

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

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

В текущей реализации приложения инструмент для редактирования мини-карточек отсутствует.

Единственный выход - замещение необходимой мини-карточки и внесение изменений.

https://academy.terrasoft.ru/documents/technic-sdk/7-9/sozdanie-mini-kartochki

"Новак Руслан" написал:

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

В текущей реализации приложения инструмент для редактирования мини-карточек отсутствует.

Единственный выход - замещение необходимой мини-карточки и внесение изменений.

https://academy.terrasoft.ru/documents/technic-sdk/7-9/sozdanie-mini-kartochki

Так, с этим, кажется, разобрался, спасибо. Сумел подправить карточку под свои нужды, но теперь при попытке создания контрагента выбивает exception "Uncaught An item with the same key has already been added"

Это же пишет и при попытке копирования любого контрагента.

Денис, какая версия продукта? Пришлите полный листинг кода замещающей схемы AccountMiniPage.

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

Коллеги, добрый день.

Пытались импортировать в систему взаимосвязи Юр. Лиц и не совсем получилось:
1) В Excel файле заполнили поля AccountA, AccountB, Relationtype, ReverseRelationType, IsActive
2) Импортировали файл в систему
3) Запись взаимосвязи создались, но визуального представления структуры не появилось.

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

Нравится

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

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

Диаграмма строится не на основании детали, а на основании значения поля ParentId объекта Account.

При заполнении детали вручную, происходит заполнения поля ParentId объекта Account, а при импорте это не происходит.

Для решения Вам необходимо этот же файл импортировать в объект Account и заполнить соответствующее поле.

Руслан, спасибо большое!

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

Приветствую. Столкнулся с такой проблемой:
Разбираюсь с BPM. Нужно добавить некоторые поля на страницы добавления \ редактирования контрагентов. Как я понимаю, делается это в "Мастере раздела" на вкладке "Страница". Суть в том, что при попытке открытия вкладки "Страница" идет бесконечная загрузка и выбивает ошибки в консоль.

message: Uncaught TypeError: Cannot read property 'name' of undefined
 date: Fri Feb 17 2017 17:25:49 GMT+0300 (RTZ 2 (зима))
 stack: TypeError: Cannot read property 'name' of undefined

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

Нравится

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

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

Данная ошибка может быть вызвана тем, что у Вас в системной настройке "Текущий пакет", указан пакет с некорректной зависимостью. В таком случае, необходимо изменить пакет на "Custom" и очистить кэш браузера. Также, ошибка может быть вызвана тем, что у Вас в схеме раздела дублируется колонка, которая уже указана в данной схеме в пакете выше.
На данный момент, сложно, только по одному скриншоту, точно определить причину возникновения указанной проблемы.
Если рекомендация с системной настройкой не исправит ошибку, то для более быстрого устранения проблемы рекомендую Вам обратится в службу поддержки support@terrasoft.ru.

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