Вопрос

Добрый день!

Столкнулся с проблемой, поле справочника Состояние на детали графика оплат и поставок на вкладке Паспорт в заказе, в справочнике два значения (Выполнер/Не выполнен) и более не предвидится.

Хотелось бы переделать в выпадающий список, но у поля State замещающего объекта SupplyPaymentElement в пакете с моими доработками галка "Cписок" снята и задизейблена.

Как теперь это обойти?

У меня такой же вопрос

11 комментариев
Лучший ответ

Добрый день, можете в замещающей схеме добавить метаданные, сохранить их и опубликовать:
+ MetaData.Schema.D2.["0a3324bb-55c8-4791-b51f-409cfedc6fe2"].E20 true
это добавит признак список к колонке UID которой указан в квадратных скобках

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

Алла Савельева,

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

Борис Леонов,

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

                {
                    "operation": "insert",
                    "parentName": "Header",
                    "propertyName": "items",
                    "name": "State",
                    "values": {
                        "bindTo": "State",
                        "contentType": Terrasoft.ContentType.ENUM,
                        "layout": {"column": 12, "row": 3, "colSpan": 12}
                    }
                },

Или же создать не замещающий объект, а унаследованный от SupplyPaymentElement, тогда признак 'Список' у поля 'State' будет доступен.

Алла Савельева,

У вас первый вариант прям получилось осуществить? Я сразу так сделал, только "operation" не "insert", а "merge", не работает на детали, действует только на карточку.

А второй как провернуть, что бы остальную логику не переделывать или обойтись минимальными доработками?

Борис Леонов,

Верно, первый вариант работает только для карточки редактирования - я так и написала.

А для отображения в виде списка в редактируемом реестре подойдет только второй вариант.

Как добавить унаследованный объект описано в статье, смотрите 'Создание пользовательской схемы объекта' и 'Указание родительского объекта'.

Алла Савельева,

завтра попробую

Добрый день, можете в замещающей схеме добавить метаданные, сохранить их и опубликовать:
+ MetaData.Schema.D2.["0a3324bb-55c8-4791-b51f-409cfedc6fe2"].E20 true
это добавит признак список к колонке UID которой указан в квадратных скобках

Колодяжный Владислав Эдуардович,

добавление метаданных работает, спасибо!

Интересно, а в методе getCellControlsConfig это можно как то провернуть?

См. тут.

Зверев Александр,

Благодарю!

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

Подскажите,можно ли виртуальное поле типа LOOKUP сделать выпадающим списком?

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

У меня такой же вопрос

3 комментария
Лучший ответ

Обычно хватает добавить в diff "contentType": Terrasoft.ContentType.ENUM

{
	"operation": "insert",
	"name": "AccountType",
	"parentName": "ProfileContainer",
	"propertyName": "items",
	"values": {
		"bindTo": "Type",
		"layout": {
			"column": 0,
			"row": 2,
			"colSpan": 24
		},
		"contentType": Terrasoft.ContentType.ENUM
	}
},

 

А если не менять данные есть?

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

Обычно хватает добавить в diff "contentType": Terrasoft.ContentType.ENUM

{
	"operation": "insert",
	"name": "AccountType",
	"parentName": "ProfileContainer",
	"propertyName": "items",
	"values": {
		"bindTo": "Type",
		"layout": {
			"column": 0,
			"row": 2,
			"colSpan": 24
		},
		"contentType": Terrasoft.ContentType.ENUM
	}
},

 

Спасибо. Все получилось.

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

Добрый день! 
Появилась необходимость изменить базовое поле поиска, при выборе в окне справочного поля, и подставить туда своё значение.
Как это выглядит на примере:

 

При открытии данного модального окна, должно быть своё предустановленное значение
Вопрос в том, как это реализовать. 

Поиски не увенчались успехом, застопорился на схеме LookupPage.js

var primaryDisplayColumn = entitySchema.primaryDisplayColumn;
if (primaryDisplayColumn) {
	this.lookupInfo.searchColumn = {
		value: primaryDisplayColumn.name,
		displayValue: primaryDisplayColumn.caption
	};
}

