Добрый день!

Периодически возникают задачи для реализации их в системе.

Ищу людей, заинтересованных в сдельной работе.

Важен опыт внедрения и разработки. Объем программирования небольшой. Основной объем задач - разработка / доработка форм, кейсов, процессов.

Нравится

0 комментариев
Показать все комментарии
Полномочия
лиды
права доступа
Sales_Creatio
7.17

Добрый день!

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

Нравится

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

Добрый день!

У нас это реализовано следующим образом:

Забираем у всех права на просмотр лидов. Если необходимо чтобы какая то роль или оргединица имела права на просмотр/редактирование/удаление лидов настраиваем штатно. Создали 2 бизнес-процесса, первый срабатывает при создании лида, второй при смене ответственного в лиде. В этих БП регулируются права на лид.

Добрый день!

У нас это реализовано следующим образом:

Забираем у всех права на просмотр лидов. Если необходимо чтобы какая то роль или оргединица имела права на просмотр/редактирование/удаление лидов настраиваем штатно. Создали 2 бизнес-процесса, первый срабатывает при создании лида, второй при смене ответственного в лиде. В этих БП регулируются права на лид.

К тому же, надо помнить, что не только ответственные должны видеть все лиды, но и, например, ещё отдел маркетинга.



В Operation permissions создаём операцию CanReadLead и добавляем в неё роли. Затем в том же БП выдаём этим ролям права на чтение лидов.



И не забываем про права на редактирование.

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

gif_section_object_permissions_select_groups.gif

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

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

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

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

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

Добрый день.

У нас в системе создана печатные формы,  а так же добавлена надстройка которая  которая конвертирует печатные формы  в PDF. Изначально все работало.

Но сейчас перестало работать.

Вот пример печатной формы.

Изображение удалено.

Если стоит галочка конвертировать в ПДФ то при формировании выбивает ошибку.Изображение удалено.

 

А если убрать галочку в печатной форме «Конвертировать в ПДФ», то ошибку не выбивает, но вообще ничего не происходит вот так:

Изображение удалено.

 

 

Прошу решить проблему!

Нравится

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

Добрый вечер.

Конечно, не видя систему вживую и не проведя анализ, что-то конкретное сказать довольно сложно.

Похоже, что проблема не в конвертации в PDF, а в самом отчете Word, например, убрали какое-то поле из списка полей, а в отчете макрос не обновили и т.д.

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

Если проблема глобальная, тогда обращайтесь в поддержку.

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

Добрый вечер.

Конечно, не видя систему вживую и не проведя анализ, что-то конкретное сказать довольно сложно.

Похоже, что проблема не в конвертации в PDF, а в самом отчете Word, например, убрали какое-то поле из списка полей, а в отчете макрос не обновили и т.д.

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

Если проблема глобальная, тогда обращайтесь в поддержку.

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

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

Добрый день!

 

Я удаляю письмо (Активность типа Email) из стандартного БП, созданного в дизайнере бизнес процессов. 

 

Есть ли возможность из БП обновить коммуникационную панель? Сейчас письмо из неё пропадает только после обновления страницы. 

Нравится

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

Да. Сам так делаю примерно таким методом в схеме CommunicationPanelEmailSchema, а из БП шлю сообщение соответствующее:

onMyBpFinish: function(scope, message) {
    if (!message || message.Header.Sender !== "UpdateEmailHistory") {
        return;
    }
    var ID = message.Body;
    var collection = this.get("EmailCollection");
    var foundItem = collection.collection.items.find(item => item.id === ID);
    foundItem.set("IsNeedReload", false);
    this.reloadEmailsData([ID]);
    collection.remove(foundItem);
}

Скрипт в конце БП: 

var userConnection = Get<UserConnection>("UserConnection");
var EmailID = Get<string>("EmID");
EmailID.ToString();
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(UserConnection,"UpdateEmailHistory", EmailID);
return true;

Возможно, можно как-то красивее и изящней, но вроде этот метод работает и наша ТП довольна результатом

Да. Сам так делаю примерно таким методом в схеме CommunicationPanelEmailSchema, а из БП шлю сообщение соответствующее:

onMyBpFinish: function(scope, message) {
    if (!message || message.Header.Sender !== "UpdateEmailHistory") {
        return;
    }
    var ID = message.Body;
    var collection = this.get("EmailCollection");
    var foundItem = collection.collection.items.find(item => item.id === ID);
    foundItem.set("IsNeedReload", false);
    this.reloadEmailsData([ID]);
    collection.remove(foundItem);
}

Скрипт в конце БП: 

var userConnection = Get<UserConnection>("UserConnection");
var EmailID = Get<string>("EmID");
EmailID.ToString();
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(UserConnection,"UpdateEmailHistory", EmailID);
return true;

Возможно, можно как-то красивее и изящней, но вроде этот метод работает и наша ТП довольна результатом

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

Добрый день!



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

Слева расположить главную деталь (например, со списком контактов), а справа от неё деталь с документами выделенного контакта.

И переходя по записям левой детали (контактов) оперативно отображать содержание правой детали (документов) с возможностью присоединить новый документ.



Кто-то реализовывал что-то подобное? Есть примеры или идеи, куда копать?



Спасибо

Нравится

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

Доброе утро.

Делала подобное, только детали располагала одна под другой.

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

Доброе утро.

Делала подобное, только детали располагала одна под другой.

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

Владимир, ещё тему двух деталей и нужных связей обсуждали тут.

Идея возможности создавать базовыми средствами мастер-деталь уже зафиксирована.

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

Настроено бизнес-правило, которое включает в себя фильтрацию и заполнение связанного поля Изображение удалено.

При этом для фильтруемого поля установлено значение по умолчанию.



