1.в дизайне процессов при переносе элемента (например Читать данные) не открывается карточка для редактирования этого элемента, ничего не могу сделать

2. Есть объект Заказ
У него есть поля-справочники Контрагент и Торговая точка(Торговая точка это по сути деталь Контрагента, у Контрагента может не быть Торговых точек )
Подскажите как сделать в карточке редактирования Заказа, чтобы при выборе Контрагента
в справочнике Торговая точка открывались только записи, связанные с этим контрагентом

3.При создании Заказа торговая точка может не указываться, запись создаётся, но при повторном открытии выскакивает ошибка
я так понимаю ругается на то, что не найдена запись ....как быть?

Нравится

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

Здравствуйте Ольга.

"Найданова Ольга" написал:Подскажите как сделать в карточке редактирования Заказа, чтобы при выборе Контрагента
в справочнике Торговая точка открывались только записи, связанные с этим контрагентом

Наложить фильтр на датасорс при открытии справочника. Т.е. на событии Init зарегистрировать событие

Page.[LookupEdit].PrepareFilters => (sender, evtArgs) {
evtArgs.Filters.Add(new Dictionary<string, object> {
// Add Account Filter Here
});
};

"Найданова Ольга" написал:3.При создании Заказа торговая точка может не указываться, запись создаётся, но при повторном открытии выскакивает ошибка

Так с одного CallStack'а мало что можно сказать. Попробуйте описать последовательно действия, которые Вы выполняли.
На сколько я понимаю коробка FMCG???
Спасибо.

"Бабуков Андрей Александрович" написал:На сколько я понимаю коробка FMCG???

Не в курсе, знаю только BPMonline v.5.4.
при нажатии на справочник выходит сообщение


в Дизайнере страниц для поля Торговая точка указываю справочник Торговая точка


"Бабуков Андрей Александрович" написал:Наложить фильтр на датасорс при открытии справочника. Т.е. на событии Init зарегистрировать событие
Page.[LookupEdit].PrepareFilters => (sender, evtArgs) {
evtArgs.Filters.Add(new Dictionary {
// Add Account Filter Here
});
};

Не совсем поняла, я могу это код вставить в обработчик события выбора Контрагента(LookupEdit1Change1)

Добрый день.

"Найданова Ольга" написал:при нажатии на справочник выходит сообщение

Вам необходимо задать значение для отображения в объекте справочника Торговая точка, во всех свойствах:

"Найданова Ольга" написал:Не совсем поняла, я могу это код вставить в обработчик события выбора Контрагента(LookupEdit1Change1)

Нет, код необходимо добавлять на обработчик события Init карточки редактирования:

Не срабатывает фильтрация, вроде всё как в примерах, теме не менее


может ещё что-то пропустила

Здравствуйте Ольга!
Попробуйте для начала создать переменную типа Guid и вкладывать эту переменную в rightExpression.
Если не получится, попробуйте отладить приложение, вставив перед "e.Filters.Add(..." строку
System.Diagnostics.Debugger.Break();
Про отладку конфигурации можете прочитать здесь.
Спасибо.

"Бабуков Андрей Александрович" написал:Попробуйте для начала создать переменную типа Guid и вкладывать эту переменную в rightExpression.

Сделала так

object value = Page.AccountEdit.Value;
    Guid accountId = (value == null || value.ToString().Equals(string.Empty)) ? Guid.Empty : Guid.Parse(value.ToString());
    if (!Page.AccountEdit.Value.Equals(Guid.Empty)) 
    {
		System.Diagnostics.Debugger.Break();
		e.Filters.Add(new Dictionary<string, object> {
                  {"comparisonType", FilterComparisonType.Equal},
                  {"leftExpressionColumnPath", "Account.Id"},
                  {"useDisplayValue", false},
                  {"rightExpressionParameterValues", new object[] {accountId.ToString()}}});
    };

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

Делаю это удалённо, на том компе, где развёрнут сайт

Здравствуйте Ольга!
Да, намутили Вы воды в коде. К чему такие сложности? Замените существующий код на:

Guid accountId = (Guid)Page.AccountEdit.Value;
    if (!accountId.Equals(Guid.Empty)) 
    {
                System.Diagnostics.Debugger.Break();
                e.Filters.Add(new Dictionary<string, object> {
                  {"comparisonType", FilterComparisonType.Equal},
                  {"leftExpressionColumnPath", "Account.Id"},
                  {"useDisplayValue", false},
                  {"rightExpressionParameterValues", new object[] {accountId}}});
    };

Далее, чтобы вызвался отладчик, Вам не нужно ставить бряку. Он автоматически подключится, если accountId будет не равен Guid.Empty. Вопрос в том, что Вы используете свою конфигурацию, а бряку ставите в исходнике какой-то другой конфигурации. Пгоэтому, Вам VS и сообщает о том, что брейкпоинт не отработает никогда. Просто подключитесь дебаггером к процессу IIS. А лучше, вынесите точку code-debug перед условием "if".

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

