Здравствуйте. *bpm'sales

Есть ли возможность реализовать на практике следующее:

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

Изображение удалено.

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

2. Передавать Id выбранных записей в отчет.

Есть идеи?

Нравится

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

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

var config = [

          {

                name: 'FormingMethod',

                dataValueType: 'FormingMethod'

            }

]

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

var config = [

          {

                name: 'FormingMethod',

                dataValueType: 'FormingMethod'

            }

]

Солонко Олег Иванович,

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

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

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

 

создание раздела под 1 отчет, это не подходит. Было бы неплохо схему фильтров подредактировать, но мало знаний что бы туда тянуть руки.

Как вариант, можно смотреть на создание карточки параметров отчёта в интерфейсе 5.Х. Там включение множественного выбора включатся одной галочкой. Но тогда нужно будет разбираться, как данные из 5.Х-карточки передаются в отчёт.

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

Добрый день! 

Задача -  задать полю Примечание свойство, чтобы оно было всегда в режиме "без форматирования".

Подскажите пжлст, какое свойство отвечает за этот параметр?

 

Благодарю!

 

Нравится

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

Насколько понимаю такого свойства нет, но что мешает заместить вам детель и вместо поля примечания вставить свое многострочное поле ввода?

Насколько понимаю такого свойства нет, но что мешает заместить вам детель и вместо поля примечания вставить свое многострочное поле ввода?

Ну если я правильно понял, то нужно выбрать последний элемент, среди компонентов форматирования, можно сделать например так:

$(document).bind("DOMNodeInserted", function(e) {
if (e.target.id === "cke_ContactPageV2NotesHtmlEdit-html-edit-textarea") {
	var tabs = Ext.getElementById("ContactPageV2NotesHtmlEdit-html-edit-toolbar");
 
	var elem = Ext.get(tabs.children[9]);
	elem.dom.children[1].className = "t-btn-wrapper t-btn-no-text-padding t-btn-style-default t-btn-pressed";
 
}
}.bind(this));



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

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

Здравствуйте. Как реализовать в форме отчета, поле выбора несколько значений из справочника и корректно передать/обработать выбранные Id в сам отчет?

При поиске наткнулся на примеры с Ответственным, но там выбор только 1 записи.

Нравится

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

Можно сделать как в стандартных отчётах в разделе, которые вызываются из режима итогов, например, «Data entry compliance» в разделе контрагентов. Для построения отчёта в реестре фильтруют или помечают галочками нужные записи, переключаются в итоги, выбирают этот отчёт, а потом строят по выделенным, по отфильтрованным или по всем:

Схема этого отчёта AccountDataCompletenessReport, привязка таких отчётов к разделам задаётся в таблице SysModuleAnalyticsReport. Для выбора вариантов формирования используется страница BaseReportParameterInModulePageFilter.

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

это должен быть фильтр по lookup, а не самим записям в реестре.

Можно добавить отчёт именно в тот раздел, записи из которого нужно Вам фильтровать.

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

суть в том что такого раздела не существует это справочник. Ладно давайте конкретнее. У меня есть раздел Складские документы где ведется учет прихода/ухода Продуктов по складам(справочник) и мне нужно что бы в каком-то  отчете раздела Складские документы было окно выбора несколько складов на каких будет проверяться количество конкретного продукта. Это без проблем можно реализовать в тройке (TS 3) через MultiSelectWindow.

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

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

Здравствуйте. Интересует способ использования "Group By"  в entitySchemaQuery (сервер). При поиске наткнулся на топик - https://community.terrasoft.ru/questions/gruppirovka-v-entityschemaquery , но увы, ссылка с ответом битая. 

Нравится

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

Пример использования на C#, документацию нашел только для клиентских запросов, но по аналогии все понятно

var query = new EntitySchemaQuery(_userConnection.EntitySchemaManager, schemaName);
var columnCount = query.AddColumn(query.CreateAggregationFunction(AggregationTypeStrict.Count, query.PrimaryQueryColumn.Name));
var countEntity = query.GetEntityCollection(UserConnection)[0];
var count = countEntity.GetTypedColumnValue<int>(comnCount.Name);
return count;

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

