есть простой до безобразия код:

var select = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Usrgifts" });

                select.addColumn("id");

                select.getEntityCollection(function(result) {

                    if (result.success) {

                        var collection = result.collection;

                        collection.each(function(item) {

                            this.set("UsrPriceodPresent", 34);

                        }, this);

                    }

                }, this);

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

можете подсказать в чем проблема?

Нравится

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

Добрый день

Такого не бывает :) На вкладке Network должна быть информация. И что значит вылетает? Он должен внутрь зайти только после возврата результата с сервера

Артем Гура,

Да, вы правы. Впечетление что оно внутрь заходит и там теряется(. Но это вроде прошло, скопировал другой рабочий запрос и по 1 строке переправил на тот что мне нужно -

var esq = Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "Usrgifts"});

                esq.addAggregationSchemaColumn("UsrPriceodPresent", Terrasoft.AggregationType.SUM, "RecalcGiftsAmountContact");

                esq.filters.add("OnlyEWS", this.Terrasoft.createColumnFilterWithParameter(

                    this.Terrasoft.ComparisonType.EQUAL, "Usrgiftscontact", this.get("PrimaryColumnValue")));

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

Заработало! Сначала все  написал)

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

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

Либо вариант, есть ли возможность фильтрации печатных форм, в зависимости от выбранной записи?

Нравится

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

Добрый день, Егор!

Вы можете выполнить настройку настройку печатных форм через Дизайнер системы - справочники - печатные формы.

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

Так же рекомендую ознакомиться со статьями на академии Террасофта: https://academy.terrasoft.ru/documents/sales-commerce/7-11/nastroyka-pe…

https://academy.terrasoft.ru/documents/sales-commerce/7-11/registraciya…

Так же я передам информацию по данному вопросу в отдел разработки для оценки и принятия решения внедрения данной возможности в новых версиях bpm'online.

 

Дело в том, что я понимаю как добавить печатную форму в меню Печать, просто у меня их порядка 30-40 в разделе контакты, и хотелось их группировать, для удобства поиска.

Алексaндр Егоров,

Добрый день, Егор!

Сделать группировку и фильтрацию вполне реально. Для этого нужно переопределить несколько методов. На примере будет понятнее.

К примеру, будем делать для карточки "Контакты". Перед тем как переопределять методы необходимо в секции attributes объявить все группы для группировки. Пусть для примера будет две группы:

attributes: {
	subMenuGroup1: {
		dataValueType: Terrasoft.DataValueType.COLLECTION
	},
	subMenuGroup2: {
		dataValueType: Terrasoft.DataValueType.COLLECTION
	}
}

Для карточки нужно переопределить методы initCardPrintForms и generateCardPrintForm и в них "перетасовать" все ваши печатные формы, например так:

initCardPrintForms: function(callback, scope) {
	this.callParent([function(callback, scope) {
		var position = 0;
		var myFirstPrintFormId = "4a0ad08a-8c80-e011-afbc-00155d04320c";
		var mySecondPrintFormId = "55e7f911-9def-48c6-8405-8e9b682bf3b3";
		//получаем коллекцию всех печатных форм
		var printMenuItems = this.get(this.moduleCardPrintFormsCollectionName);
		//создаем две группы печатных форм
		var subMenu1 = this.Ext.create("Terrasoft.BaseViewModelCollection");
		var subMenu2 = this.Ext.create("Terrasoft.BaseViewModelCollection");
		//для примера у нас две печатных формы, одну - в первую группу, другую - во вторую
		subMenu1.add(myFirstPrintFormId, printMenuItems.get(myFirstPrintFormId), position);
		subMenu2.add(mySecondPrintFormId, printMenuItems.get(mySecondPrintFormId), position + 1);
		this.set("subMenuGroup1", subMenu1);
		this.set("subMenuGroup2", subMenu2);
		//переменная для хранения всего меню печатных форм
		var printMenu = this.Ext.create("Terrasoft.BaseViewModelCollection");
		//добавляем две группы
		printMenu.add(printMenu.getUniqueKey(), this.getButtonMenuItem({
			"Caption": {"bindTo": "Resources.Strings.ReportGroup1"},
			"Items": {"bindTo": "subMenuGroup1"}
		}), position);
		printMenu.add(printMenu.getUniqueKey(), this.getButtonMenuItem({
			"Caption": {"bindTo": "Resources.Strings.ReportGroup2"},
			"Items": {"bindTo": "subMenuGroup2"}
		}), position + 1);
		//устанавливаем на меню печати
		this.set(this.moduleCardPrintFormsCollectionName, printMenu);
	}, this]);
},
generateCardPrintForm: function(tag) {
	var cardPrintFormsCollection = this.get(this.moduleCardPrintFormsCollectionName);
	var menuGroups = [];
	cardPrintFormsCollection.each(function(item) {
		menuGroups.push(item.get("Items").bindTo);
	});
	var printForm;
	for (var i = 0; i < menuGroups.length; i++) {
		var subMenu = this.get(menuGroups[i]);
		if (subMenu.contains(tag)) {
		printForm = subMenu.get(tag);
		}
	}
	this.generatePrintForm(printForm);
}

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