Может дело в студии самой, ей ещё чего-то не хватает

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

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

Что то я запутался, не могу никак понять, как мне раздать права на Активности таким образом, чтобы активности видели:
1. Тот кто ее создал
2. Ответственный (он я так понимаю будет ее видеть в любом случае, так как прописан как "Владелец")
3. Пользователи с детали "Участники"

И больше никто! (системных администраторов не берем, это отдельная песня)

На данный момент стоят полные права по умолчанию для "Все пользователи".

Помогите разобраться, ум за разум зашел окончательно.

Нравится

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

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

:smile:

Но есть один нюанс: например, сотруднику Отдела раз поставил задачу Петров из отдела 2. И тогда начальник отдела раз не увидит задачу своего подчиненного. А было бы неплохо, если бы видел.

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

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

Где найти примеры программирования в BPMonline?
Типовые, вроде установки значения поля на странице и тому подобное...
Только не кусками, а желательно полностью с комментариями...

Нравится

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

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

Примеры можно найти, собственно, в конфигурации. Как получить все схемы и искать по ним, описано тут: http://www.community.terrasoft.ua/blogs/8747

кое-какие примеры есть в BPMonline SDK, они постоянно пополняются: http://www.terrasoft.ru/bpmonlinesdk/

Кроме того, масса примеров есть на Community. При необходимости вы можете также обращаться в техническую поддержку - Вам дадут рекомендации и примеры программирования.

Порядок обращения в таком случае следующий:

1. Вами кратко описывается бизнес-задача, которую нужно реализовать программно (например, автоматизировать работу по продаже);
2. Описывается этап, на котором Вы на данный момент находитесь (например, автоматический расчет времени между звонками клиентам);
3. Описываете, с чем возникли сложности.

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

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

В продолжение темы https://community.terrasoft.ru/forum/topic/9322

Решение родилось такое:
1. Сделать справочник доступных адресов email в системе
2. На записи в справочнике раздать соответствующие права пользователям (тогда в списке при выборе "От кого" пользователь будет видеть только то, что ему положено)
3. В поле "От кого" сделать выбор из справочника.

Все хорошо, но колонка "От кого" по типу текстовое и изменить тип система не дает.

Варианта два:
1. Снять таки как то блокировку и изменить тип колонки на справочник все таки (существующие записи активностей меня не волнуют, их просто нет)
2. Скрыть поле "От кого", сделать свое, которое будет справочником, потом в скрытое "От кого" записывать выбранное значение из справочника.

Как лучше сделать?

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

Нравится

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

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

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

Поэтому в данном случае рекомендуется второй вариант.

в принципе так и думал. пойду писать

Где найти примеры программирования в BPMonline?
Типовые, вроде установки значения поля на странице и тому подобное...
Только не кусками, а желательно полностью с комментариями...

Александр, я предоставила Вам уже несколько примеров, однако Вы просите новые. Давайте договоримся: вы предоставляете описание того, что конкретно Вам нужно, а мы готовим пример.

В данном конкретном случае от Вас требуется:

1. Описание бизнес-задачи;
2. Описание планируемой реализации;
3. Описание того, на каком этапе возникли сложности с реализацией;
4. Запрос на консультацию (предоставьте, пожалуйста, пример такой-то реализации).

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

Я уже все получил, спасибо. Я новых не просил просто написал и на форуме и в саппорт одновременно.

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

Как показать имя текущего пользователя?
Я имею ввиду показывать имя пользователя, под которым человек вошел в систему?
Справа вверху, к примеру, как в у гугла на скриншоте.

Нравится

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

Имя получается примерно таким образом:

var currentUserContactId = userConnection.CurrentUser.ContactId;
string currentUserContactName = string.Empty;
var entitySchemaManager = userConnection.GetSchemaManager("EntitySchemaManager") as EntitySchemaManager;
var contactSchemaQuery = new EntitySchemaQuery(entitySchemaManager, "Contact");
contactSchemaQuery.AddColumn("Name");
var contactIdFilter = contactSchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", currentUserContactId);
contactSchemaQuery.Filters.Add(contactIdFilter);
var contacts = contactSchemaQuery.GetEntityCollection(userConnection);
if (contacts.Count > 0) {
	currentUserContactName = contacts[0].GetColumnValue("Name").ToString();
}

Можно в MainPage добавить надпись и при открытии её заполнять.

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

Разобрался, только непонятно что за черта появляется справа и как её убрать (на скриншоте обведено красным)?

У вас надпись со стилем "Заголовок группы". Смените на стиль "Надпись".

Ээээээ, а как тогда можно управлять шрифтом, точнее размером и стилем (bold и т.д.)?

