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

 

Интересует следующий вопрос: возможно ли реализовать автоматическое заполнение детали/деталей на записи при массовом импорте данных в раздел из Excel без указания в шаблоне полей детали.

 

Условный пример: У меня имеется раздел Контакты, на записи Контакта имеется деталь Навыки (деталь с редактируемым реестром).

В данной детали всегда должно быть n-количество записей с условно такими полями:
НаименованиеНавыка (string), Включен (bool), УровеньВладения (lookup)

Сами записи (заполнены только наименования, остальное пусто):

Навык1

Навык2

Навык 3
 

Данные записи должны быть в детали Навыки на каждом Контакте. При добавление контакта кнопкой Добавить можно предзаполнять исходя из isAddMode или isCopyMode, но если загрузка данных производится через импорт, то каким образом данную деталь на каждую добавленную запись заполнить, так скажем, значениями по-умолчанию?

Нравится

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

Добрый день, Ирина.

 

Вашу задачу можно решить несколькими вариантами:

1) написать sql-запрос, который вставит нужные данные во все детали для загруженных записей. Такой запрос нужно запустить после импорта;

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

2) импортом из Excel. Подготовить файл с данными, в котором каждая строка будет содержать название навыка и поле-ссылку, идентифицирующую родительскую запись. Таким образом, если у Вас 3 навыка и 2 записи в родительской таблице, то в этом файле должно быть 6 строк по 3 навыка на каждую родительскую запись.

Добрый день, Ирина.

 

Вашу задачу можно решить несколькими вариантами:

1) написать sql-запрос, который вставит нужные данные во все детали для загруженных записей. Такой запрос нужно запустить после импорта;

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

2) импортом из Excel. Подготовить файл с данными, в котором каждая строка будет содержать название навыка и поле-ссылку, идентифицирующую родительскую запись. Таким образом, если у Вас 3 навыка и 2 записи в родительской таблице, то в этом файле должно быть 6 строк по 3 навыка на каждую родительскую запись.

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

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

Нравится

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

Добрый день.

 

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

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

 

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

Ivan Kuchma,

Такой вопрос, можно ли добавить уже созданную деталь просто на форму мини-карточки при помощи разработки? И обязательно ли создавать под это контейнер с полями tabs?

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

Добрый день!

Работаю в разделе Обращения. Необходимо: в случае добавления Подчиненных обращений, отображались только обращения которые соответствуют определенному условию (Категория == Инцидент и т.п.).

Подскажите куда вносить изменения и пример кода.

Нравится

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

Добрый день.

 

Посмотрите эту статью по множественному добавлению записей в деталь.

 

Обратите внимание на функцию openLookupWithMultiSelect в миксине LookupMultiAddMixin.

 

В Вашей карточке обращения Вам нужно переопределить метод getAdditionalLookupFilters, указав в нём нужные фильтры.

 

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

 

Также на Академии есть пост, в котором подробно рассматривается этот вопрос.

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

Разобрался. Спасибо!

Pavel Litvinovich,

 

Рада была помочь)

Все-таки возникла проблема.

Фильтры работают нормально, записи отображаются нужные. Но при попытке добавить запись на деталь ошибка: 

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

Вот мой код:

define("CaseChildCaseDetail", ["LookupMultiAddMixin"], function() {
	return {
		entitySchemaName: "Case",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		mixins: {			
			// Подключение миксина к схеме.
			LookupMultiAddMixin: "Terrasoft.LookupMultiAddMixin"
		},
		methods: {
			init: function() {
                this.callParent(arguments);
				this.mixins.LookupMultiAddMixin.init.call(this);
            },
			getAddRecordButtonVisible: function() {
                //Отображать кнопку добавления если деталь развернута, даже если для детали не реализована страница записи.
                return this.getToolsVisible();
            },
			// Переопределение базового метода.
            // Обработчик события сохранения страницы редактирования детали.
            onCardSaved: function() {
                // Открывает справочное окно с множественным выбором записей.
                this.openLookupWithMultiSelect();
            },
			// Переопределение базового метода добавления записи на деталь.
			addRecord: function() {
				// Открывает справочное окно с множественным выбором записей.
				this.openLookupWithMultiSelect(true);
			},
			// Метод, возвращающий конфигурационный объект для справочного окна.
			getMultiSelectLookupConfig: function() {
				return {
					rootEntitySchemaName: "Case",
					rootColumnName: "Id",
					relatedEntitySchemaName: "Case",
					relatedColumnName: "Id"
				};
			},
			getAdditionalLookupFilters: function() {
				//Отображать только записи Инцидент И НЕ массовый инцидент
				var idCategoryIncident = "1b0bc159-150a-e111-a31b-00155d04c01d";//Категория Инцидент
				var filterGroup = new this.Terrasoft.createFilterGroup();
				filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
				filterGroup.add("OneFilter", this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "OmnMassIncident", false));//Инцидент НЕ массовый
				filterGroup.add("TwoFilter", this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "Category", idCategoryIncident));//Категория Инцидент
				return filterGroup;
			},
		}
	};
});