Обращаю ваше внимание, что если вам необходимо делать все это для раздела, а не карточки, то не стоит забывать, что там кроме этих методов необходимо кроме указанных выше переопределить методы initSectionPrintForms и generateSectionPrintForm, которые будут работать с реестром, а при открытии карточки в совмещенном режиме (Combined Mode) отработают методы initCardPrintForms и generateCardPrintForm.

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

Добрый день! Пытаюсь получить через DataService web service  список аккаунтов.

1. Первым делом авторизуюсь:

Post http://mydomain/ServiceModel/AuthService.svc/Login (Try to auth)
Postfield: '{"UserName":"xxx","UserPassword":"yyy"}'
Total time: 0.047, connect time: 0.016, size: 84
Recieved cookie: BPMLOADER: r1jyukv11qu21m3pmdbzkpci
Recieved cookie: .ASPXAUTH: 8F7AF926D3E294AF47CF293C6EB584CA15B7D613356C67C11C5CE6809EB5999A4ACE2B8AB25264A0AF059DAA10CCD0D6B5401AADC3A8B3362AA50D127A34BD1BFA95162304FD73720563C83BA6B808957C49B408C77B0B8911E1098B5A2AC2115EAB24D3F4BDA3F6A196F3578B58397142A26D3BD53EE5641D35C684D45F9236CB991D31033746E3D4656214E35160339050BD4E2DB42DDE1E72F46AD358DBB4974C90DBEC4772244B6BA86FAE3D917E6EB97D286B1F593F4C6FAB494DA19E2F13B7B3F8AE4063CB3880896D8E2E06A914409A866C2B5564F1630622C370335968FA761BC23DCFC13EC09B1EB97DD9A9C07AA921C1DC2C2CD99F7C8E32B9946A04E59C4A40B0311723A53C4D6427A4DE67152F471F69FE0F4B22D3ADAABE812240D404A05B2FEC57014C73FFB4A5A5CE43625D2348579FC792F05343C3AFA7191205CDE70636CB995A65CC1294E11C94922A74576D34E8A0E952FB4947C1102036331298
Recieved cookie: BPMCSRF: NNvOddpIAkRg61RqcS3a6.
Recieved cookie: UserName: xxx
 
Reply:
{"Code":0,"Message":"","Exception":null,"PasswordChangeUrl":null,"RedirectUrl":null}

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

 

2. Далее пробую запросить данные:

Post http://mydomain/json/reply/SelectQuery (Try to get data)
Postfield: '{"RootSchemaName":"Contact"}'
Use cookie: BPMLOADER=r1jyukv11qu21m3pmdbzkpci; .ASPXAUTH=8F7AF926D3E294AF47CF293C6EB584CA15B7D613356C67C11C5CE6809EB5999A4ACE2B8AB25264A0AF059DAA10CCD0D6B5401AADC3A8B3362AA50D127A34BD1BFA95162304FD73720563C83BA6B808957C49B408C77B0B8911E1098B5A2AC2115EAB24D3F4BDA3F6A196F3578B58397142A26D3BD53EE5641D35C684D45F9236CB991D31033746E3D4656214E35160339050BD4E2DB42DDE1E72F46AD358DBB4974C90DBEC4772244B6BA86FAE3D917E6EB97D286B1F593F4C6FAB494DA19E2F13B7B3F8AE4063CB3880896D8E2E06A914409A866C2B5564F1630622C370335968FA761BC23DCFC13EC09B1EB97DD9A9C07AA921C1DC2C2CD99F7C8E32B9946A04E59C4A40B0311723A53C4D6427A4DE67152F471F69FE0F4B22D3ADAABE812240D404A05B2FEC57014C73FFB4A5A5CE43625D2348579FC792F05343C3AFA7191205CDE70636CB995A65CC1294E11C94922A74576D34E8A0E952FB4947C1102036331298; BPMCSRF=NNvOddpIAkRg61RqcS3a6.; UserName=XXX; BPMSESSIONID=5k0j1gso45wpxqbm5ajckuob
Total time: 0.031, connect time: 0.015, size: 1222
 
Reply:
 
Array
(
    [http/1.1] => 403 Forbidden
    [content-type:] => text/html
    [server:] => Microsoft-IIS/8.5
    [x-powered-by:] => ASP.NET
    [x-frame-options:] => SAMEORIGIN
    [date:] => Fri, 08 Dec 2017 14:34:17 GMT
    [connection:] => keep-alive
    [content-length:] => 1222
)
 
Ошибка сервера
403 - запрещено. Доступ запрещен.
Предоставленные учетные данные не дают права на просмотр этого каталога или страницы.
 

В чем проблема, что не так?

Нравится

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

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

а сайт точно работает под http, а не под https? попробуйте добавить в куки "secure; HttpOnly;"

Или просто попробовать подключиться по http и по https.

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

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

Нравится

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

Добрый день

Вопрос не понятен. Какая синхронность вам нужна?

Артем Гура,

 esq.getEntityCollection

Ответ - синхронно сделать не получится/ну либо получится, но тогда у пользователя будет виснуть браузер в ожидании ответа сервера (см xmlhttprequest).

Если нужно вручную вызывать нужные функции последовательно - Terrasoft.chain в помощь.

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

Добрый день!

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

Вопрос - есть ли возможность выгружать настроенные фильтры во всех  дашбордах в отдельный файл?

Нравится

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

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

На данный момент, в системе не предусмотрена выгрузка в файл фильтров, согласно которым формируются дашборды В приложении есть возможность выгружать отфильтрованные данные в файл формата *.csv.

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

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

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

Добрый день! 

Установил дополнение, но оно не работает, требует регистрации деталей в справочнике. Что нужно сделать? Спасибо!

Нравится

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

Здравствуйте! Извините за задержку с ответом. С утра вам ответят мои коллеги

Добрый день! На нашем сайте есть инструкция, в которой подробно расписаны использование и настройка Change log for bpm'online (https://samarasoft.com/changelog/). 

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

 

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

Здравствуйте, подскажите пожалуйста как в отчете прибавить к полю типа Дата 3 года?

Нравится

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

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

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

В качестве решения Вашего кейса можем предложить:

- создать на странице, к которой привязан отчет Ms Word, дополнительное поле с типом "Дата";

- реализовать заполнение нового поля нужным значением, например, с помощью бизнес-процесса (в бизнес-процессе использовать элемент "Формула" для суммирования значения Вашего поля с типом "Дата" и 3х лет);

- вывести поле с полученным расчетным значением в шаблон отчета Ms Word.

Больше о функциональности бизнес-процессов Вы сможете узнать на Академии: https://academy.terrasoft.ru/documents/technic-bpms/7-11/dizayner-processov

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

Здравствуйте! Столкнулся с такой вот проблемой, поставил пакеты (2 пакета) на среду разработки, работал. И нужно было зайти в мастер раздела, и тут вывелась ошибка:

"ValidateException. Последовательность пакетов содержит цикл: "IdeaModule-->IdeaObjectInitialization-->IdeaModule" (это 2 моих пакета)

Изображение удалено.

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

 

Нравится

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

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

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

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

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

Подскажите, нигде не могу найти ответ. Есть страница для двухуровневого справочника (По аналогии со справочником "Результат активности по категориям" в интерфейсе 5.х). Из дизайнера страниц запускается, работает (добавляет, удаляет). Как привязать страницу к самому справочнику, чтобы она открывалась из раздела "Справочники"? 

Прикрепленные файлы

Нравится

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

Здравствуйте, Лидия!

Системные составные справочники, основанные на устаревших aspx страницах еще функционируют благодаря таблице «SysLookup». Которая содержит необходимую информацию по страницам редактирования. На пользовательском уровне указать их уже нельзя задать.

 

Вы можете посмотреть, как устроен справочник:

SELECT * FROM [Lookup] WHERE Name = 'Communication option types'

И увидеть у него в последней колонке SysLookupId ссылку на:

SELECT * FROM SysLookup WHERE Id = 'BE01987D-37FE-DF11-B154-001D60E938C6'

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

 

Также aspx страницы не рекомендуются к использованию, если вам необходим справочник на старом интерфейсе, смотрите, как устроен 'Communication option types', но лучше придумать обходное решение на новом интерфейсе.

 

Ниже примерный алгоритм реализации:

 

1. создаете новый справочник, у Вас должна появиться запись в Lookup;

2. добавляете в старую таблицу SysLookup запись:

                -  в SysGridPageSchemaUid это Uid схемы из таблицы SysSchema;

                -  в SysEntitySchemaUid это Uid объекта, который выступает в качестве справочника;

                - в другие колонки заполняете советующими значениями;

3. в таблице Lookup нужного справочника в колонке SysLookupId заполняете Id из пункта 2.

 

Также подобная тема была на community - https://community.terrasoft.ru/questions/sloznyi-spravocnik-v-bpmonline…

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

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

Нравится

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

1) с помощью бизнес правил. прописать их в странице редактирования карточки этой детали

2) там есть кусок, в котором формируется контрол. можно для определённых полей прописать enabled: false (прям в коде детали)

getDefaultCellControlsConfig: function(columnName, params) {
	var config = {
		itemType: Terrasoft.ViewItemType.MODEL_ITEM,
		name: columnName,
		labelConfig: {visible: false}
	};
	if (columnName === "TmName") {
		config.enabled = false;
	}
}

+можно попробовать в объекте сделать режим использования нужной колонки - никогда (в этом способе я не уверен)

Добрый день! Попробуйте в модуле детали (который от BaseDetailV2 наследуется) определить isEditableColumn(columnName). Чтобы он заработал, в методе на детали generateActiveRowControlsConfig, в конфиге поля задать свойству enabled соответствие методу isEditableColumn

generateActiveRowControlsConfig: function(id, columnsConfig, rowConfig) {
                this.columnsConfig = columnsConfig;
                var gridLayoutItems = [];
                var currentColumnIndex = 0;
                this.Terrasoft.each(columnsConfig, function(columnConfig) {
                    var columnName = columnConfig.key[0].name.bindTo;
                    var column = this.getColumnByColumnName(columnName);
                    var cellConfig = column ? this.getCellControlsConfig(column)
                        : this.getNotFoundCellControlsConfig(columnName);
                    cellConfig = this.Ext.apply({
                        layout: {
                            colSpan: columnConfig.cols,
                            column: currentColumnIndex,
                            row: 0,
                            rowSpan: 1
                        }
                    }, cellConfig);
 
                    cellConfig.enabled = this.isEditableColumn(columnName);
 
                    if (!cellConfig.hasOwnProperty("isNotFound")) {
                        gridLayoutItems.push(cellConfig);
                    }
                    currentColumnIndex += columnConfig.cols;
                }, this);
                var gridData = this.getGridData();
                var activeRow = gridData.get(id);
                var rowClass = {prototype: activeRow};
                BusinessRulesApplier.applyRules(rowClass, gridLayoutItems);
                var viewGenerator = this.Ext.create("Terrasoft.ViewGenerator");
                viewGenerator.viewModelClass = this;
                var gridLayoutConfig = viewGenerator.generateGridLayout({
                    name: this.name,
                    items: gridLayoutItems
                });
                rowConfig.push(gridLayoutConfig);
            }

 

Благодарю! Помогло! Рекомендую!

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