Технические вопросы
7.x

Добрый день!

Вопрос по интеграции с MailClimp. Ранее она была настроена и работала корректно. Но сейчас, когда пытаюсь выполнить синхронизацию с MailClimp из рассылок, то возникает сообщение: Ошибка обращения к сервису MailClimp. Если зайти в настройки интеграции, то возникает сообщение: Неверно задан App ID.

В чем может быть дело?

Нравится

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

Александра, а какая у Вас версия продукта?

Версия 7.3.0.1910

Добрый день!

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

Показать все комментарии
бизнес-процесс
Технические вопросы
7.x

Здравствуйте.
Помогите пожалуйста с реализацией задачи. Нужно сформировать бизнес процесс, чтобы посылалась задача конкретному пользователю после изменения состояния заказа.
К примеру, состояние заказа изменилось на "3.Исполнение" и автоматически создаётся задача для курьера о выполнении этого заказа.
Спасибо.

Нравится

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

Дмитрий,

Судя по описанию задачи, бизнес-процесс должен выглядеть следующим образом:
1. Стартовый сигнал. Срабатывает после изменение записи в объекте Заказ. По желанию добавить условие “Должна быть изменена любая колонка из списка” – Состояние. “Объект должен соответствовать условиям” – Состояние равно Исполнение
2. Добавить элемент Задача. Заполнить поля согласно вашей логике, установить напоминание, в поле "ответственный" указать значение->выбор из справочника "Контакты"->контакт курьера.

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

Спасибо всем за помощь. Цепочку построил, всё работает. Однако, при формировании Активности, в поле "ответственный" нужно вписать конкретного сотрудника. Подскажите пожалуйста как возможно реализовать данную задачу?

в схеме обратите внимание на элемент "Читать РОПа" - этот элемент как раз и выдаёт результатом своей работы ID нужного Вам сотрудника, который сможете подставить в поле "Ответственный" в создаваемой задаче. Главное - пропишите верные условия поиска этого сотрудника (Должность, Отдел и т.п.)

см. пример из той же схему - состав элемента "Читать РОПа"

Показать все комментарии
7.6
Excel Импорт
Технические вопросы
7.x

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

Делаю загрузку из Excel на основе стандартной загрузки, использую схему "Страница". Окно открываю кодом:

var url = this.Terrasoft.workspaceBaseUrl + "/ViewPage.aspx?Id=1ed4a6a8-e552-4678-a4f0-d829cb41d880";
window.open(url, "_blank", "height=" + "150" + ",width=" + "500");

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

Нравится

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

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

Уточните, пожалуйста, что Вы хотите реализовать? Желательно со скриншотами.

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

Мне кажется, можно в переменную url дописать вроде:

+"&ProjectId="+ProjectId;

А в открывшемся окне её вычитать как:

Guid ProjectId = new Guid(Page.Request.QueryString["ProjectId"]);

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

Мне кажется, можно в переменную url дописать вроде:

+"&ProjectId="+ProjectId;

А в открывшемся окне её вычитать как:

Guid ProjectId = new Guid(Page.Request.QueryString["ProjectId"]);

Спасибо, работает.

Показать все комментарии
7.6
картинка
продукт
размер
Технические вопросы
7.x

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

Нравится

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

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

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

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

Добрый день!

Максим, идея с файлами и примечаниями интересная, возьму на заметку.

Алексей, дело в том, что в базе (в таблице SysImage) картинки хранятся в несжатом виде, т.к. попадают туда при интеграции из другой системы средствами sql через OPENROWSET. Возможно ли это как-то использовать?

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

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

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

Добрый день!
Александр, есть еще 2 варианта:
1. Реализовать свою логику при клике на изображение открывать его в модальном окне. В конфигурации есть примері использования. Метод ModalBox.show() вернет контейнер, в который вы сможете отрендерить нужный вам контент.
2. Взять готовые плагины, например у jQuery, и реализовать его использование.

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

Добрый день!
Да, возможно. Метод show() вернет вам контейнер, а дальше можете делать с ним что угодно. Пример:

var container = ModalBox.show({
	width: "200px",
	height: "100px"
});
var imageHtml = '<image src="http://localhost/bpmonlineSales770/0/img/entity/hash/SysImage/Data/dc0d78a5-18ce-4cbb-9afa-2d7d0143f4a6"/>';
Ext.DomHelper.insertHtml("afterBegin", container.dom, imageHtml);

Здесь выводится фото какого-то контакта

Спасибо, то, что нужно!

Спасибо, то, что нужно!

А как его можно корректно отмасштабировать, вне зависимости от исходных размеров?

style="max-height:100%;max-width: 100%"

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

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

Пример реализации Вы можете найти в продукте Real Estate на детали "Галерея" раздела "Объекты".

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

Добрый день.

В БП есть создание документа через активность (элемент Страница редактирования, картинка 3 "Создать Концепцию").
Когда процесс доходит до этого элемента, открывается документ, нажимаю кнопку Сохранить, отображается картинка 1, но процесс в Активности не переходит и страница не реагирует на кнопку Сохранить повторно. Если попробовать перейти в любой другой раздел (не Активности), а затем вернуться в Активности, то процесс зависает (картинка 2).

Почему может возникать данная ситуация?

Нравится

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

Добрый день!

Возможен такой вариант, в элементе Страница редактирования установлен признак “Формировать список результатов по колонке”. Предположим по состоянию активности. После элемента Страница редактирования идут несколько условных потоков (в зависимости от состояния “Не начата”, “В работе”). Если пользователь выбирает другое состояние, например “Завершена”, процесс не перейдет на следующий элемент.
Также стоит отметить, что при первом нажатии на кнопку сохранить - в фоновом режиме выполняется процесс сохранения. Так вот, повторное нажатие на кнопку может привести к ошибке вроде insert duplicate exception. Если не удается сохранить запись с первого раза, возможно не выполняются какие-то условия. Проверьте все ли обязательные поля заполнены.
Когда процесс зависает возможно происходит свал, проверьте консоль браузера, это поможет локализировать проблему.

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

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

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

Показать все комментарии
7.5
вложенная деталь
грид
Деталь
реестр
Технические вопросы
7.x

Есть деталь "Регион проведения мероприятия" с полями "Страна" и "Регион". На странице детали так же есть еще одна деталь "Города". Стоит задача выводит в реестр детали страну, регион и список городов. Подскажите, как лучше реализовать данный функционал?

Нравится

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

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

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

На самом деле особой надобности выводить список городов нет. Только в целях удобства. Можно поподробнее про вывод агрегируемой ф-ей? Или может эта тема есть в SDK? А там уже видно будет - стоит задачу решать, или оставить стандартный функционал.

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

http://academy.terrasoft.ru/documents/docs/product/bpm'online%20real%20estate/real%20estate/7.6.0/BPMonlineHelp/chapter_list_setting/chapter_list_setting_columns.htm

Показать все комментарии
7.6
Технические вопросы
7.x

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

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

2. Нужно передать фильтры раздела (атрибут SectionFilters) в запрос Select (EntitySchemaQuery). И все ли текущие фильтры раздела находятся в атрибуте SectionFilters?

Нравится

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

C 1 пунктом разобрался, есть функция Terrasoft.showInputBox.

Пункт 2: entitySchemaQuery.filters = this.get("SectionFilters").
Но все ли текущие фильтры раздела находятся в атрибуте SectionFilters?

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

Не совсем понятно, что Вы имеете ввиду под словами «текущие фильтры раздела».
Все доступные фильтры Вы можете предоставлены в SectionFiltersContainer (Рис. 1).

"Дашкевич К." написал:C 1 пунктом разобрался, есть функция Terrasoft.showInputBox.

Добрый день!!!

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

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

Добрый вечер!
Активные фильтры раздела определяются в методах GetSectionInfo и InitSectionStorage схемы BaseSectionV2 пакета NUI.

Используя эти методы, Вы можете получить текущую фильтрацию раздела.

"Демьяник Алексей Олегович" написал:

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

Активные фильтры раздела определяются в методах GetSectionInfo и InitSectionStorage схемы BaseSectionV2 пакета NUI.

