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

В логах консоли сообщение "Элемент с ключом null не существует"

Нравится

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

Добрый день, Наталья!

В каком пакете лежат схемы нового раздела? Какое значение установлено в системной настройке "Текущий пакет"?

Наталья, здравствуйте! Компиляция конфигурации и публикация объекта раздела проходит успешно?

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

Есть хорошая статья

https://academy.terrasoft.ru/documents/technic-sdk/7-7-0/kak-vydelit-cv…

и всё, что в ней написано, хорошо работает. 

Но мне надо, чтобы активная запись не меняла свой цвет на дефолтный. Как это сделать?

Нравится

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

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

Не совсем ясна задача. Вы хотите, чтобы активная запись выделялась другим цветом? Тогда вам нужно создать модуль (не замещающий, а именно просто модуль), на вкладке LESS прописать CSS стили для CSS-класса grid-row-selected, например так:

.grid-row-selected {
	background-color: #000000 !important;
}

На первой вкладке с названием "Исходный код" прописать название модуля, чтобы не запутаться советую использовать название модуля в котором будет меняться стиль и в конце добавить суфикс Css. Например, для раздела контактов можно написать такой код в этом модуле:

define("UsrContactSectionCss", [],
		function() {
			return {};
		});

Теперь нужно переопределить ContactSectionV2 и в него прописать зависимость от наших прописанных стилей, добавив беред названием модуля "css!", т.е. код может быть такой:

define("ContactSectionV2", ["css!UsrContactSectionCss"], function() {
	return {
		entitySchemaName: "Contact",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
	};
});

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

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

Доброго времени суток.

При нажатии на кнопку "Загрузить лицензии" в менеджере лицензий появляется ошибка "Элемент Настройка с кодом 'CustomerID' не найден". В таблице SysSettings настройка с таким кодом есть. При попытке загрузить файл с лицензией ошибка "Ошибка загрузки лицензий". В чем может проблема?

Заранее благодарен.

Нравится

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

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

Ошибка исправлена на более поздних версиях, в вашем случае нужно выполнить скрипт на строне БД:

UPDATE SysSettingsValue SET IsDef = 1 

WHERE SysSettingsId = (SELECT Id FROM SysSettings WHERE Code = 'CustomerId') 

AND SysAdminUnitId = 'A29A3BA5-4B0D-DE11-9A51-005056C00008'

 

Сергей Кy6риш,

Спасибо, помогло

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

Возможно ли сделать нумерацию строк в реестре?

Возможно ли сделать нумерацию строк в каждом реестре BPM (разделы, детали)?

