Вопрос

Добрый день. Подскажите как можно отфильтровать справочник контактов по группе? Смысл в том что при выборе из справочника в списке должны быть сотрудники только определенной группы (у нас тебе группа "телефермеры")

У меня такой же вопрос

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

Доброе утро.

Ваша группа 'Телефермеры' - это группа администрирования или какая-то другая?

Телефермеры — это как телепузики?smiley

Если это группа администрировования, см. тут. Если группа контактов, то условие фильтра будет даже проще, только по полю FolderId в таблице ContactInFolder. 

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

"Организационные роли"

Александр Тыра,

Посмотрите решение по ссылке выше, которое привел Александр Зверев.

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

"Организационные роли" работают, а вот "Функциональные роли" нет

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

Спасибо, решение отличное, но только работают так только 

"Организационные роли", а вот "Функциональные роли" нет

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

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

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

Если есть доступ к базе, напишите SQL-запрос, обращающийся к Contact, SysAdminUnit, SysUserInRole и SysAdminUnitInRole и получающий нужную Вам выборку контактов, а затем адаптируйте его под синтаксис с квадратными скобками.

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

спасибо за совет, попробую

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

Select * from "Contact" INNER JOIN "SysAdminUnit" ON "Contact"."Id" = "SysAdminUnit"."ContactId"
where "SysAdminUnit"."Id" IN (Select "SysAdminUnitId" from "SysAdminUnitInRole" where "SysAdminUnitRoleId" = '{C7C2A8E0-C54A-485B-A7A7-6FE3590E769B}')

так работает, только теперь не могу перевести в код, не срабатывает у меня

 

filterGroup.add("IsGroupAccess",
    Terrasoft.createColumnFilterWithParameter(
    Terrasoft.ComparisonType.EQUAL,
    "[SysAdminUnit:Contact].[SysAdminUnitInRole:SysAdminUnit].SysAdminUnitRole.Id",
    "{C7C2A8E0-C54A-485B-A7A7-6FE3590E769B}"));

так пробую - не работает

Александр Тыра,

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

2. Также посмотрите статьи по принципам построения путей к колонкам вот эту и эту.

 

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

тут как раз пишут что к таблице этой не добраться такими запросами

https://community.terrasoft.ua/questions/esq-sintaksis-zaprosa-pri-cepo…

Александр Тыра,

1. Можно сделать эту группу не функциональной, а организационной ролью.

2. Можно попробовать написать свое представление и для фильтрации нужных контактов завязаться на это представление.

Войдите или зарегистрируйтесь, чтобы комментировать
Идея

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

Реализована
4 комментария

Добрый день, Владимир!

Добавлять дополнительные поля в мобильное приложение возможно с версии 7.5, посредством мастера мобильного приложения.
Расширенный поиск по всем полям уже запланирован, в версию 7.7 он еще не войдет, но в последующие планируем включить.
Что касается добавления работы со статическими группами\тегами – планируем в 7.7.

Добрый день!

В релизе 7.11 реализована функциональность быстрой фильтрации в разделах и деталях мобильного приложения. Для поиска нужных записей в разделе (или на детали) можно настроить "быстрый" фильтр по колонкам объекта. 

Наталия Крылова,

Добрый день! А как можно искать в мобильном приложении не по самим колонкам объекта, а по связанным колонкам. Например, находясь в активностях, отфильтровать активности по контрагенту определенного типа, и т.п.

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

Войдите или зарегистрируйтесь, чтобы комментировать
Идея
Здравствуйте!Есть идея позволить пользователю(разработчику) при использовании мастера разделов давать название и заголовок для групп, аналогично полям. В текущей реализации группы именуются по шаблону "group(№группы)". Хотелось бы добавить возможность называть группы собственным именем, например "StartAddressGroup"
Ревью
1 комментарий

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

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

Добрый день!

TS 3.3.2.211, Оракл

Никак не могу понять в чём проблема. Создал раздел по аналогии с другими. При добавлении группы в раздел возникает ошибка: "null" - есть null или не является объектом в функции ds_ItemGroupOnDatasetAfterPost скрипта ds_ItemGroupScript на строке

Filters.ItemsByCode('RecordID').TestExpression.Field =
                RightsTable.Fields('RecordID');

Если место получения переменной RightsTable

var RightsTable = Select.FromTable.RightsTable;

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

У меня такой же вопрос

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

Ozzy, очистите Cache и профиль. Затем проверьте, появится ли ошибка.

Наталия, все почистил. Проблема осталась.

Значит нужно анализировать реализацию раздела. Вложите, пожалуйста, сервисы раздела.

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

