Здравствуйте.
Скажите пожалуйста, можно ли убрать из воронки продаж определенные стадии?
Стандартный функционал фильтрации не подходит, т.к. стадия в воронке все-равно присутствует, но со значением 0.

Как отфильтровать воронку,чтобы осталось всего 5 нужных стадий?

Нравится

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

Добрый день, Александр!

Если необходимо минимум вмешательства, а стадии используются не совсем как задумано, то можно их отфильтровать следующим образом: в воронке не отображаются конечные не успешные стадии. То есть, можно всем тем, которые не должны отображаться, установить поле End = 1, а поле Successful = 0.

Если же этот функционал используется, то фильтрацию можно добавить только вмешательством в код. Необходимо замещать модуль OpportunityFunnelDrillDownProvider, полностью копировать его код в новый модуль, и вносить необходимые изменения в метод getFunnelAllowedStagesFilters (для версии 7.6) либо в initOpportunityStage (для версии 7.5).

а разве это не решается через Справочники - Стадии продаж?

"Антон Кравченко" написал:а разве это не решается через Справочники - Стадии продаж?

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

"Антон Кравченко" написал:а разве это не решается через Справочники - Стадии продаж?

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

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

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

Лишние стадии мешают не только в воронке продаж, но и в самой карточке продажи

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

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

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

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

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

Связь между КЕ построена на основе детали «Влияет на конфигурации» и поля «Родительская КЕ» с пометками о степени влияния.

Для этого в объект Конфигурационная единица добавлены следующие логические поля:
1. «Полностью выводит из строя КЕ» FullInfluence
2. «Не влияет на КЕ» NotInfluence
3. «Частично выводит из строя КЕ» PartInfluence
И поле InheritStatus – справочник «ConfigItemStatus». В это поле будут записываться состояния, полученные КЕ в результате применения БП автоматизации.
И добавляем новую деталь «Влияет на конфигурации»:

Далее создаем БП, запускающийся при изменении состояния КЕ:

Автоматизация изменения состояний КЕ построена на основе алгоритма рекурсивного обхода дерева:

В скрипте вызываем метод рекурсивного обхода дерева КЕ:

var confItem = new Terrasoft.Configuration.ConfItem(UserConnection);
confItem.FetchFromDB(StartSignal1.RecordId);

ListGuid> confItemIds = new ListGuid>(); // здесь сохраняем Id пройденных узлов
ListGuid> changedIds = new ListGuid>(); // здесь Id КЕ с измененным состоянием

RecursiveUp(confItemIds, confItem, changedIds);

В переменные БП добавляем уникальные идентификаторы, в которые записываем идентификаторы состояний КЕ (эти состояния должны быть добавлены в справочник ConfigItemStatus):
1) PartWorkId
2) NotWorkId
3) WorkId
В бизнес-процесс добавляем метод:

void RecursiveUp(ListGuid> confItemIds, Terrasoft.Configuration.ConfItem confItem, ListGuid> changedIds)
{

        var updateTemplate = "Update ConfItem Set InheritStatusId = '{0}' Where Id = '{1}'"; // шаблон запроса обновления статуса КЕ
//Находим КЕ, указанные на детали «Влияние», на которые влияет КЕ текущего узла дерева:
        var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "ConfItemInfluence");
        esq.AddAllSchemaColumns();
        esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ParentConfItem", confItem.Id));
        esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "NotInfluence", 0));

        var entities = esq.GetEntityCollection(UserConnection);