Пишу сюда в надежде на помощь ибо нет даже предположений как это сделать(

Нравится

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

А вам нужна именно нумерация строк или записей?

Второе решается более-менее стандартными методами, а цель первого не совсем понятна

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

именно строк, меняем сортировку, фильтры - нумерация та самая - 1,2,3,4. Многие цели клиентов нам не понятны...

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

Самый простой способ сделать это в разделе - это заместить обьект и добавить к нему целочисленное поле, в котором динамически проставлять нумерацию. Можно сделать и добавление колнки динамически, а не через обьект, но это намного сложнее и может привести к проблемам в некоторых разделах. Например, к разделу "Контакт" добавим поле с именем UsrRowNumber. Для этого после добавления поля к обьекту "Контакт" нужно настроить отображение колонок и вывести новосозданное поле. А потом на странице раздела ContactPageV2 переопределить метод onGridDataLoaded, чтобы получилось примерно такое:

onGridDataLoaded: function() {
  this.callParent(arguments);
  for (var i = 0; i < this.getGridData().collection.items.length; i++) {
    var itemId = this.getGridData().collection.items[i].get("Id");
    this.getGridData().get(itemId).set("UsrRowNumber", (i + 1));
  }
},

Таким образом, будет работать нумерация в разделе "Контакты". Скорее всего вам не нужна будет сортировка по этой колонке реестра, так как это не даст никакой сортировки. В этом случае можно переопределить также метод sortColumn, в котором проверять какая колонка сейчас будет отсортирована и не сортировать, если это колонка UsrRowNumber. Как пример:

sortColumn: function(index) {
  var columnsSettingsProfile = this.get("Profile");
  var columnsConfig = columnsSettingsProfile.DataGrid.listedConfig;
  var columnName;
  if (!Ext.isEmpty(columnsConfig)) {
    var columns = this.Ext.decode(columnsConfig);
    var column = columns.items[index];
    columnName = column.bindTo;
  }
  if (columnName !== "UsrRowNumber") {
    this.callParent(arguments);
  }
}

Тогда при нажатии на заголовок колонки UsrRowNumber в реестре ничего не произойдет, а во всех других случаях все будет работать.

Если же говорить про детали, то тут немного проще динамически добавить колонку. Можно попробовать перехватить Profile детали в котором находятся конфиги на отображение в списочном и плиточном отображении (listedConfig и tiledConfig). 

К примеру в методе initProfile после вызова this.callParent(arguments) взять this.get("Profile") и динамически изменить listedConfig (или tiledConfig) для изменения конфигурации колонок грида. Сначала конфиг нужно распарсить (можно использовать либо Ext.decode, либо JSON.parse), модифицировать как вам необходимо и вернуть орбатно с помощью this.set("Profile", newProfile).

Может и пойдет такое, но хотят чтобы это было в каждом раздели и детали, представление только списком будет. Без создания колонки в объекте можно сделать? Динамически нужно)

Радчук Виталий Владимирович,

Чтобы сделать сразу на всех деталях нужно делать перехват Profile как описано выше, но этот перехват делать на базовой клиентской схеме детали грида (например, BaseGridDetailV2) и тогда все будет работать для всех деталей, которые от него наследуются.

То же самое можно сказать и для раздела, но там все сложнее. Модифицировать придется также базовый раздел BaseSection, но тут нет метода initProfile, поэтому сложнее динамически модифицировать колонки.

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

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

Например, убрать кнопки (Открыть, Копировать) по нажатию на элемент, вывести несколько элементов в строке и т.д.

Возникает вопрос - как отменить базовые стили раздела (т.к. они применяются еще и к тэгам)? Как убрать названия и кнопки и т.д.?

Нравится

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

Андрей, здравствуйте! 

Вам необходимо переопределять базовые стили, которые есть в различных схемах. Например, схема "SectionModuleV2" или "CommonCSSV2" (вкладка LESS)

Похожие топики можете поискать на community - https://community.terrasoft.ru/search?search_api_fulltext=%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C+%D1%81%D1%82%D0%B8%D0%BB&field_tags=&sort_by=search_api_relevance

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

Каким образом нужно изменить caption детали на странице редактирования в том случае, если одна и та же деталь используется в одной вкладке, но данные в этих деталях фильтруются по разным условиям (скриншот во вложении)?

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

Нравится

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

Можно изменить метод формирования Caption на каждой схеме детали.

Описание здесь: https://community.terrasoft.ru/questions/razlicnoe-otobrazenie-detali-v…

 

Алла, здравствуйте!

Вашу задачу можно решить только с помощью разработки, в предоставленной выше ссылке есть полезные рекомендации. Подробная инструкция также была описана здесь: https://community.terrasoft.ru/questions/zagolovki-detali

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

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

При выборе в заказе дополнительную единицу измерения (например, упак = 10 шт, шт - базовая ед.измерения), то цена остается за базовую единицу, а сумма считается с учетом коэффициента. Сумма считается верно, а вот цена остается за базовую единицу. В печатной форме выводятся недостоверные данные. 

Например, 

 Товар1 стоит 5 руб. за шт.

В заказе 1 упак ( упак = 10 шт)

Сумма = 5*1*10 = 50 руб, все верно. В печатной же форме заказе получается так 5*1=50

 

