Публикация

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

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

Ссылка на Marketplace  https://marketplace.terrasoft.ru/template/sozdanie-shablonnogo-nabora-z…

Для оперативного реагирования на развитие и изменение процессов компании создан механизм "Создание шаблонного набора задач".

Что нужно уметь Пользователю? Внести новую запись в справочник "Шаблоны задач" и создать несколько задач, прописав ответственного, сроки решения и последовательность исполнения. 

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

 

Рекомендую использовать наше решение для усовершенствования работ по Вашему процессу.

Поделиться

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

Спасибо, отличное решение!

bill gate,

Спасибо, работаем ради интересов Заказчиков. 

Радуем Клиентов качеством услуг и отношением

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

Возможно ли выполнить транспонирование таблицы в отчете / печатной форме? Т.е. поменять местами строки и столбцы, чтобы при создании шаблона детали, записи из этой детали добавлялись не вниз (как строки), а в бок (как столбцы).

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

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

Подскажите как в отчете Word реализовать что бы сумма была прописью

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

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

Реализуйте VIEW, который возвращает сумму и используйте его в отчете

скажите пожалуйста, а как его использовать

1) В базе данных bpm'online есть Scalar-value functions "tsp_nonbox_NumberToCurrency" и "tsp_nonbox_NumberToPhrase" - они конвертируют цифры в слова. Если необходимы другие языки или валюты, можно их модифицировать.
2) Необходимо сделать View с выборкой из таблицы Invoice (или другой, где хранится ваша сумма).

Можно добавить в этот View все данные, которые нужны в отчете

Как пример (в нем используются несколько полей, так как иногда требуется печатать прописью то одну, то другую сумму):

CREATE VIEW [dbo].[UsrVwInvoiceAmount]
AS
SELECT [Invoice].[Id] AS [Id],
        [Invoice].[Id] AS [UsrInvoiceId],
        [Invoice].[Number] As [UsrInvoiceName],
        [Invoice].CreatedOn, 
        [Invoice].CreatedById, 
        [Invoice].ModifiedOn,
        [Invoice].ModifiedById,
       [Invoice].[Amount] AS [UsrAmount],
       [Invoice].[PrimaryAmount] AS [UsrPrimaryAmount]               
       dbo.tsp_nonbox_NumberToCurrency([Amount],'EUR','LV',0) AS [UsrAmountText],
       dbo.tsp_nonbox_NumberToCurrency([Amount],'EUR','EN',0) AS [UsrAmountTextEN],
       dbo.tsp_nonbox_NumberToCurrency([PrimaryAmount],'EUR','LV',0) AS [UsrPrimaryAmountText],
       dbo.tsp_nonbox_NumberToCurrency([PrimaryAmount],'EUR','EN',0) AS [UsrPrimaryAmountTextEN]
     
FROM  [Invoice]
 

2) В bpm'online создаете объект на основе этого VIEW:

3) Создать отчет на основе этого объекта или подключить этот объект к отчету на основе Invoice

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

Добрый день.
Необходимо установить сортировку данных пользовательского раздела по умолчанию по определённому полю объекта.
В BaseSectionV2 используются атрибуты: "sortColumn", "SortColumnIndex", "GridSortDirection".

Так же в свойствах объекта есть свойство "Сортировка в списках".

Но установка значений этих атрибутов и свойства не решила задачу.

Прошу подсказать как решить данный кейс

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

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

Есть обьект "Контакты". По которым приходят уведомления в панель CTI.

Скажем если в обьекте "Контакты" есть поле X в котором можно выбирать значения от 1 - 5.

Вопрос: Можно ли отображать иконку с номером в зависимости от того какое значение выбрано в поле X?

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

 

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

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

Добрый день, 

Да, можно отобразить иконку с номером в зависимости от того, какое значение выбрано в поле Х.

Для начала необходимо создать замещающий объект контакта, в который добавить поле Х.

После создать замещающий клиентский модуль, где в качестве родительского необходимо указать CtiPanelCommunicationHistoryUtilities (Модуль истории звонков CTI панели). И необходимо переопределить следующие методы: 

addCommunicationHistoryQueryColumns - необходимо добавить поле Х контакта, для того чтобы иметь возможность вычитывать значения этого поля.

getHistoryPanelConfig - тут необходимо реализовать собственную логику отображения иконки. В базовой версии: Photo: historySubscriber.get("ContactPhoto").value устанавливается фото контакта. 

 

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

Добрый день Коллеги!

Появилась необходимость реализовать отдельную сортировку по умолчанию в Grid'е детали.

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

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

После этого происходит стандартное добавление выбранных записей в деталь.

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

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

Так же что-то удалось найти в diff на BaseGridDetail который соответствует сортировке, но как-то это тоже ни к чему не привело.

Есть мысль что при загрузке коллекции в методе onGridDataLoaded получать коллекцию и при помощи underscore.js сортировать её как угодно, но вроде как это накладно и производительней было бы получить уже отсортированную коллекцию.

У кого какие предложения/идеи будут по данному посту?

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

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

Добрый день. Не очень понял, а почему "я уперся в GridUtilites и решил дальше не лезть"? Можно же функцию из миксина переопределить в схеме самой детали, сославшись на родительскую, если нужно, через this.mixins.GridUtilitiesV2.... . На вскидку, вроде надо "допилить" initQuerySorting ???

типа такого:

 

