Как сложить массив данных с помощью бизнес-процесса

Добрый день, Уважаемые коллеги!

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

Нравится

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

1) добавляете в БП элемент "читать данные"
2) Режим чтения устанавливаете "Считать функцию", объект - "План заключения договоров" (ну или другой объект, который используется в детали),Функция - "Сумма" (или другая), Указываете колонку - "Сумма тыс руб"
3) добавляете следом за ним элемент изменить данные. Выбираете объект "Контрагент", "Какие значения полей установить для измененных записей?" - выбираете колонку "Договоров....."(т.е. то, куда надо положить сумму). Появится пустое поле. В нем щелкаете по молнии и указываете результат функции предыдущего элемента

Обращу внимание, чтоесли Бизнес-План не контрол груп, а деталь, то пункт 3 надо немного видоизменить

Спасибо, Данила!

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

При запуске БП он берет все записи из "План заключения договоров", которые относятся к данному контрагенту (забыл кстати написать, что надо бы отфильтровать в бп по контрагенту) и делает SUM() по колонке. Соответственно если кол-во записей увеличится надо как-то снова вызывать бп для пересчета

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

Изменения данных в массиве соответствует событию добавления/удаления записи на/с деталь (-и).
Вам необходимо:
1) Прочитать добавленную запись
Таким образом вы получите Id записи, с которой связана добавленная
2) Элементом "Чтение данных" прочитать все записи по объекту детали, у которых в поле связи с разделом, указано значение записи раздела
3) Элементом "Изменить данные" задать результат подсчета из второго пункта.

Спасибо, уважаемые коллеги!

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

Уважаемые коллеги!

Извините, но не тот файл вложил к последнему комментарию.

"Ифутин Юрий Борисович" написал:Только вот, как я и сомневался (или как вариант не знаю правильный формат) при описании функции сумма возникает ошибка (см. вложенный файл)

В элементе #Читать договор......Сумма# уже содержится сумма по столбцам.

Спасибо, коллеги!

Я понял свою ошибку - надо читать данные через режим "Считывать функцию"... Я просто ни разу так не делал и не сразу понял, что это за режим...

Уважаемые коллеги!

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

Добрый день!
Попробуйте добавить элемент [Таймер] с задержкой 1-2 секунды перед элементом “Считать сумму при удалении договора”.

Спасибо, Олег!

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

Уважаемый Олег!

Когда тестировал процесс был включен еще другой параллельный процесс...
Поэтому снимаю свой предыдущий комментарий...
После деактивации параллельного процесса, получаем следующее:
- после первого удаления договора и обновления кэша процесс работает корректно
- после второго удаления договора (например, если в списке несколько договоров) и обновления кэша, итоговая сумм не меняется...
- итоговая сумма меняется после второго обновления кэш...

Коллеги, ну, помогите победить данный процесс.... (см. вложенный файл)

Юрий, здравствуйте!

Для решения задачи следует:
1. В процессе сгенерировать сообщение по каналу Web-socket.
2. В схеме страницы редактирования контрагента подписаться на сообщения.
3. В методе “прослушки” сообщения вызывать метод который обновит страницу и отобразит актуальные данные.
Обновить страницу редактирования:
reloadEntity() – refresh page

Пример генерации и подписки на сообщение рассмотрен на форуме - http://www.community.terrasoft.ru/forum/topic/11784

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