Вопрос

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

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

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

Нравится

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

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

Dima Avdoshin,

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

Булат Хабирзянов,

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

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

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

Вопрос был в том можно ли словить в коде продукты выбранные с помощью ctrl.

Таким образом. Буду рад если вы поделитесь идеями, как можно такое реализовать.

Булат Хабирзянов,

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

в кол бэке же можно уже отловить поля которые человек выбрал

и в конфиге прописать 

config.multiSelect = true;
только не забудь иначе поставить, что бы базовая логика для обычных справочных полей отрабатывала
 openLookup: function (config, callback, scope) {
                    var self = this;
					if (config.columnName === "qrtOptionServiceTransit") {
						var options = this.get("qrtIdsOptions");
						var list = [];
						if(options) {
							list = options.split(",");
						}
                        var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
                            rootSchemaName: "qrtOptionServiceTransit"
                        });
						esq.addColumn("Id");
                        var collectionOptions = self.get("qrtOptionsCollection");
 
 
                        if(collectionOptions !== null	&& collectionOptions.length !== 0) {
 
							var esqFirstFilter = esq.createColumnInFilterWithParameters("Id", collectionOptions);
							esq.filters.add("esqFirstFilter", esqFirstFilter);
						} else {
							esq.filters.add("filter01", this.Terrasoft.createColumnFilterWithParameter(
                                this.Terrasoft.ComparisonType.EQUAL, "Id", this.get("Id")));
						}
 
                        esq.getEntityCollection(function (result) {
                            if (result.success) {
                                var existsContactsCollection = [];
                                var selectedRows = [];
                                result.collection.each(function (item) {
                                    var id = item.get("Id");
 
                                    if(list.includes(id)){
                                        selectedRows.push(id)
                                    }
                                    existsContactsCollection.push(id);
                                });
 
                                config.multiSelect = true;
 
                                config.selectedRows = (list[0] !== "") ? selectedRows : null;
 
                                if(existsContactsCollection.length !== 0) {
									var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id",existsContactsCollection);
									existsFilter.comparisonType = this.Terrasoft.ComparisonType.EQUAL;
									existsFilter.Name = "existsFilter";
									config.filters = existsFilter;
								} else {
									var existsFilter = this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "Id", this.get("Id"));
									existsFilter.comparisonType = this.Terrasoft.ComparisonType.EQUAL;
									existsFilter.Name = "existsFilter";
									config.filters = existsFilter;
								}
                                Terrasoft.LookupUtilities.open({
                                    "lookupConfig": config,
                                    "sandbox": this.sandbox,
                                    "keepAlive": config.keepAlive,
                                    "lookupModuleId": config.lookupModuleId,
                                    "lookupPageName": config.lookupPageName,
                                }, this.addCallBack, this);
 
                            }
                        }, this);
						//<----------------
					} else {
						Terrasoft.LookupUtilities.open({
							"lookupConfig": config,
							"sandbox": this.sandbox,
							"keepAlive": config.keepAlive,
							"lookupModuleId": config.lookupModuleId,
							"lookupPageName": config.lookupPageName,
						}, this.addCallBack, this);
					}
				},
 
                addCallBack: function (args) {
					this.selectedRows = args.selectedRows.getItems();
					this.selectedItems = [];
					var selectedItems2 = [];
 
					this.selectedRows.forEach(function (item) {
						this.selectedItems.push(item.displayValue);
						selectedItems2.push(item.value)
						this.loadLookupDisplayValue(args.columnName, item.value);
					}, this);
 
					if(args.columnName === "qrtOptionServiceTransit") {
						this.set("qrtOptions", (String(this.selectedItems)).replace(/,/g, ";\n"));
						this.set("qrtIdsOptions", String(selectedItems2).replace(/,/g, ","));
					}
					//<----------------
				},

 

Dima Avdoshin,

Спасибо за наводку, но я нашел то. что мне нужно

// Метод-обработчик действия. Отображает в информационном окне список контрагентов.
showOrdersInfo: function() {
		var opportunityId = this.get("OpportunityId");
		// Получение массива идентификаторов выбранных записей.
		var selectedRows = this.get("SelectedRows");
		console.log(selectedRows);
		// Получение коллекции данных записей реестра.
		for(var i = 0; i < selectedRows.length; i++){
			var args = {
				// Имя процесса, который необходимо запустить.
				sysProcessName: "IptChangePriceListSelectedProducts",
				// Параметры процесса
				parameters: {
					OpportunityId: opportunityId,
					Product: selectedRows[i],
					PriceList: "24D9B628-C3FC-45E2-AC97-7CD17CE22FB9",
				}
			};
			// Запуск пользовательского бизнес-процесса.
			ProcessModuleUtilities.executeProcess(args);
		}
},

в детали добавил кнопку, привязал функцию выше на кнопку, где запускаю процесс

и все прекрасно работает. 

var selectedRows = this.get("SelectedRows"); создает массив из выбранных с помощью ctrl объектов. 

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