var esq = new Order(UserConnection);
esq.AddColumn(esq.CreateAggregationFunction(AggregationTypeStrict.Count, "Customer.Name").All());
	esq.AddColumn("Description");
	esq.AddColumn("Name");
	esq.AddColumn("Customer");

Добавит в запрос 

GROUP BY Order.Description, Document.Name, Order.CustomerId, Customer.Name;

 

 

 

 

 

Пример использования на C#, документацию нашел только для клиентских запросов, но по аналогии все понятно

var query = new EntitySchemaQuery(_userConnection.EntitySchemaManager, schemaName);
var columnCount = query.AddColumn(query.CreateAggregationFunction(AggregationTypeStrict.Count, query.PrimaryQueryColumn.Name));
var countEntity = query.GetEntityCollection(UserConnection)[0];
var count = countEntity.GetTypedColumnValue<int>(comnCount.Name);
return count;

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

var esq = new Order(UserConnection);
esq.AddColumn(esq.CreateAggregationFunction(AggregationTypeStrict.Count, "Customer.Name").All());
	esq.AddColumn("Description");
	esq.AddColumn("Name");
	esq.AddColumn("Customer");

Добавит в запрос 

GROUP BY Order.Description, Document.Name, Order.CustomerId, Customer.Name;

 

 

 

 

 

Григорий Чех,

Спасибо большое!

Вот, на всякий случай, и пример серверного кода:

EntitySchema entitySchema = UserConnection.EntitySchemaManager.GetInstanceByName("SysProcessElement");
var query = new EntitySchemaQuery(entitySchema);
EntitySchemaQueryColumn elementUIdColumn = query.AddColumn("SchemaElementUId");
EntitySchemaQueryColumn executeCountColumn = query.AddColumn(query.CreateAggregationFunction(AggregationTypeStrict.Count,
	entitySchema.PrimaryColumn.Name));
 
EntityCollection entities = query.GetEntityCollection(UserConnection);

 

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

Я для серверного кода пример и приводил :) От клиентского только документация :)

Вот документация по серверной. Ещё в этом документе есть информация.

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

Здравствуйте, подскажите новичку, можно ли в печатную форму добавить поле, в котором будет проводится такой расчет: есть колонка "Сумма" и "Сумма оплаты". Надо подсчитать их разность(то есть получится долг по оплате). Для этого надо создавать такое поле в bpm? или можно обойтись без этого? спасибо!

Нравится

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

Ещё один вариант реализации: реализовать представление (view), в котором вывести все нужные поля для печатной формы + добавить 'виртуальное' значение, которое будет расчитывать разность 2-х полей.

А потом это представление использовать в отчете.

В любом из трех вариантов прийдется немного попрограммировать и, если у Вас соответствующих знаний нет, то самый простой в этом случае, на мой взгляд, ответ под номером 2 Саши Зверева.

Может, лучше всё же сделать новое поле «Долг» и написать БП его заполнения при сохранении. Его можно будет и в реестр раздела вывести, и отсортировать, если потребуется.

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

Ещё один вариант реализации: реализовать представление (view), в котором вывести все нужные поля для печатной формы + добавить 'виртуальное' значение, которое будет расчитывать разность 2-х полей.

А потом это представление использовать в отчете.

В любом из трех вариантов прийдется немного попрограммировать и, если у Вас соответствующих знаний нет, то самый простой в этом случае, на мой взгляд, ответ под номером 2 Саши Зверева.

всем спасибо, использовала вариант создания поля и соответствующего БП, высчитывающий разность и сохраняющий значение в это поле

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

Добрый день! Подскажите, пожалуйста, есть ли возможность изменить количество подгружаемых строк при просмотре данных в графике?

Изображение удалено.

Насколько я понимаю, за это количество (5 строк) отвечает параметр RowCount и функция getRowCount в схеме ChartModule.

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

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

Нравится

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

Иван Небеддаг,

В общем, создаете Замещающий клиентский модуль, в поле Родительский объект выбираете "Модуль построения графиков", это 

