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

Возник вопрос - можно ли использовать кастомные параметры в url с целью заполнения эти данными определенные поля формы ?

Пример - у нас есть запись типа контакт. На форме контакта мы нажимаем кнопку "Создать звонок" и у нас открывается форма создания звонка с предзаполненным лукапом контакта. При этом запись еще фактически не сохранена в бд. В некоторых CRM это реализуемо следующим образом:

1. В обработчике кнопки "Создать звонок", в урл, который отвечает за открытие формы записи, мы добавляем хвост вида "?contact=x&phone=yyy"

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

Нравится

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

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

 

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

Больше об этом вы можете узнать в этой статье на Академии.

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

Как изменить высоту текстового поля? Мне необходимо из 1-строчного поля сделать 4-строчное поле.

Нравится

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

Сделать тип "неограниченной длины", а потом растянуть поле в дизайнере. 

Сделать тип "неограниченной длины", а потом растянуть поле в дизайнере. 

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

Добрый день!

 

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

Например в инсталлмент плане есть поле Инвойс. Крестиком в выделенной записи значение этого поля можно удалять. Можно ли метод, который реагирует на нажатие крестика, переопределить? И как метод называется?

 

Спасибо! 

Нравится

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

а права доступа на объект не подойдут?

Dima Avdoshin, пользователь должен иметь возможность создавать объект, видеть значение колонки Инвойс, но не иметь возможности ее менять. Когда делаю через запрет на редакт колонки, то не видят ее содержимое. Хотел добавить свою логику на крестик. 

Сергей Хоменко,

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



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



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



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



Вместо initModelColumns, можешь вешать другие ивенты, к примеру при выделении записи

Пример

define("qrtqrtTestObj31ff6c52Page", ["RightUtilities"], function(RightUtilities) {
	return {
		entitySchemaName: "qrtTestObj",
		attributes: {
			"Name": {
				//dataValueType: Terrasoft.dataValueType.FLOAT,
				dependencies: [
					{
						columns: ["Name"],
						methodName: "changeName"
					}
				]
			},
		},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		methods: {
			initModelColumns: function() {
				this.callParent(arguments);
				this._setColumnsDataModelName();
				this._setResourceColumns();
				this.console.log("initModelColumns");
				var self = this;
				RightUtilities.checkCanExecuteOperation({
                    operation: "qrtRulesSalesInInvoice"
                  }, function(result) {
                      self.console.log("RESULT" + result);
                      self.set("qrtSalesRules", result);
                  }, this);
			},
 
			changeName : function name() {
				if(!this.isNewMode()) {
					var isOk = this.get("qrtSalesRules")
					if(isOk) {
						this.showInformationDialog("У вас нет права на редактирование этой колонки")
						//отменяем действие
						this.onDiscardChangesClick();
					}
				}
			}
        },
      dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "Name1cacb119-4c62-4e85-929a-e7a877e24794",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "Header"
					},
					"bindTo": "Name"
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "insert",
				"name": "Description5836d8b4-157f-49bf-a943-3e6d3c28cf1e",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 1,
						"layoutName": "Header"
					},
					"bindTo": "Description"
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 1
			}
		]/**SCHEMA_DIFF*/
	};
});

 

Dima Avdoshin,

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

clearSupplyPaymentElementProducts, переопределение которой решает часть задачи без лишних маневров.

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

Спасибо!

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

В числовых полях, для которых назначено округление (и для которых оно не назначено тоже) в Creatio, и которые не заполнены (например, пользователь импортирует из excel свои данные заполняя карточку какую-нибудь, и там не все ячейки заполнены), отображается ЦИФРА, а не пустое поле. Сейчас обратила внимание на данную проблему, есть ли какое-либо решение?

 

Нравится

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

Это не проблема. Так работает система, так как для всех числовых полей системы на уровне ядра прямо в БД установлено значение по умолчанию - 0. Это происходит потому что в СУБД нет для числовых колонок такого понятия, как пустое значение. Если число, то обязательно 0. Так же если логическое, то FALSE.

