Добрый день!

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

Пытаюсь создать условный поток с вычиткой данных о сроке действия банк.карты Контакта (Год) и (Месяц):

 

[#Читать Банк.карты.Первый элемент результирующей коллекции.Срок окончания(год)#]<="20"&&[#Читать Банк.карты.Первый элемент результирующей коллекции.Срок окончания(месяц)#]<=Месяц([#Читать Банк.карты.Первый элемент результирующей коллекции.Срок окончания(месяц)#])

 

*Желательно указать в условном потоке:

- что срок окончания(год)=Текущий год,

- что срок окончания(месяц)=Текущий месяц

Нравится

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

Екатерина, у Вас два числовых поля с номером месяца и года? Или они текстовые? В каком виде хранятся?

 

В дизайнере формул на вкладке «Системные переменные» есть «Текущее значение даты», а на вкладке «Функции» — «Месяц()». То есть можете написать «Месяц([#Системная переменная.Текущее значение даты#])». Для года функции не нашёл, можно написать числом в системную настройку, считывать оттуда и раз в год менять.

 

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

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

Коллеги, что происходит с РФС на 7.15.2?

В конфигурации допустил ошибку в элементе скрипт.

При публикации появляется лог компиляции и страница дизайнера БП слетает в конфигурацию и появляется ошибка "Сборка конфигурации не инициализирована".

После нельзя зайти в схему БП, компиляция и генерация исходного кода не происходит.

 

Нравится

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

Обходное решение:

Экспортируйте из конфигурации ваш БП, удалите его откомпилируйте конфигурацию.

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

Обходное решение:

Экспортируйте из конфигурации ваш БП, удалите его откомпилируйте конфигурацию.

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

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

Спасибо, так и сделал.

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

Доброго времени суток!

Необходимо запустить N подпроцессов из основного процесса и каким-то образом ожидать выполнения всех подпроцессов.

Буду благодарен любым идеям.

UPD-1. Изначально не известно сколько будет подпроцессов, поэтому такого рода схема не подойдет

Нравится

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

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

что то вроде такого -http://prntscr.com/ocm1ol

Вот наглядный пример, создал 3 БП, в них добавил разные таймеры и посмотрим как идет обработка в главном БП

http://prntscr.com/ocmaqq - Главный

http://prntscr.com/ocmaxg - 1 мин задержки

http://prntscr.com/ocmb6t - 2 мин задержки

http://prntscr.com/ocmbg8 - 3 мин задержки



Запускаем основной и смотрим диаграму:

http://prntscr.com/ocmc05

http://prntscr.com/ocmc9u

http://prntscr.com/ocmck4 - завершился (диаграма выполнения основного без изменения - http://prntscr.com/ocmcso)

http://prntscr.com/ocmda0

Нигрескул Алексей,

Обновил описание вопроса

Если процессы создаёте кодом, то можно их количество записать в определённое поле, а в конце дочернего процесса отнимать от значения единицу. На изменение поля на ноль в основном процессе повесить сигнал.

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

А где создавать это поле? И как сделать обработчик сигнала?

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

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

То есть нужно в дочернем процессе сначала считать эту колонку селектом затем сделать update? НО если эти дочерние процессы завершаться секунда в секунду, то подсчет не будет верным. Как быть тогда?

Уменьшать и считывать старое значение можно в том же запросе.

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

Гарантируется ли при использовании этого запроса правильный подсчет одновременно завершающихся подпроцессов?

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

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

Зверев Александр пишет:Уменьшать и считывать старое значение можно в том же запросе.

Через такой запрос не генерится сигнал 

Действительно, в таком случае используйте не Update, а ESQ. Синхронизацию в этом случае нужно предусмотреть самостоятельно. Либо же менять при помощи Update, а в следующем шаге менять другое поле по ESQ или посылать сигнал иным образом.

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

Есть БП, в нем есть скрипт. в скрипте выполняется некий код, который использует сервис ReportService. Там берется Connection. Если запускать БП вручную - все работает. Если по плану - выбивает ошибку.

Вопрос: Как в БП передать Get("UserConnection"); в userConnection сервиса ReportService? Есть ряд других сервисов, возможно туда тоже нужно будет это передать....

Нравится

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

Почему вы решили что UserConnection не передается?

Вы от какого пользователя запускаете БП по расписанию? Есть ли у єтого ползователя права для рабьоты с  ReportService?

Добавить комментарий

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

Автозапуск от пользователя что и обычный запуск, вот ошибка:

System.ServiceModel.ServiceActivationException: Set AspNetCompatibilityEnabled true

   в Terrasoft.Web.Common.BaseService.get_UserConnection()

   в Terrasoft.Configuration.ReportService.ReportService.GenerateDevExpressReport(String entitySchemaUId, String reportSchemaId, String recordId, String reportParameters)

   в Terrasoft.Configuration.ReportService.ReportHelper.CreateReport(String entitySchemaUId, String reportSchemaUId, String templateId, String recordId, String reportParameters, Boolean convertInPDF)

   в Terrasoft.Configuration.ReportService.ReportService.CreateReport(String entitySchemaUId, String reportSchemaUId, String templateId, String recordId, String reportParameters, Boolean convertInPDF)

   в Terrasoft.Core.Process.UsrAutoSendNightReportMethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)

   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

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

Те определять UserConnectionнужно как для сервиса

userConnection = HttpContext.Current.Session["UserConnection"]

Те определять UserConnectionнужно как для сервиса

userConnection = HttpContext.Current.Session["UserConnection"]

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

Дмитрий Степанов,

тоже делал так, но там нужно было несколько функций тока, а тут хз что нужно будет...

Добрый день!

У меня данная проблема отпала при передаче параметра "UserConnection" конструктору ReportService.

var reportService = new Terrasoft.Configuration.ReportService.ReportService(UserConnection);

 

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