Как быть в такой ситуации? 

Нравится

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

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

Печатная форма только отображает значения из тех полей, которые вытянули в нее. На данный момент в базовом функционале системы просто нет возможности выводить агрегированные колонки в редактируемом реестре (к которым и относиться продукт в заказе/счете, график поставок и оплат и т.д.). В данном случае Вы можете реализовать обработчик на поле "Цена", в котором записывать значение = Базовая цена продукта * Количество единиц измерения из детали "Единицы измерения" в продукте. С примерами добавления расчетных полей можно ознакомиться здесь: https://academy.terrasoft.ua/documents/technic-sdk/7-11/dobavlenie-vych…;

 

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

Помогите сделать фильтр:

Проблема такая: делаю в коде фильтр реестра (показать записи где я ответственный или записи где контрагенты с типом "Дебитор"). Делаю его в initQueryFilters

Все нормально фильтруется.

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

Т.е получается запрос вида owner= 'Иванов'(расширенный фильтр) OR owner = 'Я' OR Тип='Дебитор' . 

В какую сторону копать? В документации ничего не нашел

 

 

 

if(user=='Бизнес менеджер'){
  //esq уже на данном этапе содержит фильтр прилетевший от расширенного фильтра
 
  esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.OR;
 
  //Мои фильтры
  var filterOwner = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,"Owner", key);
  sq.filters.addItem("Ответственный по контрагенту",filterOwner);
 
  var filterType = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,"Type", tDebt);
  esq.filters.addItem("Тип контрагента",filterType);
 
}

 

Нравится

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

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

Само правило раздачи прав доступа реализовать, например, в бизнес-процессе, а бизнес-процесс запускать при сохранении новой записи или при сохранении существующей, но только в том случае, если менялись значения либо поля 'Ответственный', либо поля "Тип" = "Дебитор".

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

Есть у меня раздел, а у сущности есть поле "дата доставки".

Как мне отфильтровать так, чтобы вывести только объекты доставленные более Х дней назад, где Х - произвольное число?

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

Там есть фильтр "Предыдущих дней", но он как-то странно работает.

Нравится

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

Здравствуйте, Алексей

Прошу Вас уточнить что Вы имеете ввиду под "...но он как-то странно работает"?

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

Denys Diachenko,

Я ставлю <= Предыдущих дней "5" и получаю все сущности, как будто и фильтрации не было.

Если я что-то делаю не так, подскажите как. И, если знаете, расскажите, что это за фильтр такой? В какой запрос он конвертируется?

У функции сравнения с датой есть интересная фича (кажется, недокументированная):

Когда Вы используете фильтр <= 100 то учитываются предыдущие 100 дней.

А когда Вы устанавливаете <100, то учитываются даты которые были до предыдущих 100 дней.

 

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

Блин, точно! Равенство здесь применять нельзя для моего случая.

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

Нужно установить значение списочного поля в зависимости от значения чекбокса.

Новые данные беру из базы.

Вот код метода:

IsKeyContact: function() {
				var isKeyContact = this.get("UsrIsKeyContact");
				var self = this;
				var oldLoyality = self.get("UsrContactLoyality");
 
				var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "UsrContactLoyality"});
				esq.addColumn("Name");
				if (isKeyContact)
				{
					esq.filters.add("Name", Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.EQUAL, "Name", "Лояльный"));
					esq.getEntityCollection(function(result) {
						if (result.success) {
							Terrasoft.each(result.collection.getItems(), function(item) {
								self.log(item.values);
								self.set("UsrContactLoyality", item.values);
							});
						}
					});
				}
				else
				{
					esq.filters.add("Name", Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.EQUAL, "Name", "Неопределенна"));
					esq.getEntityCollection(function(result) {
						if (result.success) {
							Terrasoft.each(result.collection.getItems(), function(item) {
								self.log(item.values);
								self.set("UsrContactLoyality", item.values);
							});
						}
					});
				}
			}

 

Нравится

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