Есть раздел "Исполнители", в котором необходимо сформировать файл word, содержащий поля объекта "Пункт отправления".
"Пункт отправления" является деталью раздела "Загрузки", который в свою очередь связан с "Исполнителями" связью многие ко многим через промежуточную таблицу "Загрузки заявки".
При настройке печатной формы добавляю объект как табличную часть. Колонку объекта описываю следующим образом:
Пункт погрузки.[Загрузки заявки:Загрузка].Исполнители (колонка "Исполнители": Id)
При формировании отчета - ошибки нет, но и данные не подтягиваются в word.
Вопрос: Что не так? И вообще корректно ли здесь таким образом прописывать путь к колонке?
Спасибо.
Вам необходимо создать дополнительную таблицу (можно через представление в БД), которая будет развязочной для объекта раздела "Исполнители" и "Загрузки".
Далее на печатную форму Вы сможете вытянуть значения из развязочной таблицы, используя табличную часть печатной формы.
Развязочная таблица есть. Это "Загрузки заявки".
В данной интерпретации проблема не решена, но мы решили задачу упрощением архитектуры.
Так что вопрос не актуален. Спасибо!
Добрый день. Необходимо для нового раздела с тремя типами записей добавить для каждого типа мини-страницу.
Делаю по инструкции: https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/sozdanie-mini-k...
Создал "Схему модели представления карточки". Унаследовался от BaseMiniPage.
Для каждой страницы редактирования раздела в SysModuleEdit добавил значение MiniPageSchemaUId
Добавил модуль со стилями.
В итоге при добавлении записи открывается стандартная страница редактирования.
Мария, спасибо, но в этой теме ответа на мой вопрос не получил.
Меня интересует именно вызов разных мини-страниц в зависимости от выбранного типа в списке при нажатии на кнопку "Добавить".
Кстати, раньше в разделе "Активности" был выбор типа новой записи (при нажатии на "Добавить" в реестре), сейчас этого выбора нет (только "Добавить задачу"). Но что делать, если содержание мини-страниц должно формироваться в зависимости от типа?
Игорь, предположительно, должно быть в мастере настроено несколько страниц. Затем для каждого типа должна отдельно зарегестирована в БД схема (своя страница редактирования) и соотвественная для каждого MiniPageSchemaUId. После этого очистить кэш и проверрить работу. Попробуйте, также, отладить код.
Игорь, статья в Академии https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/sozdanie-mini-…
описывает создание мини-карточки, которая появляется при наведении курсора на ссылку на запись раздела. В примере это запись раздела "База знаний".
Но это не тот тип миникарточки, который появляется при создании новой записи раздела
Встречный вопрос, как привязать к кнопке "Добавить" мини-карточку вместо обычной?
Смотрю ActivitySectionV2, но признаков открытия minPage кроме как вызова метода this.openAddMiniPage в методе onSelectionKeyPress не нашёл, однако при нажатии на Добавить задачу debugger в этот метод не заходит.
Точной последовательности создания миникарточки, к сожалению, Вам сказать не могу пока.
Однако, укажу откуда начать
посмотрите следующий метод в BaseSectionV2
addRecord: function(typeColumnValue) {
...
if (this.hasAddMiniPage(typeColumnValue)) {
this.openAddMiniPage({
entitySchemaName: this.entitySchemaName,
valuePairs: this.getAddMiniPageDefaultValues(typeColumnValue)
});
} else {
this.openCardInChain({...
}
При создании записи в разделе, если к нему привязана миникарточка, то отладчик останавливается на точке останова, установленной в this.openAddMiniPage
А далее надо смотреть
В BaseSectionV2 в методе addRecord происходит проверка наличия мини-карточки по типу
this.hasAddMiniPage(typeColumnValue)
, где в свою очередь проверяется miniPage.hasAddMiniPage. Это свойство на данный момент у меня undefind.
Вопрос: Где устанавливается это свойство для той или иной страницы редактирования?
p.s.: Я докопал до BaseSchemaViewModel.initEditPages, где формируется конфигурация мини-страницы:
hasAddMiniPage - всего лишь атрибут который отображает есть ли для данного раздела мини-карточка добавления записи
При глобальном поиске по приложению (F12 затем Ctrl+Shift+F) по слову miniPageSchema или hasAddMiniPage
в первых трех строках отображаются объекты Terrasoft.Configuration с идентификаторами схем миникарточек, привязанных к разным разделам. Скорее всего информация об этом занесена непосредственно в БД. Можно покопать в эту сторону
"Симута Роман Русланович" написал:hasAddMiniPage - всего лишь атрибут который отображает есть ли для данного раздела мини-карточка добавления записи
При глобальном поиске по приложению (F12 затем Ctrl+Shift+F) по слову miniPageSchema или hasAddMiniPage
в первых трех строках отображаются объекты Terrasoft.Configuration с идентификаторами схем миникарточек, привязанных к разным разделам. Скорее всего информация об этом занесена непосредственно в БД. Можно покопать в эту сторону
Тоже искал глобальным поиском + режим отладки раздела Активности (здесь MiniPage.hasAddMiniPage = true)
Но у меня MiniPage.hasAddMiniPage передаётся Undefined, хотя название схемы мини-карточки передаётся и для соответствующих записей в таблице SysModuleEdit заполнено поле MiniPageSchemaUId.
В какой таблице искать hasAddMiniPage?
В таблицах SysModuleEdit, SysModule, SysModuleEntity, SysSchema такого поля нет.
P.S.: Вообще было бы прекрасно, если бы в академии появилась статья по добавлению мини-карточки в раздел к кнопке "Добавить".
Игорь, свойство hasAddMiniPage определено в миксине MiniPageUtilities.
Миксин подключается к модели представления в классе BaseSchemaViewModel реализованном в одноименном модуле. В этом же классе есть метод initEditPages, в котором заполняется коллекция моделей представления для каждой entitySchema и там же заполняютя значениями свойства hasAddMiniPage (поищите глобальным поиском)
Поскольку вы создали новый раздел, то возможно, что это свойство у вас не инициализируется
посмотрите в глобальном объекте Terrasoft.configuration.EntityStructure (просто наберите в консоли)
пример для объекта Account - во вложении
посмотрите в объекте вашего раздела
Статья по миникарточке добавления в ближайших время будет написана.
Узнал. Нужно добавить системную настройку с кодом Has[ИмяСущностиРаздела]MiniPageAddMode, например, как для раздела HasAccountMiniPageAddMode
Это системная настройка булевского типа, из нее и прилетает значение свойства hasAddMiniPage в Terrasoft.configuration.EntityStructure
необходимо передать ещё один параметр miniPageSchemaName, передаю.
Далее в MiniPageContainerViewModel.setSchemaParametersInfo
в строке
var schemaName =this.getSchemaName(entitySchemaName)|| config.miniPageSchemaName;
Т.о. в конфигурацию мини-карточки попадает название схемы первой зарегистрированной мини-карточки, хранящаяся в Terrasoft.ModuleUtils.moduleStructure[entitySchemaName].miniPageSchema, а не переданное в параметре miniPageSchemaName значение. И как следствие выводится не та мини-карточка.
Вопрос: Не было ли целесообразней поменять местами this.getSchemaName(entitySchemaName) и config.miniPageSchemaName в строке
var schemaName =this.getSchemaName(entitySchemaName)|| config.miniPageSchemaName;
или передавать в this.getSchemaName(entitySchemaName) вторым аргументом тип создаваемой записи?
Решил эту проблему подменой значения Terrasoft.ModuleUtils.moduleStructure[entitySchemaName].miniPageSchema на нужное мне.
Но как-то это костыльно...
Если у кого есть другие варианты реализации, буду благодарен за подсказку
В колонку связи второй детали, ту которая указана в «detailColumn», установится значение из карточки родителя (первой детали), из колонки что указана в «masterColumn», именно поэтому типы этих колонок должны совпадать.
И да, не забудьте во второй детали настроить колонки, по умолчанию в детали в детали, не будет выведена ни одна колонка.
Пример всей реализации, деталь в контрагентах. А в ней вторая деталь:
Регистрацию в контрагенте показывать не буду, она делается легко мастером.
Реализация всей страницы редактирования второй детали:
Добрый день. Редакция real-estate 7.7 Интересует следующий момент - можно ли каким нибудь образом на стороне клиента подписаться на события добавления/удаления фотографий?
Цель нашей работы следующая: требуется, что бы фото, которые прикреплены к объектам были видны из сети интернет безо всякой авторизации + для интернет аудитории требуется наложение watermark. Соответственно идея в том, что после того, как фото загружалось / удалялось штатным механизмом запускать свой сервис, который будет например выдирать фото из БД и копировать их к примеру на удаленное хранилище.
Коллеги, возможно кто то сталкивался с подобными задачами, просьба поделиться идеями, как это лучше реализовать.
Про вариант в Odata я знаю, но если все же это делать на стороне terrasoft?
Петр, в схеме GalleryDetail есть метод onDataLoaded, который вызывается когда мы добавляем картинку в галерею.
В схеме GalleryImageViewModel есть метод onImageDeleteClick, который вызывается при клике на кнопку удаления.
В этих методах можно добавить вызов своего сервиса, который будет расшаривать картинки.
После обновления до 7.8 страницы редактирования разных типов документа ведут себя странно. При добавлении открывается нужная страница, а при открытии сохраненной записи - всегда базовая (DocumentPageV2). Подскажите как исправить.
Олег, это скорее частный случай, который требует индивидуального рассмотрения и лучше с ним обратится в техническую поддержку, если не хотите светить сайтом и доступом к нему здесь. Их адрес support@terrasoft.ru
Здравствуйте, есть задача менять и рассчитывать значение мультивалютных полей при загрузки детали заказа.
Используется bpm'online comerce 7.6
Я нашел метод обработки события выбора валюты onCurrencyMenuItemClick, но я думаю он мне не поможет. Подскажите пожалуйста что мне делать или в каком направлении "копать"???
Задание автоматически по стране выбирать валюту и присвоить, рассчитать, все поля с валютой данной страны. Мне не нужно проводить расчеты мне нужно автоматизировать это действие.
В базовой версии сумма хранится в поле "Итого, б.в". Сумма пересчитывается по курсу, указанному в справочнике "Курсы валют", к валюте, указанной в системной настройке "Валюта по умолчанию".
Честно говоря, я не совсем понимаю, почему возник данный вопрос - в статье нет упоминаний системных настроек.
Системные настройки хранятся в объекте SysSettingsValue. Вы можете изменить системную настройку запросом ESQ. В системе для некоторых объектов, например, счет и заказ используются системные настройки. В результате добавления новой записи значение системной настройки увеличивается.
Я зашел в описание системных настроек - было упоминание о этой настройке, сейчас она почему то пропала.
В объекте SysSettingsValue нету такой настройки, настройка базовой валюты находиться в объекте SysSettings.
Спасибо большое за подсказку. Стало ясно как работать с SysSettingsValue. А в клиентских схемах еще проще.
Что касается вопроса автоматизации определения по стране курса валют, допустим я смогу пересчитать
для заданной страны, заданной валюты и по курсу все нужные мне поля, как мне поменять значение валюты для каждого поля и перерисовать, что бы label соответствовали валюте данной страны указанной в заказе?
Необходимо из клиентского модуля выполнить процесс и чтоб он вернул, например, коллекцию значений. Серверный процесс, должен сделать select к сторонней базе, и вернуть то что попало в select.
Задание-сценарий - это функция типа bool. То есть она не сможет возвратить коллекцию.
Пользователь находится в интерфейсе bpm'online и запускает действием процесс. В результате процесс должен:
1) Обратиться к стороннему ресурсу
2) Получить ответ в виде параметра bool
3) Обработать его в процессе
4) Вернуть на клиент.
Здравствуйте,
Вам не нужен бизнес-процесс для выполнения задуманного, вы можете написать свой конфигурационный сервис, и на языке c# написать все что угодно что позволяет язык c#, а делать запросы к БД он явно позволяет. https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/kak-sozdat-svo…
Функция, написанная в сервисе может вернуть как простой тип, так и сложный, массивы, списки, что угодно, сериализуя это в JSON.
На клиенте вы получите результат: https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/kak-programmno…
И делаете с ним что хотите.
Все это можно сделать если сервис и вызов сервиса написан в рамках одной Bpmonline. Если вы хотите сервис иметь на одном сайте, а вызов на другом, то можно даже написать сервис доступный для вызова без авторизации, с другого сайта (CORS) но вроде бы для вашей задачи вам это не нужно. Если нужно то на форуме уже где-то была инструкция как это сделать.
У меня вопрос: в печатной форме есть макрос, например, который форматирует текст. Как его исполнить, в коде сервиса? Это необходимо сделать до конвертации в PDF.
Здравствуйте. Стоит задача сохранить карточку Лида при нажатии на кнопку "Завершить" активности в LeadSectionActionsDashboard.
При нажатии кнопки вызывается метод onExecuteButtonClick схемы ActivityDashboardItemViewModel.
Но как отследить нажатие кнопки Завершить из карточки Лида непонятно.
Заранее спасибо за ответ.
Здравствуйте!
Отследить нажатие кнопки "Завершить" можно попробовать с помощью пробрасывания события.
В методе onExecuteButtonClick добавить публикацию события "SomeEvent" в ActivityDashboardItemViewModel:
this.sandbox.publish("SomeEvent", []);
На странице LeadPageV2 в messages добавить подписку на событие "SomeEvent" :
"SomeEvent": {
mode: Terrasoft.MessageMode.PTP,
direction: Terrasoft.MessageDirectionType.SUBSCRIBE
}
На странице LeadPageV2 в методе subscribeSandboxEvents добавить вызов метода "someMethod" по событию "SomeEvent":
this.sandbox.subscribe("SomeEvent", this.someMethod, this, ...);
На странице LeadPageV2 написать метод "someMethod" , в котором вызывать сохранение Лида.
Заместил ActivityDashboardItemViewModel. Добавил в метод onExecuteButtonClick публикацию события. В свойствах ActivityDashboardItemViewModel в Messages добавил своё сообщение (Публикация, Адресное). В LeadPageV2 в блок messages добавил сообщение, в метод subscribeSandboxEvents добавил subscriber.
При публикации сообщения возникает ошибка: Message UsrOnExecuteButtonClick is not defined in BaseSchemaModuleV2.
Нужно замещать ещё BaseSchemaModuleV2?
И ещё вопрос, существует ли подробная инструкция по использованию сообщений в BPMOnline7.x?
Т.к. активность можно Завершить не только по нажатию на кнопку "Завершить", но и при переходе по ссылке активности, поэтому Вам было предложено сделать через SectionActionsDashboard.
Если делать через LeadPageV2 то можно сделать только по клику на кнопку.
2. В методе execute:
execute: function(options) {
this.sandbox.publish(“SomeEvent”, {});
var elementUId = this.get("ProcessElementId");
var recordId = this.get("Id");
var schemaName = this.get("EntitySchemaName");
if (this.isActivity() && this.hasMiniPage(schemaName)) {
this.showMiniPage(options);
} else {
if (elementUId) {
ProcessModuleUtilities.tryShowProcessCard.call(this, elementUId, recordId);
} else {
this.callParent(arguments);
}
}
},
По идее после этих настроек ошибка при публикации должна была уйти, но при публикации сообщения ошибка " Message UsrOnExecuteButtonClick is not defined in BaseSchemaModuleV2." опять появляется.
В связи с особенностями реализации ActivityDashboardItemViewModel, вариант с событиями всё-таки не получится.
Поэтому, в качестве обходного решения, можно сделать вот так:
В моём случае, наверно правильнее будет наследовать LeadSectionActionDashboard?
При замещении столкнулся с проблемой, заголовок для LeadSectionActionDashboard как и для SectionActionDashbord равен BaseActionDashboard и не понятно какую из схем наследовать
"Demchenko Olha" написал:В связи с особенностями реализации ActivityDashboardItemViewModel, вариант с событиями всё-таки не получится.
Поэтому, в качестве обходного решения, можно сделать вот так:
Друзья, подскажите, как в справочнике "Типы средств связи" создать новый "Тип коммуникации". Например есть необходимость создать вложенный список Email (рабочий, личный), как это реализовано в списке "Телефон"
Зарегистрируйте справочник от объекта "тип коммуникации". Добавьте свой тип. Перепишите метод "getToolsMenuItems" детали ContactCommunicationDetailV2 по аналогии с тем как в этом же методе создаются группы для телефонов и соц. сетей.