Значение для данной колонки берётся отсюда, но как его подменять для определённого поля - не сообразил

У меня такой же вопрос

16 комментариев
Лучший ответ

В lookupListConfig просто укажи searchValue, пример:

columns: ["Id", "Name"],
searchValue: "Вериф",
columnName: "Name",
orders: [{
   columnPath: "Name",
   direction: Terrasoft.OrderDirection.ASC
}],

 

В lookupListConfig просто укажи searchValue, пример:

columns: ["Id", "Name"],
searchValue: "Вериф",
columnName: "Name",
orders: [{
   columnPath: "Name",
   direction: Terrasoft.OrderDirection.ASC
}],

 

Григорий Чех, columnName упорно изменяться не хочет. А именно значение в списке слева на первом скрине

Покажите свой код

Григорий Чех,

"Gun": {
   "dataValueType": Terrasoft.DataValueType.LOOKUP,
   "lookupListConfig": {
      columns: ["LkpGauges", "UsrConfigProduct"],
      searchValue: "Вериф", // Вот это работает, в инпуте value заполняется
      columnName: "UsrConfigProduct",
      orders: [{
          columnPath: "UsrConfigProduct"
          direction: Terrasoft.OrderDirection.ASC
      }],
      "filters": [ //Фильтры ]
   }
}

 

Григорий Чех,

Это справочное поле, не уверен, что сыграет роль. Но на всякий случай скажу. 

И еще, поле над которым производится действие, является полем в детали с редактируемым реестром

Это интересно. Т.е. теоретически можно прокинуть searchColumn в lookupInfo, но если у объекта есть колонка для отображения - всё перетрется.

варианта 2:

- Доделывать Lookup-модуль

- Оставить как есть, убрать в схеме детали отображаемое поле.

 

Попробуйте так

"Gun": {
   "lookupListConfig": {
      searchValue: "Вериф",
      searchColumn: "UsrConfigProduct"
   }
}

 

Варфоломеев Данила,

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

Самое интересное в том, что у меня получалось прокинуть значения. Но при обращении к lookupinfo он забирает все равно свои значения, которые получил из схемы ConfItem.js (куда ссылается справочное поле). И там прописано поле для отображения
(PrimaryDisplayColumnName)

 

Варфоломеев Данила,

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

Попробуй переопределить loadVocabulary как то так\:

loadVocabulary: function(args, tag) {
    var column = this.getColumnByName(tag);
    args.schemaName = column.referenceSchemaName; //подставь свой
     this.callParent(arguments);
 }

Если не получится отпишись, вечером смогу проєксперементировать.

Григорий Чех,

не совсем понял, что менять. Однако там все равно схема (ConfItem) по которой открытие справочника производится, я думаю, что её подменить можно, но это не то, что мы ищем

Прокинуть как-то туда primaryDisplayColumnName, у меня не увенчалось успехом

VadimCh пишет:
Однако там все равно схема (ConfItem) по которой открытие справочника производится

 Я немного неправильно описал.
Схема ConfItem генерится на основании объекта в конфигурации. На ConfItem ссылается справочное поле, которое вы пытаетесь открыть. Соответственно и берется PrimaryDisplayColumnName из ConfItem. Те 2 варианта так и остаются: либо менять PrimaryDisplayColumnName в null в каждом объекте на которое ссылается нужное вам справочное поле, либо переделать логику LookupPage.

Варфоломеев Данила,

В рамках реализации задачи, заместил LookupPage, и переработал тот кусок кода, который скидывал в посте, и присоединил новую схему

"lookupListConfig": {
  lookupPageName: "KmFiltrationBaseLookup",
}

Как по мне, про два варианта вы правы, но первый не подходит - если этот объект используется по всей системе не единожды. И везде требуется разная колонка, либо существует множество старых записей на основе колонки для отображения. При изменении колонки - старые записи будут отображаться не корректно

VadimCh,

А не могли бы Вы посоветовать что и где переработать, чтобы решить эту проблему?

Alex Zaslavsky,

Да, конечно

Чтобы решить именно эту проблему, требуется создать модуль, 

// Полный листинг схемы, создаем свой модуль, и пихаем туда эту схему, дав ей своё название
 
define("KmFiltrationBaseLookup", ["LookupPage", "LookupPageViewGenerator", "LookupPageViewModelGenerator",
"ProcessModuleUtilities", "LookupUtilities", "css!LookupPageCSS"],
	function(LookupPage, LookupPageViewGenerator, LookupPageViewModelGenerator, ProcessModuleUtilities) {
		return Ext.define("Terrasoft.configuration.KmFiltrationBaseLookup", {
			alternateClassName: "Terrasoft.KmKLSHLookupPage",
			extend: "Terrasoft.LookupPage",
			gridWrapClasses: ["custom-lookup-control"],
 
			init: function(callback, scope) {
				callback = callback || Terrasoft.emptyFn;
				if (this.viewModel) {
					callback.call(scope);
					return;
				}
				var lookupInfo = this.getLookupInfo();
				if (this.Ext.isArray(lookupInfo)) {
					var configIndex = 0;
					var parameters = this.parameters;
					if (!this.Ext.isEmpty(parameters)) {
						configIndex = parameters.index;
					}
					this.lookupInfo = lookupInfo[configIndex];
					this.lookupsInfo = lookupInfo;
				} else {
					this.lookupInfo = lookupInfo;
				}
				this.processModuleFlag = this.sandbox.publish("CardProccessModuleInfo", null, [this.sandbox.id]);
				this.initHistoryState();
				this.getSchemaAndProfile(this.lookupInfo.lookupPostfix, function(entitySchema, profile) {
					if (this.isDestroyed) {
						return;
					}
                    // Здесь сам объект, и сюда мы прокидываем свои свойства
                    // Свойства для каждой колонки находятся в схеме объекта (ConfItem.js Пример!)
					entitySchema.primaryDisplayColumn = {
						caption: "Модель",
						columnPath: "UsrConfigProduct.UsrName",
						dataValueType: 1,
						isInherited: false,
						isRequired: true,
						isValueCloneable: false,
						name: "UsrConfigProduct.UsrName",
						size: 250,
						uId: "c4f28c00-8c5d-46cd-98de-f38d2e52a2dc",
						usageType: 0
					};
 
					var primaryDisplayColumn = entitySchema.primaryDisplayColumn;
 
					if (primaryDisplayColumn) {
						this.lookupInfo.searchColumn = {
							value: primaryDisplayColumn.name,
							displayValue: primaryDisplayColumn.caption
						};
					}
					this.lookupInfo.entitySchema = entitySchema;
					this.lookupInfo.gridProfile = profile;
					var viewModel = this.viewModel = this.generateViewModel();
					viewModel.lookupInfo = this.lookupInfo;
					viewModel.load(profile, callback, scope);
				});
			}
		});
	}
);

 

Alex Zaslavsky,

 
			//в атрибутах её подключаем
			"Gun": {
				"dataValueType": Terrasoft.DataValueType.LOOKUP,
				"lookupListConfig": {
					lookupPageName: "KmFiltrationBaseLookup",
				}
			}

 

VadimCh,

Благодарю, попытаемся разобраться :)

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

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

