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

Нравится

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 на детали "Галерея" раздела "Объекты".

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

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

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

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

Добрый день,
Необходимо сделать раздел аналогичный разделу планирования, для начала сделал копию раздела, в js коде заменил все переменные на свои, но все равно подгружается стандартная ForecastTab в новом разделе. Подскажите где вообще идет инициализация какую страницу должен загружать модуль, я думал что это делается в ForecastsModule

initSchemaName: function() {
  this.schemaName = "ForecastTab";
},

поставил тут свое значение, но все равно грузится ForecastTab

Нравится

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

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

поделюсь опытом как я выполняю клонирование группы схем. К примеру мне требуется клонировать раздел Планирование.

1. Нахожу все формы, которые относятся и работают в разделе. Это формы раздела, страницы редактирования, детали, схемы таблиц, схемы бизнес-процессов
2. Поочередно выгружаю, через функцию экспорт все схемы
3. Выполняю замену "UId" схем в файлах на новые. Новые генерирую к примеру на SQL Management Studio, подав команду "select newid()". Замену выполняю с помочью программы "Far manager", для начала в файлах "*.md" нахожу старый "UID" и заменю на новые UID.
4. Выполняю замену названий схем на новые к примеру схема называлась "ContractPageV2" я внутри файла "ContractPageV2.md" переименовываю имя схемы на новое, к примеру на "MpoContractPageV2"
5. Действия 3,4 выполняю для всех выгруженных файлов.
6. Создаю новый пакет, прописываю необходимые зависимости, чтобы все схемы, что будут импортированы работали
7. Выполняю импорт
8. После импорта проверяю все ли "зависимости" целые на формах редактирования, формах раздела, деталях, бизнес-процессах, схемах таблиц. Проверку провожу по все загруженным схемам
9. Выполняю регистрацию, страниц редактирования, деталей, разделов.
10. Копирую для деталей, разделов их профили, средствами SQL Management Studio
11. Добавляю зарегистрированные Раздел на определенный Рабочий стол.
12. Проверяю работоспособность клонированного раздела
13. Веду дополнительную доработку, согласно своего технического задания.

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

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

В .md файлах js модулей описан код тот же что я могу посмотреть и изменить в js файлах, так что не вижу смысла переводить их сначала в .md для редактирования

"Глобин Олег" написал:для начала сделал копию раздела, в js коде заменил все переменные на свои, но все равно подгружается стандартная ForecastTab в новом разделе.

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

подскажите пожалуйста, после создания вы выполнили регистрацию раздела в таблицах SysModule, SysModuleLcz, SysModuleEntity? и так же второй вопрос выполнили ли вы регистрацию страниц редактирования в таблицах SysModuleEdit, SysModuleEditLcz? данные действия выполнили?

Да, данные действия выполнял вызывая хранимые процедуры RegisterSection и RegisterPage которые собственно и делают записи в указанных Вами таблицах, после этого привязал раздел к рабочему месту, он стал отоюражаться в меню, он открывается но неверно вызывается страница которую отрисовывает модуль

Олег, во вложении скиньте листинг раздела. А лучше конечно MD файл. Я его посмотрю, листинг и сам MD. Подготовлю SQL запросы, исполните и скажите в результате на экране, все появляется или нет. Есть подозрение что некорректно выполнена регистрация раздела. Но нужно смотреть, листинг и ваш MD. MD страницы редактирования тоже кидайте, чтобы корректно вам в ответ я подготовил запросы. Спасибо!!!

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

Продолжаем разговор. :smile:

не успел еще подготовить SQL запросы, что обещал но сразу вопрос. Объект таблицы "SxForecast" в системе вы тоже создали, и зарегистрировали его в таблице SysModuleEntity? Ну и подчиненные таблице так же должны быть созданы:
- SxForecastDimension
- SxForecastIndicator
- SxForecastItem
- SxForecastItemValue

Созданы данные таблицы?
Если да то буду далее анализировать ваш код. И еще вопрос. Клонировать раздел, вы для каких целей собрались? не дешевле было переделать существующий?

Я как ранее и говорил из данного раздела, брал только подход работы, и создавал свой раздел, в котором ведется Заполнение и обработка экономических таблиц БДР, БДДС

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

