Добрый день

Подскажите, пожалуйста, чтобы при вводе данных в "Заметки" этими же данными заполнялось и поле "Дополнения" в той же карточке ?

Нравится

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

Логику работы с полем «Заметки» (в том числе и считывание из него при сохранении карточки по кнопке ОК) можно посмотреть в BaseModuleEditPage.

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

Карточка - Contact
Поле этой карточки - ITNumber

При нажатии на ОК пишу:

var length = Contact.ITNumber.ToString().Length;
if (length >10)
{
//то здесь выводится сообщение пользователю, и к закрытию карточки процесс не идет
}
else
{
//то здесь продолжается процесс закрытия карточки
}

правильно ли?

Нравится

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

Нет.
Посмотрите в любой карточке, как правильно получать значение поля.

Значение поля:
var number = (Guid)Page.ITNumberEdit.Value;

А как подсчитать кол-во символов?:
string str = ?

int length = str.Length;

далее сравниваю кол-во символов if (length <>10)....else

Татьяна, зачем Вы пишете:

var number = (Guid)Page.ITNumberEdit.Value;

У Вас номер типа Guid?

точно, мне не нужно определение идентификатора. ITNumber- это обычное поле (целочисленное), к-ое заполняется (а не выбирается из справочника) пользователем.

Page.DataSource.ActiveRow.GetTypedColumnValue("ITNumber") - это значение поля.
string str = ?
int length = str.Length;
далее сравниваю кол-во символов if (length <>10)....else

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

вот так сработало без ошибок:

string str = Page.ITNumberEdit.Value.ToString();
int length = str.Length;
if ((Page.ITNumberEdit.Value != null)&&(length != 10))
{
Page.BaseMessagePanel.AddMessage(Warning, "Количество символов в поле Внутр.инвент.номер (ИТ) должно быть равно 10.", MessageType.Warning);
Page.ITNumberEdit.Clear();
Page.ITNumberEdit.SetRequired(true);
return false;
}
else
{
....

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

В ранее созданных отчетах вижу привязку:

А то у меня:

Как получить (List) вмеcто (Dataset) ?

Нравится

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

Татьяна,

опишите, пожалуйста, какую бизнес-задачу Вы хотите решить?

Хочу сделать отчет (наподобие Досье Контакта), чтобы:
в этом же отчете еще распечатывались по определенному Контакту и его Записи (с детали Записи карточки Контакта).

Сравните у готового и у Вашего отчётов наполнение вкладки «Данные» правой панельки в дизайнере.
«List» означает, что выбирается не из датасетов, а из параметров.

Не пойму, в чем отличие:

// Write - это моя новая деталь Записи в карточке Контакта.

К тому же, если я пытаюсь перевыбрать (List), то у меня предлагается DataSet:
Было:

Пытаюсь перевыбрать на то же самое:

List — это для параметров. У Вас на первом скриншоте параметров нет (см. внизу дерева справа).

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

Добавить.

А как добавить?

Правой кнопкой.

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

Добрый день!

Столкнулся со следующей проблемой. На гриде детали добавил поле числового типа с названием "MinPurchaseAmountEdit". Мне необходимо при переходе на эту страницу детали этому полю задавать некоторое значение. Делаю я это в событии "PageLoadComplete" (пробовал также в "Init"):

0

Код следующий:

Page.MinPurchaseAmountEdit.Value = 10m;

Компилируется всё отлично. Дебажится тоже. Присваиваемое значение "10" в формате "decimal" присваивается! Но, на самой странице в консоли возникает странное уведомление:

Uncaught ReferenceError: PageContainer_DetailGridContainer8021c0aacccf410e8f1da5c600f5d6ad_MinPurchaseAmountEdit is not defined

Насколько я понял, то система не видит это поле. Собственно, по этой причине карточка моей детали не открывается, т.е. она пустая:

2

Я так ранее делал - всё получалось без проблем. Сейчас - не понятно поведение системы. Прошу помощи!

Нравится

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

Можно ещё попробовать присваивать значение контролу при помощи метода:

Page.MinPurchaseAmountEdit.SetValue(10m);

Или же писать в поле источника данных:

Page.DataSource.ActiveRow.SetColumnValue("MinPurchaseAmount", 10m);

Спасибо, Александр, что подсказали, но:
- в первом варианте ошибка та же: система не видит контрола на странице (та же ошибка в консоли браузера);
- во втором случае даже страница не открылась, а система выдала ошибку:

Exception Message: Ссылка на объект не указывает на экземпляр объекта.
Exception Type: System.NullReferenceException
Exception Source: TSBpm

Думаю, тут дело не в присваивании значения полю контрола, а в том, что его надо как-то объявить, чтоб система увидела, что такой контрол есть на моей странице. Но это уже получается "масло масляное", т.к. специальных действий после добавления контрола на страницу вроде не надо проводить и система сама должна его видеть. Тем более в исходном коде страницы есть объявление и создание моего контрола:

3

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

Не знаю, что именно хотите сделать, но, может, надо было вязать к событию смены записи на самом гриде (детали) DataSourceActiveRowChanged или событию смены записи в основном реестре (разделе) GridPageRefreshRow.

У меня задача в том, чтобы заполнять это поле "MinPurchaseAmountEdit" данными из БД, и заполняться она должна в момент первого обращения к странице детали, а именно в момент перехода на неё после открытия карточки, к которой привязана деталь. Здесь событие смены записи на самом гриде или в основном реестре точно не подойдут.

Дело в том, что для всех записей этого грида значение "MinPurchaseAmountEdit" одинаково и мне нужно выводить это значение (если оно отлично от нуля!) и присваивать это значение контролу. Это всё при первом переходе на грид детали. Непонятно, почему кнопки, которые на этой детали находятся ("Добавить", "Изменить" и др.) обнаруживаются и на них система не ругается, а при добавлении контрола в этот же контейнер к кнопкам BPM его (контрол) не видит...

Кроме того, "на момент PageLoadComplete её источник данных ещё не привязан к конкретной записи" - тут дело даже не в источнике данных, т.к. я просто работаю с элементами на странице:

Page.MinPurchaseAmountEdit.SetValue(10m);

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

Всё же лучше и их попробовать, они могут вызываться и при первом выборе записи.

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

"они могут вызываться и при первом выборе записи." - но ведь поле должно обновляться при первичном открытии страницы этой детали. Неужели такой возможности нет в функционале BPM?

Сделал поле без привязки к БД:

4

Ошибка та же самая - система не видит моего контрола. Куда ещё "копать"?

P.S.: Значение "UId" на скринах разное, т.к. я удалял элемент, компилировал и добавлял новый такой же, чтобы убрать его привязку к БД, иначе система ругается - NullReferenceException...

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

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

Всё равно спасибо, Александр, что поучаствовали в обсуждении. Хорошего Вам дня!

Да, действительно странно. А Вы пробовали именно с полем ввода, если выводить в название кнопки или простой надписи, то отрабатывает нормально?

Попробовал добавить надпись с названием "Label1" и заголовком "Надпись 1", предварительно удалив поле ввода дробного числа и скомпилировав модуль. После этого в то же событие "PageLoadComplete" добавил код:

Page.Label1.Caption = "etqtert";

Когда скомпилировал модуль и открыл страницу детали, она открылась!!!! Но:

5

Вопрос: откуда там взялся контрол, который я до этого удалил - непонятно... И в структуре он тоже был. Но самое приятное то, что "Caption" у надписи поменялся (заметить по картинке трудно, но возможно)! При этом код:

Page.MinPurchaseAmountEdit.SetValue(10m);

был закомментирован.

Я удалил поле ввода дробного числа снова, удалил надпись, закомментировал код по переприсвоению "Caption" в надписи и раскомментировал код по установке значения в "MinPurchaseAmountEdit". Скомпилировал. Страница детали не открылась... :cry: Ошибка та же.

ВЫВОД: Изменение поля ввода дробного числа нельзя изменять ни в одном событии страницы до того пока она хотя бы один раз не прорисуется (ну или лыжи не едут...). Но это не применимо к остальным контролам. К сожалению(

А для поля ввода строки такое же самое поведение, что и для поля ввода числа?

Да, эти контролы ведут себя одинаково: поле ввода строки тоже не определено в событии "MinPurchaseAmountEdit". Ошибка та же.

Судя по сообщению:

Uncaught ReferenceError: PageContainer_DetailGridContainer8021c0aacccf410e8f1da5c600f5d6ad_MinPurchaseAmountEdit is not defined

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

Контрол идентифицируется браузером как:
http://i.piccy.info/i9/d0f1d2f7db16bc88df4890afcb8e71e5/1458115070/2764…

ПРИ ЭТОМ! Если никаких обращений к этому контролу ни в каком событии не писать, типа:

Page.MinPurchaseAmountEdit.SetValue(10m);

то, контрол система обнаруживает НОРМАЛЬНО! А если написать к нему обращение в виде предыдущего кода, то система разводит руками и говорит, что не знает, чего я от неё хочу. Похоже, она женского пола...

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

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

Добрый день

Подскажите, пожалуйста, можно ли отобразить на одной вкладке Контакты две детали и , если -да, то каким образом? Интересует детали КЕ и Записи (не Файлы и ссылки и не Заметки)

Нравится

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

Татьяна, эти вопросы уже обсуждались. См. тут и тут.

Добрый день.
Вот что у меня получилось:

в карточке Контакт на детали Записи я сделала две детали:
1) Записи
2) КЕ (здесь данные должны браться из детали КЕ этого Контакта)