Используя эти методы, Вы можете получить текущую фильтрацию раздела.

Таких методов нет, версия 7.6. Единственное что похожее нашел это сообщение в NUI.BaseSectionV2

/**
*
*/
"GetSectionFiltersInfo": {
	mode: Terrasoft.MessageMode.PTP,
	direction: Terrasoft.MessageDirectionType.SUBSCRIBE
}

Только не разобрался как с ним работать.

"Дашкевич К." написал:Пункт 2: entitySchemaQuery.filters = this.get("SectionFilters").
Но все ли текущие фильтры раздела находятся в атрибуте SectionFilters?

Вы можете использовать метод this.getFilters() раздела. После того, как страница раздела полностью загружена, вызов этого метода должен дать Вам необходимый результат.

Базовый метод (в схеме BaseSectionV2) на самом деле возвращает содержимое атрибута SectionFilters, но в разделах он может переопределяться и накладывать дополнительную фильтрацию на раздел.

Показать все комментарии
виртуальное поле
Технические вопросы
7.x

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

Нравится

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

Добрый день!!!

а какие у вас трудности? Работа с виртуальными полями ничем не отличается от работы полями получаемые их схем "Таблиц". Ничем не отличается Инициализация, Обработка, Валидация, Контроль и обработка событий. Вам нужен реальный пример, как решить вашу задачу. Или вам подсказать где в стандартном функционале, ваша задача уже решалась.

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

Коллеги, никто не может помочь в этом вопросе?

Ну вот так например
ассистент - тянем из связанной таблицы, по текущему контакту
на init я тоже вызывал метод getMainAssistant для заполнения поля

// diff
{
"operation": "insert",
"name": "Assistant",
"values": {
"caption": "Assistant",
"enabled": false
},
"parentName": "Header",
"propertyName": "items"
}
// attributes
"Assistant": {
dataValueType: Terrasoft.DataValueType.TEXT,
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dependencies: [
{
methodName: "getMainAssistant"
}
]
}
// methods
getMainAssistant: function() {
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "UsrContactAssistents"});
esq.addColumn("UsrAssistant.Name", "UsrAssistantName");
esq.filters.add("UsrContactFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "UsrContact", this.get("Id")));
esq.getEntityCollection(function(response) {
if (response && response.success) {
if (response.collection.getCount() > 0) {
var result = response.collection.getItems()[0];
this.set("MainAssistant", result.get("UsrAssistantName"));
}
}
}, this);
}

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

// attributes
"Assistant": {
dataValueType: Terrasoft.DataValueType.TEXT,
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dependencies: [
{
columns: ["Account"], // это для зависимости от контрагента
methodName: "getMainAssistant"
}
]
}
Показать все комментарии
пользователи
сессии
Технические вопросы
7.x

Добрый день!
7.6
В разделе Пользователи есть деталь Правила доступа, на которой отображаются Сессии пользователя
!text

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

Нравится

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

Здравствуйте, Дарья!

Данная деталь "смотрит" на объект Сеанс пользователя (SysUserSession). Колонка связи с разделом Пользователь.Id == Сеанс пользователя.Пользователь

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

"Демьяник Алексей Олегович" написал:правила фильтрации найденных записей

Вот только в списке связей при построении расширенного фильтра для "Объекта администрирования" "Сеанса пользователя" нет :wink:

Да, в том-то и дело, что не нахожу "Сеанса пользователя" для "Объекта администрирования" в расширенном фильтре при поиски связей

Дарья,

дело в том, что "Сеанс пользователя" является системным объектом (как и все объекты, которые начинаются с "Sys%")

Системные объекты не отображаются при фильтрации и настройке колонок.

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

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

"Безродный Андрей" написал:Но можно попробовать создать представление на основе этой таблицы и по нему выполнять фильтрацию.

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

Добрый день!
Представление для таблицы "Сеанс пользователя" можно в этом случае создать как замещающий объект от "Сеанс пользователя" с установленной галкой "представление в БД" ?
или лучше вообще не выбирать для представления родительский объект в данном случае?