//Обходим все найденные КЕ:
        foreach (var entity in entities)
        {
                var confItemInfluenceDetail = entity as Terrasoft.Configuration.ConfItemInfluence;

                var confItemInfluence = confItemInfluenceDetail.ConfItem;

//Проверяем обходили ли мы уже полученный узел:

                if (!confItemIds.Contains(confItemInfluenceDetail.ConfItemId) && confItemInfluence != null && confItemInfluence.FetchFromDB(confItemInfluenceDetail.ConfItemId))
                {

//Далее в зависимости от состояния КЕ текущего узла, меняем статус КЕ, указанной на детали:
                        if (confItem.InheritStatusId == NotWorkId)
                        {
                                if (confItemInfluenceDetail.FullInfluence)
                                {
                                        (new CustomQuery(UserConnection, String.Format(updateTemplate, NotWorkId, confItemInfluenceDetail.ConfItemId))).Execute();
                                        confItemInfluence.InheritStatusId = NotWorkId;                         
                                }
                                else if (confItemInfluence.InheritStatusId != NotWorkId)
                                {
                                        (new CustomQuery(UserConnection, String.Format(updateTemplate, PartWorkId, confItemInfluenceDetail.ConfItemId))).Execute();
                                        confItemInfluence.InheritStatusId = PartWorkId;
                                }
                        }
                        else if (confItem.InheritStatusId == PartWorkId)
                        {
                                if (confItemInfluenceDetail.FullInfluence && confItemInfluence.InheritStatusId != NotWorkId)
                                {
                                        (new CustomQuery(UserConnection, String.Format(updateTemplate, PartWorkId, confItemInfluence.Id))).Execute();
                                        confItemInfluence.InheritStatusId = PartWorkId;
                                }
                        }
                        else if (confItem.InheritStatusId == WorkId)
                        {
                                (new CustomQuery(UserConnection, String.Format( updateTemplate, WorkId, confItemInfluenceDetail.ConfItemId))).Execute();
                                        confItemInfluence.InheritStatusId = WorkId;
                        }

//Проверяем наличие КЕ, которые влияют на КЕ текущего узла:

                        var notWorkingCount = (new CustomQuery(UserConnection, String.Format("Select Count(1) from ConfItemInfluence ci join ConfItem c on c.Id = ci.ParentConfItemId Where ConfItemId = '{0}' and ci.NotInfluence = 0 and c.InheritStatusId = '{1}'  and ci.FullInfluence = 1", confItemInfluence.Id, NotWorkId))).ExecuteScalarint>();

//Если такие КЕ найдены, то меняем состояния КЕ текущего узла:
                        if (notWorkingCount > 0)
                        {
                                (new CustomQuery(UserConnection, String.Format(updateTemplate, NotWorkId, confItemInfluence.Id))).Execute();
                                CompareStatus(confItemInfluence, NotWorkId, changedIds);
                                confItemInfluence.StatusId = NotWorkId;
                                confItemIds.Add(confItemInfluence.Id);
                        }
                        else if ((new CustomQuery(UserConnection, String.Format("Select Count(1) from ConfItemInfluence ci join ConfItem c on c.Id = ci.ParentConfItemId Where ConfItemId = '{0}' and ci.NotInfluence = 0 and ( (c.InheritStatusId = '{1}') or (c.InheritStatusId = '{2}'  and ci.FullInfluence = 0) )", confItemInfluence.Id, PartWorkId, NotWorkId))).ExecuteScalarint>() > 0)
                        {
                                (new CustomQuery(UserConnection, String.Format updateTemplate, PartWorkId, confItemInfluence.Id))).Execute();
                                confItemInfluence.StatusId = PartWorkId;
                                confItemIds.Add(confItemInfluence.Id);
                        }

//Переходим к следующему узлу дерева:
                        RecursiveUp(confItemIds, confItemInfluence, changedIds);
                       
                }
        }
}

Алгоритм состоит в следующем: Для имеющейся КЕ находим все те КЕ, на которые она оказывает частичное или полное влияние и изменяем состояние связанной КЕ. Вместе с этим запоминаем идентификаторы КЕ, которые мы прошли или состояние которых изменилось (confItemIds /changedIds). Это помогает решить две задачи: по списку измененных КЕ можно отослать уведомления об их изменении, либо, если мы предполагаем, что в дереве могут быть циклические зависимости, не обходить уже пройденные узлы.
Изменения состояний КЕ производятся через CustomQuery, т.к. процесс автоматизации запускается по сигналу изменения состояния и нельзя чтобы при изменении состояния КЕ при обходе дерева процесс снова запускался.
Автоматизация связей проблем/обращений/КЕ происходит с помощью следующего бизнес-процесса:

В данном случае алгоритм простой:
Читаем данные обращения

caseItem.FetchFromDB(recordId);

var problemId = caseItem.ProblemId;
var statusId = caseItem.StatusId;

