Подскажите, пожалуйста, как получить количество дней в месяце в формуле процесса?

DaysInMonth() редактору формул не нравится

Нравится

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

Сделайте скриншот формулы с текстом ошибки.

Можно попробовать добавить System в Namespace.

И посмотрите еще раз пример.

int daysInJuly = System.DateTime.DaysInMonth(2021, 7);

Владимир, у меня всё работает:

В процесс дополнительно ничего не добавлял.

Зверев Александр пишет:
Андрей, у меня всё работает:

Очень интересно! Я проверил в облаке - действительно, работает.
А на on-site - выдаёт ошибку.

В чём может быть разница? 

Может, версия отличается? Я пробовал на 7.17.2.

Зверев Александр пишет:

развернули Marketing 7.17.2 PostgreSQL на Windows - то же самое...

Чистка кэша браузера и Redis не помогает?

В «инструментах разработчика» браузера есть более подробная информация об ошибке?

Чистка, рестарт не помогли, в консоли тоже ничего.  

Значит, есть ещё какие-то различия между системами, где работает, и где нет. А если на одном сайте создать БП, выгрузить схему в файл и загрузить на другой сайт, тоже перестаёт работать?

Зверев Александр пишет:

Значит, есть ещё какие-то различия между системами, где работает, и где нет. А если на одном сайте создать БП, выгрузить схему в файл и загрузить на другой сайт, тоже перестаёт работать?

Проверил ещё на парочке on-site (которые ставили не мы) - везде повторяется такая же ошибка.. 

При переносе схемы БП с этой функцией на такой сайт тоже? А в логах, куда пишутся стеки ошибок в серверном коде, ничего не появляется?

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

Создаем параметр процесса типа справочник. В обязательном порядке пишем что за справочник.

Тут все замечательно. Далее идем и выбираем элемент формула. В нем выбираем только что созданный параметр. В поле "Значение формулы" выбираем выбор из справочника и приплыли. Заново выбираем справочник. Мелочь, но место для ошибки потому что дает выбрать другой справочник.

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

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

 

P.s. можно считать мелким багом.

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

В системе еще масса мест где можно сделать что-то не так, так что можно сказать что это корректная работа.

Полозюков Евгений Петрович,

Ну так надо от них избавляться)

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

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

Коллеги, привет!

Подскажите, пожалуйста, как правильно прописать формулу в элементе формула бизнес-процесса?

Необходимо из строки "+38 (099) 999-99-99" вычитать числа и записать их обратно в строку. На выходе должно быть "380999999999".

Заранее благодарю.

Нравится

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

Виктория, мне кажется вот здесь https://community.terrasoft.ru/questions/ubrat-simvoly-v-tekste-s-pomosu-bp описан один в один ваш кейс)

Виктория, мне кажется вот здесь https://community.terrasoft.ru/questions/ubrat-simvoly-v-tekste-s-pomosu-bp описан один в один ваш кейс)

Ну и с Днем Рождения, кстати;) 

Сидоров Александр Валерьевич, спасибо))) 

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

Добрый день!

Руководствуясь статьей "Формулы" на Академии, пытаюсь создать в БП условный поток с проверкой заполненности поля, но при сохранении выдает ошибку:

________________________________________________________________________________________

Нравится

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

Вы пытаетесь сравнить Дату с Guid. Поэтому формула и выдает вам ошибку. Вам нужно сравнивать с DateTime.MinValue

Вы пытаетесь сравнить Дату с Guid. Поэтому формула и выдает вам ошибку. Вам нужно сравнивать с DateTime.MinValue

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

 благодарю, разобрался.

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

Здравствуйте!
Возможно ли реализовать использование методов расширения в элементе БП формула.
Столкнулся с таким случаем нужно определить вхождение текущего времени в диапазон.
Написал метод расширения:

namespace Terrasoft.Configuration
{
    public static class AbDateTimeExtensions
    {
        public static bool IsInRange(this DateTime dateToCheck, DateTime startDate, DateTime endDate)
        {
            return dateToCheck.TimeOfDay >= startDate.TimeOfDay && dateToCheck.TimeOfDay < endDate.TimeOfDay;
        }
    }
}

 Но при использовании его в формуле выводит ошибку - http://prntscr.com/mwbc1w

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

В старом  дизайнере процессов можно было в формуле просто вызвать функцию, написанную на C# в том же БП. Сейчас так нельзя. В Вашем случае для такого вычисления вместо блока-формулы можно использовать блок-скрипт, где считать значения из параметров и вызвать функцию, а результат записать в ещё один параметр.

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

Пащенко Александр Сергеевич,

Хорошая идея. Давайте её залайкаем и, возможно, когда-нибудь эта возможность в bpm'online появится wink

Пащенко Александр Сергеевич, без компиляции бы в любом случае не обошлось. В старом движке процессов компилировать нужно было всегда, а в новом — только если есть элементы на C#.

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

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

Если какую-то логику нужно часто применять в процессе, можно оформить её в UserTask.

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

А смысл? Проще делать хэлперы (схема исходного кода) и их использовать в скриптасках. Для чегото более навороченного можно сделать свои действия процесса.

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

Коллеги всем доброго времени суток. Нужна Ваша помощь.

В БП есть элемент Web-сервис в  котором есть массив - http://prntscr.com/kyim63.
Данный массив объектов состоит из двух полей Number и Description - http://prntscr.com/kyimnk
Данные поля необходимо заполнять по следующему правилу из двух выборок - http://prntscr.com/kyin8y
Правила заполнения реализовал следующим образом через тернальные выражения в формуле поля - http://prntscr.com/kyio17http://prntscr.com/kyioa3
Но при отработке элемента Web-сервис видим что массив Communications пустой - http://prntscr.com/kyip7z
Если же посмотреть на данные трассировки двух элементов из которых должна осуществляться выборка видим:
Идем в "Читать Контакты СТО в платформе" - http://prntscr.com/kyiq70 здесь по нулям следовательно логике должно брать значение из другого элемента, идем в "Читать Основной контакт Контрагента" - http://prntscr.com/kyir2v, здесь данные есть, вопрос почему не заполнились в веб-сервисе?
Заранее благодарю за ответ.

Нравится

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

Нужно ещё больше ссылок на prntscr.com.angry

В 7.12 поддержка работы с веб-сервисами из БП только появилась. В 7.13 обещают усовершенствовать, улучшить работу в том числе и с массивами. Есть смысл дождаться релиза и переделать с учётом его возможностей.

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