Давайте поступим так, чтобы вы уже Олег увидели на экране свой клонированный раздел Планирование, вышлите мне пожалуйста еще MD файл "SxForecast", как я и говорил подготовлю SQL запросы, чтобы убедиться регистрация прошла верно или нет. Если нет то подготовлю вам SQL скрипты по регистрации раздела, и его страниц.

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

"Власов Михаил Викторович" написал:

увидели на экране свой клонированный раздел Планирование


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

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

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

по вашей задачи есть еще проблемы и вопросы? дайте пожалуйста обратную связь. Спасибо!!!

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

Итак, создал все нужные объекты и страницы, зарегистрировал раздел и страницы следующим запросом

DECLARE @SysEntitySchemaUId NVARCHAR(255);
DECLARE @SysModuleEntityId NVARCHAR(255);
DECLARE @SectionModuleSchemaUId NVARCHAR(255);
 
SET @SectionModuleSchemaUId = (SELECT TOP 1 Uid FROM SysSchema WHERE Name = 'SxForecastModule');
SET @SysEntitySchemaUId = (SELECT TOP 1 UId FROM SysSchema WHERE Name = 'SxForecast');
 
 
INSERT INTO SysModuleEntity (SysEntitySchemaUId) VALUES (@SysEntitySchemaUId);
 
SET @SysModuleEntityId = (SELECT TOP 1 Id FROM SysModuleEntity WHERE SysEntitySchemaUId = @SysEntitySchemaUId);
 
INSERT INTO SysModule (Caption, SysModuleEntityId, FolderModeId, GlobalSearchAvailable, HasAnalytics, HasActions, HasRecent, Code, ModuleHeader, SectionModuleSchemaUId) 
VALUES ('Прогнозирование', @SysModuleEntityId, 'B659D704-3955-E011-981F-00155D043204', 1, 1, 1, 0, 'SxForecast', 'Список: Прогнозирование', @SectionModuleSchemaUId);
 
INSERT INTO SysModuleLcz (RecordId, ColumnUId, SysCultureId, Value)
VALUES (@SysModuleEntityId, '3DA3C3B2-02FB-4CCA-80C3-7946D4E8F565', '1A778E3F-0A8E-E111-84A3-00155D054C03', 'Прогнозирование');
 
INSERT INTO SysModuleLcz (RecordId, ColumnUId, SysCultureId, Value)
VALUES (@SysModuleEntityId, '7B904E78-84BF-408C-A7A1-1287E66837D3', '1A778E3F-0A8E-E111-84A3-00155D054C03', 'Прогнозирование');
 
-- Регистрация страницы
 
INSERT INTO SysModuleEdit (SysModuleEntityId, UseModuleDetails, CardSchemaUId)
VALUES (@SysModuleEntityId, 1, (SELECT TOP 1 Uid FROM SysSchema WHERE Name = 'SxForecastPage'));
 
DECLARE @SysModuleEditId NVARCHAR(255);
SET @SysModuleEditId = (SELECT TOP 1 Id FROM SysModuleEdit WHERE SysModuleEntityId = @SysModuleEntityId);
 
INSERT INTO SysModuleEditLcz (RecordId, ColumnUId, SysCultureId, Value)
VALUES (@SysModuleEditId, 'A19BF4BF-E22B-49B5-B6E0-918FF6290020', '1A778E3F-0A8E-E111-84A3-00155D054C03', 'Прогнозирование');
 
INSERT INTO SysModuleEditLcz (RecordId, ColumnUId, SysCultureId, Value)
VALUES (@SysModuleEditId, 'A19BF4BF-E22B-49B5-B6E0-918FF6290020', '1A778E3F-0A8E-E111-84A3-00155D054C03', 'Прогнозирование');

скопировал коды страниц, получил следующую ошибку (прикреплена в файле), подобное уже встречалось, вспомню как исправлял отпишусь дальше

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

P.S. забыл добавить, вручную добавил запись в SxForecastItem чтобы проверить правильно ли идет запрос, чтобы вытягивало его во вкладки, на скриншоте его видно, вроде запрос отрабатывает нормально. Также почему то подтягиваются базовые схемы ForecastTab, ForecastModule, ForecastBuilder

Олег добрый день!!!

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