В итоге: почему-то нет данных в лайоте КЕ, хотя они на самом деле есть на детали КЕ Контакта. В чем может быть моя ошибка?

Что сделала:

в итоге:

Если вместо Страница реестра конфигурационных единиц в контакте выбрать Страница реестра конфигурационных единиц , то все равно перечень КЕ в правом лайоте не выводится:

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

нужно ли чистить Redis? И где правильно - Страница реестра конфигурационных единиц или Страница реестра конфигурационных единиц ?

И где правильно - "Страница реестра конфигурационных единиц в контакте " или "Страница реестра конфигурационных единиц" ?

Татьяна, я ведь уже объяснял, чем отличается «Страница реестра конфигурационных единиц в контакте» от «Страница реестра конфигурационных единиц». Там разная логика фильтрации, они обе правильные, но для разных целей.

И если ошибка в коде, чистка редиса не поможет.

понятно, значит мне нужна «Страница реестра конфигурационных единиц в контакте» .

Вам видней...

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

Добрый день.
Подскажите, пожалуйста, как настроить права на редактирование определенного справочника конкретному сотруднику? Т.е. не у сист.администраторов по умолчанию нет доступа на редактирование никаких справочников. Мне нужно дать Иванову доступ к справочнику Модели КЕ. Заранее спасибо

Нравится

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

Здравствуйте, Татьяна.

Вы можете предоставить Иванову право на операцию "Доступ к справочникам".

При этом объекты всех справочников необходимо администрировать по операциям и предоставить доступ всем сотрудникам только на операцию Чтения объектов всех справочников.
Иванову же добавить доступ на редактирование необходимого Вам справочника.

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

Есть процесс который выгружает данные о пользователе выполняющем это действие. Необходимо получить IP компа пользователя. Помогите плиз. Нашла на просторах сайта подсказку:

var wmi = GetObject("winmgmts:!\\\\.\\root\\cimv2");
var nac=wmi.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True");
for (nac = new Enumerator(nac);!nac.atEnd(); nac.moveNext()){
var ip = (nac.item().ipAddress(0));    
}