все, допер, это же веб в конце концов :biggrin:
html никто не отменял :lol:

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

Приветствую!

В свойствах объекта установил свойство "Владелец".
Как явствует из хелпа и форума:
[Владелец] — это поле заполняется в случае, если определенным пользователям необходимо автоматически предоставлять права доступа к записям объекта.

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

Нравится

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

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

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

Здравствуйте.
Появилась следующая задача для реализации в системе:
Раздел "Контакты". Необходимо создать деталь "Поклиентское планирование", которая должна состоять из двух частей:
1. Деталь периодов планов продаж. (ххх_ContactSalesPlan)
2. Деталь препараты, записи которой привязываются к периодам планов продаж. (tbl_ContactSalesPlanOfferings)
Создала все необходимое: таблицы, запросы, датасеты, окна грида, окна редактирования. В интерефейсе отображаются, все отлично.

Добавила в function RefreshDetails()

else if (pcDetails.ActivePage.Name == pgContactSalesPlanDetail.Name) {
RefreshCommonDetail(BaseWorkspace, wndContactSalesPlanDetail, 'ContactID', 'ContactID');
}

А теперь, собственно, вопрос: как правильно связать вторую деталь с первой? Ее нужно обновлять при переходе между записями планов продаж, при нажатии на "Добавить" передавать ИД плана продаж и т.п.

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

Подскажите, пожалуйста, в какую сторону двигаться.

С уважением, Алевтина.

Нравится

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

Есть следующая функциональность :

var YearFilter;
YearFilter = Year.Value;
if (YearFilter > 0)
ApplyDatasetFilter(wnd_MonthlyPaymentByPlaceGridArea.ComponentsByName('dlData').Dataset, 'Year', Year.Value, true);
if(!IsEmptyValue(lcTradeCentre.Value))
ApplyDatasetFilter(wnd_MonthlyPaymentByPlaceGridArea.ComponentsByName('dlData').Dataset, 'TradeCentre', lcTradeCentre.Text, true);    
wnd_MonthlyPaymentByPlaceGridArea.ComponentsByName('dlData').Dataset.Open();    
RefreshDataset(dlData.Dataset);

Т.е. есть два параметра - торговый центр и год. Они не обязательные.
Ситуация следующая - я ввожу определенный торговый центр и год. Получаю данные. Потом убираю торговый центр, оставляю год - данные не меняются. Потом меняю год - данные меняются, но в пределах торгового центра, указанного в первый раз.
Как выключить/очистить эти фильтры?
Вариант
wnd_MonthlyPaymentByPlaceGridArea.ComponentsByName('dlData').Dataset.Close();

в самом начале - не помогает

Нравится

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

Есть такая функция:

EnableDatasetFilters(dlData.Dataset, false);

Кстати, в большинстве случаев вместо wnd_MonthlyPaymentByPlaceGridArea.ComponentsByName('dlData').Dataset можно писать просто dlData.Dataset. Или даже:

var Dataset = dlData.Dataset;
RefreshDataset(Dataset);

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

Функция имеет вид:

ApplyDatasetFilter(wnd_MonthlyPaymentByPlaceGridArea.ComponentsByName('dlData').Dataset, 'TradeCentre', lcTradeCentre.Text, true);

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

ApplyDatasetFilter(wnd_MonthlyPaymentByPlaceGridArea.ComponentsByName('dlData').Dataset, 'TradeCentre', lcTradeCentre.Text, false);

отключит данный фильтр.

Если Вам нужно отключить не конкретный, а все фильтры, воспользуйтесь функцией:

EnableDatasetFilters(Dataset, false);

Спасибо! Все заработало!

EnableDatasetFilters может отключать не только все фильтры сразу. Можно и несколько.
Если вам нужно отключить 2 - 3 фильтра, не стоит каждому писать ApplyDatasetFilter.
Напишите

EnableDatasetFilters(Dataset, false, 'Filter1', 'Filter2');
Показать все комментарии

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

ApplyDatasetFilter(wnd_MonthlyPaymentByPlaceGridArea.ComponentsByName('dlData').Dataset, 'TradeCentreID', lcTradeCentre.Value, true);
ApplyDatasetFilter(wnd_MonthlyPaymentByPlaceGridArea.ComponentsByName('dlData').Dataset, 'Year', Year.Value, true);
wnd_MonthlyPaymentByPlaceGridArea.ComponentsByName('dlData').Dataset.Open();

Но данный код выдает ошибку. Как правильно добраться до компонента dlData?

Нравится

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

Разобралась сама.
Вариант

wnd_MonthlyPaymentByPlaceGridArea.ComponentsByName('dlData').Dataset

оказался правильным, ошибка была в названии фильтра.

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

Где посмотреть порядок наступления событий страницы редактирования и датасета в ней?

Нравится

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

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

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

Описание порядка наступления событий жизненного цикла страницы в приложении.

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

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