Кейс: 

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

------

Не могу найти подобную реализацию в стандартной поставке. Если такой реализации нет, то решение создавать замещающий модуль BaseProfileSchema и там править lookupConfig?

У меня такой же вопрос

3 комментария
Лучший ответ

Эн нет. Так легко вы не отделаетесь. Любые модификации окошка выбора из справочника - это модификации модулей. В вашем случае -LookupPageViewGenerator, там, где генерируется header. Возможно ещё в  LookupPage потребуется прописать видимость для подсказки (только для Account-справочника)

Эн нет. Так легко вы не отделаетесь. Любые модификации окошка выбора из справочника - это модификации модулей. В вашем случае -LookupPageViewGenerator, там, где генерируется header. Возможно ещё в  LookupPage потребуется прописать видимость для подсказки (только для Account-справочника)

Если кому-то интересно решение, то:

Благодаря двум постам на сообществе:

https://community.terrasoft.ru/questions/problema-s-zameseniem-modula-lookuppageviewmodelgenerator

https://community.terrasoft.ru/search?search_api_fulltext=%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D0%BE%D0%B9+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B+LookupPage&field_tags=&sort_by=search_api_relevance

Пришел к не очень красивому, но все же решению

Дальше выжимки из двух постов и немного костылей:

Так и не получилось изменять diff окошка Lookup’а, но можно кастомить кнопки, так что я реализовал подсказку через кнопку, на нажатие которой ничего не происходит.