Не знаю поможет ли... Может есть другие варианты?

Нравится

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

Здравствуйте.
Можно получить IP пользователя при обработке запроса от пользователя.

HttpContext.Current.Request.GetClientIP()

Ограничения:
в данном случае IP будет тот с которого реально получен запрос (это важно при работе пользователя из-за прокси).

"Александр Зубков" написал:

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

Можно получить IP пользователя при обработке запроса от пользователя.

HttpContext.Current.Request.GetClientIP()

Ограничения:

в данном случае IP будет тот с которого реально получен запрос (это важно при работе пользователя из-за прокси).

Спасибо Александр! Использовали другой метод, но получили, как раз то что нужно!

HttpContext.Current.Request.UserHostAddress

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

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

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

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

Нравится

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

Добрый день,

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

"Зарицкий Олег Васильевич" написал:

Добрый день,

В системе не предусмотрены универсальные средства, как принудительно завершить выполнение одного из этапов процесса и приступить к следующему. Это противоречит принципу BPMS, так как для выполнения/прохождения БП должны выполнятся все необходимые условия каждого из этапов.

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

Спасибо за ответ.

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

Добрый день, Коллеги!
Подскажите пожалуйста, сталкивался ли кто-нибудь с обновлением bpm'online Realty 5.4.1.728 до 7 версии?
Я еще хочу прояснить, в версии 5, модуль для агенств недвижимости назывался realty а в 7 версии real estate. На сколько они совместимы и можно ли без проблем обновить первую на вторую?
Какие проблемы возникнут при обновлении?

Нравится

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

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

Обновление bpm'online Realty 5.X до 7-й версии - это проектное решение.

bpm'online realty 5.X и bpm'online real estate 7.X - это 2 разных программных продукта, потому сказать, что они однозначно совместимы нельзя.

Возможный вариант обновления может быть следующий на базе решения bpm'online real estate 7.X:

1. На уровне СУБД перенести данные основных таблиц, возможно, при необходимости доработать структуру таблиц в 7.X
2. Реализовать дополнительную функциональность, которая не вошла в bpm'online real estate 7.X