ChartModule, из него просто скопируйте все, Ctrl + A, Ctrl+C и вставьте в ваш замещающий клиентский модуль весь скопированный код, затем найдите метод initGridData, где замените 5 на нужное вам число

Добрый день, можно в объект ChartProperty добавить поле с количеством отображаемых строк для графика и обрабатывать это поле в модуле построения графиков

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

Это же задаётся пользовательскими средствами в настройках списка:

Колодяжный Владислав Эдуардович,

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

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

Александр, подскажите пожалуйста, как Вы открыли такие настройки списка? Потому что либо я не там их ищу, либо в версии 7.12.2 что-то другое в этих настройках:

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

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

В 7.12.0 это настраивается на второй вкладке свойств списка. Сначала открывают на редактирование пунктом меню «Изменить» всю панель итогов, потом на её схематическом изображении выбирают нужный список и открывается уже его редактирование свойств.

Для графиков, в отличие от списков, отдельные строки не подгружаются, поэтому такая настройка смысла не имеет. Если нужно только списочное представление с широкими настройками — используйте список, а не график.

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

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

Колодяжный Владислав Эдуардович,

Насколько я понял, оба варианта, предложенных Вами сводятся в том числе к изменению ChartModule. Возможно, у меня возникают трудности из-за того, что я не до конца разобрался с классами, объявленными с помощью extJs. Для меня загвоздкой является именно то, что в ChartModule создается класс (Ext.define("Terrasoft.configuration.ChartViewModel"...), в котором уже есть параметр и функция. И я понимаю, как создать этот класс целиком в замещающей схеме, но не понимаю, как можно изменить в нем только одну функцию или один параметр. Потому что копипастить стандартный класс - не лучшая идея, он может меняться от версии к версии.

Иван Небеддаг,

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

Вместо графика используйте список, там поменять можно. Для элемента-графика функциональность в режиме списка является вспомогательной, там таких настроек не предусмотрено. 

Литвинко Павел,

Я прошу прощение за занудство, но подскажите, пожалуйста (в общих чертах), как мне заместить один метод в замещающей схеме, если основная схема имеет вид:

define("ChartModule", [...],

    function(...) {

        Ext.define("Terrasoft.configuration.ChartViewModel", {

            extend: "Terrasoft.BaseViewModel",

            alternateClassName: "Terrasoft.ChartViewModel",

            ...

            getRowCount: function() {

                return this.get("RowCount");

            },

            ...

        });

        return Terrasoft.ChartModule;

    });

Иван Небеддаг,

В общем, создаете Замещающий клиентский модуль, в поле Родительский объект выбираете "Модуль построения графиков", это 

ChartModule, из него просто скопируйте все, Ctrl + A, Ctrl+C и вставьте в ваш замещающий клиентский модуль весь скопированный код, затем найдите метод initGridData, где замените 5 на нужное вам число

Литвинко Павел,

Я как раз про это выше писал:

Иван Небеддаг пишет:

И я понимаю, как создать этот класс целиком в замещающей схеме, но не понимаю, как можно изменить в нем только одну функцию или один параметр. Потому что копипастить стандартный класс - не лучшая идея, он может меняться от версии к версии.

Спасибо всем за помощь! Буду тогда копать в сторону создания класса, унаследованного от нужного, и добавления его в аналитику.

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

Добрый день!

Столкнулись с проблемой, что в Активности Результат и Результат подробнее можно добавить только после присвоения Состояния Завершено. 

Как настроить, чтобы можно было добавлять Результат и Результат подробнее при указании любого Состояния Актвности.

Нравится

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

Добрый день, достаточно отключить бизнес-правила:

Результат подробно: Делать поле редактируемым

Результат: Делать поле редактируемым



А так же изменить метод onStatusChanged чтобы не было очистки полей при изменении статуса:

onStatusChanged: function() { }

Посмотрите настройку бизнес-правил на карточке задачи в дизайнере секции "Активности"

Добрый день, достаточно отключить бизнес-правила:

Результат подробно: Делать поле редактируемым

Результат: Делать поле редактируемым



А так же изменить метод onStatusChanged чтобы не было очистки полей при изменении статуса:

onStatusChanged: function() { }

Друзья, спасибо!! 

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

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



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

 

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

Нравится

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

Какие галочки? Можно скриншот, того, что нужно?

имеете в виду галки вместо true false? Посмотрите в академии пример на конфигурирование логических полей в печатной форме (макросы). Прям ваш случай описан. И кстати в последних версиях уже вроде сделал вендор в базовой поставке это (но могу ошибаться)

Колодяжный Владислав Эдуардович,

Дмитрий Степанов,

Спасибо

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

var accountUpdate = new Update(UserConnection, "Account")

                        .Set("IndustryId", Column.Parameter(IndustryIdParameter))

                        .Where("Id").IsEqual(Column.Const(AccountIdParameter)).Execute()

Если есть такой запрос и значение параметра IndustryIdParameter равно null, то выдаст ошибку так как в базу пойдет запрос не со значением null, a c Guid.Empty.

Каким образом можно решить эту задачу?

И ещё интересует возможно ли использование в этой конструкции сложных условий в Where, речь идет о запросе вида:

update Account

set

    IndustryId = @P4

where CountryId = @P1

    and (IndustryId = @P2

        or IndustryId = @P3)

Нравится

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

Лучше использовать конструкцию .OpenBlock() пример ниже:

 

Select select = (Select)new Select(UserConnection)
	.Column("Id")
	.Column("AccountAId")
	.Column("AccountBId")
	.From("Relationship")
	.Where()
		.OpenBlock()
			.OpenBlock("AccountAId").IsEqual(Column.Parameter(accountId))
				.And("AccountBId").IsEqual(Column.Parameter(searchParentId))
			.CloseBlock()
		.Or()
			.OpenBlock("AccountAId").IsEqual(Column.Parameter(searchParentId))
				.And("AccountBId").IsEqual(Column.Parameter(accountId))
		.CloseBlock()
		.And()
			.OpenBlock("RelationTypeId").IsEqual(Column.Parameter(relationTypeId))
				.Or("ReverseRelationTypeId").IsEqual(Column.Parameter(relationTypeId))
			.CloseBlock();
		.CloseBlock();

 

if (IndustryIdParameter != Guid.Empty) {
  var accountUpdate = new Update(UserConnection, "Account")
   .Set("IndustryId", Column.Parameter(IndustryIdParameter))
   .Where("Id").IsEqual(Column.Const(AccountIdParameter)).Execute()
}

А для конструкции получается просто

 

var accountUpdate = new Update(UserConnection, "Account")
   .Set("IndustryId", Column.Parameter(IndustryIdParameter))
   .Where("CountryId").IsEqual(Column.Parameter(CountryParameter))
   .And("IndustryId").IsEqual(Column.Parameter(IndustryIdParameter1))
   .Or("IndustryId").IsEqual(Column.Parameter(IndustryIdParameter2));

 

new Update(UserConnection, "ActivityCorrespondence")
.Set("ActivityId", Column.Const(null))
.Where("ActivityId").IsEqual(Column.Parameter(activityId))
.Execute(dbExecutor);

 

Литвинко Павел,

Ага, а если нужно проверить 5 параметров, то в пору делать switch с перебором всех возможных комбинаций. 

Лучше использовать конструкцию .OpenBlock() пример ниже:

 

Select select = (Select)new Select(UserConnection)
	.Column("Id")
	.Column("AccountAId")
	.Column("AccountBId")
	.From("Relationship")
	.Where()
		.OpenBlock()
			.OpenBlock("AccountAId").IsEqual(Column.Parameter(accountId))
				.And("AccountBId").IsEqual(Column.Parameter(searchParentId))
			.CloseBlock()
		.Or()
			.OpenBlock("AccountAId").IsEqual(Column.Parameter(searchParentId))
				.And("AccountBId").IsEqual(Column.Parameter(accountId))
		.CloseBlock()
		.And()
			.OpenBlock("RelationTypeId").IsEqual(Column.Parameter(relationTypeId))
				.Or("ReverseRelationTypeId").IsEqual(Column.Parameter(relationTypeId))
			.CloseBlock();
		.CloseBlock();

 

Литвинко Павел,

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

Интересует возможность прямо в Update запилить эту проверку.

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

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

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

 

Алла, что не так в написании в нужном месте одного и того же текста «Column.Const(null)»? Если не знаешь, будет там null или значение, можно написать в С# в месте формирования Update блок if(){}else{} и проверять значение переменной. Update можно формировать по частям, дописывая к нему строки от начала к концу. И запускать, когда готов.

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

Тогда делайте через тернарный оператор "?" и получите то же условие но в одну строку

Литвинко Павел,

Пожалуйста, расскажите подробнее на моем примере.

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

Примерно так:

var accountUpdate = new Update(UserConnection, "Account")
.Set("IndustryId", Column.Const(IndustryIdParameter != Guid.Empty ? IndustryIdParameter.ToString() : null))
.Where("Id").IsEqual(Column.Const(AccountIdParameter)).Execute()

 

Алла, примерно:

 .Set("IndustryId", ((IndustryIdParameter!=Guid.Empty)?Column.Parameter(IndustryIdParameter):Column.Const(null)))

 

А еще лучше будет расширить метод Set, чтобы сразу проверять на Guid.Empty

 

public static Update Set(this Update update, string column, Guid value)
        {
            return value == Guid.Empty
                ? update.Set(column, Column.Parameter(null))
                : update.Set(column, Column.Parameter(value));
        }

И весь вызов станет еще компактнее

 

.Set("IndustryId", YourGuid);

 

Литвинко Павел,

Тернарный оператор ! 

Григорий Чех пишет:

Литвинко Павел,

Тернарный оператор ! 

 Точно! Поправил, спасибо)

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

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

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

