В системе введено 2 сущности: элементы организационной структуры "Орг.юниты" и "Функциональные роли", в каждую из них по отдельности можно включать пользователей, и друг друга.
Причем включение одной сущности в другую создает реверс-тождественную связь (Добавление Функ.роли в Орг.Юнит равнозначно добавлению Орг.Юнита в Функ.Роль, эти связи вне зависимости от направления даже описываются в одной таблице).
Так вот, логично было бы предположить что данное разделение для обеспечения многопользовательского режима в приложении имеет смысл на уровне предоставления прав доступа, но эксперимент показывает весьма непредсказуемое поведение:
Пользователь А включен в Функц.Роль B которая в свою очередь включена в Орг.Юнит C.
В настройках прав доступа, например на объект "Контакты", установлено запрещающее правило на "Чтение", что фактически скрывает раздел для Орг.Юнита C.
Логическая цепочка: Пользователю A, раздел контакты станет недоступен, т.к. он входит в Функ.Роль B которая в свою очередь входит в Орг.юнит С, которому запрещено чтение по объекту "Контакты".
Фактически: Пользователю A - остается доступен раздел "Контакты", и ограничение он получает только если будет непосредственно включен в Орг.Юнит C
т.е. ограничения распостраняются только на пользователей непосредственно включенных в соответствующую Функ.роль или Орг.Юнит, через включение их друг в друга пользователям не наследуются никакие разрешения целевой группы, так же как и пользователям целевой что либо от включаемой.

А теперь самый главный вопрос: Зачем ?!
Какой смысл в 2-х сущностях, и в возможности их связи друг с другом, если это ни коим образом не связано с наследованием предоставленных разрешений ?!
И зачем вообще тогда нужны Функциональные роли...
В чем вообще "соль" обособленности Орг.Юнитов и Функ.Ролей ?

Нравится

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

Здравствуйте, Илья.

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

Ответы на ваши вопросы вы можете найти в статьях на Академии: https://academy.terrasoft.ru/documents/sales-team/7-9/razdel-upravleniy…
https://academy.terrasoft.ru/documents/sales-team/7-9/stranica-organiza…
https://academy.terrasoft.ru/documents/sales-team/7-9/stranica-funkcion…

Также, рекомендуем вам просмотреть видео:
https://www.youtube.com/watch?v=mSWfz61NKFI
https://www.youtube.com/watch?v=x5C6VcOhKj4

В них поясняются все особенности работы с Организационными и Функциональными ролями и описаны примеры настройки прав доступа для Функциональных и Организационных ролей.

Ну с членством в другой функ.роли которой явно разрешено и разрешающее правило расположено выше - понятно.

а вот тут, прошу пару слов пояснения:

"Мария Ватулина" написал:входить в дргую функциональную роль, которой доступ к данному разделу не запрещен

Т.е. включая пользователя в Орг.юнит или Функ.роль которой явно что-то не запрещено, все связанные явно заданные запрещающие правила всех других включений для пользователя - не применяются ?

Илья,

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

Рекомендуем ознакомиться с видео (ссылки указаны выше), там озвучены все нюансы настройки прав доступа для Организационных и Функциональных ролей.

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

Здравствуйте, подскажите, пожалуйста, реально ли реализовать автонумерацию строк в детали, к примеру “контакт в группе” с учетом удаленных записей и т.д.?

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

Нравится

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

Вряд ли это надо делать с системной настройкой, так как с деталью обычно в одно время работает 1 пользователь. Достаточно перед сохранением записи брать максимальное значение в группе.
А при удалении - пересчитывать номер у всех последующих записей.
Ну, и дать возможность пользователю менять очередность записей, если необходимо.

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

Добрый день, Мария!

Подскажите, по статье ниже добавляли автонумерацию?
https://academy.terrasoft.ua/documents/technic-sdk/7-9/primer-ispolzova…

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

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

"Мотков Илья" написал:то есть даже если зайти в создание счета, выйти, и зайти снова, номер будет другой.

Это не самая корректная реализация. Правильнее присваивать номер счета после сохранения записи

спасибо :smile:

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

Коллеги, приветствую! Дурацкий вопрос. Вот кусок кода:

statusChanged: function() {
        if (this.get("Status").value === '394d4b84-58e6-df11-971b-001d60e938c6') {
        var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "VwAvailablePlaces"});
        esq.addColumn("Classroom", "Classroom");
        var freePlacesColumn = esq.addColumn("FreePlaces", "FreePlaces");
        freePlacesColumn.orderDirection = Terrasoft.OrderDirection.ASC;
        freePlacesColumn.orderPosition = 0;
        esq.filters.addItem(
                this.Terrasoft.createColumnFilterWithParameter(
                        this.Terrasoft.ComparisonType.EQUAL, "Branch", this.get("Branch").value));
        esq.getEntityCollection(function(response) {
           if (response.success && response.collection.getCount() > 0) {
                var classRoomValue = response.collection.getByIndex(0).get("Classroom").value;
                var classRoomDisplayValue = response.collection.getByIndex(0).get("Classroom").displayValue;
                 this.set("Classroom", {value: classRoomValue, displayValue: classRoomDisplayValue});
            }
          }, this);
     }                         

Так вот сортировка игнорируется(что ASC, что DESC - один фиг). Вот это место:

        freePlacesColumn.orderDirection = Terrasoft.OrderDirection.ASC;
        freePlacesColumn.orderPosition = 0;

А ну да, самое прикольное, что на сервак-то это передается. В консоли:

orderDirection: 1 (ну или 2 для DESC)
orderPosition: 0

Вообще смахивает на системную ошибку это все. Или нет? Код - точная копия того, как делают ОНИ. В чем проблема? Это 7.9, если что.

Нравится

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

Добрый день, Дмитрий!

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

Илья, спасибо за ответ. Ну да, вьюха показала небольшой недочет. Спс.

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

Подскажите, возможно ли вытягивать поле "Примечания" (на вкладках "Файлы и примечания") автоматически по высоте текста?

Нравится

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

Добрый день!

Конечно можно. Для решения Вашего кейса нужно применить собственные css-стили. Как это можно сделать в приложении:
http://www.community.terrasoft.ru/forum/topic/16386

Подробное руководство по css:
https://developer.mozilla.org/en-US/docs/Web/CSS

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

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

Нравится

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

Здравствуйте, Олег!

В версии 7.10 в системе будет возможность настраивать DCM для всех разделов в системе.

Это, конечно, здорово. Но ответ на вопрос хотелось бы получить. С переходом между стадиями разобрался (создал объект и наполнил его доступными переходами, по примеру раздела "Продажи"). Как сделать две финальных стадии на выбор? (Как в тех же продажах)

UPD: Разобрался. выгружаем md файл. Меняем в нем UId схемы, UId колонки стадии, имя самой схемы, загружаем обратно, открываем через мастер, делаем что душе угодно.

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

Версия приложения: 7.9.2
После настройки интеграции с LDAP - получаем информационное сообщение, что синхронизация выполняется в "фоновом режиме", по факту завершения вы получите уведомление.

1) Можно ли запустить процесс синхронизации принудительно - прямо сейчас.
2) Как отслеживать, в журнале БП - пусто, оповещений длительное время нет (интервал был поставлен - 1 час в течении которого уведомлений не поступило), как отлаживать ? если произошли ошибки - то какие, где это можно увидеть ?

Нравится

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

Добрый день.

Илья, запустить процесс синхронизации вы можете либо сохранив изменения в окне настроек синхронизации с LDAP, либо в разделе Организационная структура выполнив действие Синхронизировать с LDAP.

В случае если в Журнале процессов нет записей о запуске синхронизации, это может означать, что настройки синхронизации были выполнены не корректно. Рекомендуем проверить настройки синхронизации согласно инструкции (прилагаю).
При возникновении ошибок синхронизации вы сможете увидеть их описание в процессе синхронизации в Журнале процессов (если процесс будет в состоянии Ошибка, вы сможете скачать описание ошибки). В логах вы увидете более подробную информацию об ошибке. Прилагаю инструкцию по включению логирования LDAP.

Спасибо за предоставленные инструкции, подскажите пожалуйста существует ли способ кастомизации списка атрибутов импортируемых для контакта из LDAP
LDAP Integration Settings (по какой-то причине никак не удается вставить изображения в комментарий)
Список выглядит "конечным", очевидного способа как либо его расширить в интерфейсе не видно.
Хотя среди атрибутов AD есть еще множество данных, те же дополнительные контактные данные
AD Contact Info
(по какой-то причине никак не удается вставить изображения в комментарий)
Существует ли способ расширить набор полей интегрируемых с LDAP ?

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

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

Хотелось бы произвести каким либо способом - пакетный или массовый импорт схем выгруженных в формате MD-файлов. (т.к. их достаточно много)

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

Нравится

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

Здравствуйте, Илья.

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

Подробное описание работы с утилитой и примеры вы можете найти по данной ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-9/rabota-s-utilito….

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

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

От владельца ящика установили все права доступа, а также признак “Использовать как общий ящик”, также дали доступ всем сотрудникам к операции “Настройка синхронизации с общими почтовыми ящиками”.