Загрузила сервисы, ошибка воспроизвелась.
Следующие действия привели к ее устранению:
1. Открыла таблицу tbl_PromPurchGroup.
2. Заполнила значение свойства Primary Display Field равным Name:
/system/files/_1_.png
3. Пересохранила таблицу. В результате группы добавляются корректно и без ошибок.

Наталия, мне, к сожалению, Ваш совет не помог. Сделал поле для отображения в таблице, даже в датасете сделал. Почистил кеш и профиль. Удалил полностью все сервисы и создал их заново. Получаю ту же ошибку. Кстати, при попытке посмотреть права данной группы, тоже вылетает ошибка, только в скрипте scr_Access в функции OpenAccessWindow на строке wndAccessRights.Attributes('TableUSI') = Table.RightsTable.USI, т.к. переменная Table null. Хотя если это место пройти под отладчиком, то все отрабатывает правильно. При повторной попытке открыть Права доступа группы в той же сессии - все работает нормально. Могу предоставить удаленное подключение.

В ходе удаленного подключения ошибка устранена пересохранением таблицы групп (tbl_PromPurchGroup).

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

Добрый день!

Есть следующая задача:
Распечатать стикеры, на которых будет ФИО, название компании, телефон и адрес контактов, входящих в определенную группу.

По ней у меня есть два вопроса:
1) Как сделать так, чтобы отчет формировался только по данным из определенной группы?
2) Для моего случая неплохо подходит стандартный отчет fastreport "Стикеры для контактов (Украина, СНГ)", однако мне необходимо изменить в нем кое-что. Главное - добавить номер телефона. Также хорошо бы убрать часть адреса (страну, город, индекс), т.к. в данном случае она не нужна. Я попытался сделать это в дизайнере отчетов, однако не понял, как это делается. Не могли бы вы подскзаать?

Буду очень благодарен за быстрый ответ, особенно на первый вопрос!

У меня такой же вопрос

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

Для формирования отчёта есть два режима: отчёт формируется либо для всех записей, либо для выбранных. Если Вам необходимо, чтобы отчёт формировался только для определённой группы, установите ему тип фильтрации "Для выбранных записей". Затем в нужном разделе выберите группу, выделите в ней все записи и сформируйте по ним отчёт. Если записей в группе больше 40, необходимо перейти на следующую страницу и повторить процедуру повторно. Либо изменить настройки системы таким образом, чтобы на странице отображалось не 40 записей, а сколько необходимо.

Для того, чтобы добавить в отчёт номер телефона, нужно сначала вынести соответствующую колонку в запрос и датасет отчёта (в Вашем случае - sq_ContactSticker и ds_ContactSticker). Только после этого её можно будет использовать в компонентах отчёта. Для удаления ненужных полей из отчёта откройте его в дизайнере, выберите поле, в котором отображаются данные, откройте его двойным кликом мыши, и в появившемся окне текстового редактора удалите ненужные строки. После этого сохраните изменения. Чтобы в запросах по прежнему не выбирались удалённые из отчёта поля, можно их удалить из датасета и запроса. Но перед этим необходимо проверить, не используются ли эти поля в других отчётах.

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

Версия: 3.3.1.67 / MSSQL

Помогите пожалуйста разобраться:
Есть реестр раздела(ну любой в принципе). В нем выделены некоторые элементы (CTRL+Click) :

Var ParentItemIDs = GetAttribute(Self, 'ParentItemIDs');
var IDs = ParentItemIDs.CommaText.split(',');

Вот они у нас в массиве IDs.

ВОПРОС!
Как находясь в скрипте scr_AccessGridArea интерпретировать следующую задачу:

ЕСЛИ пользователь имеет права назначать или удалять или менять права доступа
ТО {
Назначить права доступа к элементам массива IDs значение, противоположное значению DataField.Name; Если было true -> false и наоборот.

Только для пользователя или группы, на чьем имени был кликнут тот или инной DataField (галочка) Изменить. Читать, Удалять
}

У меня такой же вопрос

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

Игорь, реализовать данный функционал Вы можете доработав функцию dlDataOnDatasetDataChange скрипта scr_AccessGridArea.