В итоге, если выбирать в поле Owner значение вручную, то связанное поле заполняется.

Однако, при создании записи связанное поле остаётся незаполненным.

Изображение удалено.

Изображение удалено.

Каким образом можно "спровоцировать" бизнес-правило выполниться (речь идёт не о Current user account, а про общий случай)?

 

Нравится

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

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

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

Был бы мне нужен контрагент текущего пользователя, я бы им и воспользовался.



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

В 7.17.1 должны такое добавить.

Показать все комментарии
ЗАПУСТИТЬ_ПРОЦЕСС
7.15
Sales_Creatio

Добрый день!

Пытаюсь сделать по инструкции https://community.terrasoft.ua/articles/kak-skryt-knopku-zapustit-process. но кнопка остается.

Что забыл сделать, подскажите, пожалуйста?

 

define("BootstrapModulesV2", ["LeftPanelTopMenuModuleV2"], function() {

    return {

        methods: {},

        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,

        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/

    };

});

 

 

 

Прикрепленные файлы

Нравится

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

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

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

Учтите один нюанс, начиная с версии 7.17.0 если ТЭГ будет не заполнен то процесс в "Библиотеке процессов" виден не будет, и Вы не сможете им управлять - сменить версию можно будет только перейдя в процесс из цепочки и проставить "Сделать актуальной версией", а вот выключить уже не как не выйдет. Потому ТЭГ убирайте только у тех процессов что используете как подпроцессы (так как при его вызове, даже если он отключен он все равно включится), в других случаях можно к примеру в ТЭГ писать имя процесса.

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

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

 

 

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

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

Учтите один нюанс, начиная с версии 7.17.0 если ТЭГ будет не заполнен то процесс в "Библиотеке процессов" виден не будет, и Вы не сможете им управлять - сменить версию можно будет только перейдя в процесс из цепочки и проставить "Сделать актуальной версией", а вот выключить уже не как не выйдет. Потому ТЭГ убирайте только у тех процессов что используете как подпроцессы (так как при его вызове, даже если он отключен он все равно включится), в других случаях можно к примеру в ТЭГ писать имя процесса.

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

Александр Тыра пишет:

Учтите один нюанс, начиная с версии 7.17.0 если ТЭГ будет не заполнен то процесс в "Библиотеке процессов" виден не будет

А почему бы разработчикам не придумать второй тэг "Hidden Business Process"?

Александр Тыра пишет:

Убрать кнопки можно, я уже делал это

 Александр, можете свой вариант скинуть убирания кнопки? Вариант с неотображением процессов не очень нравится заказчику. Кроме того, манипуляции с изменением/удалением тега не убирают из списка процесс, к сожалению.

Создайте модуль без наследников, в нем:

 

define("KtLeftPanelTopMenuModule", ["LeftPanelTopMenuModule"],

    function() {

        Ext.define("Terrasoft.configuration.KtLeftPanelTopMenuModuleViewModel", {

            alternateClassName: "Terrasoft.KtLeftPanelTopMenuModuleViewModel",

            override: "Terrasoft.LeftPanelTopMenuModuleViewModel",

            getTopMenuConfig: function() {

                var esq = this.callParent(arguments);

                var index = esq.map(function(e) { return e.id; }).indexOf("menu-startprocess-button");

                if (index > -1) {

                    esq.splice(index, 1);

                }

                return esq;

            }

        });

    }

);

 

Это уберет кнопку круглую. Думаю по аналогии можно убрать и кнопку с надписью "Запустить процесс", а вот как команду выпилить не подскажу, даже не смотрел

При этом необходимо замещать BootstrapModulesV2?

 

define("BootstrapModulesV2", ["KtLeftPanelTopMenuModule"], function() {

    return {

        methods: {},

        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,

        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/

    };

});

Павлов Антон,

 Нет, не надо

Спасибо за ваши ответы

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

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

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

Какие формулы скрыты за "Не заполнено"

Изображение удалено.

Нравится

1 комментарий
ошибка
ошибки
привязка данных
справочники
справочник
sales
7.16
Sales_Creatio

Есть необходимость перенести данные справочника Tax , включая id,на препрод

Я спросил как это правильно сделать, и мне посоветовали создать замещающий объект, но при попытке публикации пишет , что Элемент с именем "Tax" не найден

Для исправления ошибки, пробовал советы из этой темы  https://community.terrasoft.ru/questions/oshibka-sokhraneniya-element-n…

А именно генерацию исходных кодов, просто вылетает страница с ошибкой

А при компиляции всего, вылетает Элемент с именем "Tax" не найден

Нравится

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

Не совсем понял, что Вы собирались сделать: перенести записи в справочнике или его схему?

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

Если второе, то нужно не создавать объект или замещающий объект вручную, а переносить с сайта-источника готовую схему (или путём выгрузки в md-файл, или через SVN, или пакетами).

Объект Tax — стандартный, у Вас в нём есть какие-то доработки?

Показать все комментарии
таймер
элемент БП
7.16
Sales_Creatio

Всем привет!

 

Есть БП довольно простой. Изображение удалено.

До таймера все работает как положено, а после таймера ничего не происходит.

Без таймера все работает отлично, но он тут очень необходим.

Нравится

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

Михаил, причины могут быть различными.

Например,  если есть большое количество процессов, которые используют таймер (и, следовательно, планировщик), то может быть, сейчас очередь планировщика перегружена, что и могло вызвать проблемы с зависанием процессов. В таком случае нужно увеличить threadCount во внешнем Web.config с 5, например, до 10. Стандартно там:

<add key="quartz.threadPool.threadCount" value="5" />

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

Михаил, подскажите, пожалуйста, удалось ли решить проблему.

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

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