var closeCaseStatus = new Guid("3E7F420C-F46B-1410-FC9A-0050BA5D6C38");
var newCaseStatus = new Guid("AE5F2F10-F46B-1410-FD9A-0050BA5D6C38");
var workCaseStatus = new Guid("7E9F1204-F46B-1410-FB9A-0050BA5D6C38");

var closeProblemStatus = new Guid("459361BE-C3B5-4D6B-9DEC-C8DCB49AE5B3");
var newProblemStatus = new Guid("340A7737-3CFF-4BED-A292-B83CD25DA3DA");
var workProblemStatus = new Guid("1B79DF4C-17AB-4A75-95E3-C53E3793F1C6");

var workConfItemStatus = new Guid("742E7BCE-6191-4AA5-9D16-DB26CF87BC98");
var notWorkConfItemStatus = new Guid("5C97181E-090F-4893-9A21-DEF3161F2347");

var newProblemStatusId = Guid.Empty;
var newConfItemStatusId = Guid.Empty;

Устанавливаем новые статусы обращений и проблем

if(statusId == closeCaseStatus)
{
        newProblemStatusId = closeProblemStatus;
        newConfItemStatusId = workConfItemStatus;
}
else if(statusId == newCaseStatus)
{
        newProblemStatusId = newProblemStatus;
        newConfItemStatusId = notWorkConfItemStatus;
}
else if(statusId == workCaseStatus)
{
        newProblemStatusId = workProblemStatus;
        newConfItemStatusId = notWorkConfItemStatus;
}

Находим зависимые КЕ обращения:

var confItemList = new ListGuid>();
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "ConfItemInCase");

...

var entities = esq.GetEntityCollection(UserConnection);
                       
foreach(var entity in entities)
{
        var confItemInCase = entity as Terrasoft.Configuration.ConfItemInCase;
        confItemList.Add(confItemInCase.ConfItemId);
}

и проблемы:
var problem = caseItem.Problem;

if(problem != null && problem.FetchFromDB(problemId))
{

        if(!confItemList.Contains(problem.ConfItemId))
        {
                confItemList.Add(problem.ConfItemId);
        }

        if(newProblemStatusId != Guid.Empty)
        {
               

Обновляем состояние связанных проблем:
new CustomQuery(UserConnection, String.Format("Update Problem Set StatusId = '{0}' Where Id = '{1}'", newProblemStatusId, problemId)).Execute();
                if(statusId == closeCaseStatus)
                {
                        new CustomQuery(UserConnection, String.Format("delete from Reminding Where SubjectId = '{0}'", problemId)).Execute();
                }
        }
}

Проходим все зависимые КЕ и меняем их статус, инициируя процесс автоматизации состояний КЕ:

if(newConfItemStatusId != Guid.Empty)
{
        foreach(var confItemId in confItemList)
        {
                var confItem = new Terrasoft.Configuration.ConfItem(UserConnection);
                if(confItem.FetchFromDB(confItemId))
                {
                        confItem.StatusId = newConfItemStatusId;
                        confItem.Save();
                }
        }
}

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

Нравится

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

Добрый день, подскажите где можно почитать или как алгоритмический вставить в левую панель свои кнопки?
Вроде подобного:
1
Задача стоит следующая - добавить кнопку, привязать к ней метод который будет изменять системную переменную, в зависимости от значения true или false кнопка изменяет внешний вид.
Покопался в файлах нашел CTIBase.CtiLeftPanelUtilities думаю это верное направление, но никак не могу структурировать это все

Нравится

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

У Вас не корректно прикрепился скриншот. Битый файл.

Попробуйте посмотерть релазиацию в схеме "LeftPanelTopMenuModule" (Рис. 1).


Рис. 1

Это не битый файл, это временное хранилище, через сутки ссылка становится битой
Продублирую еще раз
1
В общем да, LeftPanelTopMenuModule это то что надо, но можно пояснений что там происходит?
Попробовал наследоваться от этой схемы чтобы попробовать для начала добавить туда элемент, но пропали иконки, открыл стандартную, чтобы иконки достать, в ней они есть но не отображаются

Олег, Вы же можете прикрепить изображение как вложенный файл. Необязательно же хранить на хостинге.

В модуле описан функционал верхнего меню.
А что консоль говорит? Отладку делали?

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

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

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