Это не проблема. Так работает система, так как для всех числовых полей системы на уровне ядра прямо в БД установлено значение по умолчанию - 0. Это происходит потому что в СУБД нет для числовых колонок такого понятия, как пустое значение. Если число, то обязательно 0. Так же если логическое, то FALSE.

Владислав Литвинчук,

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

Добрый день!

Описанное Вами поведение не является ошибкой и соответствует базовой логике, которая присуща всем полям.

Если поле имеет тип - Число или Дробное число, то значение 0 или 0,00 - это пустое значение, то есть поле не заполнено.

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

Значения 0 или 0,00 является пустым значением, они отображаются в пустых полях для того, чтобы визуально пользователи понимали формат поля.

 

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

Жмурко Сергей,

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

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

Добрый день!

 

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

 

Сейчас все длинные текстовые поля выводятся целиком, с переносом строки, если они не влезают в ширину колонки (пример креплю).

 

Нравится

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

Что интересно, если открыть настройку колонок детали, то там в предпросмотре так, как Вы хотите.

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

Сходу нашёл, как смена стандартного word-wrap: normal на word-wrap: break-word; у [class*='grid-cols-'] меняет перенос по словам на перенос по буквам, но как сделать чтобы вообще без переноса, пока не нашёл. Может, у Вас выйдет.

Уже заведена и принята идея:

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

1. реестр раздела

2. списки в итогах

Но пока в планах на новые версии её нет.

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

Спасибо за мысль! Подумаю, что делать с этим))  Было бы здорово, если бы такая функция  появилась

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

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

Прочитал пару ответов поэтому вопросу тут в Community,  и написал функцию: 

 

clearFileBalance: function() {
  var budgetSales = this.get("UsrBudgetSales");
      this.set(budgetSales, null);
  var facticallySum = this.get("UsrFacticallySum");
      this.set(facticallySum, null);
  var result = this.get("UsrEqualsBudget");
      this.set(result, null);
  }
},

Она вызывается тут по клику: 

clearFileBalanceClick: function(clearFileBalance) {
       this.clearFileBalance();
 }

Он почему-то она не работает. Что я делаю не так? Спасибо

Нравится

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

Доброе утро.

this.get("НазваниеПоля") - получает значение

 

this.set("НазваниеПоля", Значение) - устанавливает Значение в НазваниеПоля. Название поля в данном случае должно быть текстом

 

 

var budgetSales =  this.get("UsrBudgetSales"); //код запишет в переменную budgetSales ЗНАЧЕНИЕ поля UsrBudgetSales.

Чтобы очистить поле, нужно в UsrBudgetSales записать null:

this.set("UsrBudgetSales", null);

 

Есть еще вот такой вариант записи:

this.$UsrBudgetSales = null;

Доброе утро.

this.get("НазваниеПоля") - получает значение

 

this.set("НазваниеПоля", Значение) - устанавливает Значение в НазваниеПоля. Название поля в данном случае должно быть текстом

 

 

var budgetSales =  this.get("UsrBudgetSales"); //код запишет в переменную budgetSales ЗНАЧЕНИЕ поля UsrBudgetSales.

Чтобы очистить поле, нужно в UsrBudgetSales записать null:

this.set("UsrBudgetSales", null);

 

Есть еще вот такой вариант записи:

this.$UsrBudgetSales = null;

Дмитрий А., Я понял) Спасибо ) Заработало)

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

Добрый день! Бьюсь уже 2 неделю и никак не могу найти информацию о том, как можно динамические регулировать количество полей на модальном окне, либо мини-карточке.

 

Задача: открывать модальное окно с параметрами из объекта Specification (Характеристика), что бы просто показать информацию из него.

 

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

Нравится

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

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

 

Как обходное решение, можно заранее создать несколько скрытых полей и программно показывать нужное их количество в зависимости от потребности. Но ведь Вам ещё нужно разных типов.

 

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

 

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

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



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



Вроде бы все должно работать, и значение поля CalculatedValue должно вычисляться после загрузки страницы и после изменения значений в полях TurnoverF и TurnoverP. Но реально изменение случается только при загрузке страницы - т.е. метод, прописанный в dependencies, не срабатывает. Почему?

