при выборе Контрагента в справочнике Торговая точка открывались только записи, связанные с этим контрагентом

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".

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

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

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

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