Нажав на "Шестеренка"-->Добавить, у вас должна открыться страница редактирования "Элемента планирования", с возможностью добавления Измерения, Периода, Названия. Данная страница открывается? Шестеренка, как на картинке есть в Правом верхнем углу? Я уже удалил конечно свой клонированный раздел, но на выходных ради эксперимента выполнял клонирование, данного раздела, у меня все прошло без ошибок.

По скриптам регистрации страниц. Здесь ошибок не вижу, все верно.

Михаил, шестеренка есть, но добавление заблокировано, доступно только "Настроить права доступа"

Олег день добрый!!!

посмотрите пожалуйста в дебаггере консоли браузера в функции "checkForecastCanEditRights" схемы "ForecastTab" (это старое название схемы), новое не знаю как у вас называется. Установите точку останова, и посмотрите что в строчке  this.set("AddButtonEnabled", Ext.isEmpty(result)); присваивается. Вот вам отправная точка поиска. Так как "Доступность" пунктов меню "Добавить", "Изменить", "Удалить" регулируется программно.

Добрый день Михаил, как оказалось модуль SxForecastTab (который должен был запускаться вместо ForecastTab) даже не запускается, т.е. не заходит в его метод init

Вместо этого упорно запускается стандартный ForecastTab, подтягивая за собой все остальные стандартные модули вроде ForecastModule, ForecastBuilder

P.S.

"Власов Михаил Викторович" написал:

в функции "checkForecastCanEditRights" схемы "ForecastTab" (это старое название схемы), новое не знаю как у вас называется. Установите точку останова, и посмотрите что в строчке this.set("AddButtonEnabled", Ext.isEmpty(result)); присваивается


Это значение отвечает за кнопку добавить на странице планирования.
1
В том меню за enable отвечает следующий код в ForecastBuilder'е

"enabled": {
    "bindTo": "ForecastRightLevel",
    "bindConfig": {"converter": "isSchemaCanAppendRightConverter"}
}

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

У Вас на скриншоте написано в адресной строке – ForecastsModule
А значит, по нажатию в левом меню вызывается именно он, а не Ваш модуль.
Вызываемый модуль можно посмотреть в консоли, Terrasoft.configuration.ModuleStructure

Добрый день, Юрий,
Простите на каком из моих скриншотов вы смогли адресную строку найти? Вообще в последнем сообщение действительно стандартное планирование, чтобы показать кнопку и это не относилось к общему вопросу.

Оказалось что не заменил имя в методе LoadModule на свое, поэтому и тянуло стандартные схемы, заменил на свое и появилась следующая ошибка, видимо Module вызывается почему то дважды
1

Вероятная причина данной ошибки заключается в том, что sandbox не корректно загрузил модуль. Скорее всего, дело в том, как
Генерируются идентификаторы для модулей. Вам необходимо выполнить отладку клиентского кода.
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/ClientCode…

Доброго времени суток. У меня аналогичная задача - скопировать раздел планирование.
Проблема следующая: раздел отображается, но не отображаются созданные записи. При загрузке раздела не удается получить структуру схемы ForecastTab (в SchemaBuilderV2 в методе requireAllSchemaHierarchy getSchemaStructure возвращает undefined). Код схемы скопирован с базовой.

Олег день добрый!!!

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

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

Оказалось дело не в связях. Хотя может дело не в ForecastTab (после добавления связей схемы пересоздать нужно, а я пересоздал только ее)
UPD: получилось исправить ошибку получения структуры ForecastTab. Теперь при добавлении записи появляется просто пустая страница. Ошибок в консоли нет.
UPD2: Получилось отрисовать страницу. Дело было в именах контейнеров.

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