Реальный, частый кейс:

Пользователю открывается задача по БП с текстом: "Оформите счет и договор по заказу", в системе есть 2 стандартных бп, которые это делают, но, когда пользователь прямо из задачи по ссылке переходит к заказу и через действия пытается это сделать, ничего не происходит (он так думает), но на самом деле процессы то запускаются, просто в фоне...

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

Нравится

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

А если и у второго процесса галка стоит, что делать? Ещё одну настройку добавлять, «Запускать поверх вообще всех процессов»?

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

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

Нет, достаточно одной галки, она будет означать, что этот процесс начинается поверх любого другого. Вопрос не в ходе процесса, а в его начале-старте.

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

П.С. Я не говорю про вариант подвязывания скрипта для кнопки создания продажи или счета.

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

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

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

Уважаемый Александр!

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

Простейший кейс: У вас в бп 2 задачи, всего 2 задачи. Выполнятся бп начал при изменении статуса продажи, соответственно перед Вами открылась карточка задачи. В задаче написано: "Александр, дорогой, пожалуйста, создай счет к заказу, который связан с продажей". В задаче, естественно, есть связь с заказом.

Внимание, Александр, вопрос: как так переделать и оптимизировать наш с вами бп из двух задач, чтобы мы могли перейти сразу из этой задачи в заказ и нажать кнопку "Создать счет", чтобы у нас открылась картчочка счета и перенеслись туда продукты ? Вы там про автогенерируемые и преднастроенные страницы говорили, как там они перед нами появятся, если можно скриншотик.

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

А то, что вы говорите вообще никак не решает ситуацию, ведь эти страницы и есть часть бп, которые никогда не всплывет, пока активен другой бп.

Добрый день, Д. В таком случае попробуйте прямо в этом БП сделать не 2 блока, а 6, при этом вторые 2 будут связаны с заказом, а третьи 2 — со счётом. Если пользователь будет идти по процессу, ему не нужно будет ни вручную создавать счёт, ни нажимать дополнительные кнопки в карточках, а карточка нового счёта  с уже заполненными полями связи с продажей и заказом автоматически появится при сохранении заказа в соответствии с логикой процесса. Дополнительную информацию пользователю, что от него хочет в этот момент система, можно показывать как раз в автогенерируемых страницах.

Коллеги, если есть возможность создать такой признак (стартовать бп поверх запущенного), это будет супер.

Спасибо.

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

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