Много будет повторятся из постов, но что-то будет более подробно показано:

1. Сначала создаем Модуль UsrCustomLookupPage (например), наследование не определяем, но ставим зависимость:

Название ставим строго по списку, а саму зависимость ищем по заголовку:

LookupPage – Выбор из справочника

LookupPageViewGenerator – LookupPageViewGenerator

LookupUtilities – LookupUtilities

MaskHelper – MaskHelper

LookupPageCSS Стили модуля справочника

Сам код, комменты есть, но суть в расширении LookupPage и переопределении двух методов renderLookupView, generateViewModel:

define("UsrCustomLookupPage", ["LookupPage", "LookupPageViewGenerator", "LookupPageViewModelGenerator",
"ProcessModuleUtilities", "LookupUtilities", "css!LookupPageCSS"],
	function(LookupPage, LookupPageViewGenerator, LookupPageViewModelGenerator, ProcessModuleUtilities) {
		return Ext.define("Terrasoft.configuration.UsrCustomLookupPage", {
			alternateClassName: "Terrasoft.UsrCustomLookupPage",
			extend: "Terrasoft.LookupPage",
			gridWrapClasses: ["custom-lookup-control"],
			renderLookupView: function(schema, profile) {
				var config = this.getLookupConfig(schema, profile);
				var topPanelConfig = LookupPageViewGenerator.generateFixed(config);
				var buttonsConfig;
				//Получаем ссылку на аттрибут-массив конфигурационных объектов-кнопок
				//Используем Underscore.some с возможностью прерывания переборы по возврату от предиката "true"
				_.some(topPanelConfig.items, function(target) {
					//выделяем объект группы кнопок (Wrapper) по id контейнера
					if (target.id === "selectionControlsContainerLookupPage") {
						//в нем ищем подчиненные объекты являющиеся массивом
						_.some(target, function(target) {
							//согласно структуры конфигурационного объекта панели
							//"чистым" массивом является только объект с конфигами кнопок
							if (Array.isArray(target)) {
								//сохраняем ссылку на него в переменной для дальнейшего использования
								buttonsConfig = target;
								//Прерываем перебор
								return true;
							}
						});
						//Прерываем перебор
						return true;
					}
				});
				//Создаем новую кнопку, клонируя любую, первой как правило идет кнопка "Отмена"
				var newButton1 = Terrasoft.deepClone(buttonsConfig[0]);	
				//Используем Underscore.extend для объединения склонированного объекта
				//с анонимным объектом-разницы в котором опишем необходимые изменения
				_.extend(
					newButton1,
					{
						//меняем стиль
						style: "white",
						caption: "ПОДСКАЗКА: В случае отсутствия нужного Контрагента в списке, необходимо добавить запись вручную"
					}
				);
				// ставим свою кнопку в начало массива, то есть наверх (в окне Lookup'а)
				buttonsConfig.splice(0, 0, newButton1);
				// находим нашу кнопку в массиве и ставим обработчик события нажатия
				_.some(buttonsConfig, function(target) {
					if (target.caption === 
						"ПОДСКАЗКА: В случае отсутствия нужного Контрагента в списке, необходимо добавить запись вручную") {
						// Устанавливаем обработчик
						target.click = {
							bindTo: "AddRequestButton"
						};
						return true;
					}
				});
				this.renderLookupControls(config, topPanelConfig);
			},
			generateViewModel: function() {
				var viewModelConfig = LookupPageViewModelGenerator.generate(this.lookupInfo);
				if (!this.lookupInfo.columnValue && this.lookupInfo.searchValue) {
					viewModelConfig.values.searchData = this.lookupInfo.searchValue;
					viewModelConfig.values.previousSearchData = this.lookupInfo.searchValue;
				}
				//Добавляем свой пользовательский метод
				viewModelConfig.methods.AddRequestButton = function() {
					return true;
				};
				var viewModel = this.Ext.create("Terrasoft.BaseViewModel", viewModelConfig);
				viewModel.Ext = this.Ext;
				viewModel.sandbox = this.sandbox;
				viewModel.Terrasoft = this.Terrasoft;
				if (this.lookupInfo.updateViewModel) {
					this.lookupInfo.updateViewModel.call(viewModel);
				}
				viewModel.initCaptionLookup();
				viewModel.initHasActions();
				viewModel.initLoadedColumns();
				if (!this.Ext.isEmpty(this.lookupInfo.filterObjectPath)) {
					viewModel.updateFilterByFilterObjectPath(this.lookupInfo.filters, this.lookupInfo.filterObjectPath);
				}
				if (this.lookupInfo.hideActions) {
					viewModel.set("hasActions", false);
				}
				return viewModel;
			},
		});
	}	
);

