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

Нравится

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

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

Да, можно. Основная идея состоит в том, чтобы определить уникальный идентификатор Вашего окна в таблице SysSchema (поле UId) и на его основании сформировать url, который потом вызвать через window.open:

window.open(url);

Более подробно можно посмотреть на примере реализации метода navigateToConfigurationSettings в схеме SystemDesigner пакета UIv2, который открывает окно управления конфигурацией по соответствующему действию в дизайнере системы, либо же (более сложный вариант) метода openOldLookupConfiguration в схеме LookupSection того же пакета, который открывает окно наполнения справочника в старом интерфейсе.

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

Добрый день!

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

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

Нравится

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

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

Версия 7.3.0.1910

Добрый день!

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

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

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

Нравится

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

Дмитрий,

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

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

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

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

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

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

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

Делаю загрузку из 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"]);

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

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

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

Нравится

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. Если не удается сохранить запись с первого раза, возможно не выполняются какие-то условия. Проверьте все ли обязательные поля заполнены.
Когда процесс зависает возможно происходит свал, проверьте консоль браузера, это поможет локализировать проблему.

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

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

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

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

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

Нравится

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

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

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

Нравится

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

Добрый день Дмитрий!!!

на сколько я помню по платформе 3.Х, "напоминания" из окна напоминаний, сами по себе не пропадали. вручную или переносишь срок напоминания, или прекращаешь с ними работать.

Добрый день.

Удаление задачи с окна напоминания происходит в функции DeleteRemindingByTask, сервиса ds_TaskScript. В этой функции установите BreakPoint и пройдитесь по коду, должны дойти до кода:
var StatusID = GetDatasetFieldValue(Dataset, 'StatusID');

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

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

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

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

Подскажите как реализовать следующий функционал:
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, но в разделах он может переопределяться и накладывать дополнительную фильтрацию на раздел.

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

Здравствуйте.
Задаю здесь вопрос, т.к. в не нашёл описания таких вещей в SDK. Проблема заключается в следующем. Мне нужно (в BPMonline 7.6) разместить на странице две детали - одну справа от другой на одном уровне по горизонтали. Я пробовал определить на странице два группы следующим образом:

diff: [{
        "operation": "insert",
        "parentName": "Leftcontainer",
        "name": "MonthlyIncomesGroup",
        "propertyName": "items",
        "values": {
                itemType: Terrasoft.ViewItemType.CONTROL_GROUP,
                items: [],
                caption: {
                        "bindTo": "Resources.Strings.MonthlyIncomesGroupCaption"
                },
                controlConfig: {
                        collapsed: false
                }
        }
},
{
        "operation": "insert",
        "parentName": "RightContainer",
        "name": "MonthlyExpensesGroup",
        "propertyName": "items",
        "values": {
                itemType: Terrasoft.ViewItemType.CONTROL_GROUP,
                items: [],
                caption: {
                        "bindTo": "Resources.Strings.MonthlyExpensesGroupCaption"
                },
                controlConfig: {
                        collapsed: false
                }
        }
}
]

чтобы потом разместить в каждой из этих групп по одной детали. После запуска страницы, группа (с заголовком "ЕЖЕМЕСЯЧНЫЕ ДОХОДЫ") , размещённая в Leftcontainer позиционируется ниже, чем группа (с заголовком "ЕЖЕМЕСЯЧНЫЕ РАСХОДЫ") , размещённая в RightContainer, а мне нужно, чтобы они были на одном уровне по горизонтали. Кроме того, группа, размещённая в RightContainer слишком сильно смещена вправо, а мне нужно, чтобы она находилась ближе к левой группе. В вложенном файле прилагаю экранный снимок того, как эти группы сейчас размещены на экране. Как мне разместить две детали рядом на странице, чтобы одна была справа от другой и чтобы они были на одном уровне по горизонтали ?

Нравится

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

Евгений добрый день!!!

как я вам и писал ранее, для реализации вашей задачи требуется поподробнее познакомиться с разметкой Bootstrap, так же требуется поподробнее познакомиться с CSS 3.0, Для реализации вашей задачи действительно требуется создать в разметке 2 Контейнера, назвать их "Левый" и "Правый", а остальное, поведение и размещение контейнеров на странице вы делаете с помощью CSS стилей. Так же советую разобраться для начала со стандартными страницами "BasePageV2", "BaseSectionV2", какие уже стандартные контейнеры размещаются на странице, какие уже стандартные стили применены к данным контейнерам. И когда вы уже будите создавать свои 2 контейнера, вы будите понимать внутрь каких существующих контейнеров разместить свои, какие стандартные стили можно использовать, и какие свои требуется дописать.

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

Здравствуйте, Михаил. Я наследую свою страницу от "Базовая схема карточки (BasePageV2)" из пакета NUI. Я выбрал "Базовая схема карточки" в свойстве "Родительский объект" для моей страницы, когда её создавал. Если вы, как пишете, подготовите пример для моего случая, то буду вам очень благодарен.

Здравствуйте, Евгений!

Можно попробовать следующий вариант:
1) Сделать группу полей на нужной вкладке
2) Разместить на данной группе полей два Ваших контейнера, указав, их на одной строке и длиною строки [0;12] и [13;24] соответственно.

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