я не знаю с чего вы начали при клонировании и изменении под свои нужды раздела Планирование, я расскажу свой опыт знакомства и клонирование под свои задачи Раздела Планирование. Все началось с постановки задачи. "Требуется создать раздел в котором бы Экономист с легкостью смог бы вести БДДР и БДС при планирование бюджета на предприятие."
конечно для этих целей за основу можно было взять раздел Планирование. Первое что я изучил как устроен раздел планирование, как он работает, какая структура данных задумана компанией Террасофт, требуется или нет переделывать структуру данных под себя, требуется или нет переделывать PivotGrid под себя. На данном этапе я понял, что структура базы данных компанией Террасофт задумана идеально и даже с запасом под разные другие задачи, и ее я сильно изменять не стал. Внес только пару новых полей. Далее что я проанализировал это как работает схема PivotGrid, что она умеет, что она не умеет, какая схема Бралась за основу. И понял что самое главное что не умеет схема PivotGrid это отрабатывать Табуляцию при позиционирование курсора в столбце и переходу к следующей ячейки текущей строки. Мне стало интересно почему же программисты компании Террасофт изначально при создании PivotGrid отключили событие по отработки Табуляции. И понял, что PivotGrid это перевернутый стандартный грид и при нажатии на Табуляцию курсор перемещается вниз по столбцу, а не вправо по строке.
вот именно эту задачу я первую и решил. Вторая проблема, что возникла это отсутствие промежуточных итогов, как к примеру они есть Сводной таблице в экселе. И данную проблему я решил путем доработки PivotGrid, решил так же проблему позиционирование курсора в иерархии и при обновление Grid-a, по умолчанию иерархический список всегда сворачивался и позиция курсора всегда пропадала, так себя ведет стандартный Grid и эту проблему я решил. Вот с чего я начал.
но а дальше я стал просто клонировать все схемы из пакета CoreForecast. Делал это все вручную, сначало выгрузил все схемы, через Экспорт на диск, и в полученных файлах сменил все UID на новые. Выполнял данную операцию посредствам Far Manager-a. При замене UId-дов всегда нужно не забывать что к примеру UID схемы таблицы Forecast пожет встречаться как в виде ссылки в других схемах. Для этого в Фаре я сначало выполнял поиск по файлам *.md, в поле "Содержащий текст" указывал искомый UId. После того как вхождения UID было найдено менял на новый UID.
После замены всех старых UId на новые я выполнил переименование всех выгруженных схем. И только после этого я выполнил Импорт схем обратно в Базу данных. После импорта я вылнил регистрацию требуемых схем в базе данных. Т.е новый раздел "ForecastsModule" зарегистрировал в таблице SysModule, SysModuleLcz. Страницы редактирования зарегистрировал в таблицах SysModuleEdit, SysModuleEditLcz. Провайдер уведомлений зарегистрировал в таблице NotificationProvider. Новую схему "Forecast" зарегистрировал в таблице SysModuleEntity. И все клонированный раздел заработал на 5 с плюсом. Ну конечно пришлось еще изменить много стандартных схем под свою задачу, но самое главное Олег чтобы у вас появилось понимание, что такое Генерация схем, ядром системы, как система это делает. Какая последовательность в генерации происходит. В данном разделе Планирование это очень хорошо прослеживается вся идеалогия MVVM модели, которую компания террасофт заложила как базись в свою систему. Без данного понимания и умения создавать свои Custom схемы с нуля, очень сложно будет создавать новые инструменты.
ведь BasePageV2, BaseSectionV2, BaseDetailV2 это всего лишь стандартные схемы облегчающие создание стандартных страниц, а если требуется создать нестандартую страницу, как раздел Планирование, то здесь нужно четкое понимание MVVM модели и понимание работы ядра системы, какой модуль (схема) за что отвечают при генерации страниц.

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

Спасибо, Михаил. Именно после переноса схем md файлами у меня наконец-то заработала ForecastTab, впредь так и буду поступать. Единственное для замены GUID я использовал не Far Manager, а Sublime. Особых проблем в принципе не возникло. Есть одна мелочь, которую я все еще не знаю как решить - я добавил новую колонку, и ее Caption длиннее других, и выходит так что он выводится в две строки. Буду благодарен, если подскажете каким образом можно расширить размер колонки, чтоб caption отображался одной строкой (желательно не меняя размер остальных).

Попробуйте переопределить CSS стили для реестра

Разобрался. Ширина задается для каждой колонки отдельно в ForecastTab.

Появилась другая проблема - изменил типы колонок с INTEGER на FLOAT и теперь вручную в поле План нельзя вписать значение - только скопировать.
UPD: спас тип MONEY

Олег сейчас все у вас получилось или есть проблемы?