2. Этот модуль вы можете добавлять к любому Lookup’у в lookupConfig в атрибут lookupPageName: "UsrCustomLookupPage". В моем случае я создал Замещающий клиентский модуль, который наследуется от BaseProfileSchema. Копируем весь код, кроме методов и добавляем модуль UsrCustomLookupPage:

define("BaseProfileSchema", ["ConfigurationEnums", "NetworkUtilities", "css!BaseProfileSchemaCSS", "ProfileSchemaMixin",
			"MiniPageUtilities", "UsrCustomLookupPage"],
	function(ConfigurationEnums, NetworkUtilities, UsrCustomLookupPage) {
		return {
			hideEmptyModelItems: true,
			mixins: {
				ProfileSchemaMixin: "Terrasoft.ProfileSchemaMixin",
				MiniPageUtilities: "Terrasoft.MiniPageUtilities"
			},
			attributes: {
				/**
				 * Value of master column.
				 */
				"MasterColumnValue": {
					dataValueType: Terrasoft.DataValueType.GUID,
					value: null
				},
				/**
				 * Master column info.
				 */
				"MasterColumnInfo": {
					dataValueType: Terrasoft.DataValueType.CUSTOM_OBJECT
				},
				/**
				 * Data-item-marker template.
				 */
				"DataItemMarkerTpl": {
					dataValueType: Terrasoft.DataValueType.TEXT,
					value: "{0} {1}Container"
				}
			},
			messages: {
				/**
				 * @message EntityInitialized
				 * Master's entity initialized event.
				 */
				"EntityInitialized": {
					mode: this.Terrasoft.MessageMode.BROADCAST,
					direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
				},
				/**
				 * @message GetEntityColumnChanges
				 * Processes changes of entity column.
				 */
				"GetEntityColumnChanges": {
					mode: this.Terrasoft.MessageMode.BROADCAST,
					direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
				},
				/**
				 * @message GetColumnsValues
				 * Returns requested column values.
				 */
				"GetColumnsValues": {
					mode: this.Terrasoft.MessageMode.PTP,
					direction: this.Terrasoft.MessageDirectionType.PUBLISH
				},
				/**
				 * @message GetLookupQueryFilters
				 * Gets lookup query filters.
				 */
				"GetLookupQueryFilters": {
					mode: this.Terrasoft.MessageMode.PTP,
					direction: this.Terrasoft.MessageDirectionType.PUBLISH
				},
				/**
				 * @message GetColumnInfo
				 * Returns info by column.
				 * @param {String} columnName Column name.
				 */
				"GetColumnInfo": {
					mode: this.Terrasoft.MessageMode.PTP,
					direction: this.Terrasoft.MessageDirectionType.PUBLISH
				},
				/**
				 * @message UpdateCardProperty
				 * Changes the value card model.
				 * @param {Object} config Config action.
				 * @param {String} config.key Column name.
				 * @param {Mixed} config.value Column value.
				 * @param {Object} config.options Update column params.
				 */
				"UpdateCardProperty": {
					mode: this.Terrasoft.MessageMode.PTP,
					direction: this.Terrasoft.MessageDirectionType.PUBLISH
				},
				/**
				 * @message OpenCard
				 * Opens card.
				 * @param {Object} config Config for open card.
				 * @param {String} config.moduleId Module identifier.
				 * @param {String} config.schemaName Entity schema name.
				 * @param {String} config.operation Record operation/
				 * @param {String} config.id Primary column value.
				 * @param {Array} config.defaultValues Array of default values.
				 */
				"OpenCard": {
					mode: this.Terrasoft.MessageMode.PTP,
					direction: this.Terrasoft.MessageDirectionType.PUBLISH
				},
				/**
				 * @message CardModuleResponse
				 * On card module response message.
				 */
				"CardModuleResponse": {
					mode: this.Terrasoft.MessageMode.PTP,
					direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
				}
			},
 
			methods: {
				getLookupConfig: function(config) {
					var masterColumnInfo = this.get("MasterColumnInfo");
					var lookupListConfig = masterColumnInfo.lookupListConfig;
					var entitySchemaName = masterColumnInfo.referenceSchemaName || this.entitySchemaName;
					var masterColumnName = this.get("masterColumnName");
					var lookupConfig = {
						entitySchemaName: entitySchemaName,
						multiSelect: false,
						columnName: masterColumnName,
						hideActions: true,
						lookupListConfig: lookupListConfig,
						columns: lookupListConfig && lookupListConfig.columns,
						filters: this.getLookupQueryFilters(masterColumnName),
						lookupPageName: "UsrCustomLookupPage"
					};
					this.Ext.apply(lookupConfig, config);
					return lookupConfig;
				}
			}
		};
	}
);