В процессе работы с Sales 7.6 возник вопрос, как изменить количество знаков после запятой в курсе валют (по умолчанию 2 знака(хх,хх), нужно сделать 4 знака(хх,хххх)). Как это сделать?

Заранее благодарен за ответы.

Нравится

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

Добрый день, Алексей.

Ответ Вы можете прочитать во вложенном pdf файле.

Здравствуйте, Алексей!

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

Спасибо!

Скажите, какой метод в CurrencyRateEditPage отвечает за количество знаков после запятой?

Нашел метод
private void UpdateRateEdit() {
RateEdit.Image = new ControlImage {};
RateEdit.DecimalPrecision = 4;
RateEdit.ModifiedInSchemaUId = new Guid("dffcf096-6982-4a07-92da-973f4261fd07");
}

изменил RateEdit.DecimalPrecision с 2 на 4, но при этом ничего не поменялось, все еще 2 знака после запятой. Подскажите, может я что-то упустил?

Добрый день!
У Вас есть объект CurrencyRate, который содержит колонку Rate. Эта колонка имеет тип Currency, который имеет Precision = 2. Чтобы вы могли использовать 4 знака после запятой, то у Вас есть 2 варианта:
1. Добавить свой объект CurrencyRateEx (к примеру) и создать в нем поле Rate как decimal (0.0001)
Далее по всей конфигурации заменить имя схемы CurrencyRate на CurrencyRateEx (во всех клиентских модулях)

2. Расширить объект CurrenctRate и добавить свое поле RateEx (к примеру), которое будет decimal (0.0001). Далее заменить по всех конфигурации использование поля Rate на RateEx, а в расширяющем объекте для старого поля Rate установить режим использования "никогда".

Также, не зависимо от этих двух вариантов Вам нужно будет изменять страницу редактирования справочника (CurrencyRateEditPage)

А нельзя просто поменять тип колонки Rate, поставив Precision = 4?

"Владимир Соколов" написал:А нельзя просто поменять тип колонки Rate, поставив Precision = 4?

Владимир, простая замена типа с изменением значения поля на 4 не решит вопрос корректно.

"Артем Гура" написал:(во всех клиентских модулях)

И во всех процессах (например, в InvoiceProduct и других)

Вообщем, надо решать этот вопрос глобально, а не у каждого клиента в каждом проекте, так как все центробанки дают курс валют с точностью 4 знака

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

"Артем Гура" написал:

Добрый день!

У Вас есть объект CurrencyRate, который содержит колонку Rate. Эта колонка имеет тип Currency, который имеет Precision = 2. Чтобы вы могли использовать 4 знака после запятой, то у Вас есть 2 варианта:

1. Добавить свой объект CurrencyRateEx (к примеру) и создать в нем поле Rate как decimal (0.0001)

Далее по всей конфигурации заменить имя схемы CurrencyRate на CurrencyRateEx (во всех клиентских модулях)

2. Расширить объект CurrenctRate и добавить свое поле RateEx (к примеру), которое будет decimal (0.0001). Далее заменить по всех конфигурации использование поля Rate на RateEx, а в расширяющем объекте для старого поля Rate установить режим использования "никогда".

Также, не зависимо от этих двух вариантов Вам нужно будет изменять страницу редактирования справочника (CurrencyRateEditPage)

Спасибо, Артем, буду реализовывать.

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

Как в bpm'online 7.x можно поменять формат даты на dd.MM.yyyy (с точками вместо косой черты)? И поменять разделитель тысяч с запятой на пробел в числах? И десятичную точку на запятую?

Американский формат - это хорошо, но у локальных пользователей вызывает некоторое отторжение.

Нравится

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

Здравствуйте! Форматы вывода прописаны в локализации.

Формат даты, можно изменить если в приложении присутствует английская локализация.
Локализация меняется в профиле пользователя:

Для локализации «en-GB» формат даты выглядит как ДД/ММ/ГГГГ (Рис. 2).

Для локализации «en-US» формат даты выглядит как ММ/ДД/ГГГГ (Рис. 3).

Для локалицазии "ru-RU" используется как раз "." в качестве разделителя для дат (ДД.ММ.ГГГГ), а также " " в качестве разделителя для чисел (пример 1 000 000).

