Вопрос

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

У клиента в системе иногда наблюдается такое поведение: например открыт раздел Заказы , пользователь ничего не делает, абсолютно ничего. На экране появляется надпись Загрузка и пока не обновить страницу не исчезнет. 
.

В консоле такое:

На мой комментарий, что Ошибка выпадает в схеме EntityProductCountMixin и она не замещена, Террасофт выслал эти скрины и ответил:

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

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

У меня такой же вопрос

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

Здравствуйте, коллеги!

Сделал велосипед - перебор результирующей коллекции <ICompositeObjectList<ICompositeObject>> элемента БП "Чтение данных" и решил поделиться для "будущих поколений".

Тестовый БП:

читаем счета

 

в Методах БП объявляем переменную, в которой будем хранить коллекцию, в данном случае invoices и методы доступа к колонкам объекта GetCompositeObjectColumnValue и перехода на следующую запись коллекции CompositeObjectListMoveNext

инициализируем переменную коллекции

Перебираем коллекцию и читаем поля текущей записи коллекции

Готово!

Поделиться

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

Какие тэги поставить, что бы в топе выдачи поиска по теме было?

Борис Леонов,

а как обойти это ограничение?

Миннекаев Айдар,

я не знаю, пробовал 5000 - позволяет

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

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

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

Точно! Поменял на публикацию. А теги какие добавить? Идея то востребованная, куча вопросов на эту тему...

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

Как на Хабре, тег #никто_не_читает_теги.cheeky

Можно читать первые N штук, а потом каждую обрабатывать, чтобы не попадали под условия выборки, затем читать очередные N штук. А если записи не меняются, то непонятно, зачем так много читать, а не фильтровать ещё на уровне запроса в базу.

 

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

Доброго времени суток! Есть раздел с раширенными фильтрами и показатель, который ссылается на view. В view есть формула с агрегирующими функциями. Как показатель отфильтровать по отфильтрованному реестру раздела?

Постановка задачи:

Дашборд - Показатель. Если в разделе задан фильтр – обрабатываются только данные фильтра. 

Период - текущий месяц в сравнении с таким же периодом прошлого месяца (с 01.05 по 21.05 сравниваем с 01.04-21.04). 

Алгоритм расчета: ((Количество Лидов за текущий период/Количество Лидов за предыдущий период )-1)*100%

Если не учитывать фильтр, то view формируется на основании этого SQL :

select UsrLeadId, (CAST(T1 AS float) / CAST(T2 AS float)-1)*100 as UsrResult
from
(select Id as UsrLeadId, 
count(CASE
            WHEN CreatedOn >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
                And CreatedOn <= GETDATE() THEN 1
            ELSE NULL
          END) OVER () as T1, 
count(CASE
              WHEN CreatedOn > DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0)
                And CreatedOn < dateadd(mm,-1,getdate()) THEN 1
            ELSE NULL
          END) OVER () as T2
        from Lead
) l

У меня такой же вопрос

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

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

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

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

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

Может кто сталкивался с таким поведением в бизнес процессах при их изменении?

Я редактирую какой-либо БП и сохраняю его. Далее запускаю процесс. В журнале отображается, что процесс выполнен полностью. НО! некоторые измененые или новые элементы процесса не меняют данные в записях объектов. Далее, я вставляю в БП автогенерируемую страницу, чтобы убедиться, что данные меняются в процессе, при этом ничего не меняю в других элементах. Поле этого опять запускаю процесс и ВСЕ НАЧИНАЕТ РАБОТАТЬ как надо. Если теперь удалить автостраницу то все продолжает работать. Пробовал делать полную компиляцию и не помогает. Только вставка автостраницы в процесс исправляет ситуацию.
С чем может быть связанно такое поведение системы?

У меня такой же вопрос

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

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

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

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

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

Создан новый сервер BpmOnline, настроен по инструкции в Академии.

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

Не подскажете, в чем может быть проблема?

В логах IIS строки вида:

 