Собственно все.

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

Neverhood,

Касаемо "Вида", то в сторону CSS посмотрите, думаю можно без проблем подвигать куда-надо, либо сам вид, либо вашу подсказку видоизменить и т.д.

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

Добрый день!

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

 

 

У меня такой же вопрос

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

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

Дмитрий, здравствуйте!

Значение, которое у Вас выводится как undefined, берется из локализируемой строки в схеме LookupPageViewModelGenerator, название строки - CaptionLookupPage. Проверьте, возможно, там затерлось значение, или эта локализируемая строка вообще отсутствует.

Юлия, спасибо! Действительно, схема LookupPageViewModelGenerator была мной переопределена, а параметр LookupPageCaptionPrefix был не заполнен.

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

Приветы,

 

Все методы работали. 

Разработка велась в "своем" пакете, а создавалось изначально поле в кастоме.

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

 

Есть описание

{
                    "operation": "insert",
                    "name": "BpSpeekAddr",
                    "parentName": "GeneralInfoGridLayout",
                    "propertyName": "items",
                    "values": {
                        "dataValueType": this.Terrasoft.DataValueType.ENUM,
                        "caption": "Адрес собеседования",
                        "controlConfig": {
                            "list": {
                                "bindTo": "SpeakAddressItems"
                            },
                            "prepareList": { bindTo: "initSpeakAddressItems" },
                            "placeholder": {
                                "bindTo": "Адрес собеседования"
                            }
                        },
                        "layout": {
                "colSpan": 12,
                "rowSpan": 1,
                "column": 12,
                "row": 4,
                        }
                    }
                },

