Добрый день, как можно c помощью entitySchemaQuery изменить значение колонки в детали на странице.

Есть страница, и на ней две детали в разных вкладках. Одна деталь - "позиции заказа", другая "Документы по заказу". В деталь "документы по заказу" добавила кнопку, при нажатии на которую, происходит update значения выбранной колонки(сделала через updateQuery по инструкции из документации). В этом же методе с помощью entitySchemaQuery создаю коллекцию с корневой схемой "позиции заказа". При обработке этой коллекции я пытаюсь поменять значение колонки с помощью инструкции this.set("NameColumn",value);

Однако это не работает, и значение колонки не меняется. 

Подскажите, пожалуйста, что я делаю не так и можно ли изменить значение колонки в детали через front-end?

Нравится

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

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

 

Метод this.set("NameColumn",value) лучше заменить на обновление поля с помощью колл-бэк функции. Ниже представлен метод:

methodName: function() {
	var updateQuery = Ext.create("Terrasoft.UpdateQuery", {
	rootSchemaName: "YourSchemaName"});
	var filters = updateQuery.filters;
	filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
	  this.Terrasoft.ComparisonType.EQUAL, "YourDetailColumnName", "YourColumnNameFromPageDesigner",));
	updateQuery.setParameterValue("YourColumnNameToUpdate",
"ValueToWriteInUpdate", this.Terrasoft.DataValueType.TEXT);
	updateQuery.execute(function(result){ 
	if(result.success) this.updateDetail({detail: "YourDetailCodeName"});}, this);  
}

Более подробное описание вы можете найти тут: https://community.terrasoft.ua/questions/ustanovka-znacheniy-kolonok-cherez-esq-na-klientskoy-chasti#comment-88853

 

С уважением,

Ангелина!

Добрый день,

Пожалуйста, предоставьте пример entitySchemaQuery, который вы настраиваете.

Viktoriia Hrynchuk,

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

setStatusDetail:function()
{
    /* Получает массив идентификаторов выбранных записей. */
                var selectedRows = this.get("SelectedRows");
                /* Обработка запускается в случае, если выбрана хотя бы одна запись. */
                if (selectedRows.length > 0) {
                    /* Создает экземпляр класса пакетных запросов. */
                    var batchQuery = this.Ext.create("Terrasoft.BatchQuery");
                    /* Обновляет каждую из выбранных записей. */
                    selectedRows.forEach(function(selectedRowId) {
                        /* Создает экземпляр класса UpdateQuery с корневой схемой Activity. */
                        var update = this.Ext.create("Terrasoft.UpdateQuery", {
                            rootSchemaName: "DocumentComponent" // DocumentComponent - схема отвечающая за документы по заказу 
                        });
            //Далее я пытаюсь создать ещё одну коллекцию, на основе другой схемы и получить по связям колонку, которую также необходимо обновить, но уже в другой детали.
            var esq = this.Ext.create("Terrasoft.EntitySchemaQuery",{
                rootSchemaName: "OrderPosition"
            });
            esq.addColumn("StatusComponentOrder","StatusComponent");
            esq.addColumn("RowDocumentComponent.DocumentId","DocMoving"); 
            esq.esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
            "RowDocumentComponent.DocumentId", selectedRowId);
            esq.filters.add("esqFirstFilter",esqFirstFilter);
                esq.getEntityCollection(function(result)
            {
                if(result.success)
                {
                    result.collection.each(function(item)
                    {
                        this.set("StatusComponentOrder",ConstantJS.StatusComponent);
                    }
                    
                )}
            },this);
 
                        /* Применяет фильтр для определения записи для обновления. */
                        update.enablePrimaryColumnFilter(selectedRowId);
                        /* Для колонки [Status] устанавливается значение из файла с константами */
                        update.setParameterValue("Status", "ConstantJS.DocShipped", this.Terrasoft.DataValueType.GUID);
                        /* Добавляет запрос на обновление записи в пакетный запрос. */
                        batchQuery.add(update);
                    }, this);
                    /* Выполняет пакетный запрос к серверу. */
                    batchQuery.execute(function() {
                        /* Обновляет реестр. */
                        this.reloadGridData();
                    }, this);
                }

}

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

 