2019-07-03 06:51:39 192.168.104.132 POST /0/DataService/json/SyncReply/SelectQuery - 80 Egorov_v 192.168.107.173 Mozilla/5.0+(Linux;+Android+8.0.0;+SM-G570F+Build/R16NW;+wv)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Version/4.0+Chrome/75.0.3770.101+Mobile+Safari/537.36 - 200 0 0 103
2019-07-03 06:51:41 192.168.104.132 POST /0/DataService/json/SyncReply/SelectQuery - 80 Egorov_v 192.168.107.173 Mozilla/5.0+(Linux;+Android+8.0.0;+SM-G570F+Build/R16NW;+wv)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Version/4.0+Chrome/75.0.3770.101+Mobile+Safari/537.36 - 200 0 0 100
2019-07-03 06:51:41 192.168.104.132 POST /0/DataService/json/SyncReply/SelectQuery - 80 Egorov_v 192.168.107.173 Mozilla/5.0+(Linux;+Android+8.0.0;+SM-G570F+Build/R16NW;+wv)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Version/4.0+Chrome/75.0.3770.101+Mobile+Safari/537.36 - 200 0 0 39
2019-07-03 06:51:41 192.168.104.132 POST /0/DataService/json/SyncReply/SelectQuery - 80 Egorov_v 192.168.107.173 Mozilla/5.0+(Linux;+Android+8.0.0;+SM-G570F+Build/R16NW;+wv)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Version/4.0+Chrome/75.0.3770.101+Mobile+Safari/537.36 - 200 0 0 167
2019-07-03 06:52:13 192.168.104.132 POST /0/DataService/json/SyncReply/SelectQuery - 80 Egorov_v 192.168.107.173 Mozilla/5.0+(Linux;+Android+8.0.0;+SM-G570F+Build/R16NW;+wv)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Version/4.0+Chrome/75.0.3770.101+Mobile+Safari/537.36 - 200 0 0 83
2019-07-03 06:52:18 192.168.104.132 POST /0/DataService/json/SyncReply/SelectQuery - 80 Egorov_v 192.168.107.173 Mozilla/5.0+(Linux;+Android+8.0.0;+SM-G570F+Build/R16NW;+wv)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Version/4.0+Chrome/75.0.3770.101+Mobile+Safari/537.36 - 200 0 0 2258

Не знаю, куда копать, может подскажете?

У меня такой же вопрос

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

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

На конференции TechPoint рассказывали о мобильной программе для спортивных ставок, которая плохо работала на демонстрации у заказчика, как оказалось, из-за плохой связи в его офисе. В Вашем случае может тоже быть что угодно. Больше подробностей можно узнать из отчёта по кнопке «Отправить лог». Если подозреваете, что дело в обновлении, попробуйте и на старом, и на новом.

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

Спасибо, Александр.

Со связью проблем нет - тестировалось на офисном wifi в том числе.

А отправить лог нет возможности - клиент "зависает" на пункте импорта контрагентов, в таком состоянии нельзя ни вернуться на предыдущий шаг на даже закрыть клиент.

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

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

Смотрите логи на стороне мобильного и на стороне сайта (не IIS).

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

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

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

Получилось вытянуть родительскую роль "Inherited from", для всех контактов читается значение - "All employees". 

Подскажите, реально ли без побочных "костылей" с помощью процесса прочитать орг. роль?

У меня такой же вопрос

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

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


Добрый день,

Это не очень сложно: но нужно учитывать структуру таблиц где хранятся роли и вхождения в роли. Посмотрите таблицы / объекты "Объект администрирования" и "Вхождение пользователя в роли". В первой хранятся роли и сами пользователи, а во второй хранятся вхождения этих пользователей в соответствующие роли. Так же в таблицах есть тип роли, по которому можно определить организационная это роли или функциональная.

Сидоров Александр В.,

Делала в точности также, только в "Роли пользователя" читала первую запись выборки, а не коллекцию. Спасибо большое, попробую.

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

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

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

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

Если есть доступ к базе, сделайте SQL-запросами выборку из этих таблиц: сначала по имени определите Id этого пользователя, а потом посмотрите роли, в которые он входит. Когда структура и условия фильтрации станут ясны, можно будет повторить аналогичные условия выборки средствами движка процессов.

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

Как использовать BigInt  в ВРМ? 

Не хватает 32 бит, нужно 64, в конфигураторе нет такого выбора!

У меня такой же вопрос

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

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

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

Печалька. Если нельзя в дизайнере, то и в базе будут сложности и в DataService нельзя будет отправить. А в какой-нибудь будущей версии планируется добавить? Всё-таки мы на 64 битных системах уже 10+ лет работаем все