entitySchemaName: "UsrTenant",
attributes: {
 "CalculatedValue": {
     dataValueType: Terrasoft.DataValueType.FLOAT,
     dependencies: {
       columns: ["TurnoverF", "TurnoverP"], 
       methodName: "calculateValue"
     }
  }
},
methods: {
  onEntityInitialized: function() {
    this.callParent(arguments);				
    this.calculateValue();
  },
  calculateValue: function() {
    var turnoverF = this.get("TurnoverF");
    if (!turnoverF) {
      turnoverF = 0;
    }
    var turnoverP = this.get("TurnoverP");
     if (!turnoverP) {
       turnoverP = 0;
     }				
    var result = (turnoverP === 0) ? 0 : (turnoverF / turnoverP - 1);
    this.set("CalculatedValue", result);
  }
},
diff : {
//.....................
{
  "operation": "insert",
  "name": "INT_TurnoverF",
  "values": {
    "layout": {
      "colSpan": 12,
      "rowSpan": 1,
      "column": 0,
      "row": 0,
      "layoutName": "Tab7ec5c1bfTabLabelGridLayout4f9aa333"
    },
    "bindTo": "TurnoverF",
    "enabled": true
  },
  "parentName": "Tab7ec5c1bfTabLabelGridLayout4f9aa333",
  "propertyName": "items",
  "index": 0
},
{
  "operation": "insert",
  "name": "INT_TurnoverP",
  "values": {
    "layout": {
      "colSpan": 12,
      "rowSpan": 1,
      "column": 12,
      "row": 0,
      "layoutName": "Tab7ec5c1bfTabLabelGridLayout4f9aa333"
    },
    "bindTo": "TurnoverP",
    "enabled": true
  },
  "parentName": "Tab7ec5c1bfTabLabelGridLayout4f9aa333",
  "propertyName": "items",
  "index": 1
},
{
  "operation": "insert",
  "name": "INTCalculatedValue",
  "values": {
    "caption": "Вычисляемое поле",
    "bindTo": "CalculatedValue",
    "layout": {
      "column": 12, 
      "rowSpan": 1,
      "row": 4, 
      "layoutName": "Header",
      "colSpan": 9
    }
  },
  "parentName": "Header",
  "propertyName": "items",
  "enabled": true,
  "index": 9
},
//.....................
}

 

Нравится

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

Добрый день.

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

	"dependencies": [
		{
			"columns": ["Patient"],
			"methodName": "setPatientFieldsValue"
		}
	]

 

Добрый день.

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

	"dependencies": [
		{
			"columns": ["Patient"],
			"methodName": "setPatientFieldsValue"
		}
	]

 

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

как и предполагалось, ошибка была абсолютно дурацкой...

Спасибо!

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

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

 

Столкнулся с проблемой. 

1) На форме обращения дублируется поле "Сервисный договор", несмотря на то, что в конструкторе раздела отображается только одно 

2) Порядок полей на форме не соответствует порядку полей в конструкторе

Бизнес-правила отключил. 

Конфигурацию перекомпилировал полностью. 

Скрины вложением

Помогите понять в чём проблема ? 

 

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

Нравится

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

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

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

Предлагаете его переопределить?

Когда Вы меняете в мастере, оно и так переопределяется, в пакете Custom создаётся CasePageV2 с новым порядком полей. Но, видимо, в одном из пакетов выше по иерархии описано иначе и конфликтует.

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

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

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

 

Нравится

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

Дело может быть в том, что объект детали «Продукт в продаже» (OpportunityProductInterest) сделан на основе базового объекта, а другие подобные детали «Продукт в заказе» (OrderProduct) и «Продукт в счете» (InvoiceProduct) — на основе виртуального объекта «Базовое вхождение продукта» (BaseProductEntry). Соответственно, у объектов OrderProduct и InvoiceProduct есть поле «Название» и оно является первичным для отображения.

Сравните между собой детали и попробуйте сделать аналогично.

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