Была проблема с переключением между вкладками - значение ActiveTab терялось, но с этим я уже разобрался. Сейчас кажется все работает, Михаил. Над данной "новой и интересной задачей" пришлось поломать голову :smile:
Спасибо за участие

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

Добрый день!

Кто-то тестировал Email-рассылки в BPM 7.6?
У меня показывает какие-то странные данные, слабо похожие на правду.

В письмах по рассылкам везде напичкано "3D"

Нравится

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

Я тестировал. Поддержка сказала, что у Mandrill был сбой, поэтому данные по откликам неправильные. Будем тестировать еще

Посмотрел код писем в своих рассылках. Нет никаких "3D". У вас коробка или были доработки?

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

Здравствуйте!
Подскажите пожалуйста, возможно ли сделать поле комментарий при отклонении визы обязательным?

Нравится

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

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

Проконсультировался с Product Owner'ом продукта.
К сожалению изменение данного функционала невозможно выполнить пользовательски.

Мы зарегистрировали Ваше обращение для реализации в будущих версиях продукта.

Спасибо!

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

предлагаю вам вариант решения вашей проблемы. Для решения вашего вопроса требуется выполнить замещения схемы VisaHelper. В данной схеме требуется заместить Три функции. Ниже привожу листинг данных функций.

        function baseAction(caption, buttonCaption, entity, action, callback, scope) {
            var checkRightCallback = function() {
                Terrasoft.utils.inputBox(caption, function(result, arg) {
                        if (result === Terrasoft.MessageBoxButtons.YES.returnCode) {
                            var comment = prepareComment(arg.name.value);
                            action.apply(scope || this, [entity, comment, callback]);
                        }
                    }, [{
                        className: 'Terrasoft.Button',
                        caption: buttonCaption,
                        returnCode: 'yes'
                    }, 'cancel'], this,
                    {
                        name: {
                            dataValueType: Terrasoft.DataValueType.TEXT,
                            caption: resources.localizableStrings.UpoComments,
                            customConfig: {
                                className: 'Terrasoft.MemoEdit',
                                height: '77px'
                            },
                            isRequired: true
                        }
                    },
                    {
                        defaultButton: 0,
                        style:  {
                            borderStyle: 'ts-messagebox-border-style-blue ts-messagebox-border-no-header',
                            buttonStyle: 'blue'
                        }
                    }
                );
            };
        function reject(entity, comment, callback) {
            if (Ext.isEmpty(comment)) {
                this.showInformationDialog(resources.localizableStrings.UpoCommentsIsEmptyError);
                return;
            }
            setStatus(entity, rejectStatus, comment, callback, this);
        }
        function approve(entity, comment, callback) {
            if (Ext.isEmpty(comment)) {
                this.showInformationDialog(resources.localizableStrings.UpoCommentsIsEmptyError);
                return;
            }
            setStatus(entity, approveStatus, comment, callback, this);
        }

Во вложении прилагаю MD файл замещенной схемы VisaHelper

Михаил, спасибо, очень помогли.

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

Александр, судя по
this.methods.approve = function() {
VisaHelper.approveAction(this, this.onSaved, this);
};
в VisaPage, попробуйте перекрыть метод onSaved, не вызывая callParent

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

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

Нравится

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

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

если вы используете BPMOnline 7.6 Sales, то в данной системе есть созданный компанией Террасофт объект "PivotGrid". Данный объект используется в разделе "Планирование" именно с помощью данного объекта я бы решил вашу задачу. Как работать с данным объектом можно подсмотреть в схемах раздела "Планирование". будут вопросы пишите. я именно данный объект "PivotGrid" переделал и использовал в своих задачах. К примеру я сделал огромную таблицу по ведению БДР и БДДС для экономической части своего проекта.

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

Добрый день Юрий, Олег!!!

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

Здравствуйте, Михаил!

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

Хм, понятно, тогда такой вопрос, а как создать раздел аналогичный Планированию? Не совсем по теме но все же из того же разряда использования PivotGrid, т.е. при обычной регистрации раздела у меня идет обращение через SectionModule, как это изменить. Если где то подобный вопрос поднимался скиньте пожалуйста ссылку, что то я найти не смог

Немножко не понял суть вопроса. и в особенности про "регистрацию раздела". Можно конкретный кусок кода привести в пример, где и к чему у вас идет обращение, и где возникает трабл. я тогда поясню. а сейчас немного сложно ориентироваться в пространстве. так как в BPM очень много одновременно отрабатывается схем, событий, callback-ов и не только. и еще раз повторюсь, чтобы вы понимали вся основная логика построена и работает с помощью генераторов страниц, это очень удобно, а все отталкивается от Базовой модели. Именно она всем рулит.

Олег, добрый день!

Для того, чтобы вместо SectionModuleV2 загружался Ваш модуль, необходимо определить уникальный идентификатор этого модуля (поле UId таблицы SysSchema) и подставить его для соответствующего раздела в поле SectionModuleSchemaUId таблицы SysModule. Например, в базовой версии уникальный идентификатор модуля SectionModuleV2 имеет значение "DF58589E-26A6-44D1-B8D4-EDF1734D02B4", а уникальный идентификатор модуля планирования (ForecastsModule) - "F38A00D3-94E1-46AB-89B5-2FCB685754C4", и соответственно эти значения указаны в SysModule.

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

из комментария Олега, Лабьяк теперь понял, что вы желаете. Могу здесь только добавить одно, так как в системе по умолчанию нет готовой Хранимой процедуры по регистрацию раздела и привязки к нему основной страницы редактирования. То в добавление к комментарию Олега, могу вам только посоветовать разобраться со структурой таблицы SysModule. Что в каком поле храниться, и что за что отвечает. На примере существующих разделов вам будет понятно. От себя скажу, что я всегда иду от обратного. Сначала регистрирую вручную в системе все свои страницы редактирования, детали. А уже после приступаю к регистрации разделов. Так более удобно, понятно. Но не забываем что после Регистрации всех страниц редактирования, деталей, разделов не забываем их подгрузить в Админке на закладке Конфигурация --> Данные. Чтобы при переносе своих доработок с Develop конфигурации на Рабочую конфигурацию у вас при загрузке загрузились бы схемы страниц, схемы данных, SQL скрипты. Я так же не забываю всегда это делать.

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

Добрый день уважаемые коллеги!!!

столкнулся вот с какой трудностью, создал модальное окно, разместил на модальном окне поля LookupEdit, TextEdit, CheckBox, Label. Выполнил верстку, Здесь проблем никаких не возникло. Описал viewModel, разместил все поля так как мне требуется. и вот какую проблемку обнаружил, сходу не нашел в чем проблема. На размещенном на ModalBox поле LookupEdit, требуется чтобы нашав на Иконку "Лупа" открылась модальная форма Выбора из справочника, для этого описал функцию "loadVocabulary". И в результате получаю следующее:

модальная форма до нажатие на Выбор из справочника:

модальная форма после нажатие на Выбор из справочника:

Во вложение прикладываю текст схемы модуля, модального окна.

Прошу подсказать, кто сталкивался, что требуется еще допилить, чтобы окно модальное "Выбор из справочника открывалось". Мое первое предположение, что нужно или на что-то дополнительно подписаться, или что-то опубликовать дополнительно и передать параметры.

Нравится

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

Привет всем!!!

не выдержала душа поэта, сам все решил. И теперь сделал так что при открытии N-ного количества LookupPage можно их открывать последовательно в цепочке, каждый теперь у меня LookupPage открывается и генерируется в своем DOM. можно свободно в цепочке возвращаться назад. по умолчанию террасофт такого не умел именно для объекта LookupPage. Теперь научил :smile:

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

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

у меня была задача Создать N-ое количество Lookup страниц (причем модальных), на данных страницах размещены LookupEdit поля и не только. Задача была чтобы не закрывая 1 Модальную Lookup страницу открыть N-ное количество Lookup страниц, причем в цепочке, чтобы можно было вернуться обратно. Первая проблема где я с этим столкнулся это было вызов "Выбора" из LookupEdit размещенного на Модальной Lookup странице. не работало в стандартном исполнении. Посмотрел в примерах по конфигурации, думал есть где уже данная проблема решалась, оказалось, что нет. Я немного помыслил и решил помимо Выбора чтобы можно было открывать Модальные карточки редактирования (вернее в них проваливаться). Вот 1 день труда и моя идея воплотилась в жизнь и работает в моем проекте.

"Власов Михаил Викторович" написал:

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

у меня была задача Создать N-ое количество Lookup страниц (причем модальных), на данных страницах размещены LookupEdit поля и не только. Задача была чтобы не закрывая 1 Модальную Lookup страницу открыть N-ное количество Lookup страниц, причем в цепочке, чтобы можно было вернуться обратно. Первая проблема где я с этим столкнулся это было вызов "Выбора" из LookupEdit размещенного на Модальной Lookup странице. не работало в стандартном исполнении. Посмотрел в примерах по конфигурации, думал есть где уже данная проблема решалась, оказалось, что нет. Я немного помыслил и решил помимо Выбора чтобы можно было открывать Модальные карточки редактирования (вернее в них проваливаться). Вот 1 день труда и моя идея воплотилась в жизнь и работает в моем проекте.


Добрый день Михаил!
Вы можете поделиться вашим решением?

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

Добрый день!
В разделе контрагентов имеются определенные динамические фильтры и группы. Пользователи будут соответственно удобным для себя образом структурировать объекты данного раздела. В дальнейшем необходимо использовать это в другом разделе (аналогично с планированием визитов), где контрагенты будут представлены деталью в разделе (см. скриншоты в аттаче).
Как можно реализовать подобный функционал?

Нравится

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

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

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

"Липатов Юрий Сергеевич" написал:

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

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

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


Юрий,доброго времени суток!
Это я прекрасно понимаю. Хотелось бы услышать от вас как это можно решить с точки зрения программирования на js

Добрый день.

Можно попробовать сделать следующее: необходимо добавить в функциональную кнопку детали Контрагентов(PlanningAccountDetailV2) пункт меню с вызовом метода ShowFolderTree из BaseSectionV2, но отрендерить в контейнер PlaningCardContainer. Так же нужно будет добавить пункт меню с возвратом к детали Контрагентов.

Представление «Планировение» сильно переделывалось и такое решение может не помочь.

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

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

Здравствуйте!
В разделе контрагента создаётся новая деталь. (новый объект, из которого формируется деталь).
В деталях, если какие-то поле справочник - щёлкнув по нему есть возможность перейти в карточку данной записи.
Мне необходимо, создать возможность перехода по гиперссылке, по полю, не являющемся справочником.
Можно ли это как-то реализовать самостоятельно, через код?

Нравится

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

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

поясните пожалуйста, если реквизит не является справочником и при этом будет являться Гиперссылкой, подскажите пожалуйста нажав на данную ссылку куда вы желаете потом перейти? немного непонял задачи. Так как если к примеру Реквизит имеет тип "Текст", и принудительно описать, что данный реквизит на детали будет Гиперссылка, то нужно будет не забывать, что еще и события по нажатию на Гиперссылку нужно будет отработать. Уточните пожалуйста задачу, я поделюсь примером из своих решений. Спасибо!!!

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

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

Посмотрите в пакете CTIBase деталь Активности.

Там должен быть пример обработчика клика по номеру телефона.

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

Добрый день!
Есть два вопроса по разделу планирование визитов в 7.6.

1)В разделе планирования визитов активности меняют цвет в соответствии со своим статусом. Этот код размещен на schedule-item.js. Как можно его переопределить под свои нужды? Необходимо менять цвет активности по другому условию (например)

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

Нравится

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

Никита, непонятно, о каких визитах идет речь.

Визиты появились в версии 7.6.

По второму вопросу - какой у Вас конкретный вопрос?

"Безродный Андрей" написал:

Никита, непонятно, о каких визитах идет речь.

Визиты появились в версии 7.6.

По второму вопросу - какой у Вас конкретный вопрос?


Я наверное перепутал версию. Приложил скриншот по поводу 1 вопроса.
Второй вопрос. "Необходимо запретить пользовательское изменение размера активности на расписании." Как это можно сделать?

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

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

Что касается второго вопроса - есть вариант сделать объект "Активность" администрируемым по колонкам и раздать доступ только на просмотр колонок "Начало" и "Завершение" для всех пользователей. Хотя визуально размер активности в расписании будет изменяться, фактически в этих полях будут оставаться прежние значения.

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

Спасибо за помощь!

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