У новых пользователях этот ящик отобразился в списке почтовых ящиков, однако синхронизация не происходит, появляется ошибка: ”Для принятия почты необходимо настроить синхронизацию с почтовым ящиком”,если просто отправить письмо -то оно отправляется, и в исходящих появляется, настройки для синхронизации выставлены:
!
,подскажите, пожалуйста в чем может быть проблема? :sad:

Нравится

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

Здравствйуте, Мария!

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

Вы можете установить период автоматической синхроназции данного ящика в системной настройке "Период синхроназции почтового ящика".

Спасибо за ответ :smile:
автоматический "Период синхронизации" выставили у всех пользователей равный 1 дню, но письма новым пользователям все равно не загрузились, в чем может быть причина?

Здравствуйте, Мария!

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

Эту проблему можно решить с помощью бизнес процесса.

Пример реализации:

1) Стартовый сигнал – создание активности с типом «Email» и поле «Кому» содержит общий адрес службы поддержки;
2) Добавление Пользователя на деталь «Участник активности», заполнить поля:
- «Активность» = Id созданной активности;
- «Участник» = контакт необходимого пользователя;
- «Роль» = получатель;
3) В средствах связи Контакта пользователя должен быть добавлен ящик тех. поддержки.

Здравствуйте! Ранее пример бизнес процесса выше корректно работал, но недавно перестали добавляться активности на панель остальных пользователям, подскажите, пожалуйста, было ли какие-то изменения в плане логики e-mail активностей в 7.10, или в чем может быть причина, что перестали добавляться активности?

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

Начиная с версии 7.10.0 отображение писем в коммуникационной панели происходит не на основании записи в "Участники активности", а но основании записи в "Email message".

Для исправления ситуации необходимо изменить пункт 2 ранее предоставленной инструкции и добавлять того же контакта в объект "Email message" с ролью «Получатель».

Спасибо, получилось отображать в панели у других пользователей :smile:, но все письма из основного контакта (и входящие и исходящие) попадают к остальным контактам во входящие, можно ли их как-то сортировать?

Добрый день, Мария!

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

Рекомендую проверить фильтр в стартовом сигнале, обязательно должно присутствовать условие "Кому" содержит "email@yourdomain.com".

Если Вам нужно чтобы другие пользователи видели и исходящие письма, то необходимо реализовать еще один такой же процесс, но с 2-мя отличиями:

1. В стартовом сигнале вместо фильтра по "Кому" необходимо указать фильтр "От кого" содержит "email@yourdomain.com".
2. Добавление пользователя в объект "Email message" с ролью «Отправитель».

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

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

Начиная с версии 7.11.2 необходимо внести изменения в данный процесс: при добавлении записи в "Email message" необходимо также заполнять поле "MailboxSyncSettings" = почтовому ящику, который синхронизируется.

Пример реализации:

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

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

Здравствуйте.
Необходимо скрывать индикатор стадий в карточке обращения (CaseSectionActionsDashboardHeaderContainerContainer) в зависимости от значения поля в карточке.
Подскажите, как реализовать.

Нравится

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

"Коновалов Игорь" написал:ContainerContainer

Ну если это контейнер, то наверняка он описан в diff-е. К нему можно приписать св-во visible, забиндить на атрибут, атрибут задавать в onEntityInitialized через функцию. Дефолт, как бы)

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

У ActionsDashboardModule есть свойство headerVisible (отвечает за отображение панели стадий), которое по умолчанию true. Можно это свойство забиндить на метод, в котором возвращать true/false в зависимости от необходимого условия.

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

Кто сталкивался с тем, что необходимо настроить , допустим, обязательность заполнения поля А по одному из нескольких значений поля В?
Т.е. поле А становится обязательным для заполнения если в поле В выбирается либо В1, В2 или В3 значения.
Каким образом реализовать такую логику? Как создать массив для данных значений?

"RequiredА": {
        "ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
        "property": BusinessRuleModule.enums.Property.REQUIRED,
        "conditions": [
                {
                        "leftExpression": {
                                "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                                "attribute": "В"
                        },
                        "comparisonType": Terrasoft.ComparisonType.EQUAL,
                        "rightExpression": {
                                "type": BusinessRuleModule.enums.ValueType.CONSTANT,
                                "value": "В1"
                        }
                }
        ]
}

Нравится

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

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

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

В системе есть справочник, например, "Состояние активности". В нем есть поле "Конечное". На странице редактирования активности, которая создана по процессу, при выборе в поле "Состояние" значения, у которого указан признак "Конечное", система делает поле "Результат" обязательным для заполнения.

Пример можно найти в схеме ActivityPageV2 в правиле BindParameterRequiredResultToStatus.

Алексей, благодарю:wink:

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