"Татаровская Дарья" написал:
Представление для таблицы "Сеанс пользователя" можно в этом случае создать как замещающий объект от "Сеанс пользователя" с установленной галкой "представление в БД" ?

или лучше вообще не выбирать для представления родительский объект в данном случае?

Да именно так и нужно Дарья сделать, а еще нужно написать SQL скрипт для создания представления, иначе представление в "Реальной БД" не появится. Примеры SQL сценариев можно подсмотреть в админке. Переходим "Конфигурация" -- > "SQL сценарии", В строке поиска указываем "vw%" и смотрим. примеры. и делаем свой Вьювер (представление)

про представления я знаю) и про sql скрипт тоже..
Меня интересует в этом конкретном случае - его лучше создать как все-таки замещающий объект или лучше ничего не указывать в родительском объекте?

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

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

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

спасибо

Создала представление. Теперь в расширенном фильтре появилось данное представления для связи - все получилось

Показать все комментарии
BPM Лид
Технические вопросы
7.x

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

Нравится

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

Добрый день Екатерина!!!

первое впечатление, что не выполнена регистрация страницы, или слетела регистрации страницы. Выполните SQL запрос:

select * from SysModuleEdit
where CardSchemaUId='ddf8941f-92f3-4b10-9f59-faab18c12f46'

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

Нет. Не заполнено. Не могли бы Вы побольше рассказать про регистрацию страниц и разделов в системе.?

Добрый день Екатерина!!!

1. Выполните запрос:

select * from SysModuleEntity
where SysEntitySchemaUId='41af89e9-750b-4ebb-8cac-ff39b64841ec'

2. Если в пункте №1 запрос вернул не нулевой результат, Выполните Update в системе, исполнив следующий запрос:

update p set
p.SysModuleEntityId=(select top 1 q.Id from SysModuleEntity as q where q.SysEntitySchemaUId='41af89e9-750b-4ebb-8cac-ff39b64841ec')
from SysModuleEdit as p
where p.CardSchemaUId='ddf8941f-92f3-4b10-9f59-faab18c12f46'

Если в пункте №1 запрос вернул нулевой результат, тогда выполните запрос по регистрации схемы "Lead" в системе, для этого исполните запрос:

INSERT INTO [dbo].[SysModuleEntity]
           ([Id]
           ,[CreatedOn]
           ,[CreatedById]
           ,[ModifiedOn]
           ,[ModifiedById]
           ,[TypeColumnUId]
           ,[ProcessListeners]
           ,[SysEntitySchemaUId])
     VALUES
           (newid()
           ,getdate()
           ,null
           ,getdate()
           ,null
           ,null
           ,0
           ,'41AF89E9-750B-4EBB-8CAC-FF39B64841EC')

После выполнения Insert, начните алгоритм выполнения с пункта №1

3. Выполните полную компиляцию системы. После выполните очистку Кеша, и перезайдите в систему.

4. Проверьте работоспособность раздела Лиды, а именно выполните "Добавление" лида.

Если будут Екатерина еще проблемы, ошибки пишите, буду рад вам помочь.

А Вы не могли бы скинуть ссылку, где можно посмотреть данные о системных таблицах, участвующих в процедуре [dbo].[tsp_RegisterSection] , кроме как http://www.terrasoft.ru/bpmonlinesdk/CreateStandartSection.html. Ещё есть где-нибудь информация. Просто возникает вопрос какую из частей процедуры необходимо выполнять, если необходимо зарегистрировать не полностью новый раздел, а ещё один раздел по уже существующему объекту?

И ещё вопрос по поводу конфигурирования: если я какую-то страницу раздела изменила в конфигураторе, я потом этот раздел не могу править из мастера раздела?

"Турышева Екатерина" написал:И ещё вопрос по поводу конфигурирования: если я какую-то страницу раздела изменила в конфигураторе, я потом этот раздел не могу править из мастера раздела?

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

"Турышева Екатерина" написал:А Вы не могли бы скинуть ссылку, где можно посмотреть данные о системных таблицах,

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

Спасибо огромное. Буду тогда смотреть, разбираться сама с процедурой.

Будут вопросы Екатерина обращайтесь, буду рад вам помочь!!!

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