Ещё можно использовать тип «Деньги», то есть Decimal(20,2).

Добрый день, Алексей.

Мы зафиксировали ваше пожелание, на данный момент конкретных планов по этой функциональности нет.

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

Дмитрий Жаренко,

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

Алексей-Карягин,

Спасибо!

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

Добрый день !

Существует 2 объекта: Проект и Контрагент. Контрагент и Проект содержат в себе справочное поле "Отрасль".  Также в Проекте заполняется поле Контрагент.

Хочу создать Бпроцесс, устанвливающий значение поля Отрасль в Проекте, если заполнить Контрагента, значением поля Отрасль из контрагента. Но зашла в тупик.

При чтении данных разрешено читать данные поля Проект: Отрасль, Контрагент и id. а как считать значение поля Отрасль в контрагенте ? Если добавить новый элемент для чтения данных контрагента, то как указать, что читать следует лишь в том контрагенте, который используется в проекте с данным id (id проекта который был изменен в данный момент) ?

 

У меня такой же вопрос

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

Создала бизнес процесс по примеру из статьи: https://academy.terrasoft.ru/documents/technic-bpms/7-14/kak-chitat-dannye-zapisi-drugogo-obekta   но после запуска процесса ничего не происходит.. ни при создании проекта, ни при изменении. Можно ли где то найти, в чем проблема ?

Здравствуйте. Сначала читаете данные контрагента (либо всех колонок либо необходимых) фильтруя по id из стартового сигнала, берете элемент - http://prntscr.com/o6ffgh
Как то так.
Я бы сделал на событийном слое кодом.

Добрый день!
Ваш процесс должен выглядеть так:



Сидоров Александр В., 

Александр, большая Вам благодарность !  Подправила свой процесс, добавив фильтрацию по id как на Вашем примере ! БПроцесс заработал !

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

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

Возможно ли настроить конфигурацию мобильного приложения следующим образом, что бы при срабатывании бизнес правила и обработки модели текущей записи возможно было доставать значения данных из связанных записей? В данном случае меня интересует Контакт - http://prntscr.com/o5yxe7. Без написания запроса. или запрос нужно писать в любом случае? Стоит задача при изменении Контакта необходимо в заказе перезаписывать контактный номер телефона, как лучше реализовать?

У меня такой же вопрос

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

Стоит задача при изменении Контакта необходимо в заказе перезаписывать контактный номер телефона, как лучше реализовать?

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

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

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

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

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

Доброго времени суток! Подскажите, пожалуйста, как добавить CheckBox в средства связи. Для средства связи добавил в объекте логическое значение, например с названием "UsrIsMain".

У меня такой же вопрос

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

Мягко говоря не тривиальная задача, посмотрите как в BaseCommunication формируются конфиги для элементов управления для существующих в короюке типов комуникации и по аналогии для своего (добавленного) логического типа создайте конфиг для контрола. 

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

В принципе мне понятно, как конфиг строится. Добавлял TextEdit поле, Lookup поле. А вот CheckBox не получается, выбрасывает ошибку следующую:
 

message: Cannot read property 'changeEvent' of undefined 
 date: Thu Jun 13 2019 11:01:45 GMT+0300 (Москва, стандартное время)
moduleId: CardModuleV2_########GUID###########_ContactPageV2_detail_ContactCommunication
moduleName: DetailModuleV2

Строил сам CheckBox вот так:
{
                        className: "Terrasoft.CheckBoxEdit",
                        id: "CheckBoxEditId",
                        classes: {
                            wrapClass: ["communication-detail-edit-user-class", "communication-additional-edit-label-wrap"]
                        },
                        value: {
                            bindTo: "UsrIsMain"
                        },
                        change: {
                            bindTo: "changeIsMainFlag"
                        }
  };

Сама функция changeIsMainFlag объявлена в ViewConfig'е.

 

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

Вообще видел уже два поста в коммьюнити, которые тоже не понимали, как CheckBox вставить в Средства связи. Ответа там так и не было.

В детали средств связи контакта в пакете MarketingCampaign есть такое поле «Не актуальный» (NonActual) у каждого средства связи. Посмотреть на реализацию можно в схеме ContactCommunicationDetail.

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