У меня такой же вопрос

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

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

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

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

            attributes: {
                "SpeakAddress": {
                    type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                    dataValueType: Terrasoft.DataValueType.LOOKUP,
                    referenceSchemaName: "AccountAddress",
                    isLookup: true,
                    lookupListConfig: {
                        "filter": function () {

Как написать sql запрос

select ad.id, ad.Address

from 
  AddressType at, 
  AccountAddress ad

where 
    at.Name = 'Собеседования' and 
    at.Id = ad.AddressTypeId

                        }
                    }
                    //isRequired: true
                },

У меня такой же вопрос

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

Здравствуйте попробуйте что то вроде такого:
 

lookupListConfig: {
    "filters": [ 
        function () {
            var addressTypeId = this.get("AddressType").value;            
            var filterGroup = Ext.create("Terrasoft.FilterGroup");
            filterGroup.add("CV", Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,"[AccountAddress:AddressType].Name", "Собеседования"));
            filterGroup.add("Type", Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,"[AccountAddress:AddressType].Id", addressTypeId));
            return filterGroup;
             }
    ]
}

 

как работать с фильтрами описано в статье - https://academy.terrasoft.ru/documents/technic-sdk/7-12/primenenie-filt…

Нигрескул Алексей,

Спасибо. 

Своими силами попробовал написать и совпало с вашим советом

 "filter": function () {
                            var filterGroup = Ext.create("Terrasoft.FilterGroup");
                            filterGroup.add("IsAddressType",
                                Terrasoft.createColumnFilterWithParameter(
                                    Terrasoft.ComparisonType.EQUAL,
                                    "[AccountAddress:AddressType].Id",
                                    "[AccountAddress.AddressType].Id"));//из таблицы
                            filterGroup.add("IsSpeak",
                                Terrasoft.createColumnFilterWithParameter(
                                    Terrasoft.ComparisonType.EQUAL,
                                    "[AccountAddress:AddressType].Name",
                                    "Собеседования"));
                            return filterGroup;
                        }

Делал как раз по той статье, клиентский esq синтаксис - это для наркоманов :)

QArt,

Нигрескул Алексей,

Не заработало

Добрый день.

Вот оптимизированный sql запрос:

Вот esq строка для фильтра:

Так же проверьте устраивает ли вас результат исходного sql запроса (т.е. выполните запрос непосредственно из SQL Server Management Studio)

 

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

Есть lookup как повесить на его onchage функцию???

 

У меня такой же вопрос

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

"UsrField1": {
                dependencies: [
                    {
                        columns: ["UsrField2"],
                        methodName: "someMethodName"
                    }
                ]
            }

Вы об этом? Если в поле "UsrField2" Вы что-то изменили, то запускается Ваш метод "someMethodName". 

Вот статья на академии: https://academy.terrasoft.ua/documents/technic-sdk/7-12/atributy-svoystvo-attributes

Там нужно посмотреть раздел "Дополнительные свойства атрибутов", свойство dependencies

Золотарев Артем Андреевич,

Спасибо, получилось!

 

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

Коллеги, как запретить добавлять новые города пользователям (в том числе и System adminsitator'ам) через такую прекрасную функциональность, как Создать в Lookup?

Это относится не только к городам, просто, как самый яркий пример.

Если честно, пользователи жмут, не думая. Потом чистить надоедает.

 

У меня такой же вопрос

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

Добрый день, Владимир!

Данная логика настраивается на уровне системной операции с кодом "CanManageLookups". На детали "Доступ к операции" удалить те пользователи или роли, у которых нужно забрать права на данную функциональность. После этого не будет появляется кнопка «Создать» в самом поле страницы, если такой записи еще нет в справочнике. Минусом данного варианта является тот момент, что у пользователей не будет доступа к разделу "Справочники", так как это взаимосвязанный функционал. 

в LookupQuickAddMixin закомментировать или изменить строчку:

config.objects[Terrasoft.GUID_EMPTY] = this.getNewListItemConfig(config.filterValue);

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

upd. меня опередили) в принципе совет сверху тоже подойдет, ибо там же в init стоит проверка 

