В процессе, в рамках одного "Задания-Сценария" идет цикл по строкам (продуктам).
По логике, в этом цикле идет запрос в другую сущность, и если ничего не возвращает, делает новую строку в той сущности.
Если находит, то делает апдейт найденной строки.

Вопрос: Если в списке строк попадутся обе ситуации, и при первом проходе будет создана нужная запись, то при втором проходе запрос ее не возвращает - это потому что entity.Save реально в базу изменения внесет только после окончания сценария, или даже всего процесса?
Или нужно просто ввести временной лаг после добавления записи, чтобы успела система все сохранить?

Нравится

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

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

Версия 7.7.0.2325

Реализована пользовательская деталь с двумя справочными полями и редактируемым реестром.
Подскажите как можно реализовать фильтрацию одного справочного поля по значению другого.
С помощью BusinessRuleModule не получилось.

Нравится

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

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

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

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

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

attributes: {
"UsrProductParamValue": {
	dataValueType: Terrasoft.DataValueType.LOOKUP,
	lookupListConfig: {
		filters: [
			function() {
				debugger
				var filterGroup = Ext.create("Terrasoft.FilterGroup");
 
				return filterGroup;
			}
		]
	}
}
}				

но при открытии поля, debugger не срабатывает, т.е. функция не вызывается и ошибок нет. Бизнес правило тоже не срабатывает, выводиться вся таблица.

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

"Щиголь Максим" написал:

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

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

Посмотрите эту тему, там подобную задачу решили.
http://www.community.terrasoft.ru/forum/topic/13684

Илья спасибо. Проблема решилась добавлением страницы редактирование и созданием бизнес правила в ней.

Есть еще момент, на детали при повторном создание нового значения по полю UsrProductParamValue, через функционал быстрого создания(в поле вводиться значение и если его нет появляется "Создать ..."), возникает ошибка в функции SectionBundleModule.tryCreateEntityOrOpenCard
...
valuePairs.add(columnPath, {columnPath: columnPath, columnValue: columnValue});
Текст ошибки: Элемент с ключём "UsrProductParam" Уже существует.
Если обновить страницу и повторить действия то значение добавляется без ошибок, но если выбрать другую запись и попытаться добавить новое значение UsrProductParamValue, то возникает ошибка.

Код детали и страницы редактирования в приложении.
С деталью работает через редактируемый реестр. Структура детали: два справочных поля (диаграмма связей в приложении)

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

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

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

Подписаться на данное событие невозможно. Данная логика описана в миксине LookupQuickAddMixin. В данном случае событие можно поймать в методе onLookupChange. Привязка данного метода к лукапному полю происходит в модуле ViewGeneratorV2, от которого наследуется ConfigurationGridGenerator, который в свою очередь и строит грид детали. Вы можете создать свой генератор по аналогии с ConfigurationGridGenerator где и заместить данный метод, в котором бросать событие, используя sandbox. Так же можно напрямую заместить LookupQuickAddMixin, переопределив нужный метод.

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

activeRowSaved: function(row, callback, scope) {
	scope = scope || this;
	callback = callback || this.Terrasoft.emptyFn;
	callback.call(scope);
	debugger;
	this.updateDetail({
		reloadAll: true
	});
}

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

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

Для замещения LookupQuickAddMixin, необходимо создать новый миксин, унаследовавшись от LookupQuickAddMixin. Примеров такого замещения достаточно в конфигурации, к примеру, CtiPanelCommunicationHistoryUtilities. Затем добавляете созданный миксин в нужное Вам место. Добившись вызова методов созданного миксина, достаточно будет установить дополнительную проверку перед вызовом строки valuePairs.add(columnPath, {columnPath: columnPath, columnValue: columnValue}); Данная строка и выдает ошибку.

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

Да, вы правильно поняли по поводу замещения миксинов. Как вариант, можете посмотреть в сторону ConfigurationGridGenerator и разобраться как он генерирует лукапы. Далее попробовать подменить методы. Данная задача будет не из простых. Так же посмотрите в сторону метода generateActiveRowControlsConfig из ConfigurationGridUtilites. Ошибка возникает после вызова строки:
BusinessRulesApplier.applyRules(rowClass, gridLayoutItems);

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

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