function dlDataOnDatasetDataChange(DataField) {
          if ((DataField.Name == 'CanRead') || (DataField.Name == 'CanWrite') ||
                    (DataField.Name == 'CanDelete') ||
                    (DataField.Name == 'CanChangeAccess')) {
                    var Dataset = DataField.ParentDataFields.ParentDataset;
                    Dataset.Post();                 
     // begin               
var AdminUnitID = Dataset('AdminUnitID');
                    var ParentItemIDs = GetAttribute(Self, 'ParentItemIDs');
                    if (ParentItemIDs.Count > 1) {
                              var RightsDataset = GetItemRightDataset(AccessGridArea.TableUSI);
                              RightsDataset.FetchRecordsCount = -1;
                              RightsDataset.AutoRefresh = false;
                              RightsDataset.DisableEvents();                        
                              try {
                                       var ParentItemID;
                                       for (var i = 0; i <= ParentItemIDs.Count - 1 ; i++) {
                                                 ParentItemID = ParentItemIDs.Items(i);
                                                 if (AccessGridArea.RecordID == ParentItemID) {
                                                           continue;
                                                 }
                                                 ApplyDatasetFilter(RightsDataset, 'RecordID', ParentItemID, true);
                                                 ApplyDatasetFilter(RightsDataset, 'AdminUnitID', AdminUnitID, true);
                                                 RightsDataset.Open();
                                                 RightsDataset.GotoFirst();
                                                 while (!RightsDataset.IsEOF) {
                                                           RightsDataset.Edit();                                                          
                                                           RightsDataset(DataField.Name) = DataField.Value;
                                                           RightsDataset.Post();
                                                           RightsDataset.GotoNext();
                                                 } 
                                                 RightsDataset.Close();
                                       }
                              } finally {
                                       RightsDataset.EnableEvents();
                              }
                    }
// end
                    Dataset.Edit();
          }
}
Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

У версії 3.2.0.х в деталі "Файли" відсутній механізм  видалення файлу з групи. Для вирішення цієї проблеми потрібно додати відповідні пункти в меню видалення та в контексне меню в сервісі wnd_FilesDetailGridArea. А в сервіс scr_FilesDetailGridArea додати обробники подій на ці кнопки та функцію:

function CurrentGroupClear(){
        var Dataset = dlData.Dataset;
        var FileID = Dataset('ID');
        var FileGroupID = Self.Attributes('FileGroupID');
        var FilesDataset = GetSingleItemByCode('ds_FileInItem', 'CurrentGroupClear');
        FilesDataset.FetchRecordsCount = 1;
        ApplyDatasetFilter(FilesDataset, 'ID', FileID, true);
        FilesDataset.Open();
        if (!FilesDataset.IsEmptyPage) {
                FilesDataset.Edit();
                FilesDataset('FileGroupID') = null;
                FilesDataset.Post();
        }
        FilesDataset.Close();
       
        var UpdateQuery =
                GetSingleItemByCode('uq_UpdateFileGroup', 'CurrentGroupClear');
        UpdateQuery.ColumnsValues.ItemsByName('FileGroupID').Value = null;
        UpdateQuery.Parameters('OldFileGroupID').Value = FileGroupID;
        UpdateQuery.Parameters('NewFileGroupID').Value = null;
        try {
         UpdateQuery.Execute();
        }catch(e){
        }
        Dataset.Close();
        Dataset.Open();
}

Можна, звичайно, завантажити виправлені сервіси. Тоді майте на увазі, вони україномовні.

Автор цієї функції Артем Репко:cool::twisted:

Поделиться

7 комментариев
        try {
         UpdateQuery.Execute();
        }catch(e){
        }

Вы "глушите" все исключения. Зачем?

Були не бажані. Інакше не глушив би :wink:. В Террасофт CRM іноді бувають виключення, які простіше заглушити ніж зрозуміти. Подивіться по конфігурації таких заглушок вистачає.

Ну тогда можно обернуть весь код функции, почему только Execute запроса? :smile:

Це вже на ваш смак :smile:

Ну просто интересно :smile:
Ошибки в Execute запроса на Update будут точно такими же как строчках чуть выше:

                FilesDataset.Edit();
                FilesDataset('FileGroupID') = null;
                FilesDataset.Post();

Почему там Вы не обернули в try..catch?

Теоретично, так. Олександр, виникла потреба поставити затичку. SQL-запит виконується успішно, а Execute() викликає помилку.

Те саме виникає при злитті знайдених зв'язків після перевірки на дублі.

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

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

Установили TS X15 3.3.1.31. При запуске не отображаются группы, поэтому нет никаких записей в реестрах. Группы можно увидеть лишь вызовом пункта контекстного меню "Отобразить группы всех пользователей".
Попробовали 38 билд той же версии - ничего не изменилось.
Помогите, пожалуйста.

У меня такой же вопрос

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

Билд Вам не поможет :wink:

Сделайте так: "Отобразить группы всех пользователей", на группе установите права доступа на чтение для "Все пользователи"

--
www.it-sfera.com.ua

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

www.informicus.ru

Главное верхний уровень "Все контрагенты"
Для этой группы проблем с правами доступа нету?

--
www.it-sfera.com.ua

Дело в том, что не отображается группа "Все..." ни в одном разделе. Следовательно, для этой группы с правами доступа проблемы есть:sad:

www.informicus.ru

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