Метод this.set("NameColumn",value) лучше заменить на обновление поля с помощью колл-бэк функции. Ниже представлен метод:

methodName: function() {
	var updateQuery = Ext.create("Terrasoft.UpdateQuery", {
	rootSchemaName: "YourSchemaName"});
	var filters = updateQuery.filters;
	filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
	  this.Terrasoft.ComparisonType.EQUAL, "YourDetailColumnName", "YourColumnNameFromPageDesigner",));
	updateQuery.setParameterValue("YourColumnNameToUpdate",
"ValueToWriteInUpdate", this.Terrasoft.DataValueType.TEXT);
	updateQuery.execute(function(result){ 
	if(result.success) this.updateDetail({detail: "YourDetailCodeName"});}, this);  
}

Более подробное описание вы можете найти тут: https://community.terrasoft.ua/questions/ustanovka-znacheniy-kolonok-cherez-esq-na-klientskoy-chasti#comment-88853

 

С уважением,

Ангелина!

Anhelina,

спасибо за помощь! Помогло)

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

Приветствую!

 

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

 

Корректируя данный код, условно, на MyObjectSchemaDetail на странице раздела в пакете всё равно создаётся схема со сгенерированным кодом и на странице раздела в коде в блоке details всё равно ставится сгенерированный автоматически код "schemaName": "Schemafdbaa726Detail"

 

Подскажите, это баг или фича? Просто к чему тогда поле Код, если после его заполнения его всё равно нигде нет? За что оно отвечает и где оно применимо, если, вообще, применимо?

 

Приложение версии 7.18.4.1532

На скриншоте ниже как раз форма и данное поле:

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

Нравится

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

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

https://community.terrasoft.ru/ideas/master-sozdaniya-detaley-i-normaln…

Не могу найти тему с описанием, но пока делаем руками - сразу после регистрации детали (пока её никуда не добавили! потому создаём детали отдельно по старинке) меняем название в схеме, а затем компилируем изменения. После компиляции снова появляется ошибка о том, что деталь не найдена, но её игнорируем

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

Всем добрый день.

Кто-то сталкивался/реализовывал объединение дублей непосредственно в Деталях? Такая возможность есть или объединение работает только на справочниках и разделах?

Нравится

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

Евгений, здравствуйте!



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

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



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

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

Добрый день!

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

 

Спасибо!

Нравится

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

Каскадная связь при настройке детали по полю контрагент должна помочь

Каскадная связь при настройке детали по полю контрагент должна помочь

Алексей Следь, спасибо большое!))) В 7.17 не могу её найти((( 

"Удалять записи" не помогает.

 

 

Екатерина, непонятно, почему у Вас подписи переключателей такие, а не «Блокировать удаление, если есть связанные записи в текущем объекте с этим значением» и «Удалять записи из текущего объекта с этим значением», как написано при открытии в дизайнере стандартной детали, вроде «Контрагент в группе». Там у поля связи с разделом выбрано второе значение.

На всякий случай, старая конфигурация доступна на /0/dev_old и можно включить каскадную связь там.

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

Cпасибо большое! Помогло переключение на старую конфигурацию!)

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

Возникла такая необходимость.

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

Есть ли решение? Подскажите.

Нравится

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

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

Идея по этому поводу зафиксирована, но планов на ближайшие версии пока нет.

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

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

 

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

Нравится

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

Поясните пожалуйста где находятся подписки?

Кисловский Михаил Андреевич,

вызывают из схемы детали "Schema5Detail", передают в схему открываемой страницы "...1Page"

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

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

Добрый день!

Подскажите, как на странице детали отобразить данные из другой таблицы? На станице детали в виде списка отображаются данные из Table1, необходимо отобразить данные из Table2. Таблицы связаны между собой полем идентификатора Table1.idTable2 = Table2.id. Как это сделать без создания VIEW в базе данных?

Нравится

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

Добрый день.

Для отображения в реестре полей из связанной таблицы Вам нужно выполнить настройку связанных колонок в реестре.

В Вашей версии такую настройку можно выполнить для детали с нередактируемым реестром. Для детали с редактируемым реестром такую настройку можно выполнить с версии 7.14.2. Поэтому задумайтесь над обновлением)

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

Добрый день.

Для отображения в реестре полей из связанной таблицы Вам нужно выполнить настройку связанных колонок в реестре.

В Вашей версии такую настройку можно выполнить для детали с нередактируемым реестром. Для детали с редактируемым реестром такую настройку можно выполнить с версии 7.14.2. Поэтому задумайтесь над обновлением)

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