initQuerySorting: function(esq) {

    this.mixins.GridUtilitiesV2.initQuerySorting(esq);

    /* далее какие-то ваши действия с esq */

}

 

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

Иванов Александр А.,

Да, спасибо. Мы уже разрешили проблему. Если интересно могу поделиться кодом.

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

Здравствуйте, подскажите как вытянуть данные из модального окна.
Программно вызываю открытие модального окна(Контрагенты).
Задача: по клику на элемент, вернуть данные(Например "название" или "ID") в вызывающий код.
Вот мой код:
 

//Выводим модальное окно
viewModal:function(){
var config = {
                    entitySchemaName: "Account",
                     multiSelect: false,
                     columns: ["Name","UsrINN"],
                     hideActions: false,//Скрываем кнопку "Добавить"
                     filters: contactFiler
                    };
               this.openLookup(config, this.myCallBack, this);
},
 
//Колбэк
 myCallBack:function(args){
 
                 args.???????????????????????????????(Что должно быть здесь?)
                 this.showInformationDialog("Callback");
  }

 

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

2 комментария
myCallBack:function(args){
   debugger;
   //args.???????????????????????????????(Что должно быть здесь?)
   this.showInformationDialog("Callback");
}

Вы пишете дебаггер, открываете консоль(f12), ресстартите с кешем страницу, открываете ваше модальное окно(консоль всё ещё открыта), нажимате кнопку выбрать и тут выполнение кода должно приотстановиться. и уже через консоль смотрите какие переменные, что в них и т.п
По теме: в args вроде как хранится коллекция selectedRows, её уже перебирать через terrasoft.each

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

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

7.11(OnSite)

Задача вывести, значение агригирующей функции COUNT.(Т.е тупо - кол-во записей из таблицы) по правильному

Щас делаю по топорному(count++ при переборе коллекции):

 var esq = this.Ext.create(Terrasoft.EntitySchemaQuery, {rootSchemaName: "Lead" });
 
                  esq.addColumn("Id");
                  esq.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, "ID", Terrasoft.AggregationEvalType.ALL);
                  var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrINN", INN);
                  esq.filters.add("esqFirstFilter", esqFirstFilter);
 
                  // this.showInformationDialog("message");
                     esq.getEntityCollection(function (result) {
                     	     window.console.log("Ответ сервера: "+result);
                     	  	 window.console.log(result);
                            if (!result.success) {
                              // обработка/логирование ошибки, например
                               this.showInformationDialog("Ошибка запроса данных");
 
                               return;
                            }
 
                             var count = 0;
                             result.collection.each(function (item) {
                               count++;
                             });
                               this.showInformationDialog(count);
                     }, this);

 

Также работает вот такой способ:

 this.showInformationDialog(result.collection.collection.length);

 

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

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

либо
esq.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, "CountAll");
и никакие столбцы больше не добавлять.
Вернётся 1 запись, result.collection.collection.items[0].get("CountAll")

либо

result.collection.getCount() в вашем варианте

Спасибо

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

Вызывая из кода модальное окно (скажем раздела Контрагенты), есть ли возможность в вызывающий код вернуть информацию кол-ве отображенных элементов?

И это делается только запросом к БД?

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

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

sandbox-ом можно попробовать

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

7.11(OnSite)

Народ, помогите.

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

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

Пример:

Справочник{значение:Квалификация}

Кейс {значение:Квалификация}

Т.е не важно, где произошел клик, должна выполняться одна и та же функция.

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

Кейс(Клик)-->Справочник-->Атрибут-->Дествие

Справочник(Клик)-->Атрибут-->Действие

Вот мой код:

    methods: {
            onSearchButtonClick :function(){
                this.showInformationDialog("Click");
            },
            setDisqualification:function(){
                view = "UsrStage";//Справочник стадий
                data = this.get(view)
                
                if(data!==undefined){
                 value = data.Name;
                  switch (value) {
                        case 'Квалификация':
                             this.showInformationDialog(value);
                            break;
                        case 'Переговоры':
                             this.showInformationDialog(value);
                            break;
                        case 'Взращивание':
                            this.showInformationDialog(value);
                            break;
                         case 'Продажа':
                            this.showInformationDialog(value);
                           break;
                        case 'Потребность отсутствует':
                            this.showInformationDialog(value);
                           break;
                        case 'Потребность удовлетворена':
                            this.showInformationDialog(value);
                           break;
                        case 'Дисквалифицирован':
                          this.showInformationDialog(value);
                             break;
                    default:
                        // code
                    }
                }
            }
        },
        rules: {},
        businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
        attributes: {
                   "LinkForStage": {
                    // Определение зависимости колонки.
                     "dependencies": [
                                       {
                                         // Зависит от колонки Stage.
                                        "columns": [ "UsrStage" ],
                                         // Имя метода-обработчика изменения колонки Stage.
                                         // Метод setProbabilityByStage() определен в свойстве methods
                                         // объекта схемы.
                                        "methodName": "setDisqualification"
                                       }
                                     ]
                                 }
        }
    };

 

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

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

Роман, добрый день!

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

С уважением,

Дмитрий Тёскин

У меня задача обработать нажатие на элемент кейса через код.

Пользователь должен иметь возможность выбирать стадию, как из справочника так и через элемент кейса

Вот я и пытаюсь узнать есть ли такая возможность? 

SectionActionsDashboard, метод onActiveStageClick

Варфоломеев Данила,

Спасибо идею понял)

Только получается дублирование кода(

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