1) Выбираю "Отобразить группы всех пользователей"
2) Правой кнопкой по группе "Все контрагенты" щелкаю и выбипаю "Права доступа", где отмечены все пункты для группы "Все пользователи".

Добавила Supervisor все права на группу и так заработало. Не пойму только, почему Supervisor находясь в групее "Все пользователи" не "видит" эти группы.

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

www.informicus.ru

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

Впервые столкнулись с такой проблемой именно в версии 3.3.
С супервизором разобрались. Надеюсь, с дургими пользователми проблем не будет (последуем примеру Сергея с группой "Все сотрудники").

Спасибо!!!

www.informicus.ru

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

Для решения такой проблемы нужно удалить-добавить этого пользователя из группы "Все пользователи": для этого используйте деталь "Группы" в под реестром "Пользователи".

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

Спасибо. значит я лишний раз перестраховывался :)

Добрый день, Kat.
Вы имеете ввиду продукт CRM? Начиная с версии 3.3.1 продукт X15 переименован в CRM.
Дело в том, что указанной Вами ошибки в сборке 3.3.1.31 не существует, поэтому необходимо понять какая точно версия у Вас установлена.

Устанавливали Terrasoft CRM (X15) 3.3.1.31 и 38

www.informicus.ru

Добрый день, Kat.
С Вами свяжутся сотрудники тех.поддержки для уточнения более детальной информации.

Добрый день, Kat.
Насколько мне известно Ваша проблема решена. Не удаляйте больше пользователя Supervisor после восстановления базы :smile:

Да, причина несиправности обнаружена.
Спасибо!

www.informicus.ru

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

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

Предлагаю Вашему вниманию некоторую реализацаю возможности выгрузки фильтров динамической группы в файл (*.xml) и загрузки для другой динамической группы.

Подробная инструкция прикреплена.

Приятной работы!

Поделиться

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

Добрый день!

В Terrasoft X15 3.2.1.4 был создан раздел.
Не понятно, почему у меня есть в нем группа "Все..." и я могу добавить другие группы, а у другого пользователся, который подключился к той же базе и заходит под тем же логином не отображается эта группа и при открытии раздела вылетает ошибка открытия источника данных.
Что может помочь???

Заранее спасибо.

У меня такой же вопрос

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

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

Но мы заходим под одним и тем же пользователем.

Точно к той же базе подключается?
Какая ошибка?

да, база на одном компе и все подключены к ней.
При открытии раздела ошибка: Ошибка открытия источника данных "ds_ItemsInGroup".
Попробовали добавить права пользователю Supevisor на таблица раздела, в результате чего перестала появляться ошибка при попытке добавить группу. Группа добавилась, но ее у того пользователя не видно не видно, зато я могу ее видеть на своем компьютере.

Подытожу:
1. На двух компьютерах установлена одна и та же версия
2. С обоих компьютеров идет подключение к одной и той же конфигурации
3. Логин производится под одним и тем же пользователем
И при этом на одном компьютере видны все группы, на другом нет. Так?

Пожалуйста, проверьте все три пункта. Еще, для надежности, можно попробовать очистить кеш на обоих машинах, обычно он где-то здесь: C:\Documents and Settings\a.popov\Application Data\Terrasoft CRM

По все трем пунктам - да.
После удаления Cashe и Profile ошибка при открытии раздела появляется на всех компах и группы не видны.

Ошибка возникает при попытке открыть ds_ItemGroup

function OpenDatasetWithDisabledEvents (Dataset) {
Dataset.DisableEvents();
try {
Dataset.Open();
}
finally { // тут ошибка
Dataset.EnableEvents();
}
}

А можно полный текст сообщения, которое вы получаете - скопируйте из лога

"Kat" написал:finally { // тут ошибка

Так ошибка на Dataset.Open() или на Dataset.EnableEvents()? Если на Dataset.Open(), то можно было бы запрос посмотреть, который в базу идет (если конечно до запроса дело доходит).

как правило, запрос идет после Dataset.Open(), а на нем и вылетает ошибка о том, что не получается открыть набор данных. Решили проблему так:

// скрипт раздела
function Initialize() { 
InitializeGroups(...);
dlGroups.Dataset.Open(); // добавили эту строчку
...

теперь все работает, но почему не открывался датасет в нужном месте, так и не выяснили :(

Физически запрос базу идет где-то в середине Dataset.Open(). Что там еще делается внутри извесно лишь разработчикам. Так что запрос может и выполнился. Посмотрите профайлером что идет в базу. Вполне возможно вы куда-то не передаете какие-то параметры и из-за этого идет кривой запрос, который и вызывает свал. После анализа запроса все может быстро прояснится.
Кстати, посмотрите у вас датасет групп открывается на OnShow или на OnPrepare окна раздела.

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