Попробуйте добавить в Table1 поле Table2  в котором будет idTable2  и укахать в настройке колонок  Table2.Namr и тд

 

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

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

Интерфейс настройки колонок, описанный по указанной Вами ссылке, отображается только для раздела. В моем случае, при настройке связанных полей детали отображаются только идентификаторы, которые отмечены как справочники. Попытка сделать поле Table1.idTable2 справочником не подошла, т.к. Table2 является View и при публикации Table1 с таким полем выдается ошибка "Foreign key references object which is not a user table".

 

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

"Table2.Name" указать в настройке колонок списка? Ввести колонку с таким именем система не дает.

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

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

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

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

Коллеги, приветствую!

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

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

Заранее благодарю!

Нравится

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

Александр Горчаков,

Если в демке тоже есть проблема, то это может быть ошибка базовой версии.

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

Проверьте в схеме детали Caption, чтобы не был пуст

Литвинко Павел,

Caption на месте. Я так понял что будь там что-то не так - в вэб-версии тоже ничего бы не отображалось.

Посмотрел в облачной-демке - проблема аналогичная.

Еще заметил что если в мобильной версии зайти в изменение записи - заголовок детали есть.

Сделал временно по другому (через настройку деталей в мастере мобильного приложения), но вопрос все еще актуален.

Александр Горчаков,

Если в демке тоже есть проблема, то это может быть ошибка базовой версии.

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

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

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

Нравится

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

Эта логика реализована во встроенном БП объекта «Продукт в продаже» (OpportunityProductInterest). Там в обработчике событий сохранения и удаления записей в объекте детали запускается функция CalckOpportunityAmount с кодом:

var oppotrunityAmountSelect = new Select(UserConnection)
	.Column("Amount")
	.From("OpportunityProductInterest")
	.Where("OpportunityId").IsEqual(Column.Parameter(opportunityId)) as Select;
double opportunityAmount = 0.0;
using (var dbExecutor = UserConnection.EnsureDBConnection()) {
	using (IDataReader dr = oppotrunityAmountSelect.ExecuteReader(dbExecutor)) {
		while (dr.Read()) {
			if(!dr.IsDBNull(0)){
				opportunityAmount += (double)UserConnection.DBTypeConverter.DBValueToDecimal(dr[0]);
			}
		}
	}
}
var update = new Update(UserConnection, "Opportunity")
		.Set("Amount", Column.Parameter(opportunityAmount))
		.Where("Id").IsEqual(Column.Parameter(opportunityId));
	update.Execute();

 

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

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

У страницы OpportunityPageV2 есть много версий в разных пакетах.

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

Я смотрел сразу через дебагер в chrome, что бы видеть все версии сразу

Не оно ли:

details: /**SCHEMA_DETAILS*/{
...
OpportunityProduct: {
	schemaName: "OpportunityProductDetailV2",
	filter: {
		masterColumn: "Id",
		detailColumn: "Opportunity"
	},
	subscriber: {methodName: "onOpportunityProductChanged"}
},
...
methods: {
 
/**
 * Reloads current record.
 * @private
 */
onOpportunityProductChanged: function() {
	this.loadEntity(this.get("Id"));
	this.sendSaveCardModuleResponse(this);
},

 

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

Добрый день!

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

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

Нравится

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

Установите значение class для вашей детали в значение class="ts-controlgroup detail grid-detail ts-controlgroup-collapsed", можно сделать через DOM

Установите значение class для вашей детали в значение class="ts-controlgroup detail grid-detail ts-controlgroup-collapsed", можно сделать через DOM

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