Спасибо большое, Алла за ответ!
Хотелось бы уточнить:
1. Решение realty на платформе bpm'online 7.Х отсутствует?
2. Единственный вариант перейти на версию 7.Х для агенства недвижимости это новое внедрение (bpm'online real estate) и разработка переноса данных с существующего решения в новое?

1. Да, отсутствует.
2. Для обсуждения возможных вариантов перехода на версию 7.X свяжитесь с менеджером Terrasoft, ответственным по Вашей компании.

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

Доброго дня!
Скажіть, будь ласка, чи можна отримати деяку інформацію по використанні карт в bpmonline 7.7(sdk або щось подібне)?

Нравится

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

Доброго вечора!
Чи є можливість після розмалювання карти модулем OsmMapsModule додавати свої маркери(мітки). Тобто у модулі OsmMapModule додати свої елементи управління на карту(checkboxes) і робити зміни на карті(додавати і видаляти мітки чи маркери)?

Здравствуйте, Роман!

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

Дякую!

Зробивши заміщення OsmMapsModule, є можливість змінити іконку маркера і відповідно показати на карті маркери з різними іконками(картинками) в залежності до адреси. Мені необхідно показати деякі адреси одною іконкою а другі адреси іншою іконкою?

Здравствуйте, Роман!

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

У мене є точки обслуговування які мають свою адресу. Кожна точка обслуговування може мати свій тип(банкомат, платіжки, послуги, mbox). Я так зрозумів що при формуванні обєкту адресів для карти(mapsData) в поле addressType можна вказати різні типи адресів? Бо зараз я передаю адреси в карту з addressType = "Фактический". Тоді які саме типи адресів я можу передавати щоб іконки були різного кольору?

Чи можливо взагалі в обєкт mapsData, в якому будуть адреса для карти , виставити для кожної адреси деяке поле яке б показало цю адресу(маркер) на карті іншим кольором?

API непосредственно OSM вы можете посмотреть на их сайте:
http://wiki.openstreetmap.org/wiki/Marker_API

Иконку подменить конечно можно, сейчас она устанавливается в схеме "OsmMapsModule", в методе getLeafletMarkersArray функцией getMarkerIcon из ресурсов схемы. Там же в getLeafletMarkersArray есть и координаты. Которые Вы можете проанализировать, запросами esq в бд. И взять из ресурсов ту или иную иконку в зависимости от Ваших условий.

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

Доброго дня! Чому не загружаються ресури схеми OsmMapModule після того, як я замістив її базову схему?

Здравствуйте, Роман!

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

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

Я замітив що при запуску карти для багатьох адрес(маркерів), приблизно 50, модуль карти OsmMapModule видає в консолі повідомлення стосовно методу getIsEmptyAddress для кожної адреси(маркеру), і це все довго обробляється, чи є можливість обійтися без цього методу і пришвидшити запуск карти з багатьма адресами або взагалі чи є можливість пришвидшити роботу запуску карти з багатьма точками до 1000?

Роман, здравствуйте!

Если я правильно понял, то сообщение «Метод getIsEmptyAddress устарел. Вместо него используйте AddressHelper.getIsEmptyAddress» является информативным. Данное предупреждение означает, что есть изменения в базовой конфигурации и если Вы будете в дальнейшем разрабатывать конфигурацию, то необходимо использовать метод «AddressHelper.getIsEmptyAddress».

Метод «getIsEmptyAddress» делает проверку если у записи адрес или нет, так как нельзя отправлять пустой запрос на сервис OSM.

Оптимизировать вряд ли получиться, так как OSM (https://www.openstreetmap.org/) сторонним сервисом с opensource. С нашей же стороны мы только отправляем запросы и ждет ответа, когда полностью прорисуется карта.

Доброго дня!
Для того щоб показати одну точку(маркер) на карті, необхідно передати такий масив address: ["Країна","Область","Місто","Вулиця"].
Мене цікавить поле для передачі вулиці. Чи іграє роль формат цього поля, тобто без слів вул., ул, пробіли між ними. Тому, що деякі вулиці які я передаю у форматі що на скіншоті. І в результаті маркери вставляються в одну точку по діагоналі

Роман, для корректного отображения необходимо, чтобы сервис "Openstreetmap" находил заданный адрес.
Строгого порядка нет. Поиск адреса зависит от работы самого сервиса Openstreetmap.

Принцип работы отображения карт следующий:

- задается значение в колонке «Адрес»;
- значение в данной колонки передается в сервис Openstreetmap;
- получаем ответ от сервиса;
- если адрес корректный, то карта отобразиться корректно.

Вы можете использовать https://www.openstreetmap.org для проверки корректности ввода адреса.
Примечание. Сервис OpenStreetMap дает возможность самим дополнять и редактировать карты.

Также документацию по OSM можете найти на официальном сайте - http://nominatim.openstreetmap.org/

При работе с картами необходимо указывать точный адрес. Также, если не находит определенный адрес, то нужно копать в сторону OpenStreetMap.

Чи є можливість працювати з Google картами? Чи є готові схеми модулів?

Роман, здравствуйте!

Ранее приложение bpm’online работало с Google картами.
На данный момент этот функционал перекрыт OSM сервисом.

В приложении на данный момент еще присутствуют старые схемы для работы Google карт. Например, модуль «Модуль Google карт».

Для работы с Google картами приблизительно Вам необходимо:

- лицензия для того, чтобы Google разрешил использовать их функционал;
- убрать пакет OSM (экспериментальный вариант)или залочить/переопределить сервис, так как он перекрывает функционал Google карт;
- реализовать собственную интеграцию, так как старые схемы возможно не подойдут (например, Google изменил структуру интеграции с картами).

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