Алексей, вот ни разу не видел продукт линейки bpmonline, где после переключения en-US / ru-RU весь интерфейс отображается с другим языком, все же как правило в поставке язык один :wink:

А никак это по другому не подлечить? Так как "плюсанул" тему не зря - имею от пользователей eng версии такой же вопрос про формат даты, ну не нравится им буржуйский mm/dd/yyyy, хотят dd.mm.yyyy

"Демьяник Алексей Олегович" написал:Для локалицазии "ru-RU" используется как раз "." в качестве разделителя для дат (ДД.ММ.ГГГГ), а также " " в качестве разделителя для чисел (пример 1 000 000).

А как это сделать для английской локализации?

Здравствуйте, коллеги!
Есть следующее решение:
1) Добавьте исходный код (source code) в конфигурации.
2) В созданную схему исходного кода добавьте исходный код:

namespace Terrasoft.Configuration
{
using System;
using System.Text;
using System.Collections.Generic;
using System.Data;
using Terrasoft.Common;
using Terrasoft.Core;
using Terrasoft.Core.Entities;
using Terrasoft.Core.Factories;
using Terrasoft.Nui;
using Terrasoft.UI.WebControls; 
using Terrasoft.Core.DB;
[Terrasoft.Core.Factories.Override]
public class DevConfigurationSectionHelper: ConfigurationSectionHelper {
public DevConfigurationSectionHelper(UserConnection userConnection) : base(userConnection) {
}
public override string GetConfigurationScript(UserConnection userConnection) {
var baseScript = base.GetConfigurationScript(userConnection);
return baseScript + @"Terrasoft.Resources.CultureSettings.dateFormat = 'd.m.y';";
/*
return baseScript + @"Terrasoft.Resources.CultureSettings.dateFormat = 'd/m/y';";
*/
}
}
}

3) Сохраните в метаданных
4) Опубликуйте.

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

Работоспособность протестирована на 760.

Вот это другое дело :)
Спасибо

"Демьяник Алексей Олегович" написал:Работоспособность протестирована на 760.

И на 7.5 работает! Спасибо!

А как поменять формат Decimal? Чтобы пробел как разделитель тысяч и десятичная точка?

Владимир, абсолютно аналогично.

Соответствующие параметры - CultureSettings.decimalSeparator и CultureSettings.thousandSeparator.

Спасибо огромное!

Уже интересно, что еще можно сделать с помощью CultureSettings :)

Больше особо и нечего. Остальное касается дней недели и месяцев. Ещё можно изменить первый день недели и для чисел количество знаков, входящих в группу тысяч (если это вдруг кому-то понадобится):