Подскажите что я делаю не правильно.

Pavel Litvinovich,

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

getMultiSelectLookupConfig, стоит проверить, корректно ли указаны значения rootColumnName и relatedColumnName. В вашем случае обращения связаны колонкой ParentCase, но у вас в двух значениях id.

Спасибо! Сделал немного по-другому.

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

Есть раздел, в нем деталь. Как запретить добавление детали в зависимости от значения поля раздела? Вот здесь описано как сделать на клиенте а здесь как на сервере, но не могу понять как достучаться до конкретного элемента раздела где отображается деталь и надо сделать запрет, как получить значения поля в контексте BaseGridDetailV2 или во встроенном БП процеса?

Нравится

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

В baseGridDetail поищите что-то вроде this.sandbox.publish("GetColumnsValues", ...

запрос позволяет тянуть данные аттрибутов со страницы. Ну а дальше в addRecord-методе ветвите логику как хотите

 

В целом работа с песочницей описана здесь.

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

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

Согласно описанию тут:

https://community.terrasoft.ru/articles/nastroika-znacenii-polei-detali…

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

        "defaultValues": {
            "UsrContract": {//колонка детали
                "masterColumn": "Id"//колонка основной записи (Важно! добавление id тоже нужно прописать (если связь не по id, а иначе - ориентироваться на блок "filter":))
            },
            "Account": {//колонка детали
                "masterColumn": "Account"//колонка основной записи
            },
            "UsrProject": {//колонка детали
                "masterColumn": "UsrProject"//колонка основной записи
            }
        }

Можно ли передать здесь другие значения? какие можно? Прошу пример синтаксиса.

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

 

Нравится

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

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

'masterColumn' - это название атрибута.

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

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

Также передавать данные можно через sandbox. Подробнее посмотрите в статье на Академии.

У вас пример уже полноценный. Хотите добавить например связь с Продуктом (при наличии), То пишите
 

"defaultValues": {
            "Product": {//колонка на вашей детали (в объекте)
                "masterColumn": "Product"//колонка из основной записи 
            }
        }

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

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

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

'masterColumn' - это название атрибута.

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

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

Также передавать данные можно через sandbox. Подробнее посмотрите в статье на Академии.

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

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

Нравится

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

в активности создать справочное поле нового раздела. и по стандартному добавить активность указав связь id нового раздела - справочное поле нового раздела из активности

Dima Avdoshin,

Дмитрий спасибо!
Можно редактировать имеющуюся активность или нужно замещающий объект создавать?

Ещё один легкий способ. Если в новом разделе нужна ActionsDashboard и кейсы, то добавляя кейс, сразу же добавляются нужные поля в активности

Сергей Рогов,

замещающий, потому что вам же нужно как то связь указать с активностью

Dima Avdoshin,

Спасибо!

Владимир Соколов,

Спасибо за такой вариант, на нём и остановился

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

При выведении в Итоги виджета "список" данных объекта, созданного на основе View, в Списке  иногда отображаются дублирующиеся записи. Но при экспорте в excel такие дубли отсутствуют. Есть подозрение, что такое поведение связано как-то с пагинацией.  Такая же ситуация происходит если делать на основе такого объекта деталь.

Кто-нибудь сталкивался с подобным?

Ниже пример схемы View используемый для объекта

CREATE VIEW [dbo].[VwTest] AS
SELECT
    NEWID() as Id
    ,GETDATE() as CreatedOn
    ,(SELECT Id FROM Contact WHERE Id='BE80A149-0089-4311-A775-CA6CD8937E2B') as CreatedById
    ,GETDATE() as ModifiedOn
    ,(SELECT Id FROM Contact WHERE Id='BE80A149-0089-4311-A775-CA6CD8937E2B') as ModifiedById
    ,0 as ProcessListeners
    ,Id as ContactId
    ,Age
FROM Contact
WHERE Age>30

 

 

 

Нравится

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

Добрый день!
Прошу уточнить следующую информацию:
1. Полную версию приложения
2. Данное поведение наблюдается с одним объектом, или воспроизводится вне зависимости от объекта?
3. Также просим Вас уточнить детальный пошаговый кейс воспроизведения, начиная с создания объекта.

 

Спасибо!

Роман Казекин,

 1. Версия Sale Ent 7.16.3

2. Данное поведение характерно для всех объектов созданных на основе view.

3.

- Создал View ( как описано выше)

-  в управление конфигурацией создал объект с названием View

- включил checkbox Поведение - Представление в базе данных

4. Вывод объекта в Итогах в виде Списка

Евгений Кобзарь,

 

Уточните, пожалуйста, по какому полю Вы определяете записи, как дубли?

Также прошу посмотреть Select, который приходит детали. Есть ли там одинаковые записи?

Роман Казекин,

По полю Контакт. Select с View выбирает только 1 запись. Но в таблице/списке показывает несколько. Как правило происходит такое когда нажимаешь кнопку Показать больше. См. скриншот

Евгений Кобзарь,

 

Проверьте значение колонки ContactId, если там разные значения для записей, которые дублируются, то это значит что у Вас есть дубли в контактах. То есть это разные записи с одинаковыми данными.

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

 

https://academy.terrasoft.ru/docs/user/bazis_platformy/dannye/dubli/poi…

Роман Казекин,

 

Дублей нет. На скриншоте видно, что ссылки на эти записи формируются идентичные (на основе одного Id). Мне кажется что проблема все же в offsetе и order by (по Id).  При нажатии показать больше идет повторный запрос к View у которого НЕ статический  ID (newid()). Если это так? То каким образом можно и как правильно во view создать этот ID.

Добрый день

Евгений, это абсолютно объяснимое поведение View при использовании Fetch next. Вы же получаете записи пачками, а каждая пачка имеет свои Id и сортировка может вам выдать "дубль"

Как правильно? Просто используейте Id из основного объекта. Вы же выбираете из Contact, так берите его Id вместо генерации newid()

 

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

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

Нравится

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

В схеме детали прописать метод:

            initDetailOptions: function() {
                this.set("RowCount", 1000);
                this.callParent(arguments);
            },

В схеме детали прописать метод:

            initDetailOptions: function() {
                this.set("RowCount", 1000);
                this.callParent(arguments);
            },

спасибо, работает!

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

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

Спасибо!

Нравится

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

Добрый день.

Вряд ли вам кто-то подскажет по одному скриншоту как реализовать такую деталь, тем более она и так кастомная. Я рекомендую посмотреть исходный код этой детали и сделать по её примеру.

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

Доброго дня!

 

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

 

Есть предположение, что нужно как-то грамотно организовать колбэки с this.reloadGridData(), но никак не выходит. Может кто сталкивался с подобным кейсом

 

Исходный код прилагаю.

addRecord: function(typeColumnValue) {
    var config = {
	    recordId: Terrasoft.GUID_EMPTY,
		operation: Terrasoft.ConfigurationEnums.CardOperation.ADD,
		entitySchemaName: "Account",
		valuePairs: this.getAddMiniPageDefaultValues(),
		miniPageSchemaName: "AccountMiniPage",
	};
    this.openMiniPage(config);
},
 
getAddMiniPageDefaultValues: function() {
    var defaultValues = [];
    defaultValues.push({
        name: "Parent", 
        value: this.get("MasterRecordId")
    });
	defaultValues.push({
	    name: "Category",
		value: "dc199b6d-e948-4598-8a12-c38ca90428d8"
	});
	return defaultValues;
}

Благодарю за ваши ответы

Нравится

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

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

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

Вадим, добрый день.

 

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

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

Спасибо за ответ! Однако реализация не совсем очевидна. Неужели для реализации этого кейса придется постоянно публиковать сообщение со стороны добавляемого объекта для обновления детали? Учитывая то, что добавляемый объект, помимо детали, может создаваться и из других мест

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

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

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