Версия 7.7.0.2293

В раздел Документы по аналогии с разделом Счета добавил мультивалютное поле (код страницы в приложении).

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

Подскажите пожалуйста в чем дело?

Нравится

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

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

Добрый день.
Я думаю что данное поведение наблюдается из-за того что в модуле MultiCurrencyEditUtilities в методе onCurrencyMenuItemClick грубо идет запись в поле Currency, т.е. если если у вас есть префикс Usr и т.п. то оно не сработает. Я сталкивался с данной проблемой и т.к. нужно было добавить мультивалютное поле в пользовательский раздел то помогло замещение данного модуля и переопределение метода следующим образом(лучше было конечно взять префикс с системной настройки, а не грубо забивать):

onCurrencyMenuItemClick: function(menuItem) {
			var currency = this.get("CurrencyRateList").find(menuItem);
			var prefix = "Usr";
			if(this.entitySchemaName.substring(0, prefix.length) == prefix) {
				this.set(prefix + "Currency", currency);
			} else {
				this.set("Currency", currency);
			}
		}

В случае с документами это возможно вам не поможет, но хоть будете знать куда смотреть)

Илья, ошибок не было.

Роман, спасибо навели на решение, добавил виртуальную колонку Currency, когда она изменяется устанавливаю значение в UsrCurrency:

attributes: {
...
    "Currency": {
		"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
		"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
		"lookupListConfig": {
			"columns": ["Division"]
		},
		"dependencies": [
			{
				"columns": ["Currency"],
				"methodName": "onVirtualCurrencyChange"
			}
		]
    }
},
methods: {
...
	onVirtualCurrencyChange: function() {
		var currency = this.get("Currency");
		this.set("UsrCurrency", currency);
	}
}

Помогите разобраться. Делал на версии платформы 7.8. Вроде как-то работает, но не то что-то.

1) Название поля получилось не "Сумма, р.", а "500, р." именно цифрами сумма:

2) Как исправить логику пересчета суммы в валюте в сумму в б.в.

Курс валюты пишет хххх EUR = 1 руб, а должно быть наоборот ххх руб. = 1 EUR... как результат и считает в обратную строну - т.е. сумма в б.в. получается меньше чем сумма в валюте (в случае с евро).

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

Здравствуйте.
У меня есть Лендинг. По нему создается лид и контакт. Можна ли в карточке контакта отобразить поле Лендинга по котором произошла реестрация данного контакта? Если да, то как это реализовать?

Нравится

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

Николай,
лендинг и контакт не связаны напрямую, они связаны через лид. Поэтому для связи лендинга и контакта необходимо:
1) Добавить на страницу контакта поле "Лендинг", аналогичное тому, что находится на странице лида во вкладке "История";
2) Создать бизнес-процесс, который бы копировал значение поля "Лендинг" из лида в контакт, при добавлении нового контакта.

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

Подскажите, пожалуйста, есть ли возможность отключить проверку indentation в функционале проверки кода?
А то количество ошибок таких большое, автоматического beautify нету, а сторонний из Notepad++ никак не удается настроить так, чтобы его взгляд на красоту кода совпадал со взглядом конфигуратора bpm'online :(
А видеть ошибки в коде - полезно, как ни крути..

Нравится

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

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

Ошибки конфигуратора - это проверка кода на красоту, а не его работоспособность. Отключить данную проверку при сохранении схем нет возможности.

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

Здравствуйте, Алексей Владимирович.

Рекомендуем Вам вместо Notepad++ использовать IDE c автоматической проверкой кода на наличие ошибок JavaScript, ведь пропущенная запятая является ошибкой, а не сделанный отступ нет. Например: JetBrains WebStorm, Brackets или Visual Studio 2015 community. Две из этих IDE являются бесплатными.

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

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

Добавляю в кнопку "Действие" свой пункт, все по фэн-шую, то есть SDK.
Вот фрагмент:

actionMenuItems.addItem(this.getActionsMenuItem({
        Type : "Terrasoft.MenuSeparator",
        Caption : ""
}));
// Добавление пункта меню [Проверить заказ] в список действий страницы редактирования.
actionMenuItems.addItem(this.getActionsMenuItem({
// Привязка заголовка пункта меню к локализуемой строке схемы.
        "Caption" : {
        bindTo : "Resources.Strings.UsrCheckOrder"
},

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

Нравится

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

Здравствуйте, Алексей Владимирович.

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

Пожалуйста..

define("OrderPageV2", ["OrderPageV2Resources", "GeneralDetails", "ProcessModuleUtilities", "NotificationsModule"],
	function(resources, GeneralDetails, ProcessModuleUtilities, NotificationsModule) {
	return {
		entitySchemaName : "Order",
		details: /**SCHEMA_DETAILS*/{},/**SCHEMA_DETAILS*/
		diff: /**SCHEMA_DIFF*/[],/**SCHEMA_DIFF*/
		attributes: {},
		methods: {
			getActions : function() {
				// Вызывается родительская реализация метода для получения
				// коллекции проинициализированных действий базовой страницы.
				var actionMenuItems = this.callParent(arguments);
				// Добавление линии сепаратора для визуального отделения пользовательского действия от списка
				// действий базовой страницы.
				actionMenuItems.addItem(this.getActionsMenuItem({
						Type : "Terrasoft.MenuSeparator",
						Caption : ""
					}));
				// Добавление пункта меню [Проверить заказ] в список действий страницы редактирования.
				actionMenuItems.addItem(this.getActionsMenuItem({
						// Привязка заголовка пункта меню к локализуемой строке схемы.
						"Caption" : {
							bindTo : "Resources.Strings.UsrCheckOrder"
						},
						// Привязка метода обработчика действия.
						"Tag" : "CheckOrderPay"
						// Привязка свойства видимости пункта меню к значению, которое возвращает метод isAccountPrimaryContactSet.
						//"Visible": { bindTo: "isAccountPrimaryContactSet" }
					}));
				actionMenuItems.addItem(this.getActionsMenuItem({
						Type : "Terrasoft.MenuSeparator",
						Caption : ""
					}));
				return actionMenuItems;
 
			},
			// Метод-обработчик выбора действия.
			CheckOrderPay : function() {
				// Получение идентификатора заказа.
				var OrderId = this.get("Id");
				// Объект, который будет передан в качестве аргумента в метод executeProcess.
				var args = {
					// Имя процесса, который необходимо запустить.
					sysProcessName : "UsrCheckOrder",
					// Объект со значением входящего параметра для процесса.
					parameters : {
						idOrder : OrderId
					}
				};
				// Запуск пользовательского бизнес-процесса.
				ProcessModuleUtilities.executeProcess(args);
				//Terrasoft.configuration.NotificationsModule.onShowNewNotificationClick();
				//this.Location.Reload(false);
			}
		},
		rules : {},
		userCode : {}
	};
});

В Resources.Strings.UsrCheckOrder Заголовок и значение одинаковы, Проверить заказ
Строчка с Visible закоментирована в точности как указано, но функции, указанной там, в теле схемы нет..

Здравствуйте, Алексей Владимирович.

Мы проанализировали Ваш код. Данное поведение возникает у Вас, по причине того, что используя статью http://academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/AddActionT… Вы не выполнили пункты начиная с 6-го. После добавления локализированной строки в OrderSectionV2 данная проблема возникать не будет.

Спасибо за анализ, но я не повторяю типовое задание, а делаю свое, и у меня нет необходимости контролировать видимость пункта в зависимости от статуса заказа.
При любом статусе кнопка видна, по задумке.
Сейчас ситуация такова:
1. Ctrl+F5
2. Создаю заказ. Текст пункта виден.
3. Сохраняю заказ.
4. Открываю на редактирование только что созданный заказ - текст не виден.
5. Ctrl+F5 и открываю заказ опять - текст виден.
6. Закрываю заказ кнопкой "Закрыть".
7. Открываю заказ, текст пункта не виден.

Я понимаю, что, возможно, я где-то что-то не так сделал. Мне интересно что делать дальше?
Сейчас вот подумалось, что надо сделать новую локализуемую строку и попробовать ее назначить вместо прежней. Сделаю, отпишусь.

Увы, ситуация не изменилась, текст пропадает.
data-item-marker и текст, с ним совпадающий, показывается только в первый раз после полной перезагрузки.
Попробую пересоздать замещающую схему.

Здравствуйте, Алексей Владимирович.

Копирую Ваш код предварительно изменив его для ContactPageV2 и добавляю локализированную строку.

Результат:
При создании контакта элемент виден.

При открытии контакта элемент отсутствует.

Добавляем замещающую схему раздела с такой же локализированной строкой.

В результате элемент не пропадает.

Сергей, Спасибо! Урок усвоен :redface:

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

Здравствуйте!
Есть задача добавить поле с выпадающим списком(наполнение справочника), значение которого будет является быстрым фильтром для реестра справочников.
Отображаться данная страница справочника будет всего в одном месте (в процессе).
Также необходимо добавить некоторую логику на возможность выбора/отмены выбора значений в реестре справочника и кастомные стили.

Подскажите пожалуйста, как лучше реализовать данную задачу?

Нравится

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

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

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

Здравствуйте. Насколько мне известно у автогенерируемых страниц весьма урезанный функционал.
Поле добавить можно, но вот расширить функционал LookupPage - нет.

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

Также при изменении типа должна отрабатывать фильтрация.

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

В таком случае Вам необходимо использовать элемент "Преднастроенная страница".

Естественно, страницу, ссылающуюся на города, придется создать.

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

Здравствуйте! Пример создание преднастроенной страницы для процесса описан

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

Вам необходимо
1) создать страницу редактирования
2) унаследоваться от LookupPageV2
3) добавить на страницу поле "Тип продукта", которое будет смотреть в соответствующий справочник
4) добавить фильтрацию по значению в этом поле (для отображения записей, соответствующих значению в этом поле)
5) добавить мультивыбор. Пример реализации рекомендую посмотреть ActivityParticipantDetailV2, метод openContactLookup (выбор контакта) и addCallBack (добавления выбранных записей на деталь. В Вашей задачи решение, скорее всего будет другим, например, запись в параметр страницы).
6) Обработка заданного параметра дальнейшими элементами процесса.

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

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

Существует вопрос с использованием полнотекстового поиска mssql 2014 и bpm 7.x

Вопрос заключается в Задаче:

Необходимо реализовать такую систему поиска, при которой пользователь bpm.online в строке поиска (какая-нибудь кастомная строка поиска) заводит интересующий его запрос.
После запуска поиска пользователем, система должна выдать результаты:
а) по всем соответствующим запросу записям в bpm'online
б) по всем приаттаченым к записям документам(word и т.д.), причем если приложен текстовый документ, поиск должен происходить не только по наименованию, но и по его содержанию.

Существуют ли какие-нибудь решения в этом направлении, подсказки, советы и т.д.
Особенно в пункте "Б".

Нравится

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

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

Просто оставлю здесь эту ссылку.

"Демьяник Алексей" написал:

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

Просто оставлю здесь эту ссылку.

Алексей, спасибо за ответ, я эту информацию видел.

У меня стоит задача не покупать/использовать партнерское решение, а найти советы для последующей разработки механизма полнотекстового поиска по документам для конкретного проекта-внедрения. Используя при этом компонент sql full-text search.

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

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

Полнотекстовый поиск есть в модуле расширенной работы с файлами, тот же самый что и в PT Docs.

Вот страница на комьюнити.
Вот страница в маркетплейс.

Коллеги, обращайтесь!

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

Как можно переделать к примеру раздел Договора из обычного реестра в древовидный?
Версия 7.7

Нравится

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

Всем привет, вот какая проблема:
Создал деталь в Мастере деталей. Потом решил переименовать ее, но там я не нашел как переименовать, только создавать новые. Удалив схему старой детали(скомпилировав) я начал создавать новую деталь, заполнив вкладку "Деталь" перешел на "Страницу" и повисло:

У кого какие идеи?

Нравится

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

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

можно попробовать так:

1. Сгенерировать код для требующих генерации
2. Компилировать измененное
3. зайти в схему где эта деталь находиться и в секции detail, проверить, чтобы не было ссылок на старую деталь.

Если не поможет- обратитесь в поддержку Terrasoft.

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