Terrasoft.Resources.CultureSettings = {
	dateFormat: "d.m.Y",
	timeFormat: "G:i",
	thousandSeparator: " ",
	decimalSeparator: ",",
	todayMessage: "Сегодня",
	shortDayNames: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
	monthNames: ["Январь", "Февраль", "Март", "Апрель", "Май",
		"Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
	startDay: 1,
	numberGroupSizes: 3
};

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

Спасибо

"Артем Гура" написал:Всем добрый день!
Данные "внедрения" приведут к ошибкам обновления.
Мы настоятельно не рекомендуем это делать!
Также, мы не можем оставить данную информацию для "передачи опыта"

Спасибо

Сказали, как нельзя, скажите, как можно

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

Внесение подобных изменений, не влекущих за собой возможных ошибок при обновлении, не предусмотрено в текущих версиях BPM'Online.

"Мартыненко Сергей" написал:

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

Внесение подобных изменений, не влекущих за собой возможных ошибок при обновлении, не предусмотрено в текущих версиях BPM'Online.

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

"Владимир Соколов" написал:

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

Здравствуйте, Владимир!

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

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

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

Начинаю изучать BPM'Online(Версия 7.6.0.1114). Нужно создать действие которое запускает БП в разделе лид(нужно передать параметр), поискав немного я нашел вот что:
http://www.terrasoft.ua/bpmonlinesdk/CreateActionForStandartSection.html
https://community.terrasoft.ua/forum/topic/11626
сделал все как книжка пишет, создал новый Замещающий клиентский модуль, выбрал родительский объект LeadPageV2, вставил код, сохранил.
в клиенте перезалогинился перехожу в раздел Лиды, нажимаю на лид и открыть, вот что вижу:
Думаю мой модуль чет напартачил, удаляю его, ничего не поменялось. Кто сталкивался с подобной проблемой прошу помочь.

Нравится

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

Добрый день!
Можно нажать f12 в браузере и посмотреть, что за ошибка

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

Вы использовали инструкцию по добавлению действия, которая неактуальна для версии 7.6 (она используется для версий bpm'online 7.0 - 7.2).

В более поздних версиях, в том числе и в 7.6, алгоритм создания действий претерпел изменения. Актуальную документацию по разработке в 7.6 вы можете найти на нашем сайте Академии - http://academy.terrasoft.ru/documents/?product=SDK&ver=7.6.0.

В частности, инструкции по добавлению действий в раздел и на страницы редактирования расположены в блоке [SDK bpm'online] >[Примеры решения типовых задач] > [Разработка клиентского интерфейса].

Кстати, рекомендую обратить внимание на статью http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/ExecutePro…, в которой как раз рассматривается Ваш кейс (запуск процесса по действию раздела).

Я воспользуюсь этими статьями. Но сейчас важно вернуть страницу

Удалите схемы, отвечающие за эту страницу из пакета Custom, и произведите компиляцию.

схемы я уже удалил, не помогло

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

Если данное действие не поможет, сообщите, точно ли удалена страница LeadPageV2, выполнено действие "Компилировать все" и очищен кэш страницы по инструкции выше.

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

Пример можно посмотреть в любой схеме из базовых пакетов:

define("LeadPageV2", ["LeadPageV2Resources", "BaseFiltersGenerateModule", "ProcessModuleUtilities",
		"LeadConfigurationConst", "BusinessRuleModule", "ConfigurationEnums",
		"BaseProgressBarModule", "EntityHelper", "css!BaseProgressBarModule"],
	function(resources, BaseFiltersGenerateModule, ProcessModuleUtilities, LeadConfigurationConst, BusinessRuleModule,
			enums) {
		return {
			entitySchemaName: "Lead",
...

фух, решил, перепроверил все еще раз и получилось, ошибка в коде была.
сделал все по этой инструкции: http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/ExecutePro…

Добрый день!
Подскажите мне тоже, плзз!

Также пропала страница (case)... Но даже после удаления всех своих объектов и пакета кастомного, обновления редис, аппаратной очистки кэша, компиляции конфигурации страница не вернулась.

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

подскажите, как поступить.

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

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

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

Скажите, пожалуйста, можно ли в BPMonline 7.6 создавать объекты программным образом, используя MS VS, язык C# и API, описанный в SDK? Например используя классы из пространства имён Terrasoft.Core.Entities? И если можно, то дайте ссылку на хороший пример. Заранее благодарен.

Нравится

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

Добрый день, Евгений.

К сожалению, на данный момент разработка схем конфигурации BPMonline на языке C# в MS Visual Studio не поддерживается.

Возможно для Вас будет полезная следующая статья:
Отладка серверного кода
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/ServerCode…

Да, эту статью я читал.

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

Доброго времени суток!

В карточке звонка, добавил вкладку "История обращений контактов". Настроил фильтрацию при открытии карточки, по аналогии с деталями. Но есть ли возможность настроить фильтрацию так, что бы она срабатывала только при переходе на эту вкладку?
Для фильтрации использовал следующий код:
var ClHistory = wndClHistory.Window.ComponentsByName('dlData').Dataset;
ApplyDatasetFilter(ClHistory, 'ContactID', ContactID, true);

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

Нравится

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

У набора вкладок (компонент, который по умолчанию называется pcPages) есть события OnChangeActivePage и OnChangedActivePage, можно привязаться к какому-то из них.
При этом в обработчике добавить проверку, чему равно свойство ActivePage, нужной вкладке или другой.

Александр, получилось сделать фильтрацию на событие OnChangeActivePage, но возникла проблема.
При открытии карточки звонка (основной вкладки), сохранить её можно, но если сменить вкладку на вторую, фильтрация срабатывает, но сохранить уже звонок нельзя. Нажимаю на кнопку "Ок", но результата никакого. В чем может быть проблема? что я не так сделал?

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

Спасибо за помощь. Удалось разобраться. Очищал рабочий dataset (RefreshDataset(Dataset);), поэтому и не сохранялась карточка редактирования.

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

Добрый день!

Часто при синхронизации или попытке открыть карточку контрагента выдает следующую ошибку
http://prntscr.com/8c2qgj

Отчет об ошибке отправляли.

Из-за чего появляется данная ошибка? Как "лечить"?

Спасибо!

Нравится

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

Здравствуйте.
Источники этой проблемы могут быть самые разные.
Один из них – подобная ошибка возникала на ранних сборках в случае использования 64-разрядной операционной системы.
Как вариант, попробуйте очистить кэш приложения (%appdata%\Terrasoft\версия\Cache), после чего перезайти и проверить актуальность ошибки. Второй момент - это перерегистрировать библиотеки:
- переименовать папку с Террасофт;
- запустить Террасофт от имени администратора;
- вернуть исходное имя директории;
- перезапустить приложение.
Если проблема не решится нужно подробнее её анализировать:
1. Воспроизводится ли ошибка на других операционных системах (например, Windows 7 x32, Windows XP x32).
2. Воспроизводится ли ошибка под всеми пользователями или под кем-то конкретно?
3. Зависит ли ситуация от прав доступа (админ\неадмин)?
4. Можно ли стабильно воспроизвести?
5. Что за синхронизация (чего с чем)?
6. Были ли изменения в конфигурации?
Таким образом можно сузить место поиска.

У нас Террасофт установлен на Windows 2003 R2 32bit
Все пользователи заходят через RDP (то есть Террасофт работает через терминал RDP)

2. Воспроизводится ли ошибка под всеми пользователями или под кем-то конкретно?
- возникает у нескольких пользователей

3. Зависит ли ситуация от прав доступа (админ\неадмин)?
- нет, не зависит. Появляется как у админа так и у обычных пользователей.

4. Можно ли стабильно воспроизвести?
- нет

5. Что за синхронизация (чего с чем)?
- Между Террасоф и Outlook

6. Были ли изменения в конфигурации?
- нет, мы не связываем эту ошибку с изменениями в конфигурации. Она возникает очень давно уже.

А что в деталях то пишут?

Здравствуйте.
Действительно, если на окне баг-репорта нажать на кнопку "Детали", то там можно ознакомиться с детализацией ошибки. Если не получится определить причину, тогда нужно отлаживаться. Так очень сложно установить причину.

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

Добрый вечер,
Создал процесс добавил в него элемент "Открыть страницу редактирования" передаю туда ID записи, отрабатывало все нормально, после добавления логики в БП - процесс запускается и останавливается на шаге Открыть страницу редактирования, причем в журнале он отображается как "Выполняется"
1
Кнопка "Выполнить элемент" при этом не активна, т.е. после клика по ней ничего не происходит, никаких ошибок в консоле не появляется.
Подскажите в какой стороне вообще искать проблему? Этот элемент не изменялся с тех пор как работал нормально, что могло привести к подобному поведению?

Нравится

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

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

А другие страницы по процессу открываются? По симптомам очень напоминает отсутствие подключения к вебсоккетам.

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

P.S. в принципе проблема решилась сама собой, как и возникла, сейчас вроде нормально все работает. Сутки не работало и само вернулось в норму

Скорее всего, на одном сервере развернуто несколько сайтов, которые "смотрят" на один порт. По умолчанию это 2011 порт. У каждого сайта должен быть свой уникальный порт. Указанные порты должны быть открыты в фаерволе.

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

ReadDataUserTask1.ResultEntityCollection.Count() < 1

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

попробовал поместить процесс в планировщик используя инструкцию но процесс также не запустился

попробовал поместить процесс в планировщик используя инструкцию но процесс также не запустился

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

1) Порты должны быть уникальными файле web.config приложения, а не в IIS
2) Уточните, пожалуйста, продукт и версию (по вопросу того, что процесс не запускается в указанное в таймере время).

1. в какой строке указывается порт в web.config? не смог найти
2. bpm'online Sales Версия 7.5.0.1328

Отправляю файл по корректной настройке.
Запросите у поддержки более новую версию и обновите приложение.

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

Были получены логи сервера. После изучения будет предоставлен ответ в созданном обращении 0260635.

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