RightUtilities.checkCanExecuteOperation({
	operation: "CanManageLookups"
}

 

Варфоломеев Данила,

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

Борис Леонов пишет:
вкратце о тотальных проблемах замещения модуля

Resources. это вкратце.

Подробнее: замещаем схему (модуля). копируем туда подчистую код. 
1) отсутствует вкладка less. надо модуль сохранить, перезайти заново и только тогда она появится
2) локализ. строки - они есть, но их нет. В буквальном смысле. Приходится перед всеми строками ставить точку, сохранять, потом убирать точки и пересохранять
3) с картинками такая же фигня как и со строками. Только ещё хуже - картинки приходится вытаскивать через браузер и перевставлять. Про то, что некоторые иконки иногда не отображаются, а вытащить их надо я промолчу (где-то в недрах форума валяется инструкция как по ссылке и названию вытащить ресурс).
4) все messages нужно перевбивать. руками. good luck have fun
мб что-то ещё. уже не помню)

Варфоломеев Данила,

очень сильно вкратце :)

Борис Леонов пишет:
очень сильно вкратце :)

 расписал) ух как горит пятая точка - проблемы не могут исправить 2 год как

Адасюк Валерий Викторович пишет:
Данная логика настраивается на уровне системной операции с кодом "CanManageLookups"

У меня ощущение, что на города это не действует. Кроме того, эта логика останется на Контрагенты, Контакты и другие Lookup-поля, которые ссылаются не на Справочники, а на Разделы 

Варфоломеев Данила,

ценная инфо, спасибо!

это не всегда происходит, случайным образом?

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

Борис Леонов,

Всегда, при замещении модуля. при замещении простых page и section(к примеру) всё отлично.

Варфоломеев Данила,

еще раз спасибо за информацию!

Радикальный вариант — пустым INSTEAD OF INSERT триггером на таблице городов. Или такой же логикой на уровне БП при добавлении записей в этой таблице.

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

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

Пытаюсь реализовать сортировку справочного поля типа ENUM.

attributes: {
			"LeadType": {"isRequired": false},
			"Stage": {
				"lookupListConfig": {
					"filters": [
						function() {
							var filterGroup = Ext.create("Terrasoft.FilterGroup"), {
								sortProperty: "Number"
							});
							filterGroup.add("ActiveStage",
								Terrasoft.createColumnFilterWithParameter(
									Terrasoft.ComparisonType.EQUAL,
										"UsrShowInMiniPage", "1"));
							filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
							filterGroup.add("Sort",
								Terrasoft.createColumnFilterWithParameter(
									Terrasoft.ComparisonType.GREATER_OR_EQUAL,
										"Number", "0"));
							return filterGroup;
 
						}
					]
				}
			}
		},

Предположил, что sortProperty не срабатывает из-за отсутствия такой колонке в запросе, поэтому добавил еще одно условие, как все-таки правильно это сделать?

У меня такой же вопрос

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

А если вот так?

"Stage": {
	"lookupListConfig": {
		"filters": [
			function() {
				var filterGroup = Ext.create("Terrasoft.FilterGroup"), {
					sortProperty: "Number"
				});
				filterGroup.add("ActiveStage",
					Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.EQUAL,
							"UsrShowInMiniPage", "1"));
				filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
				filterGroup.add("Sort",
					Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.GREATER_OR_EQUAL,
							"Number", "0"));
				return filterGroup;
 
			}
		],
		"columns": ["Number"]
	}
}

 

Добрый день.

Добавьте свойство orders в lookupListConfig. К примеру:

"Owner": {
    lookupListConfig: {
        columns: ["Name"],
        orders: [
            {
                columnPath: "Name",
                direction: Terrasoft.OrderDirection.DESC
            }
        ]
    }
},

Терещук Сергей,

Сортировка таким образом не работает. Ни при указании колонки "Name", ни при какой-либо другой колонки. Direction также не влияет на порядок отображения

Варфоломеев Данила,

Сортировка также не работает, тем не менее, колонка "